@tickernelz/paperclip-pro-server 2026.928.5 → 2026.928.7

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.
Files changed (31) hide show
  1. package/dist/build-info.json +1 -1
  2. package/dist/routes/openapi.d.ts.map +1 -1
  3. package/dist/routes/openapi.js +133 -53
  4. package/dist/routes/openapi.js.map +1 -1
  5. package/dist/routes/paperclip-mcp.d.ts.map +1 -1
  6. package/dist/routes/paperclip-mcp.js +15 -0
  7. package/dist/routes/paperclip-mcp.js.map +1 -1
  8. package/package.json +21 -21
  9. package/skills/paperclip/SKILL.md +24 -22
  10. package/skills/paperclip/references/api-reference.md +43 -43
  11. package/skills/paperclip/references/artifacts.md +5 -5
  12. package/skills/paperclip/references/cases.md +8 -8
  13. package/skills/paperclip/references/company-skills.md +5 -5
  14. package/skills/paperclip/references/issue-workspaces.md +1 -1
  15. package/skills/paperclip/references/routines.md +13 -13
  16. package/skills/paperclip/references/workflows.md +5 -5
  17. package/skills/paperclip-board/SKILL.md +7 -7
  18. package/skills/paperclip-create-agent/SKILL.md +1 -1
  19. package/skills/paperclip-create-agent/references/api-reference.md +5 -5
  20. package/ui-dist/assets/{Agents.production-Ou10IBgG.js → Agents.production-g6e23L0t.js} +2 -2
  21. package/ui-dist/assets/{CompanyActivity.production-dbz2o26S.js → CompanyActivity.production-BfzT8G-l.js} +1 -1
  22. package/ui-dist/assets/{CompanyExport-VHEmaNC_.js → CompanyExport-B3AiIOt7.js} +1 -1
  23. package/ui-dist/assets/{CompanySkills.production-DuSUb8DQ.js → CompanySkills.production-DBgSF_kS.js} +1 -1
  24. package/ui-dist/assets/{Costs.production-BRz8Rn3s.js → Costs.production-DosW-ZWC.js} +1 -1
  25. package/ui-dist/assets/{OrgChart.production-Dgq5pMMa.js → OrgChart.production-DQjF3xIK.js} +1 -1
  26. package/ui-dist/assets/{RoutineDetail.production-B2lkeY8y.js → RoutineDetail.production-C4V6TNbR.js} +1 -1
  27. package/ui-dist/assets/{Routines.production-CGNSsZDr.js → Routines.production-Cv7CksVi.js} +1 -1
  28. package/ui-dist/assets/{definition-D6jTm4Mv.js → definition-BkqlnH41.js} +1 -1
  29. package/ui-dist/assets/{index-DGStZYMS.js → index-B9phYB96.js} +4 -4
  30. package/ui-dist/index.html +1 -1
  31. package/ui-dist/sw.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"paperclip-mcp.d.ts","sourceRoot":"","sources":["../../src/routes/paperclip-mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,EAAE,EAAE,MAAM,8BAA8B,CAAC;AA0B/D,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,EAAE,8CA8ExC"}
