Clickup-cli clickup
Use when managing ClickUp tasks, sprints, or comments via the `cup` CLI tool. Triggers: task queries, status updates, sprint tracking, creating subtasks, posting comments, threaded replies, standup summaries, searching tasks, checking overdue items, assigning tasks, listing spaces and lists, opening tasks in browser, checking auth or config, setting custom fields, deleting tasks, managing tags, managing checklists, editing comments, task links, time tracking, attachments, file uploads, listing members, listing fields, duplicating tasks, bulk operations, goals, key results, saved filters, favorites.
git clone https://github.com/krodak/clickup-cli
T=$(mktemp -d) && git clone --depth=1 https://github.com/krodak/clickup-cli "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.agents/skills/using-clickup-cli" ~/.claude/skills/krodak-clickup-cli-clickup && rm -rf "$T"
.agents/skills/using-clickup-cli/SKILL.mdClickUp CLI (cup
) - skill version 1.24.0
cupReference for AI agents using the
cup CLI tool. Covers task management, sprint tracking, comments, time tracking, custom fields, goals, docs, and project workflows.
Version check: Run
. If your installed version is older than 1.24.0, update withcup --versionand refresh this skill withnpm install -g @krodak/clickup-cli.cup skill
Install & Configure
Prerequisites
Node.js 22+ required.
Install
npm install -g @krodak/clickup-cli
Or via Homebrew:
brew tap krodak/tap && brew install clickup-cli
Get an API token
The user needs a personal API token from ClickUp:
- Open https://app.clickup.com/settings/apps
- Under "API Token", click "Generate" (or copy existing)
- The token starts with
pk_
Configure
Non-interactive (recommended for agents):
cup init --token pk_USER_TOKEN --team TEAM_ID
To find the team/workspace ID, the user can check their ClickUp URL:
https://app.clickup.com/TEAM_ID/...
Interactive (for humans in a terminal):
cup init
Environment variables (no config file needed):
export CU_API_TOKEN="pk_..." export CU_TEAM_ID="12345678"
Verify
cup auth
This prints the authenticated username and workspace. If it fails, the token or config is invalid.
Setup
Config stored at
~/.config/cup/config.json with named profiles. Each profile has apiToken and teamId. Optional: sprintFolderId to pin sprint detection to a specific folder.
Multiple profiles supported - use
cup profile add <name> to create, cup profile use <name> to switch, or -p <name> flag for one-off overrides.
CU_PROFILE environment variable selects a profile (overridden by -p flag).
Saved Filters (Quick Shortcuts)
At the start of each session, run
cup filter list to discover saved shortcuts for this workspace.
| Command | What it does |
|---|---|
| List all saved shortcuts with commands and descriptions |
| Execute a saved shortcut (identical to running the full command) |
| Save a command shortcut |
| Remove a shortcut |
| Show a single shortcut's details |
Example:
cup filter save sprint-tasks tasks --status "in progress" --list l1 -d "Current sprint tasks"
Then: cup filter run sprint-tasks is equivalent to cup tasks --status "in progress" --list l1
Output Modes
| Context | Default output | Override |
|---|---|---|
| Terminal (TTY) | Interactive picker UI | for JSON |
| Piped / non-TTY | Markdown tables | for JSON |
- Default piped output is Markdown - optimized for agent context windows
outputs a Markdown summary when piped; usecup task <id>
for the full raw API object--json- Set
to always get JSON when pipedCU_OUTPUT=json - Agents typically don't need
unless parsing structured data with--jsonjq
Commands
All commands support
--help for full flag details. All commands support --json.
Read
| Command | What it returns |
|---|---|
| My tasks (filter by status, name, type, list, space, assignee, tag, dates, custom fields). for all tasks in workspace |
| All my tasks grouped by status |
| Tasks in active sprint (auto-detected) |
| List all sprints (marks active with *) |
| Search my tasks by name. for all tasks |
| Single task details (custom fields, checklists, attachments, deps, links) |
| Subtasks of a task |
| Comments on a task |
| Task details + comment history combined |
| Tasks updated in last n days (default 30) |
| Standup: completed, in-progress, overdue |
| Tasks past due date (most overdue first) |
| List/filter workspace spaces |
| Lists in a space (including folder lists) |
| Folders in a space (with their lists) |
| Show how long a task has been in each status |
| Workspace members (username, ID, email) |
| Custom fields on a list (type, required, options) |
| Tags available in a space |
| Workspace goals with progress |
| Key results for a goal |
| Workspace docs (optionally filter by name) |
| Doc metadata + page tree, or a specific page |
| All pages in a doc with content |
| Custom task types (for ) |
| Task templates (for ) |
| List templates (for ) |
| Folder templates |
| List views on a list |
| Get view details |
| Open task in browser by ID or name |
| Check authentication status |
Write
| Command | What it does |
|---|---|
| Create task ( accepts , sets custom fields inline) |
| Update task fields (including custom fields) |
| Post comment on task |
| Edit a comment |
or | Delete a comment by ID or delete one of your task comments |
| List threaded replies |
| Reply to a comment |
| Assign/unassign users (/ accept comma-separated IDs) |
| Add/remove dependencies |
| Add/remove task from lists ( accepts ) |
| Set/remove custom field values |
| Create a custom field |
| Add/remove tags on a task |
| Link/unlink tasks |
| Upload file attachment |
| Delete task (DESTRUCTIVE) |
| Duplicate a task |
| Bulk update status |
| Bulk assign/unassign user from tasks |
| Bulk set or clear due dates |
| Bulk add/remove tag from tasks |
| Bulk set priority on many tasks |
| Bulk set a custom field value |
| Bulk move tasks to a destination list |
| View checklists on a task |
| Create a checklist |
| Delete a checklist |
| Add item to checklist (nest under parent via ) |
| Edit checklist item (reparent with , use to unnest) |
| Delete checklist item |
| Start timer |
| Stop running timer |
| Show running timer |
| Log manual entry (e.g. "2h", "30m") |
| List my recent time entries (--all for team) |
| Update time entry |
| Delete time entry |
| Create a goal |
| Update a goal |
| Delete a goal |
| Create key result |
| Update key result |
| Delete key result |
| Create a doc |
| Create doc page |
| Edit doc page |
| Delete a doc |
| Delete doc page |
| Create a space |
| Create a list in a space or folder |
| Create a folder in a space |
| Rename a list |
| Rename a folder |
| Rename a space |
| Create space tag |
| Update space tag |
| Delete space tag |
| Create list from template |
| Create a view on a list |
| Update a view |
| Delete a view (DESTRUCTIVE) |
| Add a local favorite |
| Remove a favorite |
| List favorites (optionally filter by type) |
| List all profiles |
| Add a new profile (interactive) |
| Remove a profile |
| Set the default profile |
/ / | Manage config |
| Shell completions (bash/zsh/fish) |
Global Flags
| Flag | Description |
|---|---|
| Use a specific profile for this command |
| Force JSON output (available on all commands) |
Flags & Conventions
| Topic | Detail |
|---|---|
| Task IDs | Native () or custom (). Custom IDs auto-detected by format |
| Fuzzy matching: exact > starts-with > contains. Prints match to stderr |
| Names (, , , ) or numbers (1-4) |
| format |
| User ID or |
| Comma-separated (e.g. ) |
| Duration: , , , or raw milliseconds |
| (regular) or custom type name/ID (e.g. , ) |
| Custom task type ID for (find with ) |
| Partial name match or exact ID |
| Partial match, case-insensitive |
| Show all tasks in workspace, not just assigned to me. Available on , , . Default: my tasks only (smaller output for agent context windows) |
| Include closed/done tasks |
on create | Optional when is given (auto-detected). Accepts pseudo-ID |
| Supports: text, number, checkbox (true/false), dropdown (option name), labels (comma-separated names), date (YYYY-MM-DD), url, email, emoji/rating (0-5), manual_progress (0-100), tasks/relationship (comma-separated task IDs), users/people (comma-separated user IDs). Names resolved case-insensitively; errors list available fields/options |
| Use for and types (required). Other types don't need |
filter | on and requires to resolve field names to IDs |
| date filters for due date range |
| date filters for creation date range |
| Auto-detects active sprint by folder name (sprint/iteration/cycle/scrum), parses multiple date formats. Override with , , or favorite a sprint folder |
| Local-only favorites (not synced to ClickUp). Types: sprint-folder, space, list, folder, view, task. Favorited sprint-folders auto-used by sprint commands |
| Both IDs must be the same type (both custom or both native) |
| DESTRUCTIVE. Requires in non-interactive mode. Cannot be undone |
| Errors | stderr with exit code 1. Strict parsing - excess/unknown arguments rejected |
Agent Workflow Examples
Investigate a task
cup task abc123def # markdown summary cup subtasks abc123def # child tasks (open only) cup subtasks abc123def --include-closed # all child tasks cup comments abc123def # discussion cup activity abc123def # task + comments combined
Find tasks
cup tasks --status "in progress" # by status cup tasks --name "login" # by partial name cup tasks --type initiative # initiatives only cup tasks --list 12345 --all # all tasks in list, not just mine cup tasks --tag "bug" --status "to do" # by tag and status cup tasks --list 123 --field "Sprint" "Week 1" # by custom field cup tasks --due-before 2026-04-01 # due before a date cup tasks --assignee me --created-after 2026-03-01 # my tasks created recently cup search "payment flow" # multi-word search cup search auth --status "prog" # fuzzy status match cup search "auth" --list 123 --space 456 # search within list and space cup sprint # current sprint cup assigned # all my tasks by status cup overdue # past due date cup inbox --days 7 # recently updated
Make changes
cup update abc123def -s "done" cup update abc123def --priority high --due-date 2025-03-15 cup create -n "Fix the thing" -p abc123def cup create -n "Fix bug" -l <listId> --priority urgent --tags "bug,frontend" cup create -n "Bug fix" -l sprint:current # create in active sprint cup create -n "Q3 Roadmap" -l <listId> --custom-item-id 1 cup create -n "New story" -l <listId> --field "Story Points" 5 --field "Stage" "In Review" cup comment abc123def -m "Completed in PR #42" cup assign abc123def --to me cup assign abc123def --to 12345,67890 # assign multiple users at once cup depend task3 --on task2 # task3 waits for task2 cup move task1 --to list2 --remove list1 cup move task1 --to sprint:current # move to active sprint cup field abc123def --set "Story Points" 5 cup tag abc123def --add "bug,frontend" cup checklist create abc123def "QA Steps" cup checklist add-item <clId> "Run unit tests" cup checklist add-item <clId> "Sub step" --parent <itemId> # nest under parent cup checklist edit-item <clId> <itemId> --resolved cup checklist edit-item <clId> <itemId> --parent <newParent> # reparent (use "null" to unnest) cup link abc123 def456 cup attach abc123def ./screenshot.png cup time start abc123def -d "Working on feature" cup time stop cup time log abc123def 2h -d "Code review" cup delete abc123def --confirm # irreversible!
Docs
cup docs "design" # search docs cup doc <docId> <pageId> # view page cup doc-create "Architecture Notes" -c "# Draft" cup doc-page-create <docId> "Section" --parent-page <pageId> cup doc-page-edit <docId> <pageId> -c "# Updated"
Workspace structure
cup spaces --name "Engineering" # find space ID cup folders <spaceId> # folders with their lists cup lists <spaceId> # lists in a space cup space-create "New Space" # create a space cup folder-create <spaceId> "Q2" # create a folder cup list-create <spaceId> "Backlog" # create a list cup list-create <spaceId> "Sprint" --folder <folderId> cup space-rename <spaceId> "Platform" # rename a space cup folder-rename <folderId> "Q3" # rename a folder cup list-rename <listId> "Sprint 12" # rename a list cup members # workspace members cup fields <listId> # custom fields on a list cup task-types # custom task types cup templates # task templates
Goals
cup goals cup goal-create "Ship v2" -d "Release version 2" cup key-results g123 cup key-result-create g123 "API coverage" --type percentage --target 80 cup key-result-update kr456 --progress 60 --note "On track"
Profiles
cup profile add personal # add a profile (interactive) cup profile list # list all profiles cup profile use personal # switch default cup tasks -p work # use specific profile for one command
Favorites
cup favorite add sprint-folder 12345 --name "Team Sprint" # favorite a sprint folder cup favorite add space 67890 eng # favorite a space with alias cup favorite list # list all favorites cup favorite list --type sprint-folder # list only sprint folders cup favorite remove eng # remove by alias cup sprint # auto-uses favorited sprint folder
Standup
cup summary # completed / in progress / overdue cup summary --hours 48 # wider window
DELETE SAFETY
IMPORTANT: Always confirm with the user before running
cup delete. This is a destructive, irreversible operation. Even when using --confirm flag, verify the task ID is correct with the user first.