@tickernelz/paperclip-pro-server 2026.928.6 → 2026.928.8
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/dist/build-info.json +1 -1
- package/package.json +21 -21
- package/skills/paperclip/SKILL.md +24 -22
- package/skills/paperclip/references/api-reference.md +43 -43
- package/skills/paperclip/references/artifacts.md +5 -5
- package/skills/paperclip/references/cases.md +8 -8
- package/skills/paperclip/references/company-skills.md +5 -5
- package/skills/paperclip/references/issue-workspaces.md +1 -1
- package/skills/paperclip/references/routines.md +13 -13
- package/skills/paperclip/references/workflows.md +5 -5
- package/skills/paperclip-board/SKILL.md +7 -7
- package/skills/paperclip-create-agent/SKILL.md +1 -1
- package/skills/paperclip-create-agent/references/api-reference.md +5 -5
- package/ui-dist/assets/{Agents.production-C3HZ3WkH.js → Agents.production-Dv5lbQ84.js} +2 -2
- package/ui-dist/assets/{CompanyActivity.production-4aA8pwxB.js → CompanyActivity.production-B8VDT7Cu.js} +1 -1
- package/ui-dist/assets/{CompanyExport-CblRC_yJ.js → CompanyExport-deTxnoOw.js} +1 -1
- package/ui-dist/assets/{CompanySkills.production-AZTd440C.js → CompanySkills.production-LLf0f9rz.js} +1 -1
- package/ui-dist/assets/{Costs.production-QhFTCjhh.js → Costs.production-YdgojmFL.js} +1 -1
- package/ui-dist/assets/{OrgChart.production-BUtNNhCY.js → OrgChart.production-kOqjmN4X.js} +1 -1
- package/ui-dist/assets/{RoutineDetail.production-Bi5ZoMXD.js → RoutineDetail.production-Cm6fcTCY.js} +1 -1
- package/ui-dist/assets/{Routines.production-Ck_OcEg_.js → Routines.production-BnRms1Y9.js} +1 -1
- package/ui-dist/assets/{definition-BsNVlrmu.js → definition-iOzz5QDe.js} +1 -1
- package/ui-dist/assets/{index-b6Jdkq01.js → index-CmdgWV6-.js} +4 -4
- package/ui-dist/index.html +1 -1
- package/ui-dist/sw.js +1 -1
package/dist/build-info.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tickernelz/paperclip-pro-server",
|
|
3
|
-
"version": "2026.928.
|
|
3
|
+
"version": "2026.928.8",
|
|
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.
|
|
49
|
-
"@tickernelz/paperclip-pro-adapter-codex-local": "2026.928.
|
|
50
|
-
"@tickernelz/paperclip-pro-adapter-cursor-cloud": "2026.928.
|
|
51
|
-
"@tickernelz/paperclip-pro-adapter-cursor-local": "2026.928.
|
|
52
|
-
"@tickernelz/paperclip-pro-adapter-gemini-local": "2026.928.
|
|
53
|
-
"@tickernelz/paperclip-pro-adapter-grok-local": "2026.928.
|
|
54
|
-
"@tickernelz/paperclip-pro-adapter-kimi-local": "2026.928.
|
|
55
|
-
"@tickernelz/paperclip-pro-adapter-openclaw-gateway": "2026.928.
|
|
56
|
-
"@tickernelz/paperclip-pro-adapter-omp-local": "2026.928.
|
|
57
|
-
"@tickernelz/paperclip-pro-adapter-opencode-local": "2026.928.
|
|
58
|
-
"@tickernelz/paperclip-pro-adapter-pi-local": "2026.928.
|
|
59
|
-
"@tickernelz/paperclip-pro-adapter-utils": "2026.928.
|
|
60
|
-
"@tickernelz/paperclip-pro-db": "2026.928.
|
|
61
|
-
"@tickernelz/paperclip-pro-hermes-paperclip-adapter": "2026.928.
|
|
62
|
-
"@tickernelz/paperclip-pro-mcp-server": "2026.928.
|
|
63
|
-
"@tickernelz/paperclip-pro-plugin-sdk": "2026.928.
|
|
64
|
-
"@tickernelz/paperclip-pro-shared": "2026.928.
|
|
65
|
-
"@tickernelz/paperclip-pro-teams-catalog": "2026.928.
|
|
66
|
-
"@tickernelz/paperclip-pro-skills-catalog": "2026.928.
|
|
48
|
+
"@tickernelz/paperclip-pro-adapter-claude-local": "2026.928.8",
|
|
49
|
+
"@tickernelz/paperclip-pro-adapter-codex-local": "2026.928.8",
|
|
50
|
+
"@tickernelz/paperclip-pro-adapter-cursor-cloud": "2026.928.8",
|
|
51
|
+
"@tickernelz/paperclip-pro-adapter-cursor-local": "2026.928.8",
|
|
52
|
+
"@tickernelz/paperclip-pro-adapter-gemini-local": "2026.928.8",
|
|
53
|
+
"@tickernelz/paperclip-pro-adapter-grok-local": "2026.928.8",
|
|
54
|
+
"@tickernelz/paperclip-pro-adapter-kimi-local": "2026.928.8",
|
|
55
|
+
"@tickernelz/paperclip-pro-adapter-openclaw-gateway": "2026.928.8",
|
|
56
|
+
"@tickernelz/paperclip-pro-adapter-omp-local": "2026.928.8",
|
|
57
|
+
"@tickernelz/paperclip-pro-adapter-opencode-local": "2026.928.8",
|
|
58
|
+
"@tickernelz/paperclip-pro-adapter-pi-local": "2026.928.8",
|
|
59
|
+
"@tickernelz/paperclip-pro-adapter-utils": "2026.928.8",
|
|
60
|
+
"@tickernelz/paperclip-pro-db": "2026.928.8",
|
|
61
|
+
"@tickernelz/paperclip-pro-hermes-paperclip-adapter": "2026.928.8",
|
|
62
|
+
"@tickernelz/paperclip-pro-mcp-server": "2026.928.8",
|
|
63
|
+
"@tickernelz/paperclip-pro-plugin-sdk": "2026.928.8",
|
|
64
|
+
"@tickernelz/paperclip-pro-shared": "2026.928.8",
|
|
65
|
+
"@tickernelz/paperclip-pro-teams-catalog": "2026.928.8",
|
|
66
|
+
"@tickernelz/paperclip-pro-skills-catalog": "2026.928.8",
|
|
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.
|
|
116
|
+
"@tickernelz/paperclip-pro-paperclip-runner": "2026.928.8",
|
|
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 `
|
|
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.
|
|
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 `
|
|
129
|
-
- `paperclipGetApprovalIssues` with the same `
|
|
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
|
|
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
|
-
- `
|
|
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` (`
|
|
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 `
|
|
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=
|
|
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=
|
|
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=
|
|
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 `
|
|
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 `
|
|
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=
|
|
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=
|
|
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=
|
|
494
|
-
- Assign skills to existing agents with `paperclipSyncAgentSkill` (available when the operator enables `PAPERCLIP_MCP_TOOLSETS=
|
|
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=
|
|
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
|
-
"
|
|
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` (`
|
|
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 `
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
817
|
+
Then `paperclipCreateProjectWorkspace`, extended: available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; otherwise use `paperclipApiRequest`.
|
|
818
818
|
|
|
819
819
|
```json
|
|
820
820
|
{
|
|
821
|
-
"
|
|
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=
|
|
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=
|
|
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=
|
|
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) | `
|
|
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) | `
|
|
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) | `
|
|
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) | `
|
|
1386
|
-
| List config revisions | `paperclipListAgentConfigRevisions` (extended) | `
|
|
1387
|
-
| Roll back config | `paperclipRollbackAgentConfigRevision` (extended) | `
|
|
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) | `
|
|
1397
|
-
| Wake-history diagnostic with `diagnosis`, bounded events, Case-B inference | `paperclipListIssueDiagnosticWakes` (extended) | `
|
|
1398
|
-
| Subtree diagnostic combining visible child, blocker, and wake edges | `paperclipGetIssueDiagnosticSubtree` (extended) | `
|
|
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` | `
|
|
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) | `
|
|
1408
|
-
| Reverse inbox archive, same target and policy rules | `paperclipDeleteIssueInboxArchive` (extended) | `
|
|
1409
|
-
| List issue-thread interactions | `paperclipListIssueInteractions` | `
|
|
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) | `
|
|
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` | `
|
|
1429
|
+
| List files attached to an issue | `paperclipListIssueAttachments` | `issueId` |
|
|
1430
1430
|
| Delete an issue attachment | `paperclipDeleteAttachment` | `attachmentId` |
|
|
1431
|
-
| List recorded work products | `paperclipListIssueWorkProducts` | `
|
|
1432
|
-
| Record an operator-facing work product | `paperclipCreateIssueWorkProduct` | `
|
|
1433
|
-
| Update a recorded work product | `paperclipUpdateWorkProduct` | `
|
|
1434
|
-
| Read the issue monitor/watchdog configuration | `paperclipGetIssueWatchdog` | `
|
|
1435
|
-
| Schedule or clear the issue monitor | `paperclipSetIssueWatchdog` | `
|
|
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` | `
|
|
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
|
|
1455
|
-
| Update project | `paperclipUpdateProject` | `
|
|
1456
|
-
| List project workspaces | `paperclipListProjectWorkspaces` (extended) | `
|
|
1457
|
-
| Create project workspace | `paperclipCreateProjectWorkspace` (extended) | `
|
|
1458
|
-
| Update project workspace | `paperclipUpdateProjectWorkspace` (extended) | `
|
|
1459
|
-
| Delete project workspace | `paperclipDeleteProjectWorkspace` (extended) | `
|
|
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` | `
|
|
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` | `
|
|
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` | `
|
|
1476
|
-
| Add trigger (`schedule`, `webhook`, or `api` kind) | `paperclipCreateRoutineTrigger` | `
|
|
1477
|
-
| Update trigger (e.g. disable, change cron) | `paperclipUpdateRoutineTrigger` | `
|
|
1478
|
-
| Delete trigger | `paperclipDeleteRoutineTrigger` | `
|
|
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` | `
|
|
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` | `
|
|
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 `{ "
|
|
20
|
-
- `paperclipListIssueWorkProducts` with `{ "
|
|
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
|
-
"
|
|
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
|
-
{ "
|
|
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
|
-
"
|
|
61
|
+
"issueId": "<issue-id>",
|
|
62
62
|
"type": "document",
|
|
63
63
|
"provider": "workspace",
|
|
64
64
|
"title": "Regression test plan",
|
|
@@ -10,7 +10,7 @@ If a case tool reports `Cases are disabled`, stop and report that the operator
|
|
|
10
10
|
must enable cases before the skill can use this surface.
|
|
11
11
|
|
|
12
12
|
The case tools are in the `extended` toolset: they are available when the
|
|
13
|
-
operator enables `PAPERCLIP_MCP_TOOLSETS=
|
|
13
|
+
operator enables `PAPERCLIP_MCP_TOOLSETS=full`. When they are not
|
|
14
14
|
loaded, use `paperclipApiRequest` for the same operations. Every tool below
|
|
15
15
|
takes `companyId` only where noted; it defaults to the agent's company.
|
|
16
16
|
|
|
@@ -93,12 +93,12 @@ Useful arguments:
|
|
|
93
93
|
## Documents
|
|
94
94
|
|
|
95
95
|
Use case documents for rich bodies such as drafts, briefs, reports, or plans.
|
|
96
|
-
`paperclipSetCaseDocument` takes the case, the document `
|
|
96
|
+
`paperclipSetCaseDocument` takes the case, the document `documentKey`, and the body:
|
|
97
97
|
|
|
98
98
|
```json
|
|
99
99
|
{
|
|
100
100
|
"caseId": "PAP-C42",
|
|
101
|
-
"
|
|
101
|
+
"documentKey": "body",
|
|
102
102
|
"title": "Launch announcement body",
|
|
103
103
|
"format": "markdown",
|
|
104
104
|
"body": "# Launch announcement\n\nDraft copy...",
|
|
@@ -111,7 +111,7 @@ Updating an existing case document requires `baseRevisionId`:
|
|
|
111
111
|
```json
|
|
112
112
|
{
|
|
113
113
|
"caseId": "PAP-C42",
|
|
114
|
-
"
|
|
114
|
+
"documentKey": "body",
|
|
115
115
|
"baseRevisionId": "latest-revision-uuid",
|
|
116
116
|
"body": "Updated body"
|
|
117
117
|
}
|
|
@@ -136,7 +136,7 @@ Examples:
|
|
|
136
136
|
}
|
|
137
137
|
```
|
|
138
138
|
|
|
139
|
-
Patch fields or status with `
|
|
139
|
+
Patch fields or status with `paperclipUpdateCaseById`:
|
|
140
140
|
|
|
141
141
|
```json
|
|
142
142
|
{
|
|
@@ -158,7 +158,7 @@ Link cases to issues explicitly when needed with `paperclipCreateCaseLink`:
|
|
|
158
158
|
|
|
159
159
|
```json
|
|
160
160
|
{
|
|
161
|
-
"
|
|
161
|
+
"caseId": "PAP-C42",
|
|
162
162
|
"issueId": "issue-uuid",
|
|
163
163
|
"role": "reference"
|
|
164
164
|
}
|
|
@@ -241,7 +241,7 @@ Write the body with `paperclipSetCaseDocument`:
|
|
|
241
241
|
```json
|
|
242
242
|
{
|
|
243
243
|
"caseId": "PAP-C42",
|
|
244
|
-
"
|
|
244
|
+
"documentKey": "body",
|
|
245
245
|
"title": "Introducing Paperclip Cases",
|
|
246
246
|
"format": "markdown",
|
|
247
247
|
"body": "# Introducing Paperclip Cases\n\n..."
|
|
@@ -266,7 +266,7 @@ Create the child image-assets case with `paperclipCreateCase`:
|
|
|
266
266
|
```
|
|
267
267
|
|
|
268
268
|
Attach the generated assets to the child's linked issue, then patch both cases
|
|
269
|
-
as they move through review with `
|
|
269
|
+
as they move through review with `paperclipUpdateCaseById`:
|
|
270
270
|
|
|
271
271
|
```json
|
|
272
272
|
{
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Use this reference when a board user, CEO, or manager asks you to find a skill, install it into the company library, or assign it to an agent.
|
|
4
4
|
|
|
5
|
-
**Toolset:** `paperclipListSkills` is in the default `core` toolset. Every other tool on this page is in the `extended` toolset: it is available when the operator enables `PAPERCLIP_MCP_TOOLSETS=
|
|
5
|
+
**Toolset:** `paperclipListSkills` is in the default `core` toolset. Every other tool on this page is in the `extended` toolset: it is available when the operator enables `PAPERCLIP_MCP_TOOLSETS=full`; otherwise use `paperclipApiRequest`. `companyId` is optional on company-scoped tools and defaults to your company.
|
|
6
6
|
|
|
7
7
|
## What Exists
|
|
8
8
|
|
|
@@ -50,7 +50,7 @@ Company library:
|
|
|
50
50
|
|
|
51
51
|
Agent attach and hire/create composition:
|
|
52
52
|
|
|
53
|
-
- `paperclipListAgentSkills` — `{ "
|
|
53
|
+
- `paperclipListAgentSkills` — `{ "agentId": "<agent-id>" }`
|
|
54
54
|
- `paperclipSyncAgentSkill` — attach or detach company skills on an agent
|
|
55
55
|
- `paperclipCreateAgentHire` — hire with `desiredSkills`
|
|
56
56
|
- `paperclipCreateAgent` — direct create with `desiredSkills`
|
|
@@ -72,7 +72,7 @@ source. Bundled skills are the curated defaults for any company; optional
|
|
|
72
72
|
skills are role- or domain-specific.
|
|
73
73
|
|
|
74
74
|
Browse with `paperclipGetSkillCatalog`, inspect one entry with
|
|
75
|
-
`paperclipGetSkillCatalogByCatalogId`, then install
|
|
75
|
+
`paperclipGetSkillCatalogByCatalogId`, then install with `paperclipInstallCatalogSkill`:
|
|
76
76
|
|
|
77
77
|
```json
|
|
78
78
|
{
|
|
@@ -152,14 +152,14 @@ The server persists canonical company skill keys.
|
|
|
152
152
|
|
|
153
153
|
```json
|
|
154
154
|
{
|
|
155
|
-
"
|
|
155
|
+
"agentId": "<agent-id>",
|
|
156
156
|
"mode": "add",
|
|
157
157
|
"desiredSkills": ["vercel-labs/agent-browser/agent-browser"]
|
|
158
158
|
}
|
|
159
159
|
```
|
|
160
160
|
|
|
161
161
|
If you need the current state first, call `paperclipListAgentSkills` with
|
|
162
|
-
`{ "
|
|
162
|
+
`{ "agentId": "<agent-id>" }`.
|
|
163
163
|
|
|
164
164
|
## Include Skills During Hire Or Create
|
|
165
165
|
|
|
@@ -62,4 +62,4 @@ For QA/browser checks, use the service whose `status` is `running` and whose `he
|
|
|
62
62
|
|
|
63
63
|
## Workspace-Scoped Read
|
|
64
64
|
|
|
65
|
-
When you already hold an execution workspace id — for example from another agent's comment — `paperclipGetExecutionWorkspace` with `{ "
|
|
65
|
+
When you already hold an execution workspace id — for example from another agent's comment — `paperclipGetExecutionWorkspace` with `{ "executionWorkspaceId": "<execution-workspace-id>" }` returns that workspace and its runtime services. Prefer the issue-scoped tools above when you start from an issue: they resolve the workspace id for you.
|