@tickernelz/paperclip-pro-adapter-codex-local 2026.925.0

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 (268) hide show
  1. package/LICENSE +22 -0
  2. package/dist/cli/format-event.d.ts +2 -0
  3. package/dist/cli/format-event.d.ts.map +1 -0
  4. package/dist/cli/format-event.js +218 -0
  5. package/dist/cli/format-event.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +2 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/quota-probe.d.ts +3 -0
  11. package/dist/cli/quota-probe.d.ts.map +1 -0
  12. package/dist/cli/quota-probe.js +104 -0
  13. package/dist/cli/quota-probe.js.map +1 -0
  14. package/dist/index.d.ts +21 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +155 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/index.test.d.ts +2 -0
  19. package/dist/index.test.d.ts.map +1 -0
  20. package/dist/index.test.js +58 -0
  21. package/dist/index.test.js.map +1 -0
  22. package/dist/server/acp.d.ts +30 -0
  23. package/dist/server/acp.d.ts.map +1 -0
  24. package/dist/server/acp.js +532 -0
  25. package/dist/server/acp.js.map +1 -0
  26. package/dist/server/acp.test.d.ts +2 -0
  27. package/dist/server/acp.test.d.ts.map +1 -0
  28. package/dist/server/acp.test.js +1087 -0
  29. package/dist/server/acp.test.js.map +1 -0
  30. package/dist/server/adapter-auth-promotion.d.ts +102 -0
  31. package/dist/server/adapter-auth-promotion.d.ts.map +1 -0
  32. package/dist/server/adapter-auth-promotion.js +210 -0
  33. package/dist/server/adapter-auth-promotion.js.map +1 -0
  34. package/dist/server/adapter-auth-promotion.test.d.ts +2 -0
  35. package/dist/server/adapter-auth-promotion.test.d.ts.map +1 -0
  36. package/dist/server/adapter-auth-promotion.test.js +658 -0
  37. package/dist/server/adapter-auth-promotion.test.js.map +1 -0
  38. package/dist/server/auth-check.d.ts +8 -0
  39. package/dist/server/auth-check.d.ts.map +1 -0
  40. package/dist/server/auth-check.js +8 -0
  41. package/dist/server/auth-check.js.map +1 -0
  42. package/dist/server/auth-precedence.d.ts +16 -0
  43. package/dist/server/auth-precedence.d.ts.map +1 -0
  44. package/dist/server/auth-precedence.js +20 -0
  45. package/dist/server/auth-precedence.js.map +1 -0
  46. package/dist/server/auth-precedence.test.d.ts +2 -0
  47. package/dist/server/auth-precedence.test.d.ts.map +1 -0
  48. package/dist/server/auth-precedence.test.js +100 -0
  49. package/dist/server/auth-precedence.test.js.map +1 -0
  50. package/dist/server/codex-args.d.ts +13 -0
  51. package/dist/server/codex-args.d.ts.map +1 -0
  52. package/dist/server/codex-args.js +76 -0
  53. package/dist/server/codex-args.js.map +1 -0
  54. package/dist/server/codex-args.test.d.ts +2 -0
  55. package/dist/server/codex-args.test.d.ts.map +1 -0
  56. package/dist/server/codex-args.test.js +243 -0
  57. package/dist/server/codex-args.test.js.map +1 -0
  58. package/dist/server/codex-auth-cache.d.ts +206 -0
  59. package/dist/server/codex-auth-cache.d.ts.map +1 -0
  60. package/dist/server/codex-auth-cache.js +501 -0
  61. package/dist/server/codex-auth-cache.js.map +1 -0
  62. package/dist/server/codex-auth-cache.test.d.ts +2 -0
  63. package/dist/server/codex-auth-cache.test.d.ts.map +1 -0
  64. package/dist/server/codex-auth-cache.test.js +497 -0
  65. package/dist/server/codex-auth-cache.test.js.map +1 -0
  66. package/dist/server/codex-auth-copyback.d.ts +53 -0
  67. package/dist/server/codex-auth-copyback.d.ts.map +1 -0
  68. package/dist/server/codex-auth-copyback.js +123 -0
  69. package/dist/server/codex-auth-copyback.js.map +1 -0
  70. package/dist/server/codex-auth-copyback.test.d.ts +2 -0
  71. package/dist/server/codex-auth-copyback.test.d.ts.map +1 -0
  72. package/dist/server/codex-auth-copyback.test.js +507 -0
  73. package/dist/server/codex-auth-copyback.test.js.map +1 -0
  74. package/dist/server/codex-auth-merge-decision.cjs +170 -0
  75. package/dist/server/codex-auth-merge-decision.d.ts +22 -0
  76. package/dist/server/codex-auth-merge-decision.d.ts.map +1 -0
  77. package/dist/server/codex-auth-merge-decision.js +58 -0
  78. package/dist/server/codex-auth-merge-decision.js.map +1 -0
  79. package/dist/server/codex-auth-merge-decision.test.d.ts +2 -0
  80. package/dist/server/codex-auth-merge-decision.test.d.ts.map +1 -0
  81. package/dist/server/codex-auth-merge-decision.test.js +230 -0
  82. package/dist/server/codex-auth-merge-decision.test.js.map +1 -0
  83. package/dist/server/codex-auth-merge-extract.sh +73 -0
  84. package/dist/server/codex-auth-merge-scripts.d.ts +21 -0
  85. package/dist/server/codex-auth-merge-scripts.d.ts.map +1 -0
  86. package/dist/server/codex-auth-merge-scripts.js +40 -0
  87. package/dist/server/codex-auth-merge-scripts.js.map +1 -0
  88. package/dist/server/codex-auth-merge.test.d.ts +2 -0
  89. package/dist/server/codex-auth-merge.test.d.ts.map +1 -0
  90. package/dist/server/codex-auth-merge.test.js +714 -0
  91. package/dist/server/codex-auth-merge.test.js.map +1 -0
  92. package/dist/server/codex-auth-seed-write.d.ts +30 -0
  93. package/dist/server/codex-auth-seed-write.d.ts.map +1 -0
  94. package/dist/server/codex-auth-seed-write.js +41 -0
  95. package/dist/server/codex-auth-seed-write.js.map +1 -0
  96. package/dist/server/codex-home.d.ts +162 -0
  97. package/dist/server/codex-home.d.ts.map +1 -0
  98. package/dist/server/codex-home.js +771 -0
  99. package/dist/server/codex-home.js.map +1 -0
  100. package/dist/server/codex-home.test.d.ts +2 -0
  101. package/dist/server/codex-home.test.d.ts.map +1 -0
  102. package/dist/server/codex-home.test.js +1183 -0
  103. package/dist/server/codex-home.test.js.map +1 -0
  104. package/dist/server/config-schema.d.ts +3 -0
  105. package/dist/server/config-schema.d.ts.map +1 -0
  106. package/dist/server/config-schema.js +67 -0
  107. package/dist/server/config-schema.js.map +1 -0
  108. package/dist/server/device-login-export.d.ts +56 -0
  109. package/dist/server/device-login-export.d.ts.map +1 -0
  110. package/dist/server/device-login-export.js +230 -0
  111. package/dist/server/device-login-export.js.map +1 -0
  112. package/dist/server/device-login-export.test.d.ts +2 -0
  113. package/dist/server/device-login-export.test.d.ts.map +1 -0
  114. package/dist/server/device-login-export.test.js +245 -0
  115. package/dist/server/device-login-export.test.js.map +1 -0
  116. package/dist/server/device-login-parse.d.ts +20 -0
  117. package/dist/server/device-login-parse.d.ts.map +1 -0
  118. package/dist/server/device-login-parse.js +155 -0
  119. package/dist/server/device-login-parse.js.map +1 -0
  120. package/dist/server/device-login-parse.test.d.ts +2 -0
  121. package/dist/server/device-login-parse.test.d.ts.map +1 -0
  122. package/dist/server/device-login-parse.test.js +269 -0
  123. package/dist/server/device-login-parse.test.js.map +1 -0
  124. package/dist/server/device-login-runner.d.ts +69 -0
  125. package/dist/server/device-login-runner.d.ts.map +1 -0
  126. package/dist/server/device-login-runner.js +109 -0
  127. package/dist/server/device-login-runner.js.map +1 -0
  128. package/dist/server/device-login-runner.test.d.ts +2 -0
  129. package/dist/server/device-login-runner.test.d.ts.map +1 -0
  130. package/dist/server/device-login-runner.test.js +201 -0
  131. package/dist/server/device-login-runner.test.js.map +1 -0
  132. package/dist/server/engine-availability.test.d.ts +2 -0
  133. package/dist/server/engine-availability.test.d.ts.map +1 -0
  134. package/dist/server/engine-availability.test.js +41 -0
  135. package/dist/server/engine-availability.test.js.map +1 -0
  136. package/dist/server/execute.acp-fallback.test.d.ts +2 -0
  137. package/dist/server/execute.acp-fallback.test.d.ts.map +1 -0
  138. package/dist/server/execute.acp-fallback.test.js +123 -0
  139. package/dist/server/execute.acp-fallback.test.js.map +1 -0
  140. package/dist/server/execute.auth-precedence.test.d.ts +2 -0
  141. package/dist/server/execute.auth-precedence.test.d.ts.map +1 -0
  142. package/dist/server/execute.auth-precedence.test.js +137 -0
  143. package/dist/server/execute.auth-precedence.test.js.map +1 -0
  144. package/dist/server/execute.auth.test.d.ts +2 -0
  145. package/dist/server/execute.auth.test.d.ts.map +1 -0
  146. package/dist/server/execute.auth.test.js +197 -0
  147. package/dist/server/execute.auth.test.js.map +1 -0
  148. package/dist/server/execute.d.ts +40 -0
  149. package/dist/server/execute.d.ts.map +1 -0
  150. package/dist/server/execute.js +1290 -0
  151. package/dist/server/execute.js.map +1 -0
  152. package/dist/server/execute.remote.test.d.ts +2 -0
  153. package/dist/server/execute.remote.test.d.ts.map +1 -0
  154. package/dist/server/execute.remote.test.js +556 -0
  155. package/dist/server/execute.remote.test.js.map +1 -0
  156. package/dist/server/execute.stderr-error.test.d.ts +2 -0
  157. package/dist/server/execute.stderr-error.test.d.ts.map +1 -0
  158. package/dist/server/execute.stderr-error.test.js +142 -0
  159. package/dist/server/execute.stderr-error.test.js.map +1 -0
  160. package/dist/server/execute.test.d.ts +2 -0
  161. package/dist/server/execute.test.d.ts.map +1 -0
  162. package/dist/server/execute.test.js +240 -0
  163. package/dist/server/execute.test.js.map +1 -0
  164. package/dist/server/index.d.ts +18 -0
  165. package/dist/server/index.d.ts.map +1 -0
  166. package/dist/server/index.js +71 -0
  167. package/dist/server/index.js.map +1 -0
  168. package/dist/server/output-inactivity-monitor.d.ts +62 -0
  169. package/dist/server/output-inactivity-monitor.d.ts.map +1 -0
  170. package/dist/server/output-inactivity-monitor.integration.test.d.ts +2 -0
  171. package/dist/server/output-inactivity-monitor.integration.test.d.ts.map +1 -0
  172. package/dist/server/output-inactivity-monitor.integration.test.js +136 -0
  173. package/dist/server/output-inactivity-monitor.integration.test.js.map +1 -0
  174. package/dist/server/output-inactivity-monitor.js +112 -0
  175. package/dist/server/output-inactivity-monitor.js.map +1 -0
  176. package/dist/server/output-inactivity-monitor.test.d.ts +2 -0
  177. package/dist/server/output-inactivity-monitor.test.d.ts.map +1 -0
  178. package/dist/server/output-inactivity-monitor.test.js +284 -0
  179. package/dist/server/output-inactivity-monitor.test.js.map +1 -0
  180. package/dist/server/parse.d.ts +51 -0
  181. package/dist/server/parse.d.ts.map +1 -0
  182. package/dist/server/parse.js +261 -0
  183. package/dist/server/parse.js.map +1 -0
  184. package/dist/server/parse.test.d.ts +2 -0
  185. package/dist/server/parse.test.d.ts.map +1 -0
  186. package/dist/server/parse.test.js +186 -0
  187. package/dist/server/parse.test.js.map +1 -0
  188. package/dist/server/process-activity-monitor.d.ts +21 -0
  189. package/dist/server/process-activity-monitor.d.ts.map +1 -0
  190. package/dist/server/process-activity-monitor.js +103 -0
  191. package/dist/server/process-activity-monitor.js.map +1 -0
  192. package/dist/server/process-activity-monitor.test.d.ts +2 -0
  193. package/dist/server/process-activity-monitor.test.d.ts.map +1 -0
  194. package/dist/server/process-activity-monitor.test.js +82 -0
  195. package/dist/server/process-activity-monitor.test.js.map +1 -0
  196. package/dist/server/quota-spawn-error.test.d.ts +2 -0
  197. package/dist/server/quota-spawn-error.test.d.ts.map +1 -0
  198. package/dist/server/quota-spawn-error.test.js +174 -0
  199. package/dist/server/quota-spawn-error.test.js.map +1 -0
  200. package/dist/server/quota.d.ts +66 -0
  201. package/dist/server/quota.d.ts.map +1 -0
  202. package/dist/server/quota.js +511 -0
  203. package/dist/server/quota.js.map +1 -0
  204. package/dist/server/runtime-config.d.ts +11 -0
  205. package/dist/server/runtime-config.d.ts.map +1 -0
  206. package/dist/server/runtime-config.js +380 -0
  207. package/dist/server/runtime-config.js.map +1 -0
  208. package/dist/server/runtime-config.test.d.ts +2 -0
  209. package/dist/server/runtime-config.test.d.ts.map +1 -0
  210. package/dist/server/runtime-config.test.js +367 -0
  211. package/dist/server/runtime-config.test.js.map +1 -0
  212. package/dist/server/skills.d.ts +8 -0
  213. package/dist/server/skills.d.ts.map +1 -0
  214. package/dist/server/skills.js +26 -0
  215. package/dist/server/skills.js.map +1 -0
  216. package/dist/server/test.d.ts +3 -0
  217. package/dist/server/test.d.ts.map +1 -0
  218. package/dist/server/test.js +458 -0
  219. package/dist/server/test.js.map +1 -0
  220. package/dist/server/test.remote.test.d.ts +2 -0
  221. package/dist/server/test.remote.test.d.ts.map +1 -0
  222. package/dist/server/test.remote.test.js +396 -0
  223. package/dist/server/test.remote.test.js.map +1 -0
  224. package/dist/ui/build-config.d.ts +5 -0
  225. package/dist/ui/build-config.d.ts.map +1 -0
  226. package/dist/ui/build-config.js +229 -0
  227. package/dist/ui/build-config.js.map +1 -0
  228. package/dist/ui/build-config.test.d.ts +2 -0
  229. package/dist/ui/build-config.test.d.ts.map +1 -0
  230. package/dist/ui/build-config.test.js +272 -0
  231. package/dist/ui/build-config.test.js.map +1 -0
  232. package/dist/ui/index.d.ts +4 -0
  233. package/dist/ui/index.d.ts.map +1 -0
  234. package/dist/ui/index.js +8 -0
  235. package/dist/ui/index.js.map +1 -0
  236. package/dist/ui/parse-stdout.d.ts +3 -0
  237. package/dist/ui/parse-stdout.d.ts.map +1 -0
  238. package/dist/ui/parse-stdout.js +265 -0
  239. package/dist/ui/parse-stdout.js.map +1 -0
  240. package/dist/ui/parse-stdout.test.d.ts +2 -0
  241. package/dist/ui/parse-stdout.test.d.ts.map +1 -0
  242. package/dist/ui/parse-stdout.test.js +77 -0
  243. package/dist/ui/parse-stdout.test.js.map +1 -0
  244. package/package.json +61 -0
  245. package/skills/agentmail/SKILL.md +70 -0
  246. package/skills/paperclip/SKILL.md +712 -0
  247. package/skills/paperclip/references/api-reference.md +1675 -0
  248. package/skills/paperclip/references/artifacts.md +158 -0
  249. package/skills/paperclip/references/cases.md +295 -0
  250. package/skills/paperclip/references/company-skills.md +266 -0
  251. package/skills/paperclip/references/issue-workspaces.md +80 -0
  252. package/skills/paperclip/references/routines.md +231 -0
  253. package/skills/paperclip/references/workflows.md +141 -0
  254. package/skills/paperclip/scripts/paperclip-upload-artifact.sh +592 -0
  255. package/skills/paperclip-board/SKILL.md +619 -0
  256. package/skills/paperclip-converting-plans-to-tasks/SKILL.md +60 -0
  257. package/skills/paperclip-create-agent/SKILL.md +179 -0
  258. package/skills/paperclip-create-agent/references/agent-instruction-templates.md +123 -0
  259. package/skills/paperclip-create-agent/references/agents/coder.md +64 -0
  260. package/skills/paperclip-create-agent/references/agents/qa.md +88 -0
  261. package/skills/paperclip-create-agent/references/agents/securityengineer.md +135 -0
  262. package/skills/paperclip-create-agent/references/agents/uxdesigner.md +115 -0
  263. package/skills/paperclip-create-agent/references/api-reference.md +110 -0
  264. package/skills/paperclip-create-agent/references/baseline-role-guide.md +168 -0
  265. package/skills/paperclip-create-agent/references/draft-review-checklist.md +95 -0
  266. package/skills/para-memory-files/SKILL.md +100 -0
  267. package/skills/para-memory-files/references/schemas.md +35 -0
  268. package/skills/slack/SKILL.md +65 -0
