@noir-ai/skills 1.7.0 → 1.7.1-beta.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 noir.clickup_write gated proxy and reads via the host fetch with the pk_ token resolved by integrations_auth.
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 **`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.
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
- noir.clickup_write({ op: 'task:set-status', taskId, status })
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
- noir.clickup_write({ op: 'task:create-subtask', listId, parentTaskId, name, status? })
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
- noir.clickup_write({ op: 'task:comment', taskId, commentText, notifyAll?, assigneeId? })
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
- noir.clickup_write({ op: 'task:batch-create', listId, tasks })
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 `noir.clickup_write` gated proxy (X-T3).
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.0",
3
+ "version": "1.7.1-beta.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.0"
50
+ "@noir-ai/core": "1.7.1-beta.1"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/node": "^26.1.1"