{
  "schemaVersion": "1.0",
  "item": {
    "slug": "asana",
    "name": "Asana",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/k0nkupa/asana",
    "canonicalUrl": "https://clawhub.ai/k0nkupa/asana",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/asana",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=asana",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/configure.mjs",
      "scripts/asana_api.mjs",
      "scripts/asana_chat.mjs",
      "scripts/oauth_oob.mjs"
    ],
    "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-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/asana"
    },
    "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/asana",
    "agentPageUrl": "https://openagent3.xyz/skills/asana/agent",
    "manifestUrl": "https://openagent3.xyz/skills/asana/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/asana/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": "Asana (Clawdbot skill)",
        "body": "This skill is designed for a personal local-only Asana integration using OAuth with an out-of-band/manual code paste flow."
      },
      {
        "title": "What this skill provides",
        "body": "A small Node CLI to:\n\ngenerate the Asana authorize URL\nexchange an authorization code for access/refresh tokens\nauto-refresh the access token\nmake basic API calls (e.g. /users/me, /workspaces, tasks)"
      },
      {
        "title": "0) Create an Asana app",
        "body": "In Asana Developer Console (My apps):\n\nCreate app\nEnable scopes you will need (typical: tasks:read, tasks:write, projects:read)\nSet redirect URI to the OOB value (manual code):\n\nurn:ietf:wg:oauth:2.0:oob"
      },
      {
        "title": "1) Provide credentials (two options)",
        "body": "Option A (recommended for Clawdbot): save to a local credentials file:\n\nnode scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n\nThis writes ~/.clawdbot/asana/credentials.json.\n\nOption B: set environment variables (shell/session):\n\nASANA_CLIENT_ID\nASANA_CLIENT_SECRET"
      },
      {
        "title": "2) Run OAuth",
        "body": "From the repo root:\n\nPrint the authorize URL:\n\nnode scripts/oauth_oob.mjs authorize\n\nOpen the printed URL, click Allow, copy the code.\nExchange code and save tokens locally:\n\nnode scripts/oauth_oob.mjs token --code \"PASTE_CODE_HERE\"\n\nTokens are stored at:\n\n~/.clawdbot/asana/token.json"
      },
      {
        "title": "Chat usage (support both explicit + natural language)",
        "body": "You can use either:\n\nExplicit commands: start the message with /asana ...\nNatural language: e.g. “list tasks assigned to me”\n\nFor Clawdbot, implement the mapping by translating the user request into the appropriate asana_api.mjs command.\n\nExamples:\n\n/asana tasks-assigned → tasks-assigned --assignee me\n“list tasks assigned to me” → tasks-assigned --assignee me\n“list all tasks in <project>” → resolve <project> to a project gid, then tasks-in-project --project <gid>\n“list tasks due date from 2026-01-01 to 2026-01-15” → search-tasks --assignee me --due_on.after 2026-01-01 --due_on.before 2026-01-15\n\n(Optional helper) scripts/asana_chat.mjs can map common phrases to a command skeleton."
      },
      {
        "title": "Using the API helper",
        "body": "Sanity check (who am I):\n\nnode scripts/asana_api.mjs me\n\nList workspaces:\n\nnode scripts/asana_api.mjs workspaces\n\nSet a default workspace (optional):\n\nnode scripts/asana_api.mjs set-default-workspace --workspace <workspace_gid>\n\nAfter that, you can omit --workspace for commands that support it.\n\nList projects in a workspace (explicit):\n\nnode scripts/asana_api.mjs projects --workspace <workspace_gid>\n\nList projects using the default workspace:\n\nnode scripts/asana_api.mjs projects\n\nList tasks in a project:\n\nnode scripts/asana_api.mjs tasks-in-project --project <project_gid>\n\nList tasks assigned to me (workspace required by Asana):\n\nnode scripts/asana_api.mjs tasks-assigned --workspace <workspace_gid> --assignee me\n\nOr using the default workspace:\n\nnode scripts/asana_api.mjs tasks-assigned --assignee me\n\nSearch tasks (advanced search):\n\nnode scripts/asana_api.mjs search-tasks --workspace <workspace_gid> --text \"release\" --assignee me\n# also supports convenience: --project <project_gid>\n\nView a task:\n\nnode scripts/asana_api.mjs task <task_gid>\n\nMark a task complete:\n\nnode scripts/asana_api.mjs complete-task <task_gid>\n\nUpdate a task:\n\nnode scripts/asana_api.mjs update-task <task_gid> --name \"New title\" --due_on 2026-02-01\n\nComment on a task:\n\nnode scripts/asana_api.mjs comment <task_gid> --text \"Update: shipped\"\n\nCreate a task:\n\nnode scripts/asana_api.mjs create-task --workspace <workspace_gid> --name \"Test task\" --notes \"from clawdbot\" --projects <project_gid>"
      },
      {
        "title": "Notes / gotchas",
        "body": "OAuth access tokens expire; refresh tokens are used to obtain new access tokens.\nIf you later want multi-user support, replace OOB with a real redirect/callback.\nDon’t log tokens."
      }
    ],
    "body": "Asana (Clawdbot skill)\n\nThis skill is designed for a personal local-only Asana integration using OAuth with an out-of-band/manual code paste flow.\n\nWhat this skill provides\nA small Node CLI to:\ngenerate the Asana authorize URL\nexchange an authorization code for access/refresh tokens\nauto-refresh the access token\nmake basic API calls (e.g. /users/me, /workspaces, tasks)\nSetup (OAuth, OOB/manual code)\n0) Create an Asana app\n\nIn Asana Developer Console (My apps):\n\nCreate app\nEnable scopes you will need (typical: tasks:read, tasks:write, projects:read)\nSet redirect URI to the OOB value (manual code):\nurn:ietf:wg:oauth:2.0:oob\n1) Provide credentials (two options)\n\nOption A (recommended for Clawdbot): save to a local credentials file:\n\nnode scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n\n\nThis writes ~/.clawdbot/asana/credentials.json.\n\nOption B: set environment variables (shell/session):\n\nASANA_CLIENT_ID\nASANA_CLIENT_SECRET\n2) Run OAuth\n\nFrom the repo root:\n\nPrint the authorize URL:\nnode scripts/oauth_oob.mjs authorize\n\nOpen the printed URL, click Allow, copy the code.\nExchange code and save tokens locally:\nnode scripts/oauth_oob.mjs token --code \"PASTE_CODE_HERE\"\n\n\nTokens are stored at:\n\n~/.clawdbot/asana/token.json\nChat usage (support both explicit + natural language)\n\nYou can use either:\n\nExplicit commands: start the message with /asana ...\nNatural language: e.g. “list tasks assigned to me”\n\nFor Clawdbot, implement the mapping by translating the user request into the appropriate asana_api.mjs command.\n\nExamples:\n\n/asana tasks-assigned → tasks-assigned --assignee me\n“list tasks assigned to me” → tasks-assigned --assignee me\n“list all tasks in <project>” → resolve <project> to a project gid, then tasks-in-project --project <gid>\n“list tasks due date from 2026-01-01 to 2026-01-15” → search-tasks --assignee me --due_on.after 2026-01-01 --due_on.before 2026-01-15\n\n(Optional helper) scripts/asana_chat.mjs can map common phrases to a command skeleton.\n\nUsing the API helper\n\nSanity check (who am I):\n\nnode scripts/asana_api.mjs me\n\n\nList workspaces:\n\nnode scripts/asana_api.mjs workspaces\n\n\nSet a default workspace (optional):\n\nnode scripts/asana_api.mjs set-default-workspace --workspace <workspace_gid>\n\n\nAfter that, you can omit --workspace for commands that support it.\n\nList projects in a workspace (explicit):\n\nnode scripts/asana_api.mjs projects --workspace <workspace_gid>\n\n\nList projects using the default workspace:\n\nnode scripts/asana_api.mjs projects\n\n\nList tasks in a project:\n\nnode scripts/asana_api.mjs tasks-in-project --project <project_gid>\n\n\nList tasks assigned to me (workspace required by Asana):\n\nnode scripts/asana_api.mjs tasks-assigned --workspace <workspace_gid> --assignee me\n\n\nOr using the default workspace:\n\nnode scripts/asana_api.mjs tasks-assigned --assignee me\n\n\nSearch tasks (advanced search):\n\nnode scripts/asana_api.mjs search-tasks --workspace <workspace_gid> --text \"release\" --assignee me\n# also supports convenience: --project <project_gid>\n\n\nView a task:\n\nnode scripts/asana_api.mjs task <task_gid>\n\n\nMark a task complete:\n\nnode scripts/asana_api.mjs complete-task <task_gid>\n\n\nUpdate a task:\n\nnode scripts/asana_api.mjs update-task <task_gid> --name \"New title\" --due_on 2026-02-01\n\n\nComment on a task:\n\nnode scripts/asana_api.mjs comment <task_gid> --text \"Update: shipped\"\n\n\nCreate a task:\n\nnode scripts/asana_api.mjs create-task --workspace <workspace_gid> --name \"Test task\" --notes \"from clawdbot\" --projects <project_gid>\n\nNotes / gotchas\nOAuth access tokens expire; refresh tokens are used to obtain new access tokens.\nIf you later want multi-user support, replace OOB with a real redirect/callback.\nDon’t log tokens."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/k0nkupa/asana",
    "publisherUrl": "https://clawhub.ai/k0nkupa/asana",
    "owner": "k0nkupa",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/asana",
    "downloadUrl": "https://openagent3.xyz/downloads/asana",
    "agentUrl": "https://openagent3.xyz/skills/asana/agent",
    "manifestUrl": "https://openagent3.xyz/skills/asana/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/asana/agent.md"
  }
}