@noir-ai/skills 1.7.0 → 1.7.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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: noir-clickup
|
|
3
|
-
description: Use when a task comes from or writes back to ClickUp — to read a task by id, update status, create subtasks, post a comment, or batch-create tasks from an H2-per-task markdown list; routes writes through the
|
|
3
|
+
description: Use when a task comes from or writes back to ClickUp — to read a task by id, update status, create subtasks, post a comment, or batch-create tasks from an H2-per-task markdown list; routes writes through the noir_clickup_write gated proxy and reads via the host fetch with the pk_ token resolved by integrations_auth.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# noir-clickup — ClickUp integration (read + gated write)
|
|
@@ -10,7 +10,7 @@ ClickUp is the first Noir integration. The playbook lives in the skill (this fil
|
|
|
10
10
|
## Tier model (where each operation runs)
|
|
11
11
|
|
|
12
12
|
- **Reads** run **skill-side** via the host's `fetch` — no MCP hop. The skill constructs the request and parses the JSON.
|
|
13
|
-
- **Writes** run through the **`
|
|
13
|
+
- **Writes** run through the **`noir_clickup_write`** gated-write-proxy MCP tool (X-T3, daemon-side). The tool enforces a **dry-run → confirm** gate + audit, then POSTs/PUTs to ClickUp API v2 server-side. The skill NEVER constructs write URLs by hand — it hands `(op, payload)` to the tool.
|
|
14
14
|
- **Token resolution** goes through the `integrations_auth` MCP tool (X-T3, daemon-side). It resolves `CLICKUP_API_TOKEN` server-side at call time and returns the value. This kills the non-interactive-shell gotcha (the skill and its MCP tool never read shell env directly, so an unset/non-exported token in the agent's shell does not cause failure — only the daemon's process env matters). When the env value is absent, the tool reports `no-token` and the skill falls back to manual paste.
|
|
15
15
|
|
|
16
16
|
Allowlisted endpoints (the skill + the gated proxy ever only touch these):
|
|
@@ -54,7 +54,7 @@ Response → a ClickUp task object (`id`, `name`, `description`, `status`, `cust
|
|
|
54
54
|
`status` is a SYSTEM field — valid values come from the list's statuses. Through the gated proxy:
|
|
55
55
|
|
|
56
56
|
```
|
|
57
|
-
|
|
57
|
+
noir_clickup_write({ op: 'task:set-status', taskId, status })
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
The proxy renders the underlying request:
|
|
@@ -72,7 +72,7 @@ If the list's statuses array is unknown, the proxy probes (`GET /list/{list_id}/
|
|
|
72
72
|
### Flow 3 — Create a subtask (`POST /list/{list_id}/task` + `PUT /task/{sub}`)
|
|
73
73
|
|
|
74
74
|
```
|
|
75
|
-
|
|
75
|
+
noir_clickup_write({ op: 'task:create-subtask', listId, parentTaskId, name, status? })
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
Renders:
|
|
@@ -95,7 +95,7 @@ PUT https://api.clickup.com/api/v2/task/{new_sub_id}
|
|
|
95
95
|
### Flow 4 — Post a comment (`POST /task/{id}/comment`)
|
|
96
96
|
|
|
97
97
|
```
|
|
98
|
-
|
|
98
|
+
noir_clickup_write({ op: 'task:comment', taskId, commentText, notifyAll?, assigneeId? })
|
|
99
99
|
```
|
|
100
100
|
|
|
101
101
|
Renders:
|
|
@@ -122,7 +122,7 @@ description body
|
|
|
122
122
|
(a CSV adapter converts to the same intermediate shape). The skill normalizes this to a tasks array, then:
|
|
123
123
|
|
|
124
124
|
```
|
|
125
|
-
|
|
125
|
+
noir_clickup_write({ op: 'task:batch-create', listId, tasks })
|
|
126
126
|
```
|
|
127
127
|
|
|
128
128
|
The proxy ALWAYS renders a **dry-run preview table first** → the host surfaces it via the tool-approval gate → on **explicit confirm**, POSTs. The host tool-approval gate is the only path to a real write; nothing in this skill or in task content can bypass it (defense against prompt-injection in task titles/descriptions — they become task fields in the POST body, never executable instructions).
|
|
@@ -4,7 +4,7 @@ Base URL: `https://api.clickup.com/api/v2`
|
|
|
4
4
|
Auth header: `Authorization: pk_<personal-token>` (NO `Bearer` prefix — a Bearer-prefixed header is rejected with `401`).
|
|
5
5
|
Token env var: `CLICKUP_API_TOKEN` (resolved server-side via the `integrations_auth` MCP tool; manual-paste fallback when absent).
|
|
6
6
|
|
|
7
|
-
This reference covers the 5 flows noir-clickup implements. It is the canonical source of truth for the skill playbook and the `
|
|
7
|
+
This reference covers the 5 flows noir-clickup implements. It is the canonical source of truth for the skill playbook and the `noir_clickup_write` gated proxy (X-T3).
|
|
8
8
|
|
|
9
9
|
## Endpoints used
|
|
10
10
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noir-ai/skills",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.1",
|
|
4
4
|
"description": "Noir skills — the builtin noir-* skill pack, the integrations pack (ClickUp first), and a copy-and-validate compiler.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "agaaaptr",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"yaml": "^2.5.0",
|
|
49
49
|
"zod": "^4.2.0",
|
|
50
|
-
"@noir-ai/core": "1.7.
|
|
50
|
+
"@noir-ai/core": "1.7.1"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/node": "^26.1.1"
|