clickup-agent-cli 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "clickup-agent-cli",
3
- "version": "0.2.1",
3
+ "version": "0.4.0",
4
4
  "description": "CLI covering the entire ClickUp API v2 surface",
5
5
  "type": "module",
6
6
  "bin": {
7
- "clickup": "./dist/bin/clickup.js"
7
+ "clickup": "dist/clickup.js"
8
8
  },
9
9
  "files": [
10
10
  "dist",
@@ -18,7 +18,8 @@
18
18
  "build": "tsup",
19
19
  "dev": "tsx bin/clickup.ts",
20
20
  "test": "vitest run",
21
- "typecheck": "tsc --noEmit"
21
+ "typecheck": "tsc --noEmit",
22
+ "version": "node scripts/sync-version.js"
22
23
  },
23
24
  "keywords": [
24
25
  "clickup",
@@ -45,5 +46,13 @@
45
46
  "tsx": "^4.0.0",
46
47
  "typescript": "^5.9.0",
47
48
  "vitest": "^3.0.0"
48
- }
49
+ },
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "https://github.com/henryreith/clickup-cli"
53
+ },
54
+ "bugs": {
55
+ "url": "https://github.com/henryreith/clickup-cli/issues"
56
+ },
57
+ "homepage": "https://github.com/henryreith/clickup-cli#readme"
49
58
  }
@@ -41,6 +41,7 @@ clickup <resource> <action> --help # Full help text
41
41
  | `clickup-chat` | Chat channels, sending messages and notifications |
42
42
  | `clickup-webhooks` | Webhook registration and management |
43
43
  | `clickup-fields` | Custom fields, tags, custom task types |
44
+ | `clickup-templates` | Templates: list available templates, apply task/list/folder templates |
44
45
 
45
46
  ## Recipe Skills (multi-step workflows)
46
47
 
@@ -57,6 +58,7 @@ Recipes accept natural language arguments. Scope them to any team, department, p
57
58
  | `clickup-sprint-closeout` | Close a sprint, carry over incomplete work |
58
59
  | `clickup-time-audit` | Audit time tracking and utilization |
59
60
  | `clickup-project-setup` | Scaffold a new project structure |
61
+ | `clickup-rollout` | Roll out a saved process template (apply + configure) |
60
62
  | `clickup-capacity-check` | Check team workload and availability |
61
63
  | `clickup-blocker-report` | Find blocked tasks and dependency chains |
62
64
  | `clickup-goal-progress` | Report on goal/OKR completion |
@@ -81,6 +83,10 @@ clickup task list --list-id <id> --format quiet | xargs -I{} clickup task get {}
81
83
 
82
84
  All commands support: `--format json|table|csv|tsv|quiet|id|md`, `--dry-run`, `--debug`, `--no-color`
83
85
 
86
+ Additional global flags:
87
+ - `--profile <name>` -- select a named profile (accepts profile key, workspace name, or nickname)
88
+ - `--token-file <path>` -- read API token from a file (useful in CI/CD and secret managers)
89
+
84
90
  Use `--format md` to render output as a markdown table -- ideal for displaying results in chat messages or documents.
85
91
 
86
92
  ## Auth
@@ -91,16 +97,45 @@ Requires a ClickUp API token.
91
97
  # Set up authentication
92
98
  clickup auth login --token pk_XXXXXXXX_YYYYYYYY
93
99
 
100
+ # Read token from file (CI/CD-friendly)
101
+ clickup auth login --token-file /run/secrets/clickup_token
102
+
94
103
  # Or use an environment variable
95
- export CLICKUP_TOKEN=pk_XXXXXXXX_YYYYYYYY
104
+ export CLICKUP_API_TOKEN=pk_XXXXXXXX_YYYYYYYY
96
105
 
97
- # Store default workspace
98
- clickup config set workspace_id <id>
106
+ # Auto-configure workspace after login (single workspace: auto-selects)
107
+ clickup workspace setup
99
108
 
100
109
  # Check current auth status
101
110
  clickup auth status
