| name | clickup |
| description | Read and act on ClickUp tickets and docs — comments and threads, status / assignee / due date / priority, workspace search, create tasks and subtasks, doc pages, attachments. Use for: a pasted app.clickup.com/t/ link or a bare ClickUp id, my ClickUp tickets, what ClickUp has assigned to me, comment on / update / close a ticket, mark it in progress, set a due date, a ClickUp doc or page. This is the EXTERNAL ClickUp workspace — the self-hosted approval UI and ITS Tasks are `clawgate`, the durable cross-repo board is `initiatives`, the email action-items queue is `mailbox`, and verifying from session transcripts whether work on a task was actually done is `check-clickup-addressed`. |
ClickUp
Task and document interaction via the ClickUp API — read tasks and comments, post
updates, manage assignments/dates/tags, and create or edit docs.
node query.mjs <command> [options]
Finding a command — ask the CLI, not this file
node query.mjs
node query.mjs <command>
🔴 This file deliberately does not list the commands. It used to, and the tables
drifted to 56 of 68 — a whole command group and batch-create were invisible here
for months. showUsage() in query.mjs is the single source of truth, pinned by
test/help-coverage.test.mjs, which fails if any dispatchable command is missing
from the help (or any printed command cannot dispatch).
Adding a command? Add it to showUsage() — devrc's node gate runs the check.
Do not restate the list here.
Hot path
node query.mjs get https://app.clickup.com/t/86abc123
node query.mjs get 86abc123 --subtasks
node query.mjs status 86abc123
node query.mjs status 86abc123 "in progress"
node query.mjs comments 86abc123 --threads
node query.mjs comment 86abc123 --file /tmp/update.md --cleanup
node query.mjs page <doc_id> <page_id>
node query.mjs edit-page <doc_id> <page_id> --file /tmp/page.md
What the usage lines can't tell you
Task hygiene — read it before you create or close one
🔴 Creating or closing a ClickUp task? ~/.claude/skills/clickup/flows/task-hygiene.md.
Pre-verify before creating (7 of 8 inbound tickets dissolve on verification, so
"already done / already exists" and creating NOTHING is a success); one completion
comment with evidence per acceptance criterion plus an explicit NOT-verified list;
and do not mark complete when you derived the criteria yourself — the API token is a
HUMAN identity here, so an agent closing a ticket is indistinguishable from the human
doing it. Two comments per task, never per turn. ⚠️ Nothing enforces any of it —
there is no ClickUp hook; it is a convention, and the flow says so first.
Going deeper — load ONE only when its trigger fires
- Credentials,
accounts.json, multi-account, the JWT fields, first-time setup
→ ~/.claude/skills/clickup/reference/setup.md. State lives in
$XDG_STATE_HOME/clickup (fallback ~/.local/state/clickup), never next to the
code — a write there is EROFS.
- Hand-rolling raw
api.clickup.com requests → ~/.claude/skills/clickup/reference/raw-api.md — read it
first: a view id is not a list id, dashboard views can't be queried for tasks, and
both task endpoints paginate (a single-page read made a 67-ticket queue look like 30).
- CHANGING this skill — where to edit so the change deploys, the nix-built
node_modules + npmDepsHash, and the test suites →
~/.claude/skills/clickup/reference/maintaining.md.
- "
check-clickup-addressed re-derives awaiting's predicate — consolidate them"
→ ~/.claude/skills/clickup/reference/awaiting-vs-ccua.md. It cannot; the answer is
measured, not argued. Read it BEFORE proposing that ccua call query.mjs awaiting.