{
  "schemaVersion": "1.0",
  "item": {
    "slug": "clickup",
    "name": "ClickUp",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/shubhs0707/clickup",
    "canonicalUrl": "https://clawhub.ai/shubhs0707/clickup",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/clickup",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=clickup",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/api-guide.md",
      "scripts/clickup-query.sh"
    ],
    "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. 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. 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/clickup"
    },
    "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/clickup",
    "agentPageUrl": "https://openagent3.xyz/skills/clickup/agent",
    "manifestUrl": "https://openagent3.xyz/skills/clickup/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/clickup/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. 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. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "ClickUp Skill",
        "body": "Interact with ClickUp's REST API for task management, reporting, and workflow automation."
      },
      {
        "title": "Configuration",
        "body": "Before using this skill, ensure the following are configured in TOOLS.md:\n\nAPI Token: CLICKUP_API_KEY\nTeam/Workspace ID: CLICKUP_TEAM_ID\nSpace IDs (optional, for filtering)\nList IDs (optional, for creating tasks)"
      },
      {
        "title": "Using the Helper Script",
        "body": "The fastest way to query ClickUp:\n\n# Set environment variables\nexport CLICKUP_API_KEY=\"pk_...\"\nexport CLICKUP_TEAM_ID=\"90161392624\"\n\n# Get all open tasks\n./scripts/clickup-query.sh tasks\n\n# Get task counts (parent vs subtasks)\n./scripts/clickup-query.sh task-count\n\n# Get assignee breakdown\n./scripts/clickup-query.sh assignees\n\n# Get specific task\n./scripts/clickup-query.sh task <task-id>"
      },
      {
        "title": "Direct API Calls",
        "body": "For custom queries or operations not covered by the helper script:\n\n# Get all open tasks (with subtasks and pagination)\ncurl \"https://api.clickup.com/api/v2/team/{team_id}/task?include_closed=false&subtasks=true\" \\\n  -H \"Authorization: {api_key}\""
      },
      {
        "title": "1. ALWAYS Include Subtasks",
        "body": "Never query tasks without subtasks=true:\n\n# ✅ CORRECT\n?subtasks=true\n\n# ❌ WRONG\n(no subtasks parameter)\n\nWhy: Without this parameter, you miss potentially 70%+ of actual tasks. Parent tasks are just containers; real work happens in subtasks."
      },
      {
        "title": "2. Handle Pagination",
        "body": "ClickUp API returns max 100 tasks per page. Always loop until last_page: true:\n\npage=0\nwhile true; do\n    result=$(curl -s \"...&page=$page\" -H \"Authorization: $CLICKUP_API_KEY\")\n    \n    # Process tasks\n    echo \"$result\" | jq '.tasks[]'\n    \n    # Check if done\n    is_last=$(echo \"$result\" | jq -r '.last_page')\n    [ \"$is_last\" = \"true\" ] && break\n    \n    ((page++))\ndone\n\nWhy: Workspaces with 300+ tasks need 3-4 pages. Missing pages = incomplete data."
      },
      {
        "title": "3. Distinguish Parent Tasks vs Subtasks",
        "body": "# Parent tasks have parent=null\njq '.tasks[] | select(.parent == null)'\n\n# Subtasks have parent != null\njq '.tasks[] | select(.parent != null)'"
      },
      {
        "title": "Get Task Counts",
        "body": "# Using helper script (recommended)\n./scripts/clickup-query.sh task-count\n\n# Direct API with jq\ncurl -s \"https://api.clickup.com/api/v2/team/{team_id}/task?subtasks=true\" \\\n  -H \"Authorization: {api_key}\" | \\\njq '{\n    total: (.tasks | length),\n    parents: ([.tasks[] | select(.parent == null)] | length),\n    subtasks: ([.tasks[] | select(.parent != null)] | length)\n}'"
      },
      {
        "title": "Get Assignee Breakdown",
        "body": "# Using helper script (recommended)\n./scripts/clickup-query.sh assignees\n\n# Direct API\ncurl -s \"https://api.clickup.com/api/v2/team/{team_id}/task?subtasks=true\" \\\n  -H \"Authorization: {api_key}\" | \\\njq -r '.tasks[] | \n    if .assignees and (.assignees | length) > 0 \n    then .assignees[0].username \n    else \"Unassigned\" \n    end' | sort | uniq -c | sort -rn"
      },
      {
        "title": "Create a Task",
        "body": "curl \"https://api.clickup.com/api/v2/list/{list_id}/task\" \\\n  -X POST \\\n  -H \"Authorization: {api_key}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"Task Name\",\n    \"description\": \"Description here\",\n    \"assignees\": [user_id],\n    \"status\": \"to do\",\n    \"priority\": 3\n  }'"
      },
      {
        "title": "Update a Task",
        "body": "curl \"https://api.clickup.com/api/v2/task/{task_id}\" \\\n  -X PUT \\\n  -H \"Authorization: {api_key}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"Updated Name\",\n    \"status\": \"in progress\",\n    \"priority\": 2\n  }'"
      },
      {
        "title": "Get Specific Task",
        "body": "# Using helper script\n./scripts/clickup-query.sh task {task_id}\n\n# Direct API\ncurl \"https://api.clickup.com/api/v2/task/{task_id}\" \\\n  -H \"Authorization: {api_key}\""
      },
      {
        "title": "Filter by Space",
        "body": "curl \"https://api.clickup.com/api/v2/team/{team_id}/task?space_ids[]={space_id}&subtasks=true\" \\\n  -H \"Authorization: {api_key}\""
      },
      {
        "title": "Filter by List",
        "body": "curl \"https://api.clickup.com/api/v2/list/{list_id}/task?subtasks=true\" \\\n  -H \"Authorization: {api_key}\""
      },
      {
        "title": "Include Closed Tasks",
        "body": "curl \"https://api.clickup.com/api/v2/team/{team_id}/task?include_closed=true&subtasks=true\" \\\n  -H \"Authorization: {api_key}\""
      },
      {
        "title": "Reference Documentation",
        "body": "For detailed API documentation, query patterns, and troubleshooting:\n\nRead: references/api-guide.md\n\nCovers:\n\nFull API endpoint reference\nResponse structure details\nCommon gotchas and solutions\nRate limits and best practices\nTask object schema"
      },
      {
        "title": "Daily Standup Report",
        "body": "# Get all open tasks grouped by assignee\n./scripts/clickup-query.sh assignees\n\n# Get specific team member's tasks (use user ID, not username!)\ncurl \"https://api.clickup.com/api/v2/team/{team_id}/task?subtasks=true&assignees[]={user_id}\" \\\n  -H \"Authorization: {api_key}\""
      },
      {
        "title": "Task Audit",
        "body": "# Count tasks by status\n./scripts/clickup-query.sh tasks | \\\n  jq -r '.tasks[].status.status' | sort | uniq -c | sort -rn\n\n# Find unassigned tasks\n./scripts/clickup-query.sh tasks | \\\n  jq '.tasks[] | select(.assignees | length == 0)'"
      },
      {
        "title": "Priority Analysis",
        "body": "# Count by priority\n./scripts/clickup-query.sh tasks | \\\n  jq -r '.tasks[] | .priority.priority // \"none\"' | sort | uniq -c | sort -rn"
      },
      {
        "title": "Tips",
        "body": "Helper script first: Use scripts/clickup-query.sh for common operations\nDirect API for custom: Use curl when you need specific filters or updates\nAlways read api-guide.md: Contains full endpoint reference and troubleshooting\nCheck TOOLS.md: For workspace-specific IDs and configuration\nTest with small queries: When unsure, test with | head -n 5 first\nFilter by user ID: Use assignees[]={user_id} parameter, not jq username matching"
      },
      {
        "title": "Troubleshooting",
        "body": "Missing tasks? → Add subtasks=true\nOnly 100 tasks returned? → Implement pagination loop\n401 Unauthorized? → Check CLICKUP_API_KEY is set correctly\nRate limit error? → Wait 1 minute (100 requests/min limit)\nEmpty assignees array? → Task is unassigned (not an error)\nAssignee filter returns fewer tasks than expected? → Use user ID in assignees[] param, not jq text matching"
      }
    ],
    "body": "ClickUp Skill\n\nInteract with ClickUp's REST API for task management, reporting, and workflow automation.\n\nConfiguration\n\nBefore using this skill, ensure the following are configured in TOOLS.md:\n\nAPI Token: CLICKUP_API_KEY\nTeam/Workspace ID: CLICKUP_TEAM_ID\nSpace IDs (optional, for filtering)\nList IDs (optional, for creating tasks)\nQuick Start\nUsing the Helper Script\n\nThe fastest way to query ClickUp:\n\n# Set environment variables\nexport CLICKUP_API_KEY=\"pk_...\"\nexport CLICKUP_TEAM_ID=\"90161392624\"\n\n# Get all open tasks\n./scripts/clickup-query.sh tasks\n\n# Get task counts (parent vs subtasks)\n./scripts/clickup-query.sh task-count\n\n# Get assignee breakdown\n./scripts/clickup-query.sh assignees\n\n# Get specific task\n./scripts/clickup-query.sh task <task-id>\n\nDirect API Calls\n\nFor custom queries or operations not covered by the helper script:\n\n# Get all open tasks (with subtasks and pagination)\ncurl \"https://api.clickup.com/api/v2/team/{team_id}/task?include_closed=false&subtasks=true\" \\\n  -H \"Authorization: {api_key}\"\n\nCritical Rules\n1. ALWAYS Include Subtasks\n\nNever query tasks without subtasks=true:\n\n# ✅ CORRECT\n?subtasks=true\n\n# ❌ WRONG\n(no subtasks parameter)\n\n\nWhy: Without this parameter, you miss potentially 70%+ of actual tasks. Parent tasks are just containers; real work happens in subtasks.\n\n2. Handle Pagination\n\nClickUp API returns max 100 tasks per page. Always loop until last_page: true:\n\npage=0\nwhile true; do\n    result=$(curl -s \"...&page=$page\" -H \"Authorization: $CLICKUP_API_KEY\")\n    \n    # Process tasks\n    echo \"$result\" | jq '.tasks[]'\n    \n    # Check if done\n    is_last=$(echo \"$result\" | jq -r '.last_page')\n    [ \"$is_last\" = \"true\" ] && break\n    \n    ((page++))\ndone\n\n\nWhy: Workspaces with 300+ tasks need 3-4 pages. Missing pages = incomplete data.\n\n3. Distinguish Parent Tasks vs Subtasks\n# Parent tasks have parent=null\njq '.tasks[] | select(.parent == null)'\n\n# Subtasks have parent != null\njq '.tasks[] | select(.parent != null)'\n\nCommon Operations\nGet Task Counts\n# Using helper script (recommended)\n./scripts/clickup-query.sh task-count\n\n# Direct API with jq\ncurl -s \"https://api.clickup.com/api/v2/team/{team_id}/task?subtasks=true\" \\\n  -H \"Authorization: {api_key}\" | \\\njq '{\n    total: (.tasks | length),\n    parents: ([.tasks[] | select(.parent == null)] | length),\n    subtasks: ([.tasks[] | select(.parent != null)] | length)\n}'\n\nGet Assignee Breakdown\n# Using helper script (recommended)\n./scripts/clickup-query.sh assignees\n\n# Direct API\ncurl -s \"https://api.clickup.com/api/v2/team/{team_id}/task?subtasks=true\" \\\n  -H \"Authorization: {api_key}\" | \\\njq -r '.tasks[] | \n    if .assignees and (.assignees | length) > 0 \n    then .assignees[0].username \n    else \"Unassigned\" \n    end' | sort | uniq -c | sort -rn\n\nCreate a Task\ncurl \"https://api.clickup.com/api/v2/list/{list_id}/task\" \\\n  -X POST \\\n  -H \"Authorization: {api_key}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"Task Name\",\n    \"description\": \"Description here\",\n    \"assignees\": [user_id],\n    \"status\": \"to do\",\n    \"priority\": 3\n  }'\n\nUpdate a Task\ncurl \"https://api.clickup.com/api/v2/task/{task_id}\" \\\n  -X PUT \\\n  -H \"Authorization: {api_key}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"Updated Name\",\n    \"status\": \"in progress\",\n    \"priority\": 2\n  }'\n\nGet Specific Task\n# Using helper script\n./scripts/clickup-query.sh task {task_id}\n\n# Direct API\ncurl \"https://api.clickup.com/api/v2/task/{task_id}\" \\\n  -H \"Authorization: {api_key}\"\n\nAdvanced Queries\nFilter by Space\ncurl \"https://api.clickup.com/api/v2/team/{team_id}/task?space_ids[]={space_id}&subtasks=true\" \\\n  -H \"Authorization: {api_key}\"\n\nFilter by List\ncurl \"https://api.clickup.com/api/v2/list/{list_id}/task?subtasks=true\" \\\n  -H \"Authorization: {api_key}\"\n\nInclude Closed Tasks\ncurl \"https://api.clickup.com/api/v2/team/{team_id}/task?include_closed=true&subtasks=true\" \\\n  -H \"Authorization: {api_key}\"\n\nReference Documentation\n\nFor detailed API documentation, query patterns, and troubleshooting:\n\nRead: references/api-guide.md\n\nCovers:\n\nFull API endpoint reference\nResponse structure details\nCommon gotchas and solutions\nRate limits and best practices\nTask object schema\nWorkflow Patterns\nDaily Standup Report\n# Get all open tasks grouped by assignee\n./scripts/clickup-query.sh assignees\n\n# Get specific team member's tasks (use user ID, not username!)\ncurl \"https://api.clickup.com/api/v2/team/{team_id}/task?subtasks=true&assignees[]={user_id}\" \\\n  -H \"Authorization: {api_key}\"\n\nTask Audit\n# Count tasks by status\n./scripts/clickup-query.sh tasks | \\\n  jq -r '.tasks[].status.status' | sort | uniq -c | sort -rn\n\n# Find unassigned tasks\n./scripts/clickup-query.sh tasks | \\\n  jq '.tasks[] | select(.assignees | length == 0)'\n\nPriority Analysis\n# Count by priority\n./scripts/clickup-query.sh tasks | \\\n  jq -r '.tasks[] | .priority.priority // \"none\"' | sort | uniq -c | sort -rn\n\nTips\nHelper script first: Use scripts/clickup-query.sh for common operations\nDirect API for custom: Use curl when you need specific filters or updates\nAlways read api-guide.md: Contains full endpoint reference and troubleshooting\nCheck TOOLS.md: For workspace-specific IDs and configuration\nTest with small queries: When unsure, test with | head -n 5 first\nFilter by user ID: Use assignees[]={user_id} parameter, not jq username matching\nTroubleshooting\nMissing tasks? → Add subtasks=true\nOnly 100 tasks returned? → Implement pagination loop\n401 Unauthorized? → Check CLICKUP_API_KEY is set correctly\nRate limit error? → Wait 1 minute (100 requests/min limit)\nEmpty assignees array? → Task is unassigned (not an error)\nAssignee filter returns fewer tasks than expected? → Use user ID in assignees[] param, not jq text matching"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/shubhs0707/clickup",
    "publisherUrl": "https://clawhub.ai/shubhs0707/clickup",
    "owner": "shubhs0707",
    "version": "1.2.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/clickup",
    "downloadUrl": "https://openagent3.xyz/downloads/clickup",
    "agentUrl": "https://openagent3.xyz/skills/clickup/agent",
    "manifestUrl": "https://openagent3.xyz/skills/clickup/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/clickup/agent.md"
  }
}