111
+
112
+ # Validate token and show identity
113
+ clickup config validate
114
+ ```
115
+
116
+ ## Named Profiles (Multi-Account)
117
+
118
+ Profiles store credentials per workspace. A single-workspace setup is transparent -- no `--profile` flag needed.
119
+
120
+ ```bash
121
+ # List profiles
122
+ clickup config profile list
123
+
124
+ # Switch active profile
125
+ clickup config profile use "Acme Corp"
126
+
127
+ # Set a short nickname
128
+ clickup config profile nickname acme-corp acme
129
+
130
+ # Use a specific profile for one command
131
+ clickup task list --list-id 123 --profile acme
102
132
  ```
103
133
 
134
+ Profile resolution for `--profile` accepts:
135
+ 1. The profile key (e.g. `default`)
136
+ 2. Workspace name, case-insensitive (e.g. `"Henry's Workspace"`)
137
+ 3. Nickname if set (e.g. `acme`)
138
+
104
139
  ## Creating Custom Skills
105
140
 
106
141
  Users can create their own skills alongside the built-in ones. Add a SKILL.md to `.claude/skills/<name>/` in any project:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: clickup-fields
3
3
  description: Manages ClickUp custom fields, tags, and custom task types. Use when the user asks about custom fields, wants to set field values on tasks, manage tags, or work with custom task types.
4
- allowed-tools: Bash(clickup custom-field *), Bash(clickup tag *), Bash(clickup custom-task-type *), Bash(clickup schema field*), Bash(clickup schema tag*)
4
+ allowed-tools: Bash(clickup custom-field *), Bash(clickup tag *), Bash(clickup custom-task-type *), Bash(clickup attachment *), Bash(clickup schema field*), Bash(clickup schema tag*)
5
5
  ---
6
6
 
7
7
  # ClickUp Custom Fields, Tags, and Task Types
@@ -13,7 +13,7 @@ Custom fields are defined at the list level and set on individual tasks.
13
13
  ```bash
14
14
  clickup field list --list-id <id> # List field definitions
15
15
  clickup field set --task-id <id> --field-id <fid> --value <v> # Set a field value
16
- clickup field remove --task-id <id> --field-id <fid> # Clear a field value
16
+ clickup field remove --task-id <id> --field-id <fid> --confirm # Clear a field value
17
17
  ```
18
18
 
19
19
  ### Value formats by field type
@@ -69,9 +69,20 @@ clickup field list --list-id 998877 --format json
69
69
  clickup field list --list-id 998877 --format md
70
70
  ```
71
71
 
72
+ ## Attachment Commands
73
+
74
+ ```bash
75
+ clickup attachment upload --task-id <id> --file <path> [--filename <name>]
76
+ clickup attachment list --task-id <id>
77
+ clickup attachment download --task-id <id> --attachment-id <id> [--output <path>] [--force]
78
+ ```
79
+
80
+ `attachment download` fetches the file with the auth header and writes to `--output` (default: `./attachment-<id>-<title>`). Refuses to overwrite an existing file unless `--force` is passed. Shows a spinner during download.
81
+
72
82
  ## Discovery
73
83
 
