@krodak/clickup-cli 1.26.0 → 1.26.1
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/.claude-plugin/plugin.json +1 -1
- package/README.md +6 -6
- package/dist/index.js +45 -8
- package/package.json +1 -1
- package/skills/clickup-cli/SKILL.md +51 -36
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clickup-cli",
|
|
3
3
|
"description": "ClickUp CLI skills for managing tasks, sprints, comments, checklists, custom fields, tags, and time tracking via the cup command",
|
|
4
|
-
"version": "1.26.
|
|
4
|
+
"version": "1.26.1",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Krzysztof Rodak"
|
|
7
7
|
},
|
package/README.md
CHANGED
|
@@ -51,17 +51,17 @@ Install the CLI, add the skill file to your agent, and it works with ClickUp. No
|
|
|
51
51
|
|
|
52
52
|
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.
|
|
53
53
|
|
|
54
|
-
###
|
|
54
|
+
### Terminal mode (TTY)
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
Task listing commands (`cup tasks`, `cup search`, `cup sprint`, etc.) present an interactive picker — navigate with arrow keys or j/k, Space to select tasks, Enter to confirm. Selected tasks show full details and offer to open in the browser. Other prompts (sprint disambiguation, delete confirmations) also use interactive selection.
|
|
57
57
|
|
|
58
|
-

|
|
59
59
|
|
|
60
|
-
###
|
|
60
|
+
### Agent / piped mode
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
When piped (no TTY), the same commands output clean Markdown (or JSON with `--json`). No prompts, no colors — designed for agents and pipelines.
|
|
63
63
|
|
|
64
|
-