@@ -0,0 +1,619 @@
1
+ ---
2
+ name: paperclip-board
3
+ description: >
4
+ Manage a Paperclip company as a board member via chat. Use when the user wants
5
+ onboarding, company or agent management, approvals, task monitoring, cost
6
+ oversight, or work product review in the Paperclip control plane.
7
+ ---
8
+
9
+ # Paperclip Board Skill
10
+
11
+ You are a board-level assistant helping a human manage their AI-agent company through Paperclip. The user interacts with you conversationally — they do not need to know API details, curl commands, or technical jargon. Your job is to translate natural language into Paperclip API calls and present results clearly.
12
+
13
+ ## Authentication & Environment
14
+
15
+ **Environment variables** (set by `paperclip-pro board setup`):
16
+ - `PAPERCLIP_API_URL` — base URL of the Paperclip server (e.g., `http://localhost:3100`)
17
+ - `PAPERCLIP_COMPANY_ID` — the active company ID (may be empty if no company exists yet)
18
+
19
+ **Auth mode:** In `local_trusted` mode (default for local dev), no auth headers are needed — the server auto-grants board access to all local requests. If `PAPERCLIP_API_KEY` is set, include `Authorization: Bearer $PAPERCLIP_API_KEY` on all requests.
20
+
21
+ **Making API calls:** Use `curl -sS` via bash. All endpoints are under `/api`. All request/response bodies are JSON. Always use `Content-Type: application/json` on POST/PATCH/PUT requests.
22
+
23
+ **Critical rules:**
24
+ - Always re-read a document or config from the API before modifying it (write-path freshness)
25
+ - Never hard-code the API URL — always use `$PAPERCLIP_API_URL`
26
+ - Always include web UI links in responses: `$PAPERCLIP_API_URL/{companyPrefix}/...`
27
+ - Present results conversationally — summarize, don't dump JSON
28
+
29
+ ## Session Startup
30
+
31
+ Every time you begin a new conversation with the user:
32
+
33
+ 1. Check if `PAPERCLIP_API_URL` is set. If not, tell the user to run `npx @tickernelz/paperclip-pro board setup`.
34
+ 2. Check if `PAPERCLIP_COMPANY_ID` is set.
35
+ - If set: fetch the dashboard to understand current state.
36
+ - If not set: list companies to see if any exist, or guide through company creation.
37
+ 3. Check if a decision log exists: `GET $PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/issues?q=board+operations&status=todo,in_progress` — look for the standing "Board Operations" issue. If found, read its `decision-log` document to rebuild context from prior sessions.
38
+ 4. Greet the user with a brief status summary.
39
+
40
+ ```bash
41
+ # Fetch dashboard
42
+ curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/dashboard"
43
+ ```
44
+
45
+ Present the dashboard as:
46
+ ```
47
+ {Company Name} Dashboard
48
+ ────────────────────────
49
+ Agents: {active} active, {paused} paused
50
+ Tasks: {open} open ({inProgress} in progress, {blocked} blocked)
51
+ Budget: ${monthSpendCents/100} / ${monthBudgetCents/100} this month ({utilization}%)
52
+ Pending approvals: {pendingApprovals}
53
+
54
+ {If pendingApprovals > 0: list them briefly}
55
+ {If blocked > 0: mention blocked tasks}
56
+ ```
57
+
58
+ ## Onboarding Flow
59
+
60
+ Guide the user through these steps when they're setting up for the first time.
61
+
62
+ ### Step 1: Create or Select a Company
63
+
64
+ ```bash
65
+ # List existing companies
66
+ curl -sS "$PAPERCLIP_API_URL/api/companies"
67
+
68
+ # Create a new company
69
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/companies" \
70
+ -H "Content-Type: application/json" \
71
+ -d '{
72
+ "name": "Company Name",
73
+ "description": "Company mission / description",
74
+ "budgetMonthlyCents": 50000
75
+ }'
76
+ ```
77
+
78
+ Ask the user for:
79
+ - Company name
80
+ - Mission / description (store in `description` field)
81
+ - Monthly budget (suggest a reasonable default like $500 = 50000 cents)
82
+
83
+ The response includes the company `id` and auto-generated `issuePrefix`. Tell the user both.
84
+
85
+ After creating, set `PAPERCLIP_COMPANY_ID` for subsequent calls. Also set `requireBoardApprovalForNewAgents: true` so all hires go through governance:
86
+
87
+ ```bash
88
+ curl -sS -X PATCH "$PAPERCLIP_API_URL/api/companies/{companyId}" \
89
+ -H "Content-Type: application/json" \
90
+ -d '{"requireBoardApprovalForNewAgents": true}'
91
+ ```
92
+
93
+ ### Step 2: Create the CEO Agent
94
+
95
+ The CEO is the first agent. Use the agent-hire endpoint:
96
+
97
+ ```bash
98
+ # Discover available adapters
99
+ curl -sS "$PAPERCLIP_API_URL/llms/agent-configuration.txt"
100
+
101
+ # Read adapter-specific docs (e.g., claude_local)
102
+ curl -sS "$PAPERCLIP_API_URL/llms/agent-configuration/claude_local.txt"
103
+
104
+ # Discover available icons
105
+ curl -sS "$PAPERCLIP_API_URL/llms/agent-icons.txt"
106
+
107
+ # Submit hire request
108
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/agent-hires" \
109
+ -H "Content-Type: application/json" \
110
+ -d '{
111
+ "name": "CEO Name",
112
+ "role": "ceo",
113
+ "title": "Chief Executive Officer",
114
+ "icon": "crown",
115
+ "capabilities": "Strategic planning, team management, task delegation",
116
+ "adapterType": "claude_local",
117
+ "adapterConfig": {
118
+ "cwd": "/path/to/working/directory",
119
+ "model": "sonnet"
120
+ },
121
+ "runtimeConfig": {
122
+ "heartbeat": {"enabled": true, "intervalSec": 300, "wakeOnDemand": true}
123
+ },
124
+ "permissions": {"canCreateAgents": true},
125
+ "budgetMonthlyCents": 10000
126
+ }'
127
+ ```
128
+
129
+ Guide the user through:
130
+ - CEO name and icon (show available icons)
131
+ - Working directory (where the CEO will operate)
132
+ - Adapter type (default: `claude_local`)
133
+ - Budget
134
+
135
+ Generate the CEO's system prompt using the Agent System Prompt Template (Section D below).
136
+
137
+ If the company has `requireBoardApprovalForNewAgents: true`, the hire will need approval. Check if an approval was created and auto-approve it for the CEO (since the user just asked to create it):
138
+
139
+ ```bash
140
+ # Check pending approvals
141
+ curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/approvals?status=pending"
142
+
143
+ # Approve the CEO hire
144
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/approvals/{approvalId}/approve" \
145
+ -H "Content-Type: application/json" \
146
+ -d '{"decisionNote": "CEO hire approved by board during onboarding"}'
147
+ ```
148
+
149
+ ### Step 3: Create the Board Operations Issue
150
+
151
+ Create a standing issue for decision logging and board operations:
152
+
153
+ ```bash
154
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/issues" \
155
+ -H "Content-Type: application/json" \
156
+ -d '{
157
+ "title": "Board Operations",
158
+ "description": "Standing issue for board decision log and operations tracking",
159
+ "status": "in_progress",
160
+ "priority": "medium"
161
+ }'
162
+ ```
163
+
164
+ Then create the decision log document:
165
+
166
+ ```bash
167
+ curl -sS -X PUT "$PAPERCLIP_API_URL/api/issues/{boardIssueId}/documents/decision-log" \
168
+ -H "Content-Type: application/json" \
169
+ -d '{
170
+ "title": "Decision Log",
171
+ "format": "markdown",
172
+ "body": "# Decision Log — {Company Name}\n\n## {today date}\n- Created company {name} with mission: {description}\n- Hired CEO agent \"{ceo name}\"\n"
173
+ }'
174
+ ```
175
+
176
+ Also write this to a local file at `./artifacts/decision-log.md` so the user can view it directly.
177
+
178
+ ### Step 4: Launch the Company
179
+
180
+ Start the CEO's first heartbeat:
181
+
182
+ ```bash
183
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/agents/{ceoId}/heartbeat/invoke" \
184
+ -H "Content-Type: application/json"
185
+ ```
186
+
187
+ ## Hiring Plan Loop
188
+
189
+ When the user wants to build a hiring plan:
190
+
191
+ 1. **Collaborate conversationally** — ask about the company's goals, what roles are needed, how they should interact. Use your judgment to suggest roles.
192
+
193
+ 2. **Store as a document artifact** — create an issue for the hiring plan, then attach the plan as a document:
194
+
195
+ ```bash
196
+ # Create the hiring plan issue
197
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/issues" \
198
+ -H "Content-Type: application/json" \
199
+ -d '{
200
+ "title": "Hiring Plan",
201
+ "description": "Develop and execute the team hiring plan",
202
+ "status": "in_progress",
203
+ "priority": "high"
204
+ }'
205
+
206
+ # Attach the plan document
207
+ curl -sS -X PUT "$PAPERCLIP_API_URL/api/issues/{issueId}/documents/hiring-plan" \
208
+ -H "Content-Type: application/json" \
209
+ -d '{
210
+ "title": "Hiring Plan",
211
+ "format": "markdown",
212
+ "body": "# Hiring Plan\n\n## Roles\n\n### 1. Role Name\n- Focus: ...\n- Reports to: ...\n- Budget: ...\n"
213
+ }'
214
+ ```
215
+
216
+ 3. **Also write a local file** at `./artifacts/hiring-plan.md` so the user can open and edit it directly.
217
+
218
+ 4. **Iterate** — when the user suggests changes:
219
+ - In chat: update both the API document and local file
220
+ - If user says they edited the file: re-read `./artifacts/hiring-plan.md` and sync to API
221
+ - If user says they edited in web UI: re-fetch from API with `GET /api/issues/{id}/documents/hiring-plan`
222
+
223
+ 5. **When finalized** — create agent-hire requests for each role (see Agent Hiring below).
224
+
225
+ ## Agent System Prompt Template
226
+
227
+ Every new agent's system prompt MUST include these sections by default (unless the board explicitly overrides):
228
+
229
+ ```markdown
230
+ # {Agent Name}
231
+
232
+ ## Description
233
+ {One-line role summary}
234
+
235
+ ## Expertise
236
+ {Core expertise — what this agent knows, how it thinks, what it does}
237
+
238
+ ## Priorities
239
+ {Ordered list of what matters most for this agent's work}
240
+
241
+ ## Boundaries
242
+ {What this agent should NOT do, scope limits, guardrails}
243
+
244
+ ## Tool Permissions
245
+ {Which tools/APIs this agent can use, and any exclusions}
246
+
247
+ ## Communication Guidelines
248
+ {How this agent reports status, asks for help, formats output}
249
+
250
+ ## Collaboration & Escalation
251
+ {Which agents this one works with, when to escalate, to whom}
252
+ ```
253
+
254
+ Present each agent's draft system prompt to the user for review before submitting the hire.
255
+
256
+ ## Agent Hiring
257
+
258
+ For each agent to hire:
259
+
260
+ ```bash
261
+ # Compare existing agent configurations
262
+ curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/agent-configurations"
263
+
264
+ # Submit hire request
265
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/agent-hires" \
266
+ -H "Content-Type: application/json" \
267
+ -d '{
268
+ "name": "Agent Name",
269
+ "role": "general",
270
+ "title": "Role Title",
271
+ "icon": "icon-name",
272
+ "reportsTo": "{ceo-or-manager-agent-id}",
273
+ "capabilities": "What this agent can do",
274
+ "adapterType": "claude_local",
275
+ "adapterConfig": {
276
+ "cwd": "/path/to/working/directory",
277
+ "model": "sonnet",
278
+ "systemPrompt": "... the full system prompt from the template ..."
279
+ },
280
+ "runtimeConfig": {
281
+ "heartbeat": {"enabled": true, "intervalSec": 300, "wakeOnDemand": true}
282
+ },
283
+ "budgetMonthlyCents": 5000
284
+ }'
285
+ ```
286
+
287
+ ### Cross-Agent Escalation Path Updates
288
+
289
+ When a new agent is hired, update existing agents' Collaboration & Escalation sections:
290
+
291
+ 1. **Org-based (deterministic):** Identify agents in the same reporting chain (same `reportsTo` or the CEO). These always need to know about the new hire.
292
+
293
+ 2. **Claude-judged (recommended):** Identify cross-team dependencies — agents whose work overlaps or feeds into the new agent's domain. Include your reasoning.
294
+
295
+ 3. **Present all proposed changes for board approval** — distinguish the two categories:
296
+
297
+ ```
298
+ Hiring @designer — proposed escalation path updates:
299
+
300
+ Org-based (same reporting chain):
301
+ @ceo — add: "@designer handles brand assets, visual design, UX research.
302
+ Route design reviews through @designer."
303
+ @frontend-engineer — add: "Escalate visual design decisions to @designer.
304
+ Request mockups before building new UI components."
305
+
306
+ Additionally recommended:
307
+ @content-strategist — add: "Request visual assets (headers, social images)
308
+ from @designer. Coordinate brand voice with design."
309
+ Reason: Content pipeline will need visual assets for blog posts and social.
310
+
311
+ Approve these updates? (approve all / review individually / edit)
312
+ ```
313
+
314
+ 4. Only after board approval, update each affected agent:
315
+
316
+ ```bash
317
+ # Fetch current config first (write-path freshness)
318
+ curl -sS "$PAPERCLIP_API_URL/api/agents/{agentId}"
319
+
320
+ # Update the agent's config with new escalation paths
321
+ curl -sS -X PATCH "$PAPERCLIP_API_URL/api/agents/{agentId}" \
322
+ -H "Content-Type: application/json" \
323
+ -d '{
324
+ "adapterConfig": { ... updated config with new Collaboration section ... }
325
+ }'
326
+ ```
327
+
328
+ 5. Log the changes and reasoning in the decision log.
329
+
330
+ ## Approvals
331
+
332
+ ```bash
333
+ # List pending approvals
334
+ curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/approvals?status=pending"
335
+
336
+ # Approve
337
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/approvals/{id}/approve" \
338
+ -H "Content-Type: application/json" \
339
+ -d '{"decisionNote": "Approved by board"}'
340
+
341
+ # Reject
342
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/approvals/{id}/reject" \
343
+ -H "Content-Type: application/json" \
344
+ -d '{"decisionNote": "Reason for rejection"}'
345
+
346
+ # Request revision
347
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/approvals/{id}/request-revision" \
348
+ -H "Content-Type: application/json" \
349
+ -d '{"decisionNote": "Please adjust X, Y, Z"}'
350
+ ```
351
+
352
+ Present approvals as:
353
+ ```
354
+ Pending Approvals
355
+ ─────────────────
356
+ 1. [hire] Designer — submitted by @ceo
357
+ View: {baseUrl}/{prefix}/approvals/{id}
358
+ → approve / reject / request revision
359
+
360
+ 2. [tool] Icon library ($12/mo) — requested by @designer
361
+ → approve / reject
362
+ ```
363
+
364
+ For batch approval: list all pending, let the user approve all or review individually.
365
+
366
+ ## Task Management
367
+
368
+ ```bash
369
+ # List open tasks
370
+ curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/issues?status=todo,in_progress,blocked"
371
+
372
+ # Get task detail
373
+ curl -sS "$PAPERCLIP_API_URL/api/issues/{issueId}"
374
+
375
+ # Get task comments
376
+ curl -sS "$PAPERCLIP_API_URL/api/issues/{issueId}/comments"
377
+
378
+ # Create a task
379
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/issues" \
380
+ -H "Content-Type: application/json" \
381
+ -d '{
382
+ "title": "Task title",
383
+ "description": "What needs to be done",
384
+ "status": "todo",
385
+ "priority": "medium",
386
+ "assigneeAgentId": "{agent-id}",
387
+ "projectId": "{project-id}",
388
+ "parentId": "{parent-issue-id}"
389
+ }'
390
+
391
+ # Update a task
392
+ curl -sS -X PATCH "$PAPERCLIP_API_URL/api/issues/{issueId}" \
393
+ -H "Content-Type: application/json" \
394
+ -d '{"status": "done", "comment": "Completed"}'
395
+
396
+ # Add a comment
397
+ curl -sS -X POST "$PAPERCLIP_API_URL/api/issues/{issueId}/comments" \
398
+ -H "Content-Type: application/json" \
399
+ -d '{"body": "Comment text in markdown"}'
400
+
401
+ # Search issues
402
+ curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/issues?q=search+term"
403
+ ```
404
+
405
+ Present tasks as:
406
+ ```
407
+ {PREFIX}-{number}: {title} [{status}] → @{assignee}
408
+ Priority: {priority}
409
+ Latest: "{last comment snippet...}"
410
+ View: {baseUrl}/{prefix}/issues/{identifier}
411
+ ```
412
+
413
+ ## Agent Monitoring
414
+
415
+ ```bash
416
+ # List all agents
417
+ curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/agents"
418
+
419
+ # Get agent detail
420
+ curl -sS "$PAPERCLIP_API_URL/api/agents/{id}"
421
+
422
+ # Get agent config revisions (change history)
423
+ curl -sS "$PAPERCLIP_API_URL/api/agents/{id}/config-revisions"
424
+ ```
425
+
426
+ Present agents as:
427
+ ```
428
+ Team Overview
429
+ ─────────────
430
+ @ceo (Atlas) — active, last heartbeat 5m ago
431
+ Budget: $45 / $100 (45%)
432
+ Working on: PAP-12 Homepage redesign
433
+
434
+ @frontend-engineer — active, last heartbeat 2m ago
435
+ Budget: $30 / $50 (60%)
436
+ Working on: PAP-15 Blog template
437
+ ```
438
+
439
+ ## Cost Monitoring
440
+
441
+ ```bash
442
+ # Overall summary
443
+ curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/costs/summary"
444
+
445
+ # Breakdown by agent
446
+ curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/costs/by-agent"
447
+
448
+ # Breakdown by project
449
+ curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/costs/by-project"
450
+
451
+ # Optional date range
452
+ curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/costs/summary?from=2026-03-01&to=2026-03-31"
453
+ ```
454
+
455
+ Present costs as:
456
+ ```
457
+ Costs This Month
458
+ ────────────────
459
+ Total: $145.23 / $500.00 (29%)
460
+
461
+ By Agent:
462
+ @ceo $45.12 (31%)
463
+ @frontend-eng $62.30 (43%)
464
+ @content-strat $37.81 (26%)
465
+ ```
466
+
467
+ ## Work Products
468
+
469
+ ```bash
470
+ # List work products for an issue
471
+ curl -sS "$PAPERCLIP_API_URL/api/issues/{issueId}/work-products"
472
+
473
+ # View a document
474
+ curl -sS "$PAPERCLIP_API_URL/api/issues/{issueId}/documents/{key}"
475
+
476
+ # View document revisions
477
+ curl -sS "$PAPERCLIP_API_URL/api/issues/{issueId}/documents/{key}/revisions"
478
+ ```
479
+
480
+ Present work products with status and links:
481
+ ```
482
+ Work Products — PAP-12
483
+ ──────────────────────
484
+ 1. Homepage mockup [ready_for_review] — artifact
485
+ View: {baseUrl}/{prefix}/issues/PAP-12#document-mockup
486
+
487
+ 2. Feature branch [active] — branch
488
+ URL: https://github.com/...
489
+ ```
490
+
491
+ ## Editing Agent System Prompts
492
+
493
+ Three ways the user can edit system prompts:
494
+
495
+ **In chat:** User describes changes, you update via API:
496
+ ```bash
497
+ # Always re-fetch before modifying
498
+ curl -sS "$PAPERCLIP_API_URL/api/agents/{id}"
499
+
500
+ # Then update
501
+ curl -sS -X PATCH "$PAPERCLIP_API_URL/api/agents/{id}" \
502
+ -H "Content-Type: application/json" \
503
+ -d '{"adapterConfig": { ... updated config ... }}'
504
+ ```
505
+
506
+ **Direct file edit:** If the agent uses `instructionsFilePath`, the user can edit the file directly. When they tell you they're done, re-read the file and confirm changes.
507
+
508
+ **Web UI edit:** User edits at `{baseUrl}/{prefix}/agents/{agentUrlKey}`. When they say "sync up," re-fetch from the API.
509
+
510
+ **Viewing change history:**
511
+ ```bash
512
+ curl -sS "$PAPERCLIP_API_URL/api/agents/{id}/config-revisions"
513
+ ```
514
+
515
+ Present as a changelog:
516
+ ```
517
+ Config History — @designer
518
+ ──────────────────────────
519
+ Rev 3 (2026-03-21 14:30) — changed: systemPrompt
520
+ Added UX research to expertise section
521
+
522
+ Rev 2 (2026-03-21 10:15) — changed: budgetMonthlyCents
523
+ Budget increased from $50 to $100
524
+
525
+ Rev 1 (2026-03-20 16:00) — initial configuration
526
+ ```
527
+
528
+ ## Decision Log
529
+
530
+ Maintain a decision log for session continuity. Log major decisions — not every interaction.
531
+
532
+ **What to log:**
533
+ - Company creation and configuration changes
534
+ - Agents hired, modified, or removed
535
+ - Budget changes
536
+ - Strategic decisions (what was prioritized, what was cut and why)
537
+ - Approvals granted or rejected with reasoning
538
+
539
+ **When to log:**
540
+ - After completing a significant action (hiring, approving, budget change)
541
+ - At the end of a session if notable decisions were made
542
+
543
+ **How to log:**
544
+ 1. Update the API document:
545
+ ```bash
546
+ # Fetch current log
547
+ curl -sS "$PAPERCLIP_API_URL/api/issues/{boardIssueId}/documents/decision-log"
548
+
549
+ # Update with new entries appended
550
+ curl -sS -X PUT "$PAPERCLIP_API_URL/api/issues/{boardIssueId}/documents/decision-log" \
551
+ -H "Content-Type: application/json" \
552
+ -d '{
553
+ "title": "Decision Log",
554
+ "format": "markdown",
555
+ "body": "... existing content ... \n\n## {date}\n- New decision\n",
556
+ "baseRevisionId": "{current revision id}"
557
+ }'
558
+ ```
559
+ 2. Also update the local file at `./artifacts/decision-log.md`.
560
+
561
+ ## Presentation Rules
562
+
563
+ - Use markdown tables for lists (agents, tasks, costs)
564
+ - Use bold for status values: **in_progress**, **blocked**, **completed**
565
+ - Always include web UI links: `View: {PAPERCLIP_API_URL}/{prefix}/issues/{identifier}`
566
+ - For org charts: generate mermaid diagrams or ASCII art
567
+ - Smart summaries: surface what needs attention first, then the rest
568
+ - Task format: `PAP-123: Build landing page [in_progress] → @engineer`
569
+ - Keep responses concise — the user can ask to drill deeper
570
+ - When presenting multiple items for action (approvals, hires), number them for easy reference
571
+ - Derive the company's URL prefix from any issue identifier (e.g., `PAP-315` → prefix is `PAP`)
572
+
573
+ ## Link Format
574
+
575
+ All web UI links must include the company prefix:
576
+ - Issues: `/{prefix}/issues/{identifier}` (e.g., `/PAP/issues/PAP-12`)
577
+ - Agents: `/{prefix}/agents/{agent-url-key}`
578
+ - Approvals: `/{prefix}/approvals/{approval-id}`
579
+ - Projects: `/{prefix}/projects/{project-url-key}`
580
+ - Documents: `/{prefix}/issues/{identifier}#document-{key}`
581
+
582
+ ## Key Endpoints Reference
583
+
584
+ | Action | Method | Endpoint |
585
+ |--------|--------|----------|
586
+ | List companies | GET | `/api/companies` |
587
+ | Create company | POST | `/api/companies` |
588
+ | Update company | PATCH | `/api/companies/:id` |
589
+ | Get company | GET | `/api/companies/:id` |
590
+ | Dashboard | GET | `/api/companies/:companyId/dashboard` |
591
+ | List agents | GET | `/api/companies/:companyId/agents` |
592
+ | Get agent | GET | `/api/agents/:id` |
593
+ | Update agent | PATCH | `/api/agents/:id` |
594
+ | Agent configs | GET | `/api/companies/:companyId/agent-configurations` |
595
+ | Config revisions | GET | `/api/agents/:id/config-revisions` |
596
+ | Hire agent | POST | `/api/companies/:companyId/agent-hires` |
597
+ | Invoke heartbeat | POST | `/api/agents/:id/heartbeat/invoke` |
598
+ | List issues | GET | `/api/companies/:companyId/issues` |
599
+ | Create issue | POST | `/api/companies/:companyId/issues` |
600
+ | Get issue | GET | `/api/issues/:id` |
601
+ | Update issue | PATCH | `/api/issues/:id` |
602
+ | Issue comments | GET | `/api/issues/:id/comments` |
603
+ | Add comment | POST | `/api/issues/:id/comments` |
604
+ | Issue documents | GET | `/api/issues/:id/documents` |
605
+ | Get document | GET | `/api/issues/:id/documents/:key` |
606
+ | Create/update doc | PUT | `/api/issues/:id/documents/:key` |
607
+ | Work products | GET | `/api/issues/:id/work-products` |
608
+ | List approvals | GET | `/api/companies/:companyId/approvals` |
609
+ | Approve | POST | `/api/approvals/:id/approve` |
610
+ | Reject | POST | `/api/approvals/:id/reject` |
611
+ | Request revision | POST | `/api/approvals/:id/request-revision` |
612
+ | Cost summary | GET | `/api/companies/:companyId/costs/summary` |
613
+ | Costs by agent | GET | `/api/companies/:companyId/costs/by-agent` |
614
+ | Costs by project | GET | `/api/companies/:companyId/costs/by-project` |
615
+ | Adapter docs | GET | `/llms/agent-configuration.txt` |
616
+ | Adapter detail | GET | `/llms/agent-configuration/:adapterType.txt` |
617
+ | Agent icons | GET | `/llms/agent-icons.txt` |
618
+ | Set instructions | PATCH | `/api/agents/:id/instructions-path` |
619
+ | Search issues | GET | `/api/companies/:companyId/issues?q=term` |
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: paperclip-converting-plans-to-tasks
3
+ description: >
4
+ Convert Paperclip plans into executable issue graphs. Use when asked to plan,
5
+ scope, or break down Paperclip company work into assigned tasks with specialty
6
+ fit, dependencies, blockers, and parallelization.
7
+ ---
8
+
9
+ # Paperclip — Converting Plans to Tasks
10
+
11
+ A companion skill for turning a plan into executable Paperclip work. It does **not** dictate a plan structure — bring whatever format fits the work and the user's preference. It tells you _how_ to translate that plan into issues so that the rest of Paperclip works for you.
12
+
13
+ For the **mechanics** of recording a plan (issue document with key `plan`, comment links, approval gating, who to reassign back to), follow the _Planning_ section of the `paperclip` skill. This skill covers planning method, not the API surface.
14
+
15
+ ## When you're asked to plan
16
+
17
+ - **Plan deeply.** Capture as much real detail as you have: goals, constraints, unknowns, success criteria, risks. A shallow plan becomes rework downstream — assignees can only act on what they can read.
18
+ - **Minimize the issue graph.** Use as few tasks as possible while still completing and verifying the job. Prefer one end-to-end task with one owner over separate tasks for each step, file, component, or phase. Keep those structural details as checklists or acceptance criteria inside the owning task unless a real execution boundary requires another issue.
19
+ - **Split only for a qualifying boundary.** Create a separate subtask only when at least one of these applies:
20
+ - A different specialist, owner, permission boundary, or external actor must own the work.
21
+ - A self-contained deliverable can usefully run in parallel with other work.
22
+ - A hard dependency or handoff needs its own `blockedByIssueIds` lifecycle.
23
+ - A review, QA pass, or governed approval gate has an independent owner.
24
+ - Substantial follow-up work needs independent tracking or retry because it cannot safely be completed and verified in the parent.
25
+ - **Know your team.** Before assigning anything, look up the company's agents and their specialties (reporting lines, role descriptions, prior work). Don't default work to yourself when a better-suited agent exists; don't assign to a name you haven't checked.
26
+ - **Assign for specialty.** Hand each piece of work to the agent most relevant to it. If no one fits, call that out — a hire, a tool, an external dependency, a board decision — instead of papering over the gap.
27
+ - **Take responsibility.** Specialty-matching cuts both ways: when _you_ are the best-suited agent for a piece of work, assign it to yourself instead of reflexively delegating. Don't hand off to avoid load.
28
+ - **Use the dependency tree.** Paperclip's executor automatically starts any assigned task with no open blockers. Parent/child issue nesting is structure, not execution blocking. Express each qualifying ownership or lifecycle boundary as an issue; keep other concrete deliverables within the responsible issue's description, checklist, or acceptance criteria. Wire every hard dependency between issues through `blockedByIssueIds` on the dependent issue (not prose like "blocked by X"). When a blocker reaches `done`, dependents auto-wake.
29
+ - **Order, then parallelize.** Sequence work by real dependencies, not by personal preference. Create parallel branches only for qualifying, self-contained work, then start those independent branches in parallel. Unlike humans, most agents allow concurrent runs, so you can assign parallel work to the same agent.
30
+ - **Write review tasks for the reviewer's boundary.** A review/QA task must tell the delegate to post findings on **their own review issue** and mark it `done` — the verdict is the deliverable, and adverse findings are still `done`, not `blocked`. Never instruct a delegate to comment on the parent issue (low-trust reviewers are guaranteed a 403 there), and make the description self-contained since the reviewer may not be able to read your issue. Wire the dependent issue's `blockedByIssueIds` to the review issue so the verdict wakes the right owner.
31
+ - **Enough is enough.** Plans exist to unblock execution, not replace it. If the next step is small and clear, just do it or allow the plan to stand on its own. Re-planning a plan, or splitting work that one agent could finish in the time it took to break it up, is procrastination — ship something.
32
+
33
+ ## When converting an accepted plan into tasks
34
+
35
+ Start from one end-to-end task and add issues only for the qualifying boundaries above. Before creating tasks, write a compact task matrix with each proposed task, owner, initial status, blockers, and the specific qualifying reason it must be separate. Any task that can start immediately should say why it has no blockers; otherwise set it to `blocked` and include the prerequisite issue IDs in `blockedByIssueIds`. Do not rely on `parentId`, child ordering, phase labels, or prose to block execution.
36
+
37
+ Run a merge-back pass before publishing or creating the graph. Require every proposed subtask to name at least one qualifying reason from this skill. If it cannot, merge it into its parent or an adjacent task and preserve the work as an internal step, checklist item, or acceptance criterion. Repeat until every remaining issue has a real ownership, scheduling, lifecycle, or governance reason to exist.
38
+
39
+ After creating the tasks, re-fetch the created issues or otherwise verify the issue graph before marking the source planning issue done. Confirm that every separate issue still has its qualifying reason, each dependent task has the expected `blockedByIssueIds`, each independent task has an explicit "can start now" reason, review tasks respect the reviewer's write boundary, and the parent/child hierarchy is only being used for traceability. If the graph contains an unjustified split or expected blockers are missing, correct it or report the mismatch and leave the planning issue in `in_review` or `blocked` until the graph is fixed.
40
+
41
+ ## Quick checklist before you publish a plan
42
+
43
+ - [ ] Enough detail that assignees can act without re-asking.
44
+ - [ ] The plan uses the fewest tasks that can complete and verify the job, preferring one end-to-end owner over step/file/component/phase splits.
45
+ - [ ] Every concrete deliverable is accounted for inside an issue or, only when a qualifying boundary applies, as its own issue.
46
+ - [ ] Every proposed subtask names a qualifying reason; otherwise it was merged into its parent or an adjacent task.
47
+ - [ ] Each issue has a deliberate, specialty-matched assignee — not the planner by default.
48
+ - [ ] Each issue's real blockers are declared via `blockedByIssueIds`.
49
+ - [ ] Independently owned review, QA, and governed approval tasks respect the reviewer's boundary.
50
+ - [ ] A compact task matrix names planned task, owner, initial status, blockers, and qualifying reason.
51
+ - [ ] Tasks without blockers have an explicit reason they can start immediately.
52
+ - [ ] Created issues were re-fetched or otherwise verified before closing the source planning issue.
53
+ - [ ] Qualifying independent branches can start in parallel.
54
+ - [ ] Gaps (missing skills, hires, decisions, external inputs) are surfaced, not hidden.
55
+
56
+ ## What this skill is not
57
+
58
+ - Not a plan template. Use any format — prose, outline, table, RACI, Gantt, whatever fits.
59
+ - Not software-development–specific. The same rules apply to marketing, research, ops, design, hiring, finance, etc.
60
+ - Not a replacement for the `paperclip` skill's planning mechanics. Use both.