@humwick/runner 0.0.0-stage → 0.130.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 (293) hide show
  1. package/LICENSE +167 -0
  2. package/agent-bin/agent-relay-browser +10 -0
  3. package/agent-bin/humwick +10 -0
  4. package/hooks/fff-search-redirect/fff-search-redirect.cjs +161 -0
  5. package/hooks/fff-search-redirect/hooks.json +13 -0
  6. package/hooks/rg-r-guard/hooks.json +18 -0
  7. package/hooks/rg-r-guard/rg-r-guard.cjs +144 -0
  8. package/hooks/web-tools-redirect/hooks.json +13 -0
  9. package/hooks/web-tools-redirect/web-tools-redirect.cjs +84 -0
  10. package/node_modules/@humwick/offload/LICENSE +167 -0
  11. package/node_modules/@humwick/offload/README.md +57 -0
  12. package/node_modules/@humwick/offload/dist/async-runner.d.ts +18 -0
  13. package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +1 -0
  14. package/node_modules/@humwick/offload/dist/async-runner.js +158 -0
  15. package/node_modules/@humwick/offload/dist/async-runner.js.map +1 -0
  16. package/node_modules/@humwick/offload/dist/envelope.d.ts +25 -0
  17. package/node_modules/@humwick/offload/dist/envelope.d.ts.map +1 -0
  18. package/node_modules/@humwick/offload/dist/envelope.js +80 -0
  19. package/node_modules/@humwick/offload/dist/envelope.js.map +1 -0
  20. package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +10 -0
  21. package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +1 -0
  22. package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +59 -0
  23. package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +1 -0
  24. package/node_modules/@humwick/offload/dist/index.d.ts +5 -0
  25. package/node_modules/@humwick/offload/dist/index.d.ts.map +1 -0
  26. package/node_modules/@humwick/offload/dist/index.js +5 -0
  27. package/node_modules/@humwick/offload/dist/index.js.map +1 -0
  28. package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +62 -0
  29. package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +1 -0
  30. package/node_modules/@humwick/offload/dist/subprocess-runner.js +295 -0
  31. package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +1 -0
  32. package/node_modules/@humwick/offload/dist/types.d.ts +111 -0
  33. package/node_modules/@humwick/offload/dist/types.d.ts.map +1 -0
  34. package/node_modules/@humwick/offload/dist/types.js +176 -0
  35. package/node_modules/@humwick/offload/dist/types.js.map +1 -0
  36. package/node_modules/@humwick/offload/dist/worker-pool.d.ts +23 -0
  37. package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +1 -0
  38. package/node_modules/@humwick/offload/dist/worker-pool.js +435 -0
  39. package/node_modules/@humwick/offload/dist/worker-pool.js.map +1 -0
  40. package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +2 -0
  41. package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +1 -0
  42. package/node_modules/@humwick/offload/dist/worker-runtime.js +27 -0
  43. package/node_modules/@humwick/offload/dist/worker-runtime.js.map +1 -0
  44. package/node_modules/@humwick/offload/dist/worker.d.ts +5 -0
  45. package/node_modules/@humwick/offload/dist/worker.d.ts.map +1 -0
  46. package/node_modules/@humwick/offload/dist/worker.js +1 -0
  47. package/node_modules/@humwick/offload/dist/worker.js.map +1 -0
  48. package/node_modules/@humwick/offload/package.json +46 -0
  49. package/node_modules/@humwick/offload/src/async-runner.ts +170 -0
  50. package/node_modules/@humwick/offload/src/envelope.ts +92 -0
  51. package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +49 -0
  52. package/node_modules/@humwick/offload/src/index.ts +4 -0
  53. package/node_modules/@humwick/offload/src/subprocess-runner.ts +334 -0
  54. package/node_modules/@humwick/offload/src/types.ts +235 -0
  55. package/node_modules/@humwick/offload/src/worker-pool.ts +463 -0
  56. package/node_modules/@humwick/offload/src/worker-runtime.ts +32 -0
  57. package/node_modules/@humwick/offload/src/worker.ts +5 -0
  58. package/package.json +47 -4
  59. package/plugins/browser/skills/playwright-cli/SKILL.md +53 -0
  60. package/plugins/claude/.claude-plugin/plugin.json +8 -0
  61. package/plugins/claude/claude-statusline-probe.cjs +144 -0
  62. package/plugins/claude/hooks/gate-run-guard.provisioned.mjs +914 -0
  63. package/plugins/claude/hooks/gate-run-guard.sh +9 -0
  64. package/plugins/claude/hooks/gate-run-guard.ts +237 -0
  65. package/plugins/claude/hooks/hooks.json +158 -0
  66. package/plugins/claude/hooks/kill-guard.provisioned.mjs +7027 -0
  67. package/plugins/claude/hooks/kill-guard.sh +341 -0
  68. package/plugins/claude/hooks/kill-guard.ts +337 -0
  69. package/plugins/claude/hooks/permission-request.sh +22 -0
  70. package/plugins/claude/hooks/post-compact.sh +10 -0
  71. package/plugins/claude/hooks/post-tool-use.sh +8 -0
  72. package/plugins/claude/hooks/pre-compact.sh +12 -0
  73. package/plugins/claude/hooks/read-only-bash-guard.sh +587 -0
  74. package/plugins/claude/hooks/relay-status.sh +373 -0
  75. package/plugins/claude/hooks/session-end.sh +26 -0
  76. package/plugins/claude/hooks/session-start.sh +31 -0
  77. package/plugins/claude/hooks/shell-trust.ts +28 -0
  78. package/plugins/claude/hooks/stop-failure.sh +47 -0
  79. package/plugins/claude/hooks/stop.sh +48 -0
  80. package/plugins/claude/hooks/subagent-guard.cjs +26 -0
  81. package/plugins/claude/hooks/subagent-skill-policy.cjs +160 -0
  82. package/plugins/claude/hooks/subagent-start.sh +13 -0
  83. package/plugins/claude/hooks/subagent-stop.sh +19 -0
  84. package/plugins/claude/hooks/user-prompt-submit.sh +18 -0
  85. package/plugins/claude/hooks/wait-loop-guard.ts +120 -0
  86. package/plugins/claude/monitors/monitors.json +7 -0
  87. package/plugins/claude/monitors/relay-monitor.provisioned.mjs +786 -0
  88. package/plugins/claude/monitors/relay-monitor.ts +58 -0
  89. package/plugins/claude/skills/disconnect/SKILL.md +16 -0
  90. package/plugins/claude/skills/label/SKILL.md +23 -0
  91. package/plugins/claude/skills/message/SKILL.md +40 -0
  92. package/plugins/claude/skills/pair/SKILL.md +30 -0
  93. package/plugins/claude/skills/react/SKILL.md +18 -0
  94. package/plugins/claude/skills/read-message/SKILL.md +24 -0
  95. package/plugins/claude/skills/reply/SKILL.md +44 -0
  96. package/plugins/claude/skills/send-claimable/SKILL.md +39 -0
  97. package/plugins/claude/skills/slice-first/SKILL.md +32 -0
  98. package/plugins/claude/skills/slice-first/references/plan-recipe.md +46 -0
  99. package/plugins/claude/skills/status/SKILL.md +16 -0
  100. package/plugins/claude/skills/tags/SKILL.md +25 -0
  101. package/plugins/claude/skills/task/SKILL.md +28 -0
  102. package/plugins/claude-output-style/.claude-plugin/plugin.json +5 -0
  103. package/plugins/claude-output-style/output-styles/agent-relay.md +5 -0
  104. package/plugins/codex/skills/disconnect/SKILL.md +15 -0
  105. package/plugins/codex/skills/guide/SKILL.md +15 -0
  106. package/plugins/codex/skills/label/SKILL.md +22 -0
  107. package/plugins/codex/skills/message/SKILL.md +40 -0
  108. package/plugins/codex/skills/pair/SKILL.md +29 -0
  109. package/plugins/codex/skills/react/SKILL.md +17 -0
  110. package/plugins/codex/skills/read-message/SKILL.md +23 -0
  111. package/plugins/codex/skills/reply/SKILL.md +44 -0
  112. package/plugins/codex/skills/send-claimable/SKILL.md +39 -0
  113. package/plugins/codex/skills/slice-first/SKILL.md +32 -0
  114. package/plugins/codex/skills/slice-first/references/plan-recipe.md +46 -0
  115. package/plugins/codex/skills/status/SKILL.md +15 -0
  116. package/plugins/codex/skills/tags/SKILL.md +24 -0
  117. package/plugins/codex/skills/task/SKILL.md +28 -0
  118. package/src/adapter.ts +1061 -0
  119. package/src/adapters/__fixtures__/codex-app-server.ts +47 -0
  120. package/src/adapters/claude-api.ts +243 -0
  121. package/src/adapters/claude-context-command.ts +16 -0
  122. package/src/adapters/claude-credentials.ts +22 -0
  123. package/src/adapters/claude-delivery-lanes.ts +28 -0
  124. package/src/adapters/claude-delivery.ts +166 -0
  125. package/src/adapters/claude-effort.ts +94 -0
  126. package/src/adapters/claude-exit.ts +290 -0
  127. package/src/adapters/claude-headless-mirror.ts +88 -0
  128. package/src/adapters/claude-headless-refusal.ts +51 -0
  129. package/src/adapters/claude-headless.ts +617 -0
  130. package/src/adapters/claude-monitor-delivery-plan.ts +317 -0
  131. package/src/adapters/claude-permission.ts +243 -0
  132. package/src/adapters/claude-prompt-gates.ts +269 -0
  133. package/src/adapters/claude-prompt-hook.ts +145 -0
  134. package/src/adapters/claude-session-capture.ts +293 -0
  135. package/src/adapters/claude-session-probe.ts +414 -0
  136. package/src/adapters/claude-shutdown.ts +190 -0
  137. package/src/adapters/claude-status-detectors.ts +426 -0
  138. package/src/adapters/claude-subagents.ts +93 -0
  139. package/src/adapters/claude-submit-confirmation.ts +287 -0
  140. package/src/adapters/claude-tmux.ts +548 -0
  141. package/src/adapters/claude-token-usage-capture.ts +253 -0
  142. package/src/adapters/claude-tool-policy.ts +165 -0
  143. package/src/adapters/claude-transcript-tail.ts +193 -0
  144. package/src/adapters/claude-transcript.ts +812 -0
  145. package/src/adapters/claude.ts +1097 -0
  146. package/src/adapters/codex-agent-message-capture.ts +189 -0
  147. package/src/adapters/codex-app-server.ts +70 -0
  148. package/src/adapters/codex-client.ts +362 -0
  149. package/src/adapters/codex-effective-config.ts +87 -0
  150. package/src/adapters/codex-launch-config.ts +153 -0
  151. package/src/adapters/codex-rollout-context.ts +272 -0
  152. package/src/adapters/codex-skill-discovery.ts +18 -0
  153. package/src/adapters/codex-token-usage-capture.ts +163 -0
  154. package/src/adapters/codex-tool-output.ts +53 -0
  155. package/src/adapters/codex-turn-outcome.ts +27 -0
  156. package/src/adapters/codex-version.ts +64 -0
  157. package/src/adapters/codex.ts +1442 -0
  158. package/src/adapters/incremental-file.ts +110 -0
  159. package/src/adapters/opencode-api.ts +71 -0
  160. package/src/adapters/opencode-context.ts +277 -0
  161. package/src/adapters/opencode-model-registry.ts +126 -0
  162. package/src/adapters/opencode-provider.ts +169 -0
  163. package/src/adapters/opencode-server-retry.ts +50 -0
  164. package/src/adapters/opencode-soft-steer.ts +302 -0
  165. package/src/adapters/opencode-spawn.ts +145 -0
  166. package/src/adapters/opencode-subscribe.ts +62 -0
  167. package/src/adapters/opencode-token-usage-capture.ts +187 -0
  168. package/src/adapters/opencode-tool-events.ts +302 -0
  169. package/src/adapters/opencode-tools-config.ts +17 -0
  170. package/src/adapters/opencode.ts +2264 -0
  171. package/src/adapters/project-shell.ts +80 -0
  172. package/src/adapters/provider-launch-config.ts +21 -0
  173. package/src/adapters/provider-quota-harvest.ts +127 -0
  174. package/src/adapters/service-access.ts +153 -0
  175. package/src/adapters/tmux-offload.ts +207 -0
  176. package/src/adapters/tool-summary.ts +214 -0
  177. package/src/agent-redact.ts +75 -0
  178. package/src/agent-runner/commands/dispatch.ts +185 -0
  179. package/src/agent-runner/commands/lifecycle.ts +84 -0
  180. package/src/agent-runner/commands/prompt.ts +284 -0
  181. package/src/agent-runner/credentials.ts +208 -0
  182. package/src/agent-runner/http-liveness.ts +85 -0
  183. package/src/agent-runner/lifecycle-milestones.ts +207 -0
  184. package/src/agent-runner/lifecycle-phase.ts +80 -0
  185. package/src/agent-runner/registration.ts +163 -0
  186. package/src/agent-runner/runner-context.ts +158 -0
  187. package/src/agent-runner/session-mirror.ts +278 -0
  188. package/src/agent-runner/task-claims.ts +116 -0
  189. package/src/agent-runner/token-usage-coverage.ts +54 -0
  190. package/src/agent-runner/turn-report.ts +269 -0
  191. package/src/api-budget-accounting.ts +91 -0
  192. package/src/area-memory.ts +255 -0
  193. package/src/artifact-path-materialize.ts +52 -0
  194. package/src/async-guard.ts +35 -0
  195. package/src/attachment-cache-sweep.ts +31 -0
  196. package/src/attachment-cache.ts +195 -0
  197. package/src/background-script-reconcile.ts +106 -0
  198. package/src/bounded-log.ts +59 -0
  199. package/src/bounded-spawn-sync.ts +18 -0
  200. package/src/busy-reconciler.ts +282 -0
  201. package/src/claim-tracker.ts +140 -0
  202. package/src/claude-settings.ts +167 -0
  203. package/src/claude-workspace-trust.ts +289 -0
  204. package/src/config.ts +547 -0
  205. package/src/context-boundary.ts +101 -0
  206. package/src/context-command.ts +151 -0
  207. package/src/context-probe-state.ts +6 -0
  208. package/src/continuation-archive.ts +179 -0
  209. package/src/control-server.ts +730 -0
  210. package/src/delivery-policy.ts +9 -0
  211. package/src/delivery-result.ts +24 -0
  212. package/src/effort-command.ts +125 -0
  213. package/src/empty-turn.ts +816 -0
  214. package/src/free-port.ts +25 -0
  215. package/src/fs-offload.ts +26 -0
  216. package/src/gate-run-config.ts +35 -0
  217. package/src/gate-run-lease-probe.ts +38 -0
  218. package/src/host-asset-plan.ts +450 -0
  219. package/src/host-claude-config-worker.ts +34 -0
  220. package/src/host-sources.ts +40 -0
  221. package/src/inbox-carrier.ts +7 -0
  222. package/src/index.ts +386 -0
  223. package/src/launch-assembly.ts +955 -0
  224. package/src/liveness.ts +105 -0
  225. package/src/logger.ts +108 -0
  226. package/src/mcp-outbox.ts +204 -0
  227. package/src/mcp-preflight.ts +86 -0
  228. package/src/mcp-source-selection.ts +54 -0
  229. package/src/mcp-tool-deferral.ts +35 -0
  230. package/src/mcp-vault-env.ts +25 -0
  231. package/src/message-body-config/config.ts +16 -0
  232. package/src/message-body-config.ts +1 -0
  233. package/src/mid-turn-delivery.ts +43 -0
  234. package/src/native-memory-lever.ts +329 -0
  235. package/src/native-self-resume.ts +244 -0
  236. package/src/outbox.ts +453 -0
  237. package/src/park-post.ts +17 -0
  238. package/src/pending-permission-store.ts +148 -0
  239. package/src/process-meta.ts +9 -0
  240. package/src/profile-home.ts +419 -0
  241. package/src/profile-projection.ts +411 -0
  242. package/src/project-hooks.ts +65 -0
  243. package/src/project-instructions.ts +119 -0
  244. package/src/provider-double.ts +59 -0
  245. package/src/provider-hold.ts +228 -0
  246. package/src/provider-home-marker.ts +3 -0
  247. package/src/provider-home-tombstone.ts +4 -0
  248. package/src/provider-input-queue.ts +134 -0
  249. package/src/provider-integration.ts +93 -0
  250. package/src/provider-processes.ts +17 -0
  251. package/src/provider-submit-failure.ts +15 -0
  252. package/src/providers.ts +35 -0
  253. package/src/provisioning.ts +703 -0
  254. package/src/question-decision.ts +18 -0
  255. package/src/quota.ts +22 -0
  256. package/src/rate-limit.ts +351 -0
  257. package/src/refused-prompt-store.ts +36 -0
  258. package/src/relay-injection-events.ts +161 -0
  259. package/src/relay-instructions.ts +107 -0
  260. package/src/relay-mcp-proxy.long-turn-e2e.ts +183 -0
  261. package/src/relay-mcp-proxy.ts +704 -0
  262. package/src/relay-mcp.ts +583 -0
  263. package/src/reply-obligation-cache.ts +211 -0
  264. package/src/response-capture-report.ts +111 -0
  265. package/src/response-routing.ts +6 -0
  266. package/src/runner-core.ts +2955 -0
  267. package/src/runner-exit.ts +12 -0
  268. package/src/runner-helpers.ts +582 -0
  269. package/src/runner-insights.ts +105 -0
  270. package/src/runner-mcp-proxy.ts +46 -0
  271. package/src/runner-spawn-config.ts +68 -0
  272. package/src/runner-stale-scratch-sweep.ts +21 -0
  273. package/src/runner.ts +9 -0
  274. package/src/runtime-token-file.ts +45 -0
  275. package/src/runtime-token-remint.ts +56 -0
  276. package/src/service-access.ts +88 -0
  277. package/src/session-destroy.ts +27 -0
  278. package/src/session-insights.ts +118 -0
  279. package/src/session-scratch.ts +296 -0
  280. package/src/spawn-input.ts +147 -0
  281. package/src/startup-config-fetch.ts +48 -0
  282. package/src/subreaper.ts +113 -0
  283. package/src/template-resolver.ts +29 -0
  284. package/src/test-run-dedup.ts +435 -0
  285. package/src/transcript-context.ts +99 -0
  286. package/src/transport-errors.ts +48 -0
  287. package/src/turn-opener.ts +55 -0
  288. package/src/turn-reconcile-event.ts +88 -0
  289. package/src/vault-proxy-hop.ts +99 -0
  290. package/src/version.ts +44 -0
  291. package/src/web-tool-call-proxy.ts +128 -0
  292. package/src/web-tools.ts +59 -0
  293. package/README.md +0 -3
