clickup-cu

Fast ClickUp CLI for daily task workflow, with optional Pi prompt shortcut.

Package details

prompt

Install clickup-cu from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:clickup-cu
Package
clickup-cu
Version
0.1.8
Published
May 6, 2026
Downloads
not available
Author
0xrokib
License
MIT
Types
prompt
Size
26.6 KB
Dependencies
0 dependencies · 0 peers
Pi manifest JSON
{
  "prompts": [
    "./prompts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

clickup-cu

Fast ClickUp CLI for daily task control from terminal or Pi.

Purpose

ClickUp is powerful, but daily task navigation can be slow when you repeatedly open the browser to find tasks, start/stop timers, update status, or set estimates. clickup-cu gives developers and CLI-heavy teams a small command-line workflow for the actions they do many times every day.

Use it to:

  • see today's work without opening ClickUp
  • start a task and time tracker in one command
  • stop the active timer from terminal
  • set time estimates quickly
  • add manual time entries
  • create tasks/subtasks from CLI
  • use the same workflow inside Pi with /cu-fast
cu today
cu start test-task-id
cu stop
cu estimate test-task-id 2h

Description

cu is a zero-dependency Node.js CLI that talks directly to the ClickUp REST API. It reads your local ClickUp token/config, calls the API, and prints compact output designed for daily developer workflow.

It is not a full ClickUp replacement. It focuses on common high-frequency actions. For rare or complex ClickUp operations, you can still use ClickUp UI or MCP.

Why direct REST API instead of MCP for daily commands:

cu:  Terminal/Pi -> local cu script -> ClickUp REST API
MCP: Pi -> MCP adapter -> remote MCP server -> ClickUp

cu has fewer layers, less tool/schema overhead, and works outside Pi too.

Install

Global install (recommended)

Install clickup-cu globally so the cu command works from any terminal and any project directory:

npm install -g clickup-cu

Check:

cu help
which cu

Use global install, not local project install:

# good
npm install -g clickup-cu

# avoid inside another project/monorepo
npm install clickup-cu
npm i clickup-cu

Local install adds clickup-cu to the current project dependencies and can fail if that project has workspace/package issues. Global install puts the cu executable on your shell PATH for everyday CLI use.

Setup

1. Get ClickUp API token

ClickUp app:

Profile / avatar -> Settings -> Apps -> API Token -> Generate

Token looks like pk_....

2. Save token locally

cu token pk_test_token_here

Stored at:

~/.config/cu/token

Do not commit/share this token.

3. Create config

cu init

Config path:

~/.config/cu/config.json

Example:

{
  "workspaceId": "test",
  "userId": "test",
  "defaultListId": "test",
  "statuses": {
    "backlog": "BACKLOG",
    "todo": "TO-DO",
    "start": "IN PROGRESS",
    "review": "REVIEW",
    "qa": "QA/TESTING",
    "blocked": "BLOCKED",
    "release": "READY FOR RELEASE",
    "done": "DONE"
  }
}
Field Meaning
workspaceId ClickUp Workspace/Team ID
userId Your ClickUp user ID for “my tasks”
defaultListId List used by cu create
statuses.backlog Status used by cu backlog
statuses.todo Status used by cu todo
statuses.start Status used by cu start and cu progress
statuses.review Status used by cu review
statuses.qa Status used by cu qa / cu testing
statuses.blocked Status used by cu blocked
statuses.release Status used by cu release
statuses.done Status used by cu done

Daily use from terminal

Start your day:

cu today

Shows:

  • running timer
  • due / overdue tasks
  • active tasks
  • blocked tasks
  • not-started tasks
  • quick next commands

Start a task:

cu start test-task-id

Stops context switching:

  • sets status to IN PROGRESS
  • starts ClickUp timer

Stop timer:

cu stop

Show one task:

cu show test-task-id

Move task through statuses:

cu backlog test-task-id
cu todo test-task-id
cu progress test-task-id
cu review test-task-id
cu qa test-task-id
cu blocked test-task-id
cu release test-task-id
cu done test-task-id

Set estimate:

cu estimate test-task-id 2h
cu estimate test-task-id 2h 30m
cu estimate test-task-id 45m

Add manual time:

cu addtime test-task-id 45m "backend work"

Create task in default list:

cu create "Fix login bug"

Create subtask:

cu subtask test-task-id "Add API validation"

Assign people:

cu assign test-task-id me
cu assign test-task-id test-user-id another-test-user-id

Current assign command supports numeric user IDs or me.

Commands

Command Purpose
cu today Daily dashboard
cu list List your open tasks
cu list all List open tasks without assignee filter
cu list status "IN PROGRESS" List tasks by status
cu show <id> Show task details
cu start <id> Set IN PROGRESS + start timer
cu stop Stop current timer
cu backlog <id> Set BACKLOG
cu todo <id> Set TO-DO
cu progress <id> Set IN PROGRESS
cu review <id> Set REVIEW
cu qa <id> Set QA/TESTING
cu blocked <id> Set BLOCKED
cu release <id> Set READY FOR RELEASE
cu done <id> Set DONE
cu estimate <id> <duration> Set time estimate
cu addtime <id> <duration> [note] Add manual time entry
cu create <title> Create task in default list
cu subtask <parent-id> <title> Create subtask
`cu assign <user-id me...>`
cu token <pk_xxx> Save token
cu init Create/show config

Use inside Pi

This package also includes Pi prompt:

/cu-fast

Install Pi package:

pi install npm:clickup-cu

Then restart Pi or run:

/reload

Use:

/cu-fast today
/cu-fast start test-task-id
/cu-fast stop
/cu-fast estimate test-task-id 2h

Pi flow:

/cu-fast today -> Pi runs bash: cu today -> ClickUp REST API

Important: Pi shortcut needs CLI installed too:

npm install -g clickup-cu
cu token pk_xxx
cu init

How it works internally

Architecture:

Terminal or Pi
  -> cu command
  -> ~/.config/cu/config.json
  -> ~/.config/cu/token or CLICKUP_API_TOKEN
  -> ClickUp REST API
  -> formatted terminal output

Base API:

https://api.clickup.com/api/v2

Every request sends:

Authorization: pk_your_token
Content-Type: application/json

Main internal helper:

async function api(method, endpoint, body) {
  const res = await fetch(`${API}${endpoint}`, {
    method,
    headers: {
      Authorization: TOKEN,
      'Content-Type': 'application/json',
    },
    body: body === undefined ? undefined : JSON.stringify(body),
  });
  return await res.json();
}

Common REST calls:

CLI action REST API
cu today timer GET /team/{workspaceId}/time_entries/current
cu today tasks GET /team/{workspaceId}/task?...&assignees[]={userId}
cu show GET /task/{taskId}
cu start status PUT /task/{taskId}
status commands (cu backlog, cu todo, cu progress, cu review, cu qa, cu blocked, cu release, cu done) PUT /task/{taskId}
cu start timer POST /team/{workspaceId}/time_entries/start
cu stop POST /team/{workspaceId}/time_entries/stop
cu estimate PUT /task/{taskId} with time_estimate
cu create POST /list/{defaultListId}/task
cu subtask POST /list/{listId}/task with parent

MCP alternative

You can control ClickUp through MCP too. It works, but is usually slower for daily actions.

MCP route:

Pi -> pi-mcp-adapter -> mcp-remote -> ClickUp MCP -> ClickUp

Example MCP config:

{
  "mcpServers": {
    "clickup": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.clickup.com/mcp"],
      "lifecycle": "lazy",
      "idleTimeout": 10
    }
  }
}

Then ask Pi:

list my ClickUp tasks
start timer on task test-task-id
stop current ClickUp timer
set estimate of test-task-id to 2h

Use MCP for rare/complex ClickUp actions. Use cu for daily fast workflow.

Use case Recommended
daily dashboard cu today
start/stop timer cu start, cu stop
estimates/manual time cu estimate, cu addtime
complex search/docs/workspace actions MCP

Publish / development

Local dev:

git clone https://github.com/YOUR_USER/clickup-cu.git
cd clickup-cu
npm install -g .
cu help

Checks:

npm test
npm pack --dry-run

Publish:

npm login
npm publish --access public

If updating existing npm package:

npm version patch
npm publish --access public

Security

  • Never commit ~/.config/cu/token.
  • Never paste pk_... in chat/issues/logs.
  • Each teammate should generate their own token.
  • Rotate token if exposed.