|
|
65
65
|
|
|
66
66
|
## Why a CLI and not MCP?
|
|
67
67
|
|
package/dist/index.js
CHANGED
|
@@ -3378,7 +3378,7 @@ var commandMetadata = [
|
|
|
3378
3378
|
},
|
|
3379
3379
|
{
|
|
3380
3380
|
name: "tasks",
|
|
3381
|
-
description: "List tasks assigned to
|
|
3381
|
+
description: "List tasks assigned to you by default. Use --all to search across all assignees.",
|
|
3382
3382
|
flags: [
|
|
3383
3383
|
"--status",
|
|
3384
3384
|
"--list",
|
|
@@ -3397,7 +3397,7 @@ var commandMetadata = [
|
|
|
3397
3397
|
"--json"
|
|
3398
3398
|
],
|
|
3399
3399
|
quickReference: [
|
|
3400
|
-
{ section: "read", usage: "tasks", description: "
|
|
3400
|
+
{ section: "read", usage: "tasks", description: "My tasks (--all for all assignees)" }
|
|
3401
3401
|
]
|
|
3402
3402
|
},
|
|
3403
3403
|
{
|
|
@@ -3599,7 +3599,7 @@ var commandMetadata = [
|
|
|
3599
3599
|
},
|
|
3600
3600
|
{
|
|
3601
3601
|
name: "search",
|
|
3602
|
-
description: "Search
|
|
3602
|
+
description: "Search tasks assigned to you by default. Use --all to search across all assignees.",
|
|
3603
3603
|
flags: [
|
|
3604
3604
|
"--status",
|
|
3605
3605
|
"--list",
|
|
@@ -3616,7 +3616,11 @@ var commandMetadata = [
|
|
|
3616
3616
|
"--json"
|
|
3617
3617
|
],
|
|
3618
3618
|
quickReference: [
|
|
3619
|
-
{
|
|
3619
|
+
{
|
|
3620
|
+
section: "read",
|
|
3621
|
+
usage: "search <query>",
|
|
3622
|
+
description: "Search your tasks by name (--all for all assignees)"
|
|
3623
|
+
}
|
|
3620
3624
|
]
|
|
3621
3625
|
},
|
|
3622
3626
|
{
|
|
@@ -5438,6 +5442,29 @@ async function checkAuth(config) {
|
|
|
5438
5442
|
}
|
|
5439
5443
|
|
|
5440
5444
|
// src/commands/search.ts
|
|
5445
|
+
async function resolveSpaceNameToId(config, value) {
|
|
5446
|
+
if (/^\d+$/.test(value)) {
|
|
5447
|
+
return value;
|
|
5448
|
+
}
|
|
5449
|
+
const client = new ClickUpClient(config);
|
|
5450
|
+
const spaces = await client.getSpaces(config.teamId);
|
|
5451
|
+
const lower = value.toLowerCase();
|
|
5452
|
+
const matches = spaces.filter((s) => s.name.toLowerCase().includes(lower));
|
|
5453
|
+
if (matches.length === 1) {
|
|
5454
|
+
process.stderr.write(`Space matched: "${value}" -> "${matches[0].name}" (${matches[0].id})
|
|
5455
|
+
`);
|
|
5456
|
+
return matches[0].id;
|
|
5457
|
+
}
|
|
5458
|
+
if (matches.length > 1) {
|
|
5459
|
+
const list = matches.map((s) => ` - "${s.name}" (${s.id})`).join("\n");
|
|
5460
|
+
throw new Error(`Multiple spaces match "${value}":
|
|
5461
|
+
${list}
|
|
5462
|
+
Specify the space ID directly.`);
|
|
5463
|
+
}
|
|
5464
|
+
const available = spaces.map((s) => ` - "${s.name}" (${s.id})`).join("\n");
|
|
5465
|
+
throw new Error(`No space matching "${value}" found. Available spaces:
|
|
5466
|
+
${available}`);
|
|
5467
|
+
}
|
|
5441
5468
|
async function searchTasks(config, query, opts = {}) {
|
|
5442
5469
|
const trimmed = query.trim();
|
|
5443
5470
|
if (!trimmed) {
|
|
@@ -6972,7 +6999,7 @@ function buildProgram(programName = basename(process.argv[1] ?? "cup")) {
|
|
|
6972
6999
|
}
|
|
6973
7000
|
})
|
|
6974
7001
|
);
|
|
6975
|
-
program.command("tasks").description("List tasks assigned to
|
|
7002
|
+
program.command("tasks").description("List tasks assigned to you by default. Use --all to search across all assignees.").option("--status <status>", 'Filter by status (e.g. "in progress")').option("--list <listId>", "Filter by list ID").option("--space <spaceId|name>", "Filter by space ID or name (partial match)").option("--name <partial>", "Filter by name (case-insensitive contains)").option(
|
|
6976
7003
|
"--type <type>",
|
|
6977
7004
|
'Filter by task type (e.g. "task", "initiative", or custom type name/ID)'
|
|
6978
7005
|
).option("--all", "Include all tasks, not just mine").option("--include-closed", "Include done/closed tasks").option("--assignee <userId>", 'Filter by assignee (user ID or "me")').option("--tag <tag>", "Filter by tag name").option("--due-before <date>", "Tasks due before date (YYYY-MM-DD)").option("--due-after <date>", "Tasks due after date (YYYY-MM-DD)").option("--created-after <date>", "Tasks created after date (YYYY-MM-DD)").option("--created-before <date>", "Tasks created before date (YYYY-MM-DD)").option("--field <nameAndValue...>", 'Filter by custom field: --field "Name" value').option("--json", "Force JSON output even in terminal").action(
|
|
@@ -6988,6 +7015,10 @@ function buildProgram(programName = basename(process.argv[1] ?? "cup")) {
|
|
|
6988
7015
|
assigneeIds = [Number(opts.assignee)];
|
|
6989
7016
|
}
|
|
6990
7017
|
}
|
|
7018
|
+
let resolvedSpaceId;
|
|
7019
|
+
if (opts.space) {
|
|
7020
|
+
resolvedSpaceId = await resolveSpaceNameToId(config, opts.space);
|
|
7021
|
+
}
|
|
6991
7022
|
const parseDateFilter = (d) => {
|
|
6992
7023
|
const parts = d.split("-");
|
|
6993
7024
|
return new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2])).getTime();
|
|
@@ -7022,7 +7053,7 @@ function buildProgram(programName = basename(process.argv[1] ?? "cup")) {
|
|
|
7022
7053
|
typeFilter: opts.type,
|
|
7023
7054
|
statuses: opts.status ? [opts.status] : void 0,
|
|
7024
7055
|
listIds: opts.list ? [opts.list] : void 0,
|
|
7025
|
-
spaceIds:
|
|
7056
|
+
spaceIds: resolvedSpaceId ? [resolvedSpaceId] : void 0,
|
|
7026
7057
|
name: opts.name,
|
|
7027
7058
|
all: opts.all,
|
|
7028
7059
|
assignees: assigneeIds,
|
|
@@ -7334,7 +7365,9 @@ function buildProgram(programName = basename(process.argv[1] ?? "cup")) {
|
|
|
7334
7365
|
await openTask(config, query, opts);
|
|
7335
7366
|
})
|
|
7336
7367
|
);
|
|
7337
|
-
program.command("search <query>").description(
|
|
7368
|
+
program.command("search <query>").description(
|
|
7369
|
+
"Search tasks assigned to you by default. Use --all to search across all assignees."
|
|
7370
|
+
).option("--status <status>", "Filter by status").option("--list <listId>", "Filter by list ID").option("--space <spaceId|name>", "Filter by space ID or name (partial match)").option("--all", "Search all tasks, not just mine").option("--include-closed", "Include done/closed tasks in search").option("--assignee <userId>", 'Filter by assignee (user ID or "me")').option("--tag <tag>", "Filter by tag name").option("--due-before <date>", "Tasks due before date (YYYY-MM-DD)").option("--due-after <date>", "Tasks due after date (YYYY-MM-DD)").option("--created-after <date>", "Tasks created after date (YYYY-MM-DD)").option("--created-before <date>", "Tasks created before date (YYYY-MM-DD)").option("--field <nameAndValue...>", 'Filter by custom field: --field "Name" value').option("--json", "Force JSON output even in terminal").action(
|
|
7338
7371
|
wrapAction(
|
|
7339
7372
|
async (query, opts) => {
|
|
7340
7373
|
const config = loadConfig(getProfileName());
|
|
@@ -7348,6 +7381,10 @@ function buildProgram(programName = basename(process.argv[1] ?? "cup")) {
|
|
|
7348
7381
|
assigneeIds = [Number(opts.assignee)];
|
|
7349
7382
|
}
|
|
7350
7383
|
}
|
|
7384
|
+
let resolvedSpaceId;
|
|
7385
|
+
if (opts.space) {
|
|
7386
|
+
resolvedSpaceId = await resolveSpaceNameToId(config, opts.space);
|
|
7387
|
+
}
|
|
7351
7388
|
const parseDateFilter = (d) => {
|
|
7352
7389
|
const parts = d.split("-");
|
|
7353
7390
|
return new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2])).getTime();
|
|
@@ -7383,7 +7420,7 @@ function buildProgram(programName = basename(process.argv[1] ?? "cup")) {
|
|
|
7383
7420
|
all: opts.all,
|
|
7384
7421
|
includeClosed: opts.includeClosed,
|
|
7385
7422
|
listIds: opts.list ? [opts.list] : void 0,
|
|
7386
|
-
spaceIds:
|
|
7423
|
+
spaceIds: resolvedSpaceId ? [resolvedSpaceId] : void 0,
|
|
7387
7424
|
assignees: assigneeIds,
|
|
7388
7425
|
tags: opts.tag ? [opts.tag] : void 0,
|
|
7389
7426
|
dueDateLt: opts.dueBefore ? parseDateFilter(opts.dueBefore) : void 0,
|
package/package.json
CHANGED
|
@@ -3,11 +3,11 @@ name: clickup
|
|
|
3
3
|
description: '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.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# ClickUp CLI (`cup`) - skill version 1.26.
|
|
6
|
+
# ClickUp CLI (`cup`) - skill version 1.26.1
|
|
7
7
|
|
|
8
8
|
Reference for AI agents using the `cup` CLI tool. Covers task management, sprint tracking, comments, time tracking, custom fields, goals, docs, and project workflows.
|
|
9
9
|
|
|
10
|
-
> **Version check:** Run `cup --version`. If your installed version is older than 1.26.
|
|
10
|
+
> **Version check:** Run `cup --version`. If your installed version is older than 1.26.1, update with `npm install -g @krodak/clickup-cli` and refresh this skill with `cup skill`.
|
|
11
11
|
|
|
12
12
|
## Install & Configure
|
|
13
13
|
|
|
@@ -107,40 +107,40 @@ All commands support `--help` for full flag details. All commands support `--jso
|
|
|
107
107
|
|
|
108
108
|
### Read
|
|
109
109
|
|
|
110
|
-
| Command | What it returns
|
|
111
|
-
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
112
|
-
| `cup tasks [--status s] [--name q] [--type t] [--list id] [--space id] [--all] [--include-closed] [--assignee id\|me] [--tag t] [--due-before d] [--due-after d] [--created-after d] [--created-before d] [--field "Name" val]` |
|
|
113
|
-
| `cup assigned [--status s] [--include-closed]` | All my tasks grouped by status
|
|
114
|
-
| `cup sprint [--status s] [--space nameOrId] [--folder id] [--include-closed]` | Tasks in active sprint (auto-detected)
|
|
115
|
-
| `cup sprints [--space nameOrId]` | List all sprints (marks active with \*)
|
|
116
|
-
| `cup search <query> [--status s] [--list id] [--space id] [--all] [--include-closed] [--assignee id\|me] [--tag t] [--due-before d] [--due-after d] [--created-after d] [--created-before d] [--field "Name" val]` | Search
|
|
117
|
-
| `cup task <id>` | Single task details (custom fields, checklists, attachments, deps, links)
|
|
118
|
-
| `cup subtasks <id> [--status s] [--name q] [--include-closed]` | Subtasks of a task
|
|
119
|
-
| `cup comments <id>` | Comments on a task
|
|
120
|
-
| `cup activity <id>` | Task details + comment history combined
|
|
121
|
-
| `cup inbox [--days n] [--include-closed]` | Tasks updated in last n days (default 30)
|
|
122
|
-
| `cup summary [--hours n]` | Standup: completed, in-progress, overdue
|
|
123
|
-
| `cup overdue [--all] [--include-closed]` | Tasks past due date (most overdue first)
|
|
124
|
-
| `cup spaces [--name partial] [--my] [--archived]` | List/filter workspace spaces
|
|
125
|
-
| `cup lists <spaceId> [--name partial] [--archived]` | Lists in a space (including folder lists)
|
|
126
|
-
| `cup folders <spaceId> [--name partial] [--archived]` | Folders in a space (with their lists)
|
|
127
|
-
| `cup time-in-status <id>` | Show how long a task has been in each status
|
|
128
|
-
| `cup members` | Workspace members (username, ID, email)
|
|
129
|
-
| `cup fields <listId>` | Custom fields on a list (type, required, options)
|
|
130
|
-
| `cup tags <spaceId>` | Tags available in a space
|
|
131
|
-
| `cup goals` | Workspace goals with progress
|
|
132
|
-
| `cup key-results <goalId>` | Key results for a goal
|
|
133
|
-
| `cup docs [query]` | Workspace docs (optionally filter by name)
|
|
134
|
-
| `cup doc <docId> [pageId]` | Doc metadata + page tree, or a specific page
|
|
135
|
-
| `cup doc-pages <docId>` | All pages in a doc with content
|
|
136
|
-
| `cup task-types` | Custom task types (for `--custom-item-id`)
|
|
137
|
-
| `cup templates` | Task templates (for `--template`)
|
|
138
|
-
| `cup list-templates` | List templates (for `list-from-template`)
|
|
139
|
-
| `cup folder-templates` | Folder templates
|
|
140
|
-
| `cup views <listId>` | List views on a list
|
|
141
|
-
| `cup view <viewId>` | Get view details
|
|
142
|
-
| `cup open <query>` | Open task in browser by ID or name
|
|
143
|
-
| `cup auth` | Check authentication status
|
|
110
|
+
| Command | What it returns |
|
|
111
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
|
112
|
+
| `cup tasks [--status s] [--name q] [--type t] [--list id] [--space id] [--all] [--include-closed] [--assignee id\|me] [--tag t] [--due-before d] [--due-after d] [--created-after d] [--created-before d] [--field "Name" val]` | Tasks assigned to you (filter by status, name, type, list, space, assignee, tag, dates, custom fields). `--all` for all assignees |
|
|
113
|
+
| `cup assigned [--status s] [--include-closed]` | All my tasks grouped by status |
|
|
114
|
+
| `cup sprint [--status s] [--space nameOrId] [--folder id] [--include-closed]` | Tasks in active sprint (auto-detected) |
|
|
115
|
+
| `cup sprints [--space nameOrId]` | List all sprints (marks active with \*) |
|
|
116
|
+
| `cup search <query> [--status s] [--list id] [--space id] [--all] [--include-closed] [--assignee id\|me] [--tag t] [--due-before d] [--due-after d] [--created-after d] [--created-before d] [--field "Name" val]` | Search your tasks by name. `--all` for all assignees |
|
|
117
|
+
| `cup task <id>` | Single task details (custom fields, checklists, attachments, deps, links) |
|
|
118
|
+
| `cup subtasks <id> [--status s] [--name q] [--include-closed]` | Subtasks of a task |
|
|
119
|
+
| `cup comments <id>` | Comments on a task |
|
|
120
|
+
| `cup activity <id>` | Task details + comment history combined |
|
|
121
|
+
| `cup inbox [--days n] [--include-closed]` | Tasks updated in last n days (default 30) |
|
|
122
|
+
| `cup summary [--hours n]` | Standup: completed, in-progress, overdue |
|
|
123
|
+
| `cup overdue [--all] [--include-closed]` | Tasks past due date (most overdue first) |
|
|
124
|
+
| `cup spaces [--name partial] [--my] [--archived]` | List/filter workspace spaces |
|
|
125
|
+
| `cup lists <spaceId> [--name partial] [--archived]` | Lists in a space (including folder lists) |
|
|
126
|
+
| `cup folders <spaceId> [--name partial] [--archived]` | Folders in a space (with their lists) |
|
|
127
|
+
| `cup time-in-status <id>` | Show how long a task has been in each status |
|
|
128
|
+
| `cup members` | Workspace members (username, ID, email) |
|
|
129
|
+
| `cup fields <listId>` | Custom fields on a list (type, required, options) |
|
|
130
|
+
| `cup tags <spaceId>` | Tags available in a space |
|
|
131
|
+
| `cup goals` | Workspace goals with progress |
|
|
132
|
+
| `cup key-results <goalId>` | Key results for a goal |
|
|
133
|
+
| `cup docs [query]` | Workspace docs (optionally filter by name) |
|
|
134
|
+
| `cup doc <docId> [pageId]` | Doc metadata + page tree, or a specific page |
|
|
135
|
+
| `cup doc-pages <docId>` | All pages in a doc with content |
|
|
136
|
+
| `cup task-types` | Custom task types (for `--custom-item-id`) |
|
|
137
|
+
| `cup templates` | Task templates (for `--template`) |
|
|
138
|
+
| `cup list-templates` | List templates (for `list-from-template`) |
|
|
139
|
+
| `cup folder-templates` | Folder templates |
|
|
140
|
+
| `cup views <listId>` | List views on a list |
|
|
141
|
+
| `cup view <viewId>` | Get view details |
|
|
142
|
+
| `cup open <query>` | Open task in browser by ID or name |
|
|
143
|
+
| `cup auth` | Check authentication status |
|
|
144
144
|
|
|
145
145
|
### Write
|
|
146
146
|
|
|
@@ -253,6 +253,21 @@ All commands support `--help` for full flag details. All commands support `--jso
|
|
|
253
253
|
| `cup delete` | DESTRUCTIVE. Requires `--confirm` in non-interactive mode. Cannot be undone |
|
|
254
254
|
| Errors | stderr with exit code 1. Strict parsing - excess/unknown arguments rejected |
|
|
255
255
|
|
|
256
|
+
> **Note:** `cup search`, `cup tasks`, `cup overdue`, and `cup assigned` default to tasks assigned to the current user. Use `--all` to include tasks assigned to others. This matters when searching for parent initiatives or team-wide items.
|
|
257
|
+
|
|
258
|
+
## Interactive Mode (TTY)
|
|
259
|
+
|
|
260
|
+
When running in a terminal (not piped), task-listing commands (`cup tasks`, `cup search`, `cup sprint`, `cup overdue`, `cup assigned`, `cup inbox`, `cup summary`) present an interactive task picker:
|
|
261
|
+
|
|
262
|
+
- **↑/↓** or **j/k** to navigate the list
|
|
263
|
+
- **Space** to toggle task selection
|
|
264
|
+
- **Enter** to confirm and view details of selected tasks
|
|
265
|
+
- After viewing details, prompted to open tasks in browser
|
|
266
|
+
|
|
267
|
+
Other interactive prompts: sprint selection (when multiple match), workspace selection (`cup init`), agent selection (`cup skill`), destructive action confirmations (`cup delete`, `cup archive`, `cup view-delete`).
|
|
268
|
+
|
|
269
|
+
When piped or called with `--json`, all commands output non-interactive markdown or JSON. Agents should always use `--json` for structured data or pipe for markdown.
|
|
270
|
+
|
|
256
271
|
## Agent Workflow Examples
|
|
257
272
|
|
|
258
273
|
### Investigate a task
|