74
84
  ```bash
75
85
  clickup schema fields.set # Show field set options
76
86
  clickup schema tags.create # Show tag create fields
87
+ clickup schema attachment.list # Show attachment list options
77
88
  ```
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: clickup-rollout
3
+ description: Rolls out a saved process template in ClickUp by applying it to a target location, then configuring assignees, due dates, and custom fields. Use when the user says "start a new [project/process/sprint/onboarding]" or wants to kick off a repeatable workflow from a template.
4
+ disable-model-invocation: true
5
+ context: fork
6
+ agent: general-purpose
7
+ argument-hint: "[template name or ID] [target location] [optional: assignee, due date, custom fields]"
8
+ allowed-tools: Bash(clickup *)
9
+ ---
10
+
11
+ # Template Rollout
12
+
13
+ Apply a saved ClickUp template and configure the resulting task, list, or folder for a new instance of the process.
14
+
15
+ ## Workflow
16
+
17
+ ### Step 1: Find the template
18
+
19
+ ```bash
20
+ # List all templates to find the right one
21
+ clickup template list --format json
22
+ ```
23
+
24
+ If the user gave a template name, find its ID by matching the `name` field. If they gave an ID directly, skip this step.
25
+
26
+ ### Step 2: Determine the template type and target
27
+
28
+ Based on what the user wants to create:
29
+ - **Task template**: needs a `--list-id` target
30
+ - **List template**: needs a `--folder-id` or `--space-id` target
31
+ - **Folder template**: needs a `--space-id` target
32
+
33
+ If the user hasn't specified a target, find it:
34
+ ```bash
35
+ clickup space list --format json
36
+ clickup folder list --space-id <id> --format json
37
+ clickup list list --folder-id <id> --format json
38
+ ```
39
+
40
+ ### Step 3: Apply the template
41
+
42
+ ```bash
43
+ # Task template
44
+ TASK_ID=$(clickup template apply-task \
45
+ --list-id <list-id> \
46
+ --template-id <tmpl-id> \
47
+ --name "<instance-name>" \
48
+ --format id)
49
+
50
+ # List template (into folder)
51
+ LIST_ID=$(clickup template apply-list \
52
+ --folder-id <folder-id> \
53
+ --template-id <tmpl-id> \
54
+ --name "<instance-name>" \
55
+ --format id)
56
+
57
+ # List template (into space, folderless)
58
+ LIST_ID=$(clickup template apply-list \
59
+ --space-id <space-id> \
60
+ --template-id <tmpl-id> \
61
+ --name "<instance-name>" \
62
+ --format id)
63
+
64
+ # Folder template
65
+ FOLDER_ID=$(clickup template apply-folder \
66
+ --space-id <space-id> \
67
+ --template-id <tmpl-id> \
68
+ --name "<instance-name>" \
69
+ --format id)
70
+ ```
71
+
72
+ ### Step 4: Configure the created resource
73
+
74
+ For a task template result, set assignees, dates, and custom fields:
75
+ ```bash
76
+ # Assign team members
77
+ clickup task update "$TASK_ID" --assignee-add <user-id>
78
+
79
+ # Set start and due dates (Unix milliseconds)
80
+ clickup task update "$TASK_ID" --start-date <ms> --due-date <ms>
81
+
82
+ # Fill in custom fields
83
+ clickup field set --task-id "$TASK_ID" --field-id <field-id> --value "<value>"
84
+ ```
85
+
86
+ For a list template result, populate it with initial tasks if needed:
87
+ ```bash
88
+ clickup task list --list-id "$LIST_ID" --format json # review what the template created
89
+ ```
90
+
91
+ For a folder template result, review the created structure:
92
+ ```bash
93
+ clickup list list --folder-id "$FOLDER_ID" --format table
94
+ ```
95
+
96
+ ### Step 5: Confirm and summarize
97
+
98
+ Report what was created:
99
+ - Resource type and ID
100
+ - Name used
101
+ - Assignees set
102
+ - Dates configured
103
+ - Custom fields populated
104
+ - Link or path in the ClickUp hierarchy
105
+
106
+ ## Tips
107
+
108
+ - Use `--name` to give each rollout a unique name (e.g. "Client Onboarding - Acme Corp" or "Sprint 14 - Apr 7")
109
+ - Templates carry over all custom field definitions -- just fill in the values after applying
110
+ - Task IDs from `--format id` can be piped directly into update and field commands
111
+ - If rolling out multiple instances at once, loop over a list of names or targets
@@ -11,12 +11,15 @@ Manage the organizational hierarchy: Workspace > Space > Folder > List. Lists co
11
11
  ## Workspace Commands
12
12
 
13
13
  ```bash
14
+ clickup workspace setup # Auto-configure workspace (run after auth login)
14
15
  clickup workspace list # List all workspaces
15
16
  clickup workspace get [--workspace-id <id>] # Get workspace details
16
17
  clickup workspace seats [--workspace-id <id>] # Show seat usage
17
18
  clickup workspace plan [--workspace-id <id>] # Show billing plan
18
19
  ```
19
20
 
21
+ `workspace setup` calls `GET /team`, auto-selects if only one workspace exists, prompts in TTY if multiple, and saves the workspace to the active profile. After running it, `--workspace-id` is not needed for subsequent commands.
22
+
20
23
  ## Space Commands
21
24
 
22
25
  ```bash
@@ -33,7 +33,7 @@ clickup task get <task-id> [--include-subtasks] [--include-markdown-description]
33
33
  ```bash
34
34
  clickup task create --list-id <id> --name <name>
35
35
  [--description <text>] [--markdown-description <md>]
36
- [--status <s>] [--priority <1-4>] [--due-date <ts>] [--start-date <ts>]
36
+ [--status <s>] [--priority <1-4|urgent|high|normal|low>] [--due-date <ts>] [--start-date <ts>]
37
37
  [--assignee <id>...] [--tag <name>...] [--time-estimate <ms>]
38
38
  [--parent <task-id>] [--custom-field <id=value>...]
39
39
  ```
@@ -41,15 +41,28 @@ clickup task create --list-id <id> --name <name>
41
41
  ### Update a task
42
42
  ```bash
43
43
  clickup task update <task-id> [--name <name>] [--description <text>]
44
- [--status <s>] [--priority <1-4>] [--due-date <ts>] [--start-date <ts>]
44
+ [--status <s>] [--priority <1-4|urgent|high|normal|low>] [--due-date <ts>] [--start-date <ts>]
45
45
  [--assignee-add <id>...] [--assignee-remove <id>...] [--archived <bool>]
46
46
  ```
47
47
 
48
+ Priority accepts both integers (`1`-`4`) and strings (`urgent`, `high`, `normal`, `low`). Mapping: urgent=1, high=2, normal=3, low=4.
49
+
48
50
  ### Delete a task
49
51
  ```bash
50
52
  clickup task delete <task-id> --confirm
