{
  "schemaVersion": "1.0",
  "item": {
    "slug": "golist",
    "name": "GoList",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/daniel17903/golist",
    "canonicalUrl": "https://clawhub.ai/daniel17903/golist",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/golist",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=golist",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "golist_cli.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/golist"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/golist",
    "agentPageUrl": "https://openagent3.xyz/skills/golist/agent",
    "manifestUrl": "https://openagent3.xyz/skills/golist/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/golist/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Purpose",
        "body": "Enable OpenClaw to manage GoList through a simple, beginner-friendly CLI wrapper around the backend API.\n\nGoList is a simplistic app for creating and sharing grocery / shopping lists. This skill is designed to make first-time usage feel fast and approachable: create a list, add items, share with others, and switch between saved lists with minimal setup.\n\nThis skill supports:\n\ncreating new lists,\njoining shared lists via share token,\nsaving known lists (name + id) and switching between them,\ngenerating share tokens for users,\nreading lists,\nupserting items,\nsoft-deleting items."
      },
      {
        "title": "Hard constraints",
        "body": "API base URL is fixed to https://go-list.app/api and must never be overridden.\nOpenClaw must generate its own random device UUID and persist it for reuse.\nEvery request must include the X-Device-Id header.\nFor item writes, OpenClaw must only set:\n\nname (required),\ndeleted (optional, defaults to false),\nquantityOrUnit (optional).\n\n\nOpenClaw must generate all item UUIDs and timestamps in the Python CLI (never require the agent to provide them).\nImmediately after creating a new list, OpenClaw must always generate a share token and send the share URL to the user without being asked.\nWhen talking to the user, OpenClaw must never refer to lists by ID; always use list names (use the stored name↔id mapping internally).\nFor item upserts, if the user does not explicitly provide a quantity/unit, OpenClaw must omit quantityOrUnit."
      },
      {
        "title": "Python CLI tool",
        "body": "Use apps/openclaw/golist_cli.py as the operational API wrapper for this skill."
      },
      {
        "title": "CLI guarantees",
        "body": "Fixed API base URL: https://go-list.app/api.\nGenerates and persists device id when missing.\nGenerates list IDs and item IDs when creating entities.\nGenerates item updatedAt timestamps on write operations.\nAutomatically sends X-Device-Id on every request.\nPersists known lists with friendly names and IDs, and tracks an active list."
      },
      {
        "title": "CLI state and environment",
        "body": "Optional environment:\n\nGOLIST_DEVICE_ID (override persisted device id)\nOPENCLAW_STATE_FILE (custom path for persisted JSON state)\nGOLIST_SHARE_TOKEN (optional token source for bootstrap --share-token)\n\nPersisted state file (default):\n\n~/.openclaw_golist_state.json with:\n\ndevice_id\nactive_list_id\nknown_lists[] containing id + name"
      },
      {
        "title": "1) Create a new list",
        "body": "python3 apps/openclaw/golist_cli.py create-list \"Weekend groceries\"\npython3 apps/openclaw/golist_cli.py share\n\nCreates a list with a generated UUID, stores it in known lists, sets it as active, then immediately creates a share token and returns the share URL to the user."
      },
      {
        "title": "2) Share a list with a user",
        "body": "python3 apps/openclaw/golist_cli.py share\n\nCreates a share token for the active list and returns both token + share URL."
      },
      {
        "title": "3) Join an existing list via share token",
        "body": "python3 apps/openclaw/golist_cli.py join <share-token-uuid>\n\nRedeems the token, fetches the real list name from the API, stores that name+id mapping, and sets it active."
      },
      {
        "title": "4) Switch/access saved lists",
        "body": "python3 apps/openclaw/golist_cli.py lists\npython3 apps/openclaw/golist_cli.py use-list \"Weekend groceries\"\npython3 apps/openclaw/golist_cli.py show"
      },
      {
        "title": "5) Item writes (restricted fields)",
        "body": "python3 apps/openclaw/golist_cli.py upsert \"milk\" [--quantity \"2 L\"] [--deleted]\npython3 apps/openclaw/golist_cli.py delete \"milk\""
      },
      {
        "title": "Intent mapping for OpenClaw",
        "body": "“create a new list called X” → create-list \"X\"\nAfter create-list, always run share and send the URL/token to the user.\n“share this list with me” → share\n“join this token” → join <token>\n“show my lists” → lists\n“switch to list X” → use-list \"X\"\n“show current list” → show\n“add X (qty)” → upsert \"X\" [--quantity \"...\"]\n“remove X” → delete \"X\""
      },
      {
        "title": "Safety behavior",
        "body": "If device id is missing, generate and persist it before any API call.\nIf no active list is set, require create-list or join first.\nIf token redemption fails, return a clear auth/share error.\nIn user-facing responses, refer to lists by name only (never by raw ID).\nDo not invent item quantities; only send --quantity when the user asked for one.\nNever send item metadata fields outside name, deleted, and optional quantityOrUnit."
      }
    ],
    "body": "GoList Shared-List Manager (OpenClaw Skill)\nPurpose\n\nEnable OpenClaw to manage GoList through a simple, beginner-friendly CLI wrapper around the backend API.\n\nGoList is a simplistic app for creating and sharing grocery / shopping lists. This skill is designed to make first-time usage feel fast and approachable: create a list, add items, share with others, and switch between saved lists with minimal setup.\n\nThis skill supports:\n\ncreating new lists,\njoining shared lists via share token,\nsaving known lists (name + id) and switching between them,\ngenerating share tokens for users,\nreading lists,\nupserting items,\nsoft-deleting items.\nHard constraints\nAPI base URL is fixed to https://go-list.app/api and must never be overridden.\nOpenClaw must generate its own random device UUID and persist it for reuse.\nEvery request must include the X-Device-Id header.\nFor item writes, OpenClaw must only set:\nname (required),\ndeleted (optional, defaults to false),\nquantityOrUnit (optional).\nOpenClaw must generate all item UUIDs and timestamps in the Python CLI (never require the agent to provide them).\nImmediately after creating a new list, OpenClaw must always generate a share token and send the share URL to the user without being asked.\nWhen talking to the user, OpenClaw must never refer to lists by ID; always use list names (use the stored name↔id mapping internally).\nFor item upserts, if the user does not explicitly provide a quantity/unit, OpenClaw must omit quantityOrUnit.\nPython CLI tool\n\nUse apps/openclaw/golist_cli.py as the operational API wrapper for this skill.\n\nCLI guarantees\nFixed API base URL: https://go-list.app/api.\nGenerates and persists device id when missing.\nGenerates list IDs and item IDs when creating entities.\nGenerates item updatedAt timestamps on write operations.\nAutomatically sends X-Device-Id on every request.\nPersists known lists with friendly names and IDs, and tracks an active list.\nCLI state and environment\n\nOptional environment:\n\nGOLIST_DEVICE_ID (override persisted device id)\nOPENCLAW_STATE_FILE (custom path for persisted JSON state)\nGOLIST_SHARE_TOKEN (optional token source for bootstrap --share-token)\n\nPersisted state file (default):\n\n~/.openclaw_golist_state.json with:\ndevice_id\nactive_list_id\nknown_lists[] containing id + name\nCore flows\n1) Create a new list\npython3 apps/openclaw/golist_cli.py create-list \"Weekend groceries\"\npython3 apps/openclaw/golist_cli.py share\n\n\nCreates a list with a generated UUID, stores it in known lists, sets it as active, then immediately creates a share token and returns the share URL to the user.\n\n2) Share a list with a user\npython3 apps/openclaw/golist_cli.py share\n\n\nCreates a share token for the active list and returns both token + share URL.\n\n3) Join an existing list via share token\npython3 apps/openclaw/golist_cli.py join <share-token-uuid>\n\n\nRedeems the token, fetches the real list name from the API, stores that name+id mapping, and sets it active.\n\n4) Switch/access saved lists\npython3 apps/openclaw/golist_cli.py lists\npython3 apps/openclaw/golist_cli.py use-list \"Weekend groceries\"\npython3 apps/openclaw/golist_cli.py show\n\n5) Item writes (restricted fields)\npython3 apps/openclaw/golist_cli.py upsert \"milk\" [--quantity \"2 L\"] [--deleted]\npython3 apps/openclaw/golist_cli.py delete \"milk\"\n\nIntent mapping for OpenClaw\n“create a new list called X” → create-list \"X\"\nAfter create-list, always run share and send the URL/token to the user.\n“share this list with me” → share\n“join this token” → join <token>\n“show my lists” → lists\n“switch to list X” → use-list \"X\"\n“show current list” → show\n“add X (qty)” → upsert \"X\" [--quantity \"...\"]\n“remove X” → delete \"X\"\nSafety behavior\nIf device id is missing, generate and persist it before any API call.\nIf no active list is set, require create-list or join first.\nIf token redemption fails, return a clear auth/share error.\nIn user-facing responses, refer to lists by name only (never by raw ID).\nDo not invent item quantities; only send --quantity when the user asked for one.\nNever send item metadata fields outside name, deleted, and optional quantityOrUnit."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/daniel17903/golist",
    "publisherUrl": "https://clawhub.ai/daniel17903/golist",
    "owner": "daniel17903",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/golist",
    "downloadUrl": "https://openagent3.xyz/downloads/golist",
    "agentUrl": "https://openagent3.xyz/skills/golist/agent",
    "manifestUrl": "https://openagent3.xyz/skills/golist/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/golist/agent.md"
  }
}