1
+ {"version":3,"file":"paperclip-mcp.d.ts","sourceRoot":"","sources":["../../src/routes/paperclip-mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,EAAE,EAAE,MAAM,8BAA8B,CAAC;AA2B/D,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,EAAE,8CA0FxC"}
@@ -5,6 +5,7 @@ import { agentAuthorityCapabilities } from "@tickernelz/paperclip-pro-shared";
5
5
  import { paperclipToolCatalog, parseToolsets, PaperclipApiClient, } from "@tickernelz/paperclip-pro-mcp-server/catalog";
6
6
  import { sharedToolNotes } from "@tickernelz/paperclip-pro-mcp-server/generated-tools";
7
7
  import { accessService } from "../services/access.js";
8
+ import { connectionIntentService } from "../services/connection-intents.js";
8
9
  import { forbidden, unauthorized } from "../errors.js";
9
10
  const PROTOCOL_VERSION = "2025-06-18";
10
11
  /** The server's own listen address, so a tool call re-enters the REST API over loopback. */
@@ -23,6 +24,7 @@ function loopbackApiUrl(req) {
23
24
  export function paperclipMcpRoutes(db) {
24
25
  const router = Router();
25
26
  const access = accessService(db);
27
+ const connections = connectionIntentService(db);
26
28
  router.get("/mcp/paperclip", (_req, res) => {
27
29
  res.status(405).json({ error: "Method not allowed" });
28
30
  });
@@ -76,8 +78,21 @@ export function paperclipMcpRoutes(db) {
76
78
  const capabilities = agentAuthorityCapabilities(agent?.role);
77
79
  const management = capabilities.some((capability) => capability.startsWith("company:"));
78
80
  const grants = management ? await access.listPrincipalGrants(companyId, "agent", agentId) : [];
81
+ const signedRunId = req.actor.source === "agent_jwt" ? req.actor.runId ?? null : null;
82
+ const responsibleUserId = req.actor.onBehalfOfUserId ?? null;
83
+ const runClaims = () => {
84
+ if (!signedRunId)
85
+ throw forbidden("Connection tools require a heartbeat run credential");
86
+ if (!responsibleUserId)
87
+ throw forbidden("This task needs a responsible user to connect a service");
88
+ return { sub: agentId, company_id: companyId, run_id: signedRunId, responsible_user_id: responsibleUserId };
89
+ };
79
90
  const { definitions, listing } = paperclipToolCatalog(client, toolsets, management, {
80
91
  boardSurface: { capabilities, permissionKeys: new Set(grants.map((row) => row.permissionKey)) },
92
+ runtimeConnections: {
93
+ search: async (input) => connections.search(runClaims(), input.query),
94
+ request: async (input) => connections.request(runClaims(), input.service),
95
+ },
81
96
  });
82
97
  if (method === "tools/list")
83
98
  return send(listing);
@@ -1 +1 @@
1
- {"version":3,"file":"paperclip-mcp.js","sourceRoot":"","sources":["../../src/routes/paperclip-mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paperclip-mcp.js","sourceRoot":"","sources":["../../src/routes/paperclip-mcp.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tickernelz/paperclip-pro-server",
3
- "version": "2026.928.5",
3
+ "version": "2026.928.7",
4
4
  "license": "MIT",
5
5
  "homepage": "https://github.com/tickernelz/paperclip-pro",
6
6
  "bugs": {
@@ -45,25 +45,25 @@
45
45
  "@discordjs/ws": "1.2.3",
46
46
  "@grpc/grpc-js": "1.14.4",
47
47
  "@opentelemetry/api": "^1.9.0",
48
- "@tickernelz/paperclip-pro-adapter-claude-local": "2026.928.5",
49
- "@tickernelz/paperclip-pro-adapter-codex-local": "2026.928.5",
50
- "@tickernelz/paperclip-pro-adapter-cursor-cloud": "2026.928.5",
51
- "@tickernelz/paperclip-pro-adapter-cursor-local": "2026.928.5",
52
- "@tickernelz/paperclip-pro-adapter-gemini-local": "2026.928.5",
53
- "@tickernelz/paperclip-pro-adapter-grok-local": "2026.928.5",
54
- "@tickernelz/paperclip-pro-adapter-kimi-local": "2026.928.5",
55
- "@tickernelz/paperclip-pro-adapter-openclaw-gateway": "2026.928.5",
56
- "@tickernelz/paperclip-pro-adapter-omp-local": "2026.928.5",
57
- "@tickernelz/paperclip-pro-adapter-opencode-local": "2026.928.5",
58
- "@tickernelz/paperclip-pro-adapter-pi-local": "2026.928.5",
59
- "@tickernelz/paperclip-pro-adapter-utils": "2026.928.5",
60
- "@tickernelz/paperclip-pro-db": "2026.928.5",
61
- "@tickernelz/paperclip-pro-hermes-paperclip-adapter": "2026.928.5",
62
- "@tickernelz/paperclip-pro-mcp-server": "2026.928.5",
63
- "@tickernelz/paperclip-pro-plugin-sdk": "2026.928.5",
64
- "@tickernelz/paperclip-pro-shared": "2026.928.5",
65
- "@tickernelz/paperclip-pro-teams-catalog": "2026.928.5",
66
- "@tickernelz/paperclip-pro-skills-catalog": "2026.928.5",
48
+ "@tickernelz/paperclip-pro-adapter-claude-local": "2026.928.7",
49
+ "@tickernelz/paperclip-pro-adapter-codex-local": "2026.928.7",
50
+ "@tickernelz/paperclip-pro-adapter-cursor-cloud": "2026.928.7",
51
+ "@tickernelz/paperclip-pro-adapter-cursor-local": "2026.928.7",
52
+ "@tickernelz/paperclip-pro-adapter-gemini-local": "2026.928.7",
53
+ "@tickernelz/paperclip-pro-adapter-grok-local": "2026.928.7",
54
+ "@tickernelz/paperclip-pro-adapter-kimi-local": "2026.928.7",
55
+ "@tickernelz/paperclip-pro-adapter-openclaw-gateway": "2026.928.7",
56
+ "@tickernelz/paperclip-pro-adapter-omp-local": "2026.928.7",
57
+ "@tickernelz/paperclip-pro-adapter-opencode-local": "2026.928.7",
58
+ "@tickernelz/paperclip-pro-adapter-pi-local": "2026.928.7",
59
+ "@tickernelz/paperclip-pro-adapter-utils": "2026.928.7",
60
+ "@tickernelz/paperclip-pro-db": "2026.928.7",
61
+ "@tickernelz/paperclip-pro-hermes-paperclip-adapter": "2026.928.7",
62
+ "@tickernelz/paperclip-pro-mcp-server": "2026.928.7",
63
+ "@tickernelz/paperclip-pro-plugin-sdk": "2026.928.7",
64
+ "@tickernelz/paperclip-pro-shared": "2026.928.7",
65
+ "@tickernelz/paperclip-pro-teams-catalog": "2026.928.7",
66
+ "@tickernelz/paperclip-pro-skills-catalog": "2026.928.7",
67
67
  "@photon-ai/advanced-imessage": "2.1.0",
68
68
  "@vercel/connect": "0.6.1",
69
69
  "acorn": "8.18.0",
@@ -113,7 +113,7 @@
113
113
  "acpx"
114
114
  ],
115
115
  "devDependencies": {
116
- "@tickernelz/paperclip-pro-paperclip-runner": "2026.928.5",
116
+ "@tickernelz/paperclip-pro-paperclip-runner": "2026.928.7",
117
117
  "@types/express": "^5.0.0",
118
118
  "@types/express-serve-static-core": "^5.1.3",
119
119
  "@types/jsdom": "^30.0.0",
@@ -32,7 +32,7 @@ Manual local CLI mode (outside heartbeat runs): use `paperclip-pro agent local-c
32
32
  The `paperclip*` tools are how you talk to Paperclip. They carry your credential, your company id, and the current run id for you, and they validate arguments before the request leaves.
33
33
 
34
34
  - Hot paths map one-to-one: `paperclipMe`, `paperclipInboxLite`, `paperclipCheckoutIssue`, `paperclipGetHeartbeatContext`, `paperclipListComments`, `paperclipAddComment`, `paperclipUpdateIssue`, `paperclipCreateChildIssue`, `paperclipUpsertIssueDocument`, `paperclipCreateIssueWorkProduct`, `paperclipReleaseIssue`. The table in **Key Endpoints (Hot Routes)** names the tool for each action.
35
- - The default toolset is `core` (about 60 tools). The rest of the agent-callable surface ships in the `extended` toolset, available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`; until then reach those operations with `paperclipApiRequest`.
35
+ - The default toolset is `core` (about 60 tools). The rest of the agent-callable surface ships in the `full` toolset, available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; until then reach those operations with `paperclipApiRequest`.
36
36
  - `paperclipApiRequest` is the escape hatch for anything without a dedicated tool. Arguments: `method`, `path` relative to `/api`, and `jsonBody` as a JSON string.
37
37
  - Tools marked destructive (deletes, terminations, workspace stops) do what they say and are not undone by a follow-up comment. Read before you write.
38
38
 
@@ -119,14 +119,14 @@ they mention a chat provider.
119
119
  Follow these steps every time you wake up unless the server-verified external
120
120
  chat shortcut above applies:
121
121
 
122
- **Scoped-wake fast path.** If the user message includes a **"Paperclip Resume Delta"** or **"Paperclip Wake Payload"** section that names a specific issue, **skip Steps 1–4 entirely**. Go straight to **Step 5 (Checkout)** for that issue, then continue with Steps 6–9. The scoped wake already tells you which issue to work on — do NOT call `paperclipMe`, do NOT fetch your inbox, do NOT pick work. Just checkout, read the wake context, do the work, and update.
122
+ **Scoped-wake fast path.** If the user message includes a **"Paperclip Resume Delta"** or **"Paperclip Wake Payload"** section that names a specific issue, **skip Steps 1–4 entirely**. Go straight to **Step 5 (Checkout)** for that issue, then continue with Steps 6–9. The scoped wake already tells you which issue to work on — do NOT call `paperclipMe`, do NOT fetch your inbox, do NOT pick work. When the payload says `checkout: already claimed by the harness for this run`, the issue is already yours: skip Step 5 and do not call `paperclipCheckoutIssue`. Otherwise checkout, then read the wake context, do the work, and update.
123
123
 
124
124
  **Step 1 — Identity.** If not already in context, call `paperclipMe` to get your id, companyId, role, chainOfCommand, and budget.
125
125
 
126
126
  **Step 2 — Approval follow-up (when triggered).** If `PAPERCLIP_APPROVAL_ID` is set (or wake reason indicates approval resolution), review the approval first:
127
127
 
128
- - `paperclipGetApproval` with `id` set to the approval id
129
- - `paperclipGetApprovalIssues` with the same `id`
128
+ - `paperclipGetApproval` with `approvalId` set to the approval id
129
+ - `paperclipGetApprovalIssues` with the same `approvalId`
130
130
  - For each linked issue:
131
131
  - close it with `paperclipUpdateIssue` (`status: "done"`) if the approval fully resolves requested work, or
132
132
  - add a markdown comment with `paperclipAddComment` explaining why it remains open and what happens next.
@@ -145,9 +145,9 @@ Overrides and special cases:
145
145
  - **Blocked-task dedup:** before touching a `blocked` task, check the thread. If your most recent comment was a blocked-status update and no one has replied since, skip entirely — do not checkout, do not re-comment. Only re-engage on new context (comment, status change, event wake).
146
146
  - Nothing assigned and no valid mention handoff → exit the heartbeat.
147
147
 
148
- **Step 5 — Checkout.** You MUST checkout before doing any work. Call `paperclipCheckoutIssue`:
148
+ **Step 5 — Checkout.** You MUST checkout before doing any work, unless the wake payload says `checkout: already claimed by the harness for this run`. Call `paperclipCheckoutIssue`:
149
149
 
150
- - `id`: the issue id
150
+ - `issueId`: the issue id or identifier
151
151
  - `agentId`: your agent id
152
152
  - `expectedStatuses`: `["todo", "backlog", "blocked", "in_review"]`
153
153
 
@@ -159,7 +159,7 @@ If the run prompt includes a Paperclip wake payload, inspect that section before
159
159
 
160
160
  Use comments incrementally:
161
161
 
162
- - if `PAPERCLIP_WAKE_COMMENT_ID` is set, fetch that exact comment first with `paperclipGetComment` (`id`, `commentId`)
162
+ - if `PAPERCLIP_WAKE_COMMENT_ID` is set, fetch that exact comment first with `paperclipGetComment` (`issueId`, `commentId`)
163
163
  - if you already know the thread and only need updates, call `paperclipListComments` with `after` set to the last-seen comment id and `order: "asc"`
164
164
  - call `paperclipListComments` without a cursor only when cold-starting or when incremental isn't enough
165
165
 
@@ -174,6 +174,8 @@ If `currentParticipant` matches you, submit your decision with `paperclipUpdateI
174
174
 
175
175
  If `currentParticipant` does not match you, do not try to advance the stage — Paperclip will reject other actors with `422`.
176
176
 
177
+ To put your own issue through a review or approval stage, send the policy in the `advanced` object of `paperclipUpdateIssue`, never as a top-level argument: `advanced: { "executionPolicy": { "stages": [{ "type": "review", "participants": [{ "type": "agent", "agentId": "<reviewer-agent-id>" }] }] } }`. Stage `type` is `review` or `approval`; a participant is either `{ "type": "agent", "agentId" }` or `{ "type": "user", "userId" }`.
178
+
177
179
  **Step 7 — Do the work.** Use your tools and capabilities. Execution contract:
178
180
 
179
181
  - If the issue is actionable, start concrete work in the same heartbeat. Do not stop at a plan unless the issue specifically asks for planning.
@@ -213,7 +215,7 @@ Before ending any heartbeat, apply this final-disposition checklist:
213
215
 
214
216
  When writing issue descriptions or comments, follow the ticket-linking rule in **Comment Style** below.
215
217
 
216
- Record the disposition and the explanation in one call: `paperclipUpdateIssue` with `id` set to the issue, `status: "done"`, and `comment: "What was done and why."`
218
+ Record the disposition and the explanation in one call: `paperclipUpdateIssue` with `issueId` set to the issue, `status: "done"`, and `comment: "What was done and why."`
217
219
 
218
220
  Tool arguments take real multiline strings, so paste markdown comments exactly as you want them stored — paragraph breaks and bullet lists survive as written, and there is no JSON-encoding step to get wrong.
219
221
 
@@ -235,7 +237,7 @@ A "watcher" or "monitor" is not something that lives inside a run. A run/heartbe
235
237
 
236
238
  Because of that, follow these rules:
237
239
 
238
- - **Only claim a watcher/monitor exists after you have actually scheduled one.** Describing a watcher in a comment does not create it. Schedule it by setting `advanced.executionPolicy.monitor.nextCheckAt` (with `kind`/`serviceName`/`externalRef`/`timeoutAt`/`maxAttempts`) through `paperclipUpdateIssue`; `executionPolicy` is not a top-level tool argument, it travels in the `advanced` object. Read that tool result to confirm `monitorNextCheckAt` is non-null, `assigneeAgentId` is set, `assigneeUserId` is null, and `status` is `in_progress` or `in_review` — do not issue a confirming read. The stored timestamp only fires under those conditions. Run a check on demand with `paperclipCheckNowIssueMonitor`, available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`; otherwise use `paperclipApiRequest` with `method: "POST"`, `path: "/issues/<issueId>/monitor/check-now"`.
240
+ - **Only claim a watcher/monitor exists after you have actually scheduled one.** Describing a watcher in a comment does not create it. Schedule it by setting `advanced.executionPolicy.monitor.nextCheckAt` (with `kind`/`serviceName`/`externalRef`/`timeoutAt`/`maxAttempts`) through `paperclipUpdateIssue`; `executionPolicy` is not a top-level tool argument, it travels in the `advanced` object. Read that tool result to confirm `monitorNextCheckAt` is non-null, `assigneeAgentId` is set, `assigneeUserId` is null, and `status` is `in_progress` or `in_review` — do not issue a confirming read. The stored timestamp only fires under those conditions. Run a check on demand with `paperclipCheckNowIssueMonitor`, available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; otherwise use `paperclipApiRequest` with `method: "POST"`, `path: "/issues/<issueId>/monitor/check-now"`.
239
241
  - **Describe it in checkable terms.** State the monitor's kind, next check time, and attempt/timeout bounds — not vague "a watcher will wake me" background magic. If you cannot name those, you have not scheduled one and must not imply that you have.
240
242
  - **Never imply a live watcher on a task you are marking `done`.** `done` means no follow-up on this issue, which contradicts an ongoing watcher. If real re-checking is still needed, keep the issue `in_progress`/`in_review` with a scheduled monitor instead of closing it.
241
243
  - This is enforced by state, not by narration: the disposition guard rejects an agent move to `in_review` (`invalid_issue_disposition`) unless a real review path exists — interaction, approval, human reviewer, typed participant, or an actually-scheduled monitor with a real `monitorNextCheckAt` — and the recovery classifier flags `in_review_without_action_path` for anything parked with no live wake path. Keep your comments consistent with that real state.
@@ -255,7 +257,7 @@ Run-scoped writes are subtree-scoped: the delegate's run can write to its own is
255
257
 
256
258
  ## Managing A User's Inbox
257
259
 
258
- Agents may archive an issue from a user's Mine inbox with `paperclipInboxArchiveIssue` and reverse it with `paperclipDeleteIssueInboxArchive`. Both are available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`; otherwise use `paperclipApiRequest` with `method: "POST"` or `method: "DELETE"` and `path: "/issues/<issueId>/inbox-archive"`. Omit `userId` for the normal case: Paperclip resolves the responsible user from the agent's run context. An explicit `userId` targets another user and requires either that user's saved opt-in policy (`open` or an allowlist containing the agent) or a matching `inbox:manage` grant. The implicit default-open policy for a user who has never saved the control does not authorize explicit cross-user targeting.
260
+ Agents may archive an issue from a user's Mine inbox with `paperclipInboxArchiveIssue` and reverse it with `paperclipDeleteIssueInboxArchive`. Both are available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; otherwise use `paperclipApiRequest` with `method: "POST"` or `method: "DELETE"` and `path: "/issues/<issueId>/inbox-archive"`. Omit `userId` for the normal case: Paperclip resolves the responsible user from the agent's run context. An explicit `userId` targets another user and requires either that user's saved opt-in policy (`open` or an allowlist containing the agent) or a matching `inbox:manage` grant. The implicit default-open policy for a user who has never saved the control does not authorize explicit cross-user targeting.
259
261
 
260
262
  Archive only when the issue is truly resolved for that user, such as after a pull request is confirmed merged at its current head and the result is verified. Never archive an issue while the user is still expected to review, approve, answer, choose, or otherwise decide something. Archiving is reversible and audited, and later issue activity can resurface the item, but those safeguards do not make premature cleanup acceptable.
261
263
 
@@ -329,7 +331,7 @@ Key shared semantics:
329
331
 
330
332
  ### Standalone Decisions
331
333
 
332
- Create a decision from an issue-scoped agent run with `paperclipCreateDecision`, available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`; otherwise use `paperclipApiRequest` with `method: "POST"`, `path: "/companies/<companyId>/decisions"`, and this `jsonBody`:
334
+ Create a decision from an issue-scoped agent run with `paperclipCreateDecision`, available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; otherwise use `paperclipApiRequest` with `method: "POST"`, `path: "/companies/<companyId>/decisions"`, and this `jsonBody`:
333
335
 
334
336
  ```json
335
337
  {
@@ -358,7 +360,7 @@ Create a decision from an issue-scoped agent run with `paperclipCreateDecision`,
358
360
  - `continuationPolicy` is `none` or `wake_origin_agent`. Use the latter only when resolution or expiry must resume the proposer.
359
361
  - Each origin agent may have at most 50 open decisions by default.
360
362
 
361
- Bundle related cross-issue decisions with `paperclipCreateDecisionBundle` (same `extended` toolset, or `paperclipApiRequest` with `method: "POST"`, `path: "/companies/<companyId>/decision-bundles"`):
363
+ Bundle related cross-issue decisions with `paperclipCreateDecisionBundle` (same `full` toolset, or `paperclipApiRequest` with `method: "POST"`, `path: "/companies/<companyId>/decision-bundles"`):
362
364
 
363
365
  ```json
364
366
  {
@@ -391,7 +393,7 @@ Bundle related cross-issue decisions with `paperclipCreateDecisionBundle` (same
391
393
 
392
394
  Bundles accept 1–50 decisions and are created atomically. The nested decision payload uses the same fields and limits as the single-create endpoint.
393
395
 
394
- Create a `request_checkbox_confirmation` with `paperclipRequestCheckboxConfirmation` (the responder selects any subset, then confirms). The tool sets the interaction kind; pass `id` for the issue plus the fields below:
396
+ Create a `request_checkbox_confirmation` with `paperclipRequestCheckboxConfirmation` (the responder selects any subset, then confirms). The tool sets the interaction kind; pass `issueId` for the issue plus the fields below:
395
397
 
396
398
  ```json
397
399
  {
@@ -468,7 +470,7 @@ There is no dedicated tool for `request_item_verdicts`. Create one with `papercl
468
470
  }
469
471
  ```
470
472
 
471
- The responder submits verdicts with `paperclipCreateIssueInteractionVerdict`, available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`. Partial submissions keep the interaction `pending` and wake the assignee once with `newlyResolvedItemIds`; when every item has a verdict, the interaction becomes `answered`.
473
+ The responder submits verdicts with `paperclipCreateIssueInteractionVerdict`, available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`. Partial submissions keep the interaction `pending` and wake the assignee once with `newlyResolvedItemIds`; when every item has a verdict, the interaction becomes `answered`.
472
474
 
473
475
  ## Niche Workflow Pointers
474
476
 
@@ -484,14 +486,14 @@ Load `references/workflows.md` when the task matches one of these:
484
486
 
485
487
  Load `references/cases.md` when creating, upserting, documenting, attaching to,
486
488
  or linking cases through the agent-facing `paperclip*` case tools, available when
487
- the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`.
489
+ the operator enables `PAPERCLIP_MCP_TOOLSETS=full`.
488
490
 
489
491
  ## Company Skills Workflow
490
492
 
491
493
  Authorized managers can install company skills independently of hiring, then assign or remove those skills on agents.
492
494
 
493
- - Inspect company skills with `paperclipListSkills`; install them with `paperclipCreateSkill`, `paperclipImportSkill`, or `paperclipInstallCatalogSkill`, available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`.
494
- - Assign skills to existing agents with `paperclipSyncAgentSkill` (available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`) and an explicit `add`, `remove`, or `replace` mode. Prefer `add`; `replace` overwrites the complete desired skill set.
495
+ - Inspect company skills with `paperclipListSkills`; install them with `paperclipCreateSkill`, `paperclipImportSkill`, or `paperclipInstallCatalogSkill`, available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`.
496
+ - Assign skills to existing agents with `paperclipSyncAgentSkill` (available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`) and an explicit `add`, `remove`, or `replace` mode. Prefer `add`; `replace` overwrites the complete desired skill set.
495
497
  - When hiring or creating an agent, include optional `desiredSkills` so the same assignment model is applied on day one.
496
498
 
497
499
  If you are asked to install a skill for the company or an agent you MUST read:
@@ -501,7 +503,7 @@ If you are asked to install a skill for the company or an agent you MUST read:
501
503
 
502
504
  Routines are recurring tasks. Each time a routine fires it creates an execution issue assigned to the routine's agent — the agent picks it up in the normal heartbeat flow.
503
505
 
504
- - Create and manage routines with `paperclipCreateRoutine`, `paperclipListRoutines`, `paperclipUpdateRoutine`, and `paperclipRunRoutine` (available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`) — agents can only manage routines assigned to themselves.
506
+ - Create and manage routines with `paperclipCreateRoutine`, `paperclipListRoutines`, `paperclipUpdateRoutine`, and `paperclipRunRoutine` (available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`) — agents can only manage routines assigned to themselves.
505
507
  - Add triggers per routine: `schedule` (cron), `webhook`, or `api` (manual).
506
508
  - Control concurrency and catch-up behaviour with `concurrencyPolicy` and `catchUpPolicy`.
507
509
 
@@ -623,7 +625,7 @@ Recommended flow — write the document with `paperclipUpsertIssueDocument`:
623
625
 
624
626
  ```json
625
627
  {
626
- "id": "{issueId}",
628
+ "issueId": "{issueId}",
627
629
  "key": "plan",
628
630
  "title": "Plan",
629
631
  "format": "markdown",
@@ -632,7 +634,7 @@ Recommended flow — write the document with `paperclipUpsertIssueDocument`:
632
634
  }
633
635
  ```
634
636
 
635
- If `plan` already exists, first call `paperclipGetDocument` (`id`, `key: "plan"`) and read its current body and `latestRevisionId`. Then send the revised body with `baseRevisionId` set to that returned `latestRevisionId`. The read field is `latestRevisionId`; the write argument is `baseRevisionId`. Omitting it on an update returns `409`. If the revision changed concurrently, fetch and reconcile the latest plan before trying again; never blindly overwrite it.
637
+ If `plan` already exists, first call `paperclipGetDocument` (`issueId`, `key: "plan"`) and read its current body and `latestRevisionId`. Then send the revised body with `baseRevisionId` set to that returned `latestRevisionId`. The read field is `latestRevisionId`; the write argument is `baseRevisionId`. Omitting it on an update returns `409`. If the revision changed concurrently, fetch and reconcile the latest plan before trying again; never blindly overwrite it.
636
638
 
637
639
  ## Key Endpoints (Hot Routes)
638
640
 
@@ -646,7 +648,7 @@ If `plan` already exists, first call `paperclipGetDocument` (`id`, `key: "plan"`
646
648
  | Compact heartbeat context | `paperclipGetHeartbeatContext` |
647
649
  | Update task | `paperclipUpdateIssue` (optional `comment` argument) |
648
650
  | Get comments / delta / single | `paperclipListComments` • `paperclipGetComment` |
649
- | Add comment | `paperclipAddComment` |
651
+ | Add comment | `paperclipAddComment` (`deliver: "queue"` or `"steer"`; steering a running turn is board-only, so an agent's steer is queued; read `deliveredAs` in the result) |
650
652
  | Issue-thread interactions | `paperclipListIssueInteractions` • `paperclipAskUserQuestions` • `paperclipRequestConfirmation` • `paperclipRequestCheckboxConfirmation` • `paperclipSuggestTasks` |
651
653
  | Create task / subtask | `paperclipCreateIssue` • `paperclipCreateChildIssue` |
652
654
  | Release task | `paperclipReleaseIssue` |
@@ -664,7 +666,7 @@ If `plan` already exists, first call `paperclipGetDocument` (`id`, `key: "plan"`
664
666
  | Credentials and secrets | none — `paperclipApiRequest` |
665
667
  | Anything else | `paperclipApiRequest` |
666
668
 
667
- The rest of the agent-callable surface (company imports/exports, OpenClaw invites, company skills, routines, cases) ships in the `extended` toolset and is documented in `references/api-reference.md`.
669
+ The rest of the agent-callable surface (company imports/exports, OpenClaw invites, company skills, routines, cases) ships in the `full` toolset and is documented in `references/api-reference.md`.
668
670
 
669
671
  ## Searching Issues
670
672
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Detailed reference for the Paperclip control plane as agents reach it: the `paperclip*` MCP tools. For the core heartbeat procedure and critical rules, see the main `SKILL.md`.
4
4
 
5
- The tool list your client advertises is the contract. Tools marked extended load only when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`; everything else is in the default `core` toolset. Any operation without a dedicated tool goes through `paperclipApiRequest` (`method`, `path` relative to `/api`, `jsonBody` as a JSON string). Operations that require a board actor, manage credentials, or are runner-owned have no dedicated tool on purpose.
5
+ The tool list your client advertises is the contract. Tools marked extended load only when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; everything else is in the default `core` toolset. Any operation without a dedicated tool goes through `paperclipApiRequest` (`method`, `path` relative to `/api`, `jsonBody` as a JSON string). Operations that require a board actor, manage credentials, or are runner-owned have no dedicated tool on purpose.
6
6
 
7
7
  ---
8
8
 
@@ -508,7 +508,7 @@ paperclipUpdateIssue { issueId: "issue-200", comment: "Your Mine inbox has 1 unr
508
508
 
509
509
  Archive only after the issue is genuinely finished from the responsible user's perspective. Do not archive issues awaiting review, approval, confirmation, answers, or another user decision.
510
510
 
511
- `paperclipInboxArchiveIssue` and `paperclipDeleteIssueInboxArchive` are extended: available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`; otherwise use `paperclipApiRequest`.
511
+ `paperclipInboxArchiveIssue` and `paperclipDeleteIssueInboxArchive` are extended: available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; otherwise use `paperclipApiRequest`.
512
512
 
513
513
  ```
514
514
  # The responsible user's id is resolved from the authenticated agent run.
@@ -726,7 +726,7 @@ Access is intentionally constrained:
726
726
 
727
727
  ## Setting Agent Instructions Path
728
728
 
729
- Use `paperclipUpdateAgentInstructionsPath` when setting an adapter instructions markdown path (`AGENTS.md`-style files). It is extended: available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`; otherwise use `paperclipApiRequest`.
729
+ Use `paperclipUpdateAgentInstructionsPath` when setting an adapter instructions markdown path (`AGENTS.md`-style files). It is extended: available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; otherwise use `paperclipApiRequest`.
730
730
 
731
731
  ```json
732
732
  {
@@ -814,11 +814,11 @@ below remain available when local workspace configuration is needed.
814
814
  }
815
815
  ```
816
816
 
817
- Then `paperclipCreateProjectWorkspace`, extended: available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`; otherwise use `paperclipApiRequest`.
817
+ Then `paperclipCreateProjectWorkspace`, extended: available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; otherwise use `paperclipApiRequest`.
818
818
 
819
819
  ```json
820
820
  {
821
- "id": "{projectId}",
821
+ "projectId": "{projectId}",
822
822
  "cwd": "/Users/me/paperclip-mobile",
823
823
  "repoUrl": "https://github.com/acme/paperclip-mobile",
824
824
  "repoRef": "main",
@@ -849,7 +849,7 @@ environment, and managed AI connection. The new agent receives its own
849
849
  instructions; caller secrets, workspace paths, sessions, and instructions are
850
850
  not copied. Existing hiring permissions and company approval policy still apply.
851
851
 
852
- The equivalent native tool is `paperclipCreateAgentHire`, extended: available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`; otherwise use `paperclipApiRequest`.
852
+ The equivalent native tool is `paperclipCreateAgentHire`, extended: available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; otherwise use `paperclipApiRequest`.
853
853
 
854
854
  ```json
855
855
  {
@@ -1237,7 +1237,7 @@ Payload field reference (`RequestItemVerdictsPayload`):
1237
1237
  | `supersedeOnUserComment` | boolean | `true` (set server-side) | A later board/user comment expires the still-pending remainder with `outcome: "superseded_by_comment"`. |
1238
1238
  | `target` | `RequestConfirmationTarget` \| `null` | `null` | Same target schema as confirmations. Stale issue-document targets expire the still-pending remainder with `stale_target`. |
1239
1239
 
1240
- Submit item verdicts with `paperclipCreateIssueInteractionVerdict`, extended: available when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`; otherwise use `paperclipApiRequest`. This is a board action; it requires a board/user role and agents creating the interaction cannot submit verdicts.
1240
+ Submit item verdicts with `paperclipCreateIssueInteractionVerdict`, extended: available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; otherwise use `paperclipApiRequest`. This is a board action; it requires a board/user role and agents creating the interaction cannot submit verdicts.
1241
1241
 
1242
1242
  ```json
1243
1243
  {
@@ -1361,7 +1361,7 @@ The tool result reports the underlying failure.
1361
1361
 
1362
1362
  ## Full Tool Reference
1363
1363
 
1364
- Tools marked extended load only when the operator enables `PAPERCLIP_MCP_TOOLSETS=core,extended`; otherwise use `paperclipApiRequest` for the same job.
1364
+ Tools marked extended load only when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; otherwise use `paperclipApiRequest` for the same job.
1365
1365
 
1366
1366
  ### Agents
1367
1367
 
@@ -1374,17 +1374,17 @@ Tools marked extended load only when the operator enables `PAPERCLIP_MCP_TOOLSET
1374
1374
  | Agent details + chain of command | `paperclipGetAgent` | `agentId`, `companyId` |
1375
1375
  | List all agents in company | `paperclipListAgents` | `companyId` |
1376
1376
  | Create agent directly (no approval) | `paperclipCreateAgent` (extended) | `companyId`, agent fields |
1377
- | Update agent config or budget | `paperclipUpdateAgent` (extended) | `id`, changed fields |
1377
+ | Update agent config or budget | `paperclipUpdateAgent` (extended) | `agentId`, changed fields |
1378
1378
  | Temporarily stop heartbeats | `paperclipApiRequest` | `method: "POST"`, `path: "/agents/:agentId/pause"` |
1379
- | Resume a paused agent | `paperclipResumeAgent` (extended) | `id` |
1379
+ | Resume a paused agent | `paperclipResumeAgent` (extended) | `agentId` |
1380
1380
  | Permanently deactivate agent (irreversible) | `paperclipApiRequest` | `method: "POST"`, `path: "/agents/:agentId/terminate"` |
1381
1381
  | Create long-lived API key (full value shown once) | `paperclipApiRequest` | `method: "POST"`, `path: "/agents/:agentId/keys"` |
1382
- | Manually trigger a heartbeat | `paperclipInvokeAgentHeartbeat` (extended) | `id` |
1382
+ | Manually trigger a heartbeat | `paperclipInvokeAgentHeartbeat` (extended) | `agentId` |
1383
1383
  | Org chart tree | `paperclipGetOrg` (extended) | `companyId` |
1384
1384
  | List selectable models for an adapter type | `paperclipListAdapterModels` (extended) | `companyId`, `type` |
1385
- | Set/clear instructions path (`AGENTS.md`) | `paperclipUpdateAgentInstructionsPath` (extended) | `id`, `path`, `adapterConfigKey` |
1386
- | List config revisions | `paperclipListAgentConfigRevisions` (extended) | `id` |
1387
- | Roll back config | `paperclipRollbackAgentConfigRevision` (extended) | `id`, `revisionId` |
1385
+ | Set/clear instructions path (`AGENTS.md`) | `paperclipUpdateAgentInstructionsPath` (extended) | `agentId`, `path`, `adapterConfigKey` |
1386
+ | List config revisions | `paperclipListAgentConfigRevisions` (extended) | `agentId` |
1387
+ | Roll back config | `paperclipRollbackAgentConfigRevision` (extended) | `agentId`, `revisionId` |
1388
1388
 
1389
1389
  ### Issues (Tasks)
1390
1390
 
@@ -1393,20 +1393,20 @@ Tools marked extended load only when the operator enables `PAPERCLIP_MCP_TOOLSET
1393
1393
  | List issues, sorted by priority | `paperclipListIssues` | `companyId`, `status`, `assigneeAgentId`, `assigneeUserId`, `projectId`, `labelId`, `q` (full-text across title, identifier, description, comments) |
1394
1394
  | Issue details + ancestors | `paperclipGetIssue` | `issueId` |
1395
1395
  | Compact heartbeat context: issue state, ancestor summaries, comment cursor | `paperclipGetHeartbeatContext` | `issueId`, `wakeCommentId` |
1396
- | Blocker diagnostic with `diagnosis`, readiness, bounded anomaly flags | `paperclipListIssueDiagnosticBlockers` (extended) | `id` |
1397
- | Wake-history diagnostic with `diagnosis`, bounded events, Case-B inference | `paperclipListIssueDiagnosticWakes` (extended) | `id` |
1398
- | Subtree diagnostic combining visible child, blocker, and wake edges | `paperclipGetIssueDiagnosticSubtree` (extended) | `id` |
1396
+ | Blocker diagnostic with `diagnosis`, readiness, bounded anomaly flags | `paperclipListIssueDiagnosticBlockers` (extended) | `issueId` |
1397
+ | Wake-history diagnostic with `diagnosis`, bounded events, Case-B inference | `paperclipListIssueDiagnosticWakes` (extended) | `issueId` |
1398
+ | Subtree diagnostic combining visible child, blocker, and wake edges | `paperclipGetIssueDiagnosticSubtree` (extended) | `issueId` |
1399
1399
  | Create issue | `paperclipCreateIssue` | `companyId`, `title`, `parentId`, `assigneeAgentId`, `status`, `priority`, `goalId`, `blockedByIssueIds`, `advanced` |
1400
- | Create a child issue under an existing issue | `paperclipCreateChildIssue` | `id`, `body` |
1400
+ | Create a child issue under an existing issue | `paperclipCreateChildIssue` | `issueId`, child issue fields |
1401
1401
  | Update issue | `paperclipUpdateIssue` | `issueId`, changed fields, optional `comment`, `advanced`; the result is authoritative and includes `changes` + `comment`; `blockedByIssueIds` replaces the blocker set |
1402
1402
  | Atomic checkout (claim + start), idempotent if you already own it | `paperclipCheckoutIssue` | `issueId`, `agentId`, `expectedStatuses` |
1403
1403
  | Release task ownership | `paperclipReleaseIssue` | `issueId` |
1404
1404
  | List comments | `paperclipListComments` | `issueId`, `after`, `order`, `limit` |
1405
1405
  | Get a specific comment by ID | `paperclipGetComment` | `issueId`, `commentId` |
1406
1406
  | Add comment (@-mentions trigger wakeups) | `paperclipAddComment` | `issueId`, `body`, `resume` |
1407
- | Archive issue from responsible user's inbox | `paperclipInboxArchiveIssue` (extended) | `id`, optional `userId` (needs saved target-user opt-in or cross-user grant) |
1408
- | Reverse inbox archive, same target and policy rules | `paperclipDeleteIssueInboxArchive` (extended) | `id`, optional `userId` |
1409
- | List issue-thread interactions | `paperclipListIssueInteractions` | `id` |
1407
+ | Archive issue from responsible user's inbox | `paperclipInboxArchiveIssue` (extended) | `issueId`, optional `userId` (needs saved target-user opt-in or cross-user grant) |
1408
+ | Reverse inbox archive, same target and policy rules | `paperclipDeleteIssueInboxArchive` (extended) | `issueId`, optional `userId` |
1409
+ | List issue-thread interactions | `paperclipListIssueInteractions` | `issueId` |
1410
1410
  | Create a `suggest_tasks` interaction | `paperclipSuggestTasks` | `issueId`, `payload`, `idempotencyKey`, `title`, `summary`, `resolverPolicy`, `addresseeAgentId`, `continuationPolicy` |
1411
1411
  | Create an `ask_user_questions` interaction | `paperclipAskUserQuestions` | same envelope |
1412
1412
  | Create a `request_confirmation` interaction | `paperclipRequestConfirmation` | same envelope |
@@ -1415,7 +1415,7 @@ Tools marked extended load only when the operator enables `PAPERCLIP_MCP_TOOLSET
1415
1415
  | Accept suggested tasks or confirmation | `paperclipApiRequest` | `method: "POST"`, `path: "/issues/:issueId/interactions/:interactionId/accept"`, `jsonBody` with `selectedClientKeys` for `suggest_tasks` or `selectedOptionIds` for `request_checkbox_confirmation` |
1416
1416
  | Reject suggested tasks or confirmation | `paperclipApiRequest` | `method: "POST"`, `path: "/issues/:issueId/interactions/:interactionId/reject"` |
1417
1417
  | Respond to structured questions | `paperclipApiRequest` | `method: "POST"`, `path: "/issues/:issueId/interactions/:interactionId/respond"` |
1418
- | Submit partial item verdicts for `request_item_verdicts` | `paperclipCreateIssueInteractionVerdict` (extended) | `id`, `interactionId`, `verdicts` |
1418
+ | Submit partial item verdicts for `request_item_verdicts` | `paperclipCreateIssueInteractionVerdict` (extended) | `issueId`, `interactionId`, `verdicts` |
1419
1419
  | Withdraw any pending interaction (creator agent, current assignee agent, or board user) | `paperclipApiRequest` | `method: "POST"`, `path: "/issues/:issueId/interactions/:interactionId/withdraw"`, optional `jsonBody` `{ "reason": string }` |
1420
1420
  | List issue documents | `paperclipListDocuments` | `issueId` |
1421
1421
  | Get issue document by key | `paperclipGetDocument` | `issueId`, `key` |
@@ -1426,15 +1426,15 @@ Tools marked extended load only when the operator enables `PAPERCLIP_MCP_TOOLSET
1426
1426
  | List approvals linked to issue | `paperclipListIssueApprovals` | `issueId` |
1427
1427
  | Link approval to issue | `paperclipLinkIssueApproval` | `issueId`, `approvalId` |
1428
1428
  | Unlink approval from issue | `paperclipUnlinkIssueApproval` | `issueId`, `approvalId` |
1429
- | List files attached to an issue | `paperclipListIssueAttachments` | `id` |
1429
+ | List files attached to an issue | `paperclipListIssueAttachments` | `issueId` |
1430
1430
  | Delete an issue attachment | `paperclipDeleteAttachment` | `attachmentId` |
1431
- | List recorded work products | `paperclipListIssueWorkProducts` | `id` |
1432
- | Record an operator-facing work product | `paperclipCreateIssueWorkProduct` | `id`, work-product fields |
1433
- | Update a recorded work product | `paperclipUpdateWorkProduct` | `id`, changed fields |
1434
- | Read the issue monitor/watchdog configuration | `paperclipGetIssueWatchdog` | `id` |
1435
- | Schedule or clear the issue monitor | `paperclipSetIssueWatchdog` | `id`, watchdog fields |
1431
+ | List recorded work products | `paperclipListIssueWorkProducts` | `issueId` |
1432
+ | Record an operator-facing work product | `paperclipCreateIssueWorkProduct` | `issueId`, work-product fields |
1433
+ | Update a recorded work product | `paperclipUpdateWorkProduct` | `workProductId`, changed fields |
1434
+ | Read the issue monitor/watchdog configuration | `paperclipGetIssueWatchdog` | `issueId` |
1435
+ | Schedule or clear the issue monitor | `paperclipSetIssueWatchdog` | `issueId`, watchdog fields |
1436
1436
  | Current execution workspace, runtime services and service URLs | `paperclipGetIssueWorkspaceRuntime` | `issueId` |
1437
- | Execution workspace detail | `paperclipGetExecutionWorkspace` | `id` |
1437
+ | Execution workspace detail | `paperclipGetExecutionWorkspace` | `executionWorkspaceId` |
1438
1438
  | Start, stop, or restart workspace runtime services | `paperclipControlIssueWorkspaceServices` | `issueId`, `action` (`start`, `stop`, `restart`), `runtimeServiceId`, `serviceIndex`, `workspaceCommandId` |
1439
1439
  | Wait until a runtime service is running and has a URL | `paperclipWaitForIssueWorkspaceService` | `issueId`, `runtimeServiceId`, `serviceName`, `timeoutSeconds` |
1440
1440
  | List company issue labels | `paperclipListLabels` | `companyId` |
@@ -1451,16 +1451,16 @@ Tools marked extended load only when the operator enables `PAPERCLIP_MCP_TOOLSET
1451
1451
  | Archive company | `paperclipApiRequest` | `method: "POST"`, `path: "/companies/:companyId/archive"` |
1452
1452
  | List projects | `paperclipListProjects` | `companyId` |
1453
1453
  | Project details | `paperclipGetProject` | `projectId`, `companyId` |
1454
- | Create project | `paperclipCreateProject` | `companyId`, `name`, `repositoryIds`/`repositoryUrls` arrays or inline `workspace`, optional `idempotencyKey` |
1455
- | Update project | `paperclipUpdateProject` | `id`, changed fields |
1456
- | List project workspaces | `paperclipListProjectWorkspaces` (extended) | `id` |
1457
- | Create project workspace | `paperclipCreateProjectWorkspace` (extended) | `id`, `cwd`, `repoUrl`, `repoRef`, `isPrimary` |
1458
- | Update project workspace | `paperclipUpdateProjectWorkspace` (extended) | `id`, `workspaceId`, changed fields |
1459
- | Delete project workspace | `paperclipDeleteProjectWorkspace` (extended) | `id`, `workspaceId` |
1454
+ | Create project | `paperclipCreateProject` | `companyId`, `name`, `repositoryIds`/`repositoryUrls` arrays or `advanced.workspace`, optional `idempotencyKey` |
1455
+ | Update project | `paperclipUpdateProject` | `projectId`, changed fields |
1456
+ | List project workspaces | `paperclipListProjectWorkspaces` (extended) | `projectId` |
1457
+ | Create project workspace | `paperclipCreateProjectWorkspace` (extended) | `projectId`, `cwd`, `repoUrl`, `repoRef`, `isPrimary` |
1458
+ | Update project workspace | `paperclipUpdateProjectWorkspace` (extended) | `projectId`, `workspaceId`, changed fields |
1459
+ | Delete project workspace | `paperclipDeleteProjectWorkspace` (extended) | `projectId`, `workspaceId` |
1460
1460
  | List goals | `paperclipListGoals` | `companyId` |
1461
1461
  | Goal details | `paperclipGetGoal` | `goalId` |
1462
1462
  | Create goal | `paperclipCreateGoal` | `companyId`, goal fields |
1463
- | Update goal | `paperclipUpdateGoal` | `id`, changed fields |
1463
+ | Update goal | `paperclipUpdateGoal` | `goalId`, changed fields |
1464
1464
  | Generate OpenClaw invite prompt (CEO/board only) | `paperclipApiRequest` | `method: "POST"`, `path: "/companies/:companyId/openclaw/invite-prompt"` |
1465
1465
 
1466
1466
  ### Routines
@@ -1470,16 +1470,16 @@ Every routine tool is extended.
1470
1470
  | Job | Tool | Key arguments |
1471
1471
  | --- | ---- | ------------- |
1472
1472
  | List all routines in company | `paperclipListRoutines` | `companyId` |
1473
- | Routine details including triggers | `paperclipGetRoutine` | `id` |
1473
+ | Routine details including triggers | `paperclipGetRoutine` | `routineId` |
1474
1474
  | Create routine (agents: own only) | `paperclipCreateRoutine` | `companyId`, `assigneeAgentId` and `projectId` required |
1475
- | Update routine (agents: own only, cannot reassign) | `paperclipUpdateRoutine` | `id`, changed fields |
1476
- | Add trigger (`schedule`, `webhook`, or `api` kind) | `paperclipCreateRoutineTrigger` | `id`, `body` |
1477
- | Update trigger (e.g. disable, change cron) | `paperclipUpdateRoutineTrigger` | `id`, changed fields |
1478
- | Delete trigger | `paperclipDeleteRoutineTrigger` | `id` |
1475
+ | Update routine (agents: own only, cannot reassign) | `paperclipUpdateRoutine` | `routineId`, changed fields |
1476
+ | Add trigger (`schedule`, `webhook`, or `api` kind) | `paperclipCreateRoutineTrigger` | `routineId`, `body` |
1477
+ | Update trigger (e.g. disable, change cron) | `paperclipUpdateRoutineTrigger` | `routineTriggerId`, changed fields |
1478
+ | Delete trigger | `paperclipDeleteRoutineTrigger` | `routineTriggerId` |
1479
1479
  | Rotate webhook signing secret (previous secret immediately invalidated) | `paperclipApiRequest` | `method: "POST"`, `path: "/routine-triggers/:triggerId/rotate-secret"` |
1480
- | Manual run (bypasses schedule; concurrency policy still applies) | `paperclipRunRoutine` | `id` |
1480
+ | Manual run (bypasses schedule; concurrency policy still applies) | `paperclipRunRoutine` | `routineId` |
1481
1481
  | Fire webhook trigger from external system | `paperclipFireRoutineTriggerPublic` | `publicId` |
1482
- | Run history (default 50) | `paperclipListRoutineRuns` | `id` |
1482
+ | Run history (default 50) | `paperclipListRoutineRuns` | `routineId` |
1483
1483
 
1484
1484
  ### Approvals, Costs, Activity, Dashboard
1485
1485
 
@@ -16,8 +16,8 @@ The helper uses `PAPERCLIP_API_URL`, `PAPERCLIP_API_KEY`, `PAPERCLIP_COMPANY_ID`
16
16
 
17
17
  ## Inspect What Is Already On The Issue
18
18
 
19
- - `paperclipListIssueAttachments` with `{ "id": "<issue-id>" }` lists the files attached to the issue, including each `attachmentId`.
20
- - `paperclipListIssueWorkProducts` with `{ "id": "<issue-id>" }` lists the recorded work products. Add `"refreshPullRequests": "true"` when you need pull request state refreshed first.
19
+ - `paperclipListIssueAttachments` with `{ "issueId": "<issue-id>" }` lists the files attached to the issue, including each `attachmentId`.
20
+ - `paperclipListIssueWorkProducts` with `{ "issueId": "<issue-id>" }` lists the recorded work products. Add `"refreshPullRequests": "true"` when you need pull request state refreshed first.
21
21
  - `paperclipDeleteAttachment` with `{ "attachmentId": "<attachment-id>" }` removes an attachment you uploaded by mistake. It is destructive; do not delete attachments you did not create.
22
22
 
23
23
  ## Record The Work Product
@@ -26,7 +26,7 @@ When the uploaded file is the deliverable, record it with `paperclipCreateIssueW
26
26
 
27
27
  ```json
28
28
  {
29
- "id": "<issue-id>",
29
+ "issueId": "<issue-id>",
30
30
  "type": "artifact",
31
31
  "provider": "paperclip",
32
32
  "title": "Walkthrough render",
@@ -42,7 +42,7 @@ Read the returned work product record before you report the deliverable. If the
42
42
  When a recorded work product changes later, for example when its pull request merges, patch it with `paperclipUpdateWorkProduct` using the work product id:
43
43
 
44
44
  ```json
45
- { "id": "<work-product-id>", "status": "done" }
45
+ { "workProductId": "<work-product-id>", "status": "done" }
46
46
  ```
47
47
 
48
48
  ## Workspace-Only File References
@@ -58,7 +58,7 @@ Annotate the work product with `metadata.resourceRef`, again through
58
58
 
59
59
  ```json
60
60
  {
61
- "id": "<issue-id>",
61
+ "issueId": "<issue-id>",
62
62
  "type": "document",
63
63
  "provider": "workspace",
64
64
  "title": "Regression test plan",