@@ -0,0 +1,58 @@
1
+ import { relayEnv } from "@humwick/sdk/env";
2
+ import type { Message } from "@humwick/sdk";
3
+ import { claudeMonitorDeliveryPlan } from "../../../src/adapters/claude-delivery";
4
+ import { claudeReadOnlyRelayContext, claudeRelayContext, workspaceDepsNoteFromEnv } from "../../../src/relay-instructions";
5
+
6
+ const port = relayEnv(process.env, "AGENT_RELAY_RUNNER_PORT");
7
+ if (!port) process.exit(0);
8
+
9
+ let firstDelivery = true;
10
+ const ws = new WebSocket(`ws://127.0.0.1:${port}/monitor`);
11
+
12
+ ws.onmessage = (event) => {
13
+ const payload = parsePayload(String(event.data));
14
+ if (!payload || payload.type !== "message.deliver" || !Array.isArray(payload.messages)) return;
15
+ const messages = payload.messages as Message[];
16
+ // #1935 — the once-per-session context/workspace block is logged in the same synchronous tick as
17
+ // the message, so the harness batches both into ONE monitor event under a single size cap. Track
18
+ // the prefix length and hand it to the composer as reservedChars, so the over-limit stub gate
19
+ // accounts for the prefix and the first message can't be silently truncated behind it.
20
+ let reservedChars = 0;
21
+ if (firstDelivery) {
22
+ const contextBlock = relayEnv(process.env, "AGENT_RELAY_APPROVAL") === "read-only" ? claudeReadOnlyRelayContext() : claudeRelayContext();
23
+ const wsNote = workspaceDepsNoteFromEnv();
24
+ const prefix = [contextBlock, wsNote].filter(Boolean).join("\n\n");
25
+ console.log(prefix);
26
+ console.log("");
27
+ reservedChars = prefix.length + 2; // prefix + the two newlines separating it from the message
28
+ firstDelivery = false;
29
+ }
30
+ const plan = claudeMonitorDeliveryPlan(messages, {
31
+ reservedChars,
32
+ monitorLimited: true,
33
+ // #2310 — an over-cap must-keep section (memory context, self-resume continuation) is spilled
34
+ // byte-exact to the session scratch dir and represented by a small pointer instead of ever
35
+ // being raw-emitted for the harness to truncate. There is no supported way to emit more than
36
+ // one Monitor event per delivery cycle (the harness coalesces same-tick stdout into one
37
+ // event), so the pointer — not chunking — is what keeps the content loss-free.
38
+ spillDir: relayEnv(process.env, "AGENT_RELAY_SCRATCH_DIR"),
39
+ });
40
+ if (plan.events[0]) console.log(plan.events[0].text);
41
+ ws.send(JSON.stringify({
42
+ type: "message.delivered",
43
+ deliveryId: typeof payload.deliveryId === "string" ? payload.deliveryId : "",
44
+ // The control server's ack is intentionally the planned ids, never an optimistic input echo.
45
+ messageIds: plan.events[0]?.messageIds ?? [],
46
+ }));
47
+ };
48
+
49
+ ws.onerror = () => process.exit(1);
50
+
51
+ function parsePayload(raw: string): Record<string, unknown> | null {
52
+ try {
53
+ const parsed = JSON.parse(raw);
54
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed as Record<string, unknown> : null;
55
+ } catch {
56
+ return null;
57
+ }
58
+ }
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: disconnect
3
+ description: End the current Humwick pair session. Use when the user invokes /disconnect or asks to hang up, unpair, or disconnect from a paired agent.
4
+ argument-hint: "[PAIR_ID]"
5
+ allowed-tools: [Bash]
6
+ ---
7
+
8
+ # Humwick Disconnect
9
+
10
+ Run:
11
+
12
+ ```bash
13
+ agent-relay /disconnect $ARGUMENTS
14
+ ```
15
+
16
+ If no pair id is supplied, the CLI ends the active pair for this session. Report the result briefly.
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: label
3
+ description: Read, set, or clear the current Humwick agent label. Use when the user invokes /label or asks to rename this relay agent.
4
+ argument-hint: "[LABEL|--clear]"
5
+ allowed-tools: [Bash]
6
+ ---
7
+
8
+ # Humwick Label
9
+
10
+ Run:
11
+
12
+ ```bash
13
+ agent-relay /label $ARGUMENTS
14
+ ```
15
+
16
+ Examples:
17
+
18
+ ```bash
19
+ agent-relay /label backend-fixer
20
+ agent-relay /label --clear
21
+ ```
22
+
23
+ Report the new label or current label briefly.
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: message
3
+ description: Send a normal Humwick message to another agent, label, tag, capability, policy, or broadcast target. Use when the user invokes /message or asks to send a one-off relay message.
4
+ argument-hint: "<target> <message|--stdin|--body-file PATH> [--subject TEXT] [--channel NAME]"
5
+ allowed-tools: [Bash]
6
+ ---
7
+
8
+ # Humwick Message
9
+
10
+ ⚠️ **SECURITY — never inline the message body in the shell command.** A body with
11
+ markdown backticks `` `like this` `` or `$(...)` would be shell-executed (command
12
+ substitution) before `agent-relay` sees it — a command-injection vector (#1262),
13
+ since the body may quote another agent's or a user's text. **Feed the body through
14
+ stdin via a quoted heredoc** (the `'RELAY_EOF'` quotes disable all expansion):
15
+
16
+ ```bash
17
+ agent-relay /message <target> --stdin <<'RELAY_EOF'
18
+ Your message text. Backticks `bun run release` and $(anything) are delivered
19
+ verbatim and are NOT executed.
20
+ RELAY_EOF
21
+ ```
22
+
23
+ Targets (the `<target>` positional) can be an agent id, `tag:`, `policy:`, `cap:`, or
24
+ `broadcast`:
25
+
26
+ ```bash
27
+ agent-relay /message codex --stdin <<'RELAY_EOF'
28
+ Can you look at that failing action?
29
+ RELAY_EOF
30
+
31
+ agent-relay /message tag:backend --stdin <<'RELAY_EOF'
32
+ Does anyone see the regression?
33
+ RELAY_EOF
34
+ ```
35
+
36
+ For a message you have already staged in a file, use `--body-file PATH` instead.
37
+
38
+ **Do NOT** build `agent-relay /message <target> "…body…"` with the body inside quotes.
39
+
40
+ Report the sent message id briefly.
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: pair
3
+ description: Start, inspect, accept, reject, or send messages in an Humwick two-agent pair session. Use when the user invokes /pair or asks to pair this agent with Codex, Claude, or another relay agent.
4
+ argument-hint: "<target|status|accept|reject|send> [args]"
5
+ allowed-tools: [Bash]
6
+ ---
7
+
8
+ # Humwick Pair
9
+
10
+ Run the Humwick CLI with the user's arguments:
11
+
12
+ ```bash
13
+ agent-relay /pair $ARGUMENTS
14
+ ```
15
+
16
+ Use this for pair-session commands such as:
17
+
18
+ ```bash
19
+ agent-relay /pair codex "Debug flaky tests"
20
+ agent-relay /pair status
21
+ agent-relay /pair accept PAIR_ID
22
+ agent-relay /pair reject PAIR_ID
23
+ agent-relay /pair send PAIR_ID --stdin <<'EOF'
24
+ What do you see?
25
+ EOF
26
+ ```
27
+
28
+ Report the command output briefly. If the CLI cannot detect this session's agent id, rerun with `--agent AGENT_ID` or `--from AGENT_ID` using the Humwick ID shown in session context.
29
+
30
+ Always pass the message body via a quoted heredoc into `--stdin` (or `--body-file PATH`), never inline in the shell command: backticks / `$(...)` in a body are otherwise command-substituted by your shell before `agent-relay` runs (#1263).
@@ -0,0 +1,18 @@
1
+ ---
2
+ name: react
3
+ description: Add or remove an Humwick reaction on a message. Use for lightweight acknowledgement, approval, thanks, or good-job responses when no text reply is needed.
4
+ argument-hint: "<messageId> <emoji> [--remove]"
5
+ allowed-tools: [Bash]
6
+ ---
7
+
8
+ # Humwick React
9
+
10
+ Run:
11
+
12
+ ```bash
13
+ agent-relay /react $ARGUMENTS
14
+ ```
15
+
16
+ Use reactions instead of text when the message only needs lightweight acknowledgement, approval, thanks, or "good job".
17
+
18
+ Do not use reactions when the sender asked a question, gave a new task, reported a bug, or needs a result in text.
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: read-message
3
+ description: Fetch a full Humwick message by ID, including full body, attachments, metadata, and thread context. Use when a delivered Relay preview is truncated or when the user asks to inspect a relay message.
4
+ argument-hint: "<messageId> [--json|--body]"
5
+ allowed-tools: [Bash]
6
+ ---
7
+
8
+ # Humwick Read Message
9
+
10
+ Run:
11
+
12
+ ```bash
13
+ agent-relay get-message $ARGUMENTS
14
+ ```
15
+
16
+ Useful forms:
17
+
18
+ ```bash
19
+ agent-relay get-message 206
20
+ agent-relay get-message 206 --json
21
+ agent-relay get-message 206 --body
22
+ ```
23
+
24
+ Use `--body` when you only need the complete message text. Use `--json` when attachments, metadata, or thread context matter.
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: reply
3
+ description: Reply to an Humwick message by ID. Auto-routes to the sender and inherits channel context — no target needed. Use when the user invokes /reply or asks to reply to a specific relay message, especially with stdin/file for long replies.
4
+ argument-hint: "<messageId> <message|--stdin|--body-file PATH>"
5
+ allowed-tools: [Bash]
6
+ ---
7
+
8
+ # Humwick Reply
9
+
10
+ ⚠️ **SECURITY — never inline the reply body in the shell command.** Your shell runs
11
+ the command you type, so a body containing markdown backticks `` `like this` `` or
12
+ `$(...)` would be executed as a shell command *before* `agent-relay` ever sees it
13
+ (command substitution). This is a real command-injection vector (#1262): the body may
14
+ quote another agent's or a user's text. **Always feed the body through stdin via a
15
+ quoted heredoc**, which disables all shell expansion and delivers the body verbatim.
16
+
17
+ Run (safe — quoted `'RELAY_EOF'` delimiter means no expansion, no substitution):
18
+
19
+ ```bash
20
+ agent-relay /reply <messageId> --stdin <<'RELAY_EOF'
21
+ Your reply text here. Backticks `bun run release` and $(anything) are delivered
22
+ verbatim and are NOT executed.
23
+ RELAY_EOF
24
+ ```
25
+
26
+ The server auto-routes the reply to the original sender and inherits the channel
27
+ (Telegram, Slack, etc.) if applicable. No target or channel ID needed.
28
+
29
+ For a reply you have already staged in a file, use `--body-file` instead:
30
+
31
+ ```bash
32
+ agent-relay /reply <messageId> --body-file .agent-relay/sessions/$AGENT_RELAY_ID/tmp/reply.md
33
+ ```
34
+
35
+ The relay creates that per-session scratch dir for you (git-ignored locally), so
36
+ staging there never pollutes the working tree and never collides with other agents.
37
+ No cleanup needed — the dir is reaped when your session ends. Oversized replies are
38
+ automatically uploaded as an Humwick artifact and sent as an attached concise reply.
39
+
40
+ **Do NOT** build `agent-relay /reply <id> "…body…"` with the body inside quotes — the
41
+ heredoc `--stdin` form above is the only safe way to pass free text.
42
+
43
+ Do not send a separate Relay follow-up that only confirms the reply was sent. The CLI
44
+ output is enough local confirmation.
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: send-claimable
3
+ description: Send a claimable Humwick work item so one matching agent can claim and handle it. Use when the user invokes /send-claimable or wants to enqueue work for another agent.
4
+ argument-hint: "<target> <message|--stdin|--body-file PATH> [--subject TEXT] [--channel NAME]"
5
+ allowed-tools: [Bash]
6
+ ---
7
+
8
+ # Humwick Send Claimable
9
+
10
+ ⚠️ **SECURITY — never inline the work-item body in the shell command.** A body with
11
+ markdown backticks `` `like this` `` or `$(...)` would be shell-executed (command
12
+ substitution) before `agent-relay` sees it — a command-injection vector (#1262).
13
+ **Feed the body through stdin via a quoted heredoc** (the `'RELAY_EOF'` quotes disable
14
+ all expansion, delivering the body verbatim):
15
+
16
+ ```bash
17
+ agent-relay /send-claimable <target> --stdin <<'RELAY_EOF'
18
+ Describe the work item here. Backticks `bun run release` and $(anything) are
19
+ delivered verbatim and are NOT executed.
20
+ RELAY_EOF
21
+ ```
22
+
23
+ Targets can be an agent id, `tag:`, `cap:`, or `policy:`:
24
+
25
+ ```bash
26
+ agent-relay /send-claimable tag:backend --stdin <<'RELAY_EOF'
27
+ Fix the failing API test
28
+ RELAY_EOF
29
+
30
+ agent-relay /send-claimable cap:review --stdin <<'RELAY_EOF'
31
+ Review the migration patch
32
+ RELAY_EOF
33
+ ```
34
+
35
+ For a work item you have already staged in a file, use `--body-file PATH` instead.
36
+
37
+ **Do NOT** build `agent-relay /send-claimable <target> "…body…"` with the body inside quotes.
38
+
39
+ Report the sent claimable message id briefly.
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: slice-first
3
+ description: Frame and prove a thin end-to-end feature slice before planning hardening. Use for new feature coordination or stage decisions in any project.
4
+ ---
5
+
6
+ # Slice first
7
+
8
+ Use the current project's instructions and configured validation/deployment gates,
9
+ including its “How to validate in THIS project” brief or `.agent-relay/land-gates.json`.
10
+ Choose the proof's location and runtime in that project; no particular repo is required.
11
+
12
+ | Stage | Required result |
13
+ |---|---|
14
+ | frame | Write and commit the executable proof FIRST; it fails for the right reason. Then a slice spec, max one page: path, proof command, allowed shortcuts, fixed v1 bar, unknowns, harden budget (default 6 Tasks). |
15
+ | slice | One builder, one branch, all layers, flag off by default. Proof passes on a deployed/ephemeral instance and a different agent reproduces it. |
16
+ | harden | Only after independent proof passes: plan small changes to the working feature; re-run the proof at every delivery. |
17
+ | v1 | Fixed bar met; enable flag; file remaining work as future issues outside the DAG. |
18
+ | closed | Record closure. |
19
+
20
+ Coordinator owns stages, scope ledger and budget; record stage decisions on the spec
21
+ Task. Changing the bar or exceeding the budget needs operator approval. A blocked
22
+ slice returns to frame. Never create or spawn harden Tasks before the proof Task is
23
+ done with `slice-proof: pass`; dependencies alone do not prevent dispatch.
24
+
25
+ Design writes proof then spec, no full design. Builder declares each slice shortcut
26
+ in delivery risks. QA reproduces independently. Review blocks only on the stage's
27
+ bar: declared slice shortcuts may pass; unmet harden/v1 criteria block. Outside-bar
28
+ findings are future work.
29
+
30
+ `slice-proof` supplements project gates; it never replaces them. Record command,
31
+ revision and instance with the result. For coordinators building a plan, load
32
+ [references/plan-recipe.md](references/plan-recipe.md). Other roles need no recipe.
@@ -0,0 +1,46 @@
1
+ # Plan recipe (coordinator only)
2
+
3
+ 1. **Frame.** `relay_plan_create { title:"<feature>", acceptance:[{ id, text, check?:{ path }|{ command } }] }`.
4
+ Acceptance is required: the plan's own bar (the design doc's deliverables, deletions and
5
+ acceptance commands), one checkable item each. Then create and bind the spec Task:
6
+ `relay_task_create { intent, issueRefs:["#<feature>"] }` →
7
+ `relay_plan_add_node { planId, node:{ id:"spec", label:"Slice spec", lane:"frame", refs:{ taskId:<spec> } } }`.
8
+ Record the fixed v1 bar and budget on this Task; spawn `software-design` on it.
9
+ 2. **Slice.** Create the build Task (normal landing Task) and the proof Task. The proof
10
+ Task must not land: `relay_task_create { intent:"Independent slice proof",
11
+ doneWhen:"delivered", dispatch:{ type:"review" }, context:"<proof command>; <instance>" }`.
12
+ Add both as nodes (lane `slice`, `refs:{ taskId }`) and edges `spec→build`, `build→proof`
13
+ (`relay_plan_add_edge { planId, from, to }`: `to` depends on `from`; edges between bound
14
+ nodes become Task dependencies). Spawn a `worker` on `build`; when its project delivery/deployment
15
+ gates pass, spawn `QA` on `proof`.
16
+ 3. **Gate.** The prover delivers the proof Task; that closes it `done` with no land attempt
17
+ because it is a delivered review Task. `relay_task_record_gate` alone does not finish it,
18
+ so its harden dependents stay on an open upstream.
19
+ - Pass: `relay_task_deliver { disposition:"complete", summary, gates:{ other:[{ name:"slice-proof", status:"pass", detail:"<command> @ <sha> on <instance>" }] } }`
20
+ - Fail: `relay_task_deliver { disposition:"failed", summary, reason:"<blocker>", gates:{ other:[{ name:"slice-proof", status:"fail", detail }] } }`
21
+
22
+ Fail → frame again (new spec revision, same plan). Pass → verify the proof Task is
23
+ `done` with `slice-proof: pass`, then record the stage on the spec Task:
24
+ `relay_task_memory_append_decision { taskId:<spec>, decision:"stage: harden" }`.
25
+ 4. **Harden.** Only now add harden nodes (lane `harden`, bound to their Tasks), each with
26
+ an edge `proof→<node>`, up to the budget. Each harden builder delivers normally and adds
27
+ the proof re-run: `relay_task_deliver { disposition:"complete", summary, commits,
28
+ idempotencyKey, gates:{ test:{ status:"pass" }, other:[{ name:"slice-proof", status:"pass" }] } }`.
29
+ 5. **Conformance.** When every node lands the plan reads `completion:"conformance-pending"`,
30
+ not done, and you get a `plan.conformance-pending` notice. Fetch, check each acceptance item
31
+ on the main tip (or spawn a fresh agent to audit it), then
32
+ `relay_plan_conformance { planId, mainSha:<origin/main tip>, items:[{ id, status:"met"|"unmet", note? }] }`.
33
+ A gap files one bound Task per unmet item and reopens the plan; repeat after they land.
34
+ Only a pass makes the plan `done`.
35
+ 6. **v1/closed.** Bar met → flag on, file "future" issues, record `stage: v1`;
36
+ after closure, record `stage: closed` and archive the plan.
37
+
38
+ Before spawning a harden builder, read `relay_task_get { taskId:<harden>, verbose:true }`
39
+ for `dependsOn`, then `relay_task_get { taskId:<proof>, verbose:true }`; require
40
+ `status:"done"` and `slice-proof` with `status:"pass"`. Relay records dependencies;
41
+ the coordinator enforces dispatch order. Validate with the project's own commands
42
+ from its spawn brief/config; the proof is an additional gate.
43
+
44
+ Check gate order any time with `relay_plan_get { planId, mode:"lean" }`: every
45
+ `harden` node must have `proof` upstream, and no harden node may exist while the proof
46
+ Task is not complete with a passing `slice-proof` gate.
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: status
3
+ description: Show Humwick status for this session, including relay health, current agent id, label, tags, readiness, and active pair state. Use when the user invokes /status or asks for relay connection status.
4
+ argument-hint: "[--json]"
5
+ allowed-tools: [Bash]
6
+ ---
7
+
8
+ # Humwick Status
9
+
10
+ Run:
11
+
12
+ ```bash
13
+ agent-relay /status $ARGUMENTS
14
+ ```
15
+
16
+ Summarize the current relay connection, agent identity, label, tags, and active pair state.
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: tags
3
+ description: List or update Humwick tags for the current session. Use when the user invokes /tags or asks to set, add, remove, or inspect relay tags.
4
+ argument-hint: "[TAG ...|--list|--add TAGS|--remove TAGS]"
5
+ allowed-tools: [Bash]
6
+ ---
7
+
8
+ # Humwick Tags
9
+
10
+ Run:
11
+
12
+ ```bash
13
+ agent-relay /tags $ARGUMENTS
14
+ ```
15
+
16
+ Examples:
17
+
18
+ ```bash
19
+ agent-relay /tags
20
+ agent-relay /tags backend tests urgent
21
+ agent-relay /tags --add backend,tests
22
+ agent-relay /tags --remove urgent
23
+ ```
24
+
25
+ Report the resulting tags briefly.
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: agent-relay-task
3
+ description: Use Humwick Task tools to create, update, and document durable work records. Use when coordinating multi-step work or when your brief was spawned from a Task.
4
+ ---
5
+
6
+ # Humwick Task
7
+
8
+ Use Relay Task tools for durable work tracking instead of burying state in chat.
9
+
10
+ Coordinators:
11
+
12
+ - Create a Task before multi-step work with `relay_task_create`.
13
+ - Set `intent`, `complexity`, and useful `context`; add `doneWhen`, `dispatch`, refs, or dependencies when they clarify routing.
14
+ - Spawn workers from the Task so they inherit the Task context.
15
+
16
+ Workers:
17
+
18
+ - Use `relay_task_set_status` as work moves through `in_progress`, `blocked`, `done`, `failed`, or `canceled`.
19
+ - Use `relay_task_memory_replace_working_state` for current progress a retry agent needs.
20
+ - Use `relay_task_memory_append_decision` for durable choices and rationale.
21
+ - Use `relay_task_memory_append_ruled_out` for dead ends, failed approaches, and why they were rejected.
22
+
23
+ Useful reads and updates:
24
+
25
+ - `relay_task_get` and `relay_task_history` inspect the Task and audit timeline.
26
+ - `relay_task_update` refreshes intent, context, latest steer, doneWhen, complexity, or dispatch.
27
+ - `relay_task_record_gate` records tests, typecheck, docs, smoke, and other quality gates.
28
+ - `relay_task_dispatch` maps Task shape to a concrete spawn and launches it bound to the Task (shared spawn path). Idempotent retry needs a caller-supplied spawnRequestId, as with relay_spawn_agent.
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "agent-relay-output-style",
3
+ "description": "Suppress Claude Code's redundant default output-style instructions for Relay-managed sessions",
4
+ "version": "0.129.23"
5
+ }
@@ -0,0 +1,5 @@
1
+ ---
2
+ name: Agent Relay
3
+ description: Relay-managed sessions provide their communication rules through the agent profile.
4
+ force-for-plugin: true
5
+ ---
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: disconnect
3
+ description: End the current Humwick pair session. Use when the user invokes /disconnect or asks to hang up, unpair, or disconnect from a paired agent.
4
+ argument-hint: "[PAIR_ID]"
5
+ ---
6
+
7
+ # Humwick Disconnect
8
+
9
+ Run:
10
+
11
+ ```bash
12
+ agent-relay /disconnect $ARGUMENTS
13
+ ```
14
+
15
+ If no pair id is supplied, the CLI ends the active pair for this session. Report the result briefly.
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: guide
3
+ description: Show the Humwick command guide for coding agents. Use when the user invokes /guide or asks how to use Humwick messaging, replies, pair sessions, labels, tags, targets, or claimable work.
4
+ argument-hint: ""
5
+ ---
6
+
7
+ # Humwick Guide
8
+
9
+ Run:
10
+
11
+ ```bash
12
+ agent-relay /guide
13
+ ```
14
+
15
+ Use this before guessing Relay commands. The guide explains reply, message, pair, status, label, tag, target, and claimable-work commands.
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: label
3
+ description: Read, set, or clear the current Humwick agent label. Use when the user invokes /label or asks to rename this relay agent.
4
+ argument-hint: "[LABEL|--clear]"
5
+ ---
6
+
7
+ # Humwick Label
8
+
9
+ Run:
10
+
11
+ ```bash
12
+ agent-relay /label $ARGUMENTS
13
+ ```
14
+
15
+ Examples:
16
+
17
+ ```bash
18
+ agent-relay /label backend-fixer
19
+ agent-relay /label --clear
20
+ ```
21
+
22
+ Report the new label or current label briefly.
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: message
3
+ description: Send a normal Humwick message to another agent, label, tag, capability, policy, or broadcast target. Use when the user invokes /message or asks to send a one-off relay message.
4
+ argument-hint: "<target> <message|--stdin|--body-file PATH> [--subject TEXT] [--channel NAME]"
5
+ allowed-tools: [Bash]
6
+ ---
7
+
8
+ # Humwick Message
9
+
10
+ ⚠️ **SECURITY — never inline the message body in the shell command.** A body with
11
+ markdown backticks `` `like this` `` or `$(...)` would be shell-executed (command
12
+ substitution) before `agent-relay` sees it — a command-injection vector (#1262),
13
+ since the body may quote another agent's or a user's text. **Feed the body through
14
+ stdin via a quoted heredoc** (the `'RELAY_EOF'` quotes disable all expansion):
15
+
16
+ ```bash
17
+ agent-relay /message <target> --stdin <<'RELAY_EOF'
18
+ Your message text. Backticks `bun run release` and $(anything) are delivered
19
+ verbatim and are NOT executed.
20
+ RELAY_EOF
21
+ ```
22
+
23
+ Targets (the `<target>` positional) can be an agent id, `tag:`, `policy:`, `cap:`, or
24
+ `broadcast`:
25
+
26
+ ```bash
27
+ agent-relay /message codex --stdin <<'RELAY_EOF'
28
+ Can you look at that failing action?
29
+ RELAY_EOF
30
+
31
+ agent-relay /message tag:backend --stdin <<'RELAY_EOF'
32
+ Does anyone see the regression?
33
+ RELAY_EOF
34
+ ```
35
+
36
+ For a message you have already staged in a file, use `--body-file PATH` instead.
37
+
38
+ **Do NOT** build `agent-relay /message <target> "…body…"` with the body inside quotes.
39
+
40
+ Report the sent message id briefly.
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: pair
3
+ description: Start, inspect, accept, reject, or send messages in an Humwick two-agent pair session. Use when the user invokes /pair or asks to pair this agent with Codex, Claude, or another relay agent.
4
+ argument-hint: "<target|status|accept|reject|send> [args]"
5
+ ---
6
+
7
+ # Humwick Pair
8
+
9
+ Run the Humwick CLI with the user's arguments:
10
+
11
+ ```bash
12
+ agent-relay /pair $ARGUMENTS
13
+ ```
14
+
15
+ Use this for pair-session commands such as:
16
+
17
+ ```bash
18
+ agent-relay /pair codex "Debug flaky tests"
19
+ agent-relay /pair status
20
+ agent-relay /pair accept PAIR_ID
21
+ agent-relay /pair reject PAIR_ID
22
+ agent-relay /pair send PAIR_ID --stdin <<'EOF'
23
+ What do you see?
24
+ EOF
25
+ ```
26
+
27
+ Report the command output briefly. If the CLI cannot detect this session's agent id, rerun with `--agent AGENT_ID` or `--from AGENT_ID` using the Humwick ID shown in session context.
28
+
29
+ Always pass the message body via a quoted heredoc into `--stdin` (or `--body-file PATH`), never inline in the shell command: backticks / `$(...)` in a body are otherwise command-substituted by your shell before `agent-relay` runs (#1263).
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: react
3
+ description: Add or remove an Humwick reaction on a message. Use for lightweight acknowledgement, approval, thanks, or good-job responses when no text reply is needed.
4
+ argument-hint: "<messageId> <emoji> [--remove]"
5
+ ---
6
+
7
+ # Humwick React
8
+
9
+ Run:
10
+
11
+ ```bash
12
+ agent-relay /react $ARGUMENTS
13
+ ```
14
+
15
+ Use reactions instead of text when the message only needs lightweight acknowledgement, approval, thanks, or "good job".
16
+
17
+ Do not use reactions when the sender asked a question, gave a new task, reported a bug, or needs a result in text.
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: read-message
3
+ description: Fetch a full Humwick message by ID, including full body, attachments, metadata, and thread context. Use when a delivered Relay preview is truncated or when the user asks to inspect a relay message.
4
+ argument-hint: "<messageId> [--json|--body]"
5
+ ---
6
+
7
+ # Humwick Read Message
8
+
9
+ Run:
10
+
11
+ ```bash
12
+ agent-relay get-message $ARGUMENTS
13
+ ```
14
+
15
+ Useful forms:
16
+
17
+ ```bash
18
+ agent-relay get-message 206
19
+ agent-relay get-message 206 --json
20
+ agent-relay get-message 206 --body
21
+ ```
22
+
23
+ Use `--body` when you only need the complete message text. Use `--json` when attachments, metadata, or thread context matter.