JSPM

  • Created
  • Published
  • Downloads 252
  • Score
    100M100P100Q105752F
  • License MIT

ClickUp CLI for AI agents and humans

Package Exports

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@krodak/clickup-cli) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    cup - ClickUp CLI

    A ClickUp CLI built for AI agents that also works well for humans. Outputs Markdown when piped (optimized for AI context windows), interactive tables when run in a terminal.

    npm node license CI

    npm install -g @krodak/clickup-cli && cup init

    cup is the binary name. The previous cu name was retired in v0.21.0 to avoid conflict with the Unix cu(1) utility.

    Talk to your agent

    Install the CLI, add the skill file to your agent, and it works with ClickUp. No API knowledge needed.

    "Read task abc123, do the work, then mark it in review and leave a comment with the commit hash."

    "What's my standup? What did I finish, what's in progress, what's overdue?"

    "Create a subtask under the initiative for the edge case we found."

    "Check my sprint and tell me what's behind schedule."

    "Update the description with your findings and flag blockers in a comment."

    The agent reads the skill file, picks the right cup commands, and handles everything. You don't need to learn the CLI - the agent does.

    Why a CLI and not MCP?

    A CLI + skill file has fewer moving parts. No server process, no protocol layer. The agent already knows how to run shell commands - the skill file teaches it which ones exist. For tool-use with coding agents, CLI + instructions tends to work better than MCP in practice.

    Install

    You need Node 22+ and a ClickUp personal API token (pk_... from ClickUp Settings > Apps).

      npm
    npm install -g @krodak/clickup-cli
    cup init
      Homebrew
    brew tap krodak/tap
    brew install clickup-cli
    cup init

    Set up your agent

    The package includes a skill file that teaches agents all available commands and when to use them. All three major coding agents support skills natively:

      Claude Code

    Install as a plugin (recommended):

    claude plugin add $(npm root -g)/@krodak/clickup-cli

    This registers the skill under the clickup-cli: namespace. Claude loads it automatically when you work with ClickUp tasks.

    Or install as a personal skill (no namespace prefix):

    SKILL=$(npm root -g)/@krodak/clickup-cli/skills/clickup-cli
    mkdir -p ~/.claude/skills/clickup
    cp "$SKILL/SKILL.md" ~/.claude/skills/clickup/SKILL.md
      Codex

    Codex supports agent skills across CLI, IDE extension, and web. Skills use the same SKILL.md format with YAML frontmatter.

    Install as a user skill (available across all your projects):

    SKILL=$(npm root -g)/@krodak/clickup-cli/skills/clickup-cli
    mkdir -p ~/.agents/skills/clickup
    cp "$SKILL/SKILL.md" ~/.agents/skills/clickup/SKILL.md

    Or install as a project skill (checked into your repo):

    SKILL=$(npm root -g)/@krodak/clickup-cli/skills/clickup-cli
    mkdir -p .agents/skills/clickup
    cp "$SKILL/SKILL.md" .agents/skills/clickup/SKILL.md

    You can also use the built-in installer: $skill-installer clickup

      OpenCode
    SKILL=$(npm root -g)/@krodak/clickup-cli/skills/clickup-cli
    mkdir -p ~/.config/opencode/skills/clickup
    cp "$SKILL/SKILL.md" ~/.config/opencode/skills/clickup/SKILL.md
     Other agents

    The skill file follows the Agent Skills open standard. Copy skills/clickup-cli/SKILL.md into your agent's skill directory, system prompt, or AGENTS.md.

    API Coverage

    Full command reference with examples and flags.

    Status: ✅ implemented | 🚧 planned | 🚫 won't add

    Tasks

    Feature Command Status
    List my tasks cup tasks
    Get task details cup task <id>
    Create task cup create
    Update task cup update <id>
    Delete task cup delete <id>
    Search tasks cup search <query>
    Open in browser cup open <query>
    List subtasks cup subtasks <id>
    Assign / unassign cup assign <id>
    Duplicate task cup duplicate <id> 🚧
    Create from template cup create --template 🚧
    Bulk operations cup bulk 🚧

    Dependencies & Relations

    Feature Command Status
    Add dependency cup depend <id>
    Remove dependency cup depend <id> --remove
    Add/remove task link cup link <id> <linksTo>

    Multi-list

    Feature Command Status
    Add task to list cup move <id> --add
    Remove from list cup move <id> --remove

    Sprints & Planning

    Feature Command Status
    Active sprint tasks cup sprint [--folder]
    List all sprints cup sprints
    Assigned tasks by status cup assigned
    Standup summary cup summary
    Overdue tasks cup overdue
    Recently updated cup inbox

    Comments

    Feature Command Status
    List comments cup comments <id>
    Post comment cup comment <id>
    Edit comment cup comment-edit <id>
    Task + comments combined cup activity <id>
    Delete comment cup comment-delete <id>
    Threaded replies cup replies <id> / cup reply <id>

    Checklists

    Feature Command Status
    View checklists cup checklist view <id>
    Create checklist cup checklist create <id> <name>
    Delete checklist cup checklist delete <id>
    Add item cup checklist add-item <id> <name>
    Edit item cup checklist edit-item <id> <itemId>
    Delete item cup checklist delete-item <id> <itemId>

    Custom Fields

    Feature Command Status
    Set field value cup field <id> --set
    Remove field value cup field <id> --remove
    List available fields cup fields <listId> 🚧

    Tags

    Feature Command Status
    Add/remove tag on task cup tag <id>
    List space tags cup tags <spaceId>
    Create/delete space tag 🚧

    Time Tracking

    Feature Command Status
    Start timer cup time start <id>
    Stop timer cup time stop
    Timer status cup time status
    Log time entry cup time log <id> <duration>
    List entries cup time list
    Update entry cup time update <id>
    Delete entry cup time delete <id>

    Workspace

    Feature Command Status
    List spaces cup spaces
    List lists cup lists <spaceId>
    Check auth cup auth
    List folders cup folders <spaceId>
    List members cup members 🚧

    Goals & Key Results

    Feature Command Status
    List goals cup goals 🚧
    Create/update goal 🚧
    Key results CRUD 🚧

    Docs

    Feature Command Status
    Search docs cup docs [query]
    View doc / page cup doc <docId> [pageId]
    All page content cup doc-pages <docId>
    Create doc cup doc-create <title>
    Create page cup doc-page-create <docId> <name>
    Edit page cup doc-page-edit <docId> <pageId>

    Attachments

    Feature Command Status
    Upload file cup attach <id> <file>
    List attachments shown inline in cup task

    🚫 Won't add

    Feature Why
    Webhooks Server-side. A CLI can't listen for events.
    OAuth flow cup init already handles auth with API tokens.
    Guest/ACL Enterprise admin. Not what you reach for in a terminal.
    Chat/DM Use the ClickUp app. Chat doesn't belong in a CLI.
    Audit logs Enterprise admin.
    User/group management Too destructive for a CLI - removing someone from a workspace is permanent.
    View CRUD Views are visual layouts. Configure them in the UI.

    API Limitations

    These features exist in the ClickUp UI but aren't possible through the API:

    Feature Limitation
    Comment attachments API only supports task-level attachments (cup attach), not files within comments
    @mention individual users API provides --notify-all but no way to target specific users via @syntax
    Comment reactions No API endpoint for adding or viewing reactions
    ClickUp Brain / AI No public API
    In-comment checklists Only task-level checklists are supported via API
    Voice notes / Video Recording is a UI-only feature

    Setup

    Feature Command Status
    First-time setup cup init
    Get/set config cup config
    Shell completions cup completion <shell>

    Output Modes

    Context Default Override
    Terminal (TTY) Interactive tables + picker --json
    Piped (no TTY) Markdown (optimized for AI) --json or CU_OUTPUT=json

    Most commands scope to your assigned tasks by default - keeping output small and relevant for agent context windows.

    Configuration

    Config file

    ~/.config/cup/config.json (or $XDG_CONFIG_HOME/cup/config.json):

    {
      "apiToken": "pk_...",
      "teamId": "12345678",
      "sprintFolderId": "optional - folder ID to skip auto-detection"
    }

    Environment variables

    Environment variables override config file values:

    Variable Description
    CU_API_TOKEN ClickUp personal API token (pk_)
    CU_TEAM_ID Workspace (team) ID
    CU_OUTPUT Set to json to force JSON output when piped (default: markdown)

    When both are set, the config file is not required. Useful for CI/CD and containerized agents.

    Custom Task IDs

    ClickUp workspaces can configure custom task IDs with a prefix per space (e.g., PROJ-123, DEV-42). The CLI detects these automatically - any ID matching the PREFIX-DIGITS format (uppercase letters, hyphen, digits) is treated as a custom task ID.

    All commands that accept task IDs work with both native IDs and custom IDs:

    cup task PROJ-123
    cup update DEV-42 --status done
    cup comment PROJ-456 -m "Fixed in latest commit"
    cup subtasks DEV-100

    Custom ID resolution uses the teamId from your config, which is required (cup init sets it up).

    Task links with custom IDs: The cup link command passes both task IDs in a single API request. When both IDs are custom, this works correctly. However, mixing custom and native IDs in a single link command may not work as expected because the ClickUp API applies the custom_task_ids flag to all IDs in the request.

    Development

    npm install
    npm test          # unit tests (vitest, tests/unit/)
    npm run test:e2e  # e2e tests (tests/e2e/, requires CLICKUP_API_TOKEN in .env.test)
    npm run build     # tsup -> dist/