51
53
  ```
52
54
 
55
+ ### Bulk operations (concurrency limit 3)
56
+ ```bash
57
+ # Apply the same update to multiple tasks
58
+ clickup task bulk-update --task-id <id> --task-id <id> ... [same update flags as task update]
59
+
60
+ # Delete multiple tasks
61
+ clickup task bulk-delete --task-id <id> --task-id <id> ... --confirm
62
+ ```
63
+
64
+ Both bulk commands output a results table with `task_id | name | result`.
65
+
53
66
  ### Time in status
54
67
  ```bash
55
68
  clickup task time-in-status <task-id>
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: clickup-templates
3
+ description: Lists and applies ClickUp templates to create tasks, lists, and folders from saved process templates. Use when the user wants to roll out a repeatable process, create items from a template, or find what templates are available in the workspace.
4
+ allowed-tools: Bash(clickup template *), Bash(clickup schema template*)
5
+ ---
6
+
7
+ # ClickUp Templates
8
+
9
+ List available templates and apply them to create tasks, lists, and folders. Templates are defined in the ClickUp UI and can be rolled out repeatedly via the CLI.
10
+
11
+ ## List Templates
12
+
13
+ ```bash
14
+ clickup template list [--workspace-id <id>] [--page <n>]
15
+ ```
16
+
17
+ Returns all task templates in the workspace. Use this to find template IDs before applying them.
18
+
19
+ ## Apply a Task Template
20
+
21
+ ```bash
22
+ clickup template apply-task --list-id <id> --template-id <id> [--name <override-name>]
23
+ ```
24
+
25
+ Creates a new task in the specified list using the template structure, including all custom fields defined on the template.
26
+
27
+ ## Apply a List Template
28
+
29
+ ```bash
30
+ # Into a folder
31
+ clickup template apply-list --folder-id <id> --template-id <id> [--name <override-name>]
32
+
33
+ # Into a space (folderless)
34
+ clickup template apply-list --space-id <id> --template-id <id> [--name <override-name>]
35
+ ```
36
+
37
+ Provide exactly one of `--folder-id` or `--space-id`.
38
+
39
+ ## Apply a Folder Template
40
+
41
+ ```bash
42
+ clickup template apply-folder --space-id <id> --template-id <id> [--name <override-name>]
43
+ ```
44
+
45
+ Creates an entire folder structure (with nested lists and tasks) from the template.
46
+
47
+ ## Common Patterns
48
+
49
+ ```bash
50
+ # Step 1: Find available templates
51
+ clickup template list --format json
52
+
53
+ # Step 2: Apply a task template and capture the new task ID
54
+ TASK_ID=$(clickup template apply-task --list-id <id> --template-id <tmpl_id> --format id)
55
+
56
+ # Step 3: Set assignee and due date on the created task
57
+ clickup task update "$TASK_ID" --assignee-add 112233 --due-date 1735689600000
58
+
59
+ # Step 4: Fill in custom fields
60
+ clickup field set --task-id "$TASK_ID" --field-id cf_001 --value "In Review"
61
+
62
+ # Roll out a named instance of a process template
63
+ clickup template apply-list --folder-id <id> --template-id <tmpl_id> --name "Q1 Launch - March 2026"
64
+
65
+ # Apply a folder template to scaffold a whole project
66
+ clickup template apply-folder --space-id <id> --template-id <tmpl_id> --name "Client Onboarding - Acme Corp"
67
+ ```
68
+
69
+ ## Discovery
70
+
71
+ ```bash
72
+ clickup schema template # List all template actions
73
+ clickup schema template.apply-task # Show apply-task fields
74
+ clickup schema template.apply-list # Show apply-list fields
75
+ clickup schema template.apply-folder # Show apply-folder fields
76
+ ```
@@ -25,7 +25,7 @@ clickup time update <timer-id> --workspace-id <id>
25
25
  [--description <text>] [--duration <ms>] [--start <ts>]
26
26
  [--tag-action <add|remove>] [--tag <name>...] [--billable <bool>]
27
27
 
28
- clickup time delete <timer-id> --workspace-id <id>
28
+ clickup time delete <timer-id> --workspace-id <id> --confirm
29
29
  ```
30
30
 
31
31
  ### Get / History
@@ -77,7 +77,8 @@ clickup time list --workspace-id 9876543 --format md
77
77
 
78
78
  - Duration is always in **milliseconds** (1 hour = 3600000, 1 minute = 60000)
79
79
  - Start timestamps are Unix milliseconds
80
- - `time delete` does **not** require `--confirm` (unlike most delete commands)
80
+ - `time delete` requires `--confirm` in non-interactive mode (like all delete commands)
81
+ - `--billable` accepts only `true` or `false`; anything else errors (exit 2)
81
82
 
82
83
  ## Discovery
83
84