@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.
- package/LICENSE +167 -0
- package/agent-bin/agent-relay-browser +10 -0
- package/agent-bin/humwick +10 -0
- package/hooks/fff-search-redirect/fff-search-redirect.cjs +161 -0
- package/hooks/fff-search-redirect/hooks.json +13 -0
- package/hooks/rg-r-guard/hooks.json +18 -0
- package/hooks/rg-r-guard/rg-r-guard.cjs +144 -0
- package/hooks/web-tools-redirect/hooks.json +13 -0
- package/hooks/web-tools-redirect/web-tools-redirect.cjs +84 -0
- package/node_modules/@humwick/offload/LICENSE +167 -0
- package/node_modules/@humwick/offload/README.md +57 -0
- package/node_modules/@humwick/offload/dist/async-runner.d.ts +18 -0
- package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/async-runner.js +158 -0
- package/node_modules/@humwick/offload/dist/async-runner.js.map +1 -0
- package/node_modules/@humwick/offload/dist/envelope.d.ts +25 -0
- package/node_modules/@humwick/offload/dist/envelope.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/envelope.js +80 -0
- package/node_modules/@humwick/offload/dist/envelope.js.map +1 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +10 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +59 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +1 -0
- package/node_modules/@humwick/offload/dist/index.d.ts +5 -0
- package/node_modules/@humwick/offload/dist/index.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/index.js +5 -0
- package/node_modules/@humwick/offload/dist/index.js.map +1 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +62 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.js +295 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +1 -0
- package/node_modules/@humwick/offload/dist/types.d.ts +111 -0
- package/node_modules/@humwick/offload/dist/types.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/types.js +176 -0
- package/node_modules/@humwick/offload/dist/types.js.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts +23 -0
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-pool.js +435 -0
- package/node_modules/@humwick/offload/dist/worker-pool.js.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +2 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.js +27 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.js.map +1 -0
- package/node_modules/@humwick/offload/dist/worker.d.ts +5 -0
- package/node_modules/@humwick/offload/dist/worker.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/worker.js +1 -0
- package/node_modules/@humwick/offload/dist/worker.js.map +1 -0
- package/node_modules/@humwick/offload/package.json +46 -0
- package/node_modules/@humwick/offload/src/async-runner.ts +170 -0
- package/node_modules/@humwick/offload/src/envelope.ts +92 -0
- package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +49 -0
- package/node_modules/@humwick/offload/src/index.ts +4 -0
- package/node_modules/@humwick/offload/src/subprocess-runner.ts +334 -0
- package/node_modules/@humwick/offload/src/types.ts +235 -0
- package/node_modules/@humwick/offload/src/worker-pool.ts +463 -0
- package/node_modules/@humwick/offload/src/worker-runtime.ts +32 -0
- package/node_modules/@humwick/offload/src/worker.ts +5 -0
- package/package.json +47 -4
- package/plugins/browser/skills/playwright-cli/SKILL.md +53 -0
- package/plugins/claude/.claude-plugin/plugin.json +8 -0
- package/plugins/claude/claude-statusline-probe.cjs +144 -0
- package/plugins/claude/hooks/gate-run-guard.provisioned.mjs +914 -0
- package/plugins/claude/hooks/gate-run-guard.sh +9 -0
- package/plugins/claude/hooks/gate-run-guard.ts +237 -0
- package/plugins/claude/hooks/hooks.json +158 -0
- package/plugins/claude/hooks/kill-guard.provisioned.mjs +7027 -0
- package/plugins/claude/hooks/kill-guard.sh +341 -0
- package/plugins/claude/hooks/kill-guard.ts +337 -0
- package/plugins/claude/hooks/permission-request.sh +22 -0
- package/plugins/claude/hooks/post-compact.sh +10 -0
- package/plugins/claude/hooks/post-tool-use.sh +8 -0
- package/plugins/claude/hooks/pre-compact.sh +12 -0
- package/plugins/claude/hooks/read-only-bash-guard.sh +587 -0
- package/plugins/claude/hooks/relay-status.sh +373 -0
- package/plugins/claude/hooks/session-end.sh +26 -0
- package/plugins/claude/hooks/session-start.sh +31 -0
- package/plugins/claude/hooks/shell-trust.ts +28 -0
- package/plugins/claude/hooks/stop-failure.sh +47 -0
- package/plugins/claude/hooks/stop.sh +48 -0
- package/plugins/claude/hooks/subagent-guard.cjs +26 -0
- package/plugins/claude/hooks/subagent-skill-policy.cjs +160 -0
- package/plugins/claude/hooks/subagent-start.sh +13 -0
- package/plugins/claude/hooks/subagent-stop.sh +19 -0
- package/plugins/claude/hooks/user-prompt-submit.sh +18 -0
- package/plugins/claude/hooks/wait-loop-guard.ts +120 -0
- package/plugins/claude/monitors/monitors.json +7 -0
- package/plugins/claude/monitors/relay-monitor.provisioned.mjs +786 -0
- package/plugins/claude/monitors/relay-monitor.ts +58 -0
- package/plugins/claude/skills/disconnect/SKILL.md +16 -0
- package/plugins/claude/skills/label/SKILL.md +23 -0
- package/plugins/claude/skills/message/SKILL.md +40 -0
- package/plugins/claude/skills/pair/SKILL.md +30 -0
- package/plugins/claude/skills/react/SKILL.md +18 -0
- package/plugins/claude/skills/read-message/SKILL.md +24 -0
- package/plugins/claude/skills/reply/SKILL.md +44 -0
- package/plugins/claude/skills/send-claimable/SKILL.md +39 -0
- package/plugins/claude/skills/slice-first/SKILL.md +32 -0
- package/plugins/claude/skills/slice-first/references/plan-recipe.md +46 -0
- package/plugins/claude/skills/status/SKILL.md +16 -0
- package/plugins/claude/skills/tags/SKILL.md +25 -0
- package/plugins/claude/skills/task/SKILL.md +28 -0
- package/plugins/claude-output-style/.claude-plugin/plugin.json +5 -0
- package/plugins/claude-output-style/output-styles/agent-relay.md +5 -0
- package/plugins/codex/skills/disconnect/SKILL.md +15 -0
- package/plugins/codex/skills/guide/SKILL.md +15 -0
- package/plugins/codex/skills/label/SKILL.md +22 -0
- package/plugins/codex/skills/message/SKILL.md +40 -0
- package/plugins/codex/skills/pair/SKILL.md +29 -0
- package/plugins/codex/skills/react/SKILL.md +17 -0
- package/plugins/codex/skills/read-message/SKILL.md +23 -0
- package/plugins/codex/skills/reply/SKILL.md +44 -0
- package/plugins/codex/skills/send-claimable/SKILL.md +39 -0
- package/plugins/codex/skills/slice-first/SKILL.md +32 -0
- package/plugins/codex/skills/slice-first/references/plan-recipe.md +46 -0
- package/plugins/codex/skills/status/SKILL.md +15 -0
- package/plugins/codex/skills/tags/SKILL.md +24 -0
- package/plugins/codex/skills/task/SKILL.md +28 -0
- package/src/adapter.ts +1061 -0
- package/src/adapters/__fixtures__/codex-app-server.ts +47 -0
- package/src/adapters/claude-api.ts +243 -0
- package/src/adapters/claude-context-command.ts +16 -0
- package/src/adapters/claude-credentials.ts +22 -0
- package/src/adapters/claude-delivery-lanes.ts +28 -0
- package/src/adapters/claude-delivery.ts +166 -0
- package/src/adapters/claude-effort.ts +94 -0
- package/src/adapters/claude-exit.ts +290 -0
- package/src/adapters/claude-headless-mirror.ts +88 -0
- package/src/adapters/claude-headless-refusal.ts +51 -0
- package/src/adapters/claude-headless.ts +617 -0
- package/src/adapters/claude-monitor-delivery-plan.ts +317 -0
- package/src/adapters/claude-permission.ts +243 -0
- package/src/adapters/claude-prompt-gates.ts +269 -0
- package/src/adapters/claude-prompt-hook.ts +145 -0
- package/src/adapters/claude-session-capture.ts +293 -0
- package/src/adapters/claude-session-probe.ts +414 -0
- package/src/adapters/claude-shutdown.ts +190 -0
- package/src/adapters/claude-status-detectors.ts +426 -0
- package/src/adapters/claude-subagents.ts +93 -0
- package/src/adapters/claude-submit-confirmation.ts +287 -0
- package/src/adapters/claude-tmux.ts +548 -0
- package/src/adapters/claude-token-usage-capture.ts +253 -0
- package/src/adapters/claude-tool-policy.ts +165 -0
- package/src/adapters/claude-transcript-tail.ts +193 -0
- package/src/adapters/claude-transcript.ts +812 -0
- package/src/adapters/claude.ts +1097 -0
- package/src/adapters/codex-agent-message-capture.ts +189 -0
- package/src/adapters/codex-app-server.ts +70 -0
- package/src/adapters/codex-client.ts +362 -0
- package/src/adapters/codex-effective-config.ts +87 -0
- package/src/adapters/codex-launch-config.ts +153 -0
- package/src/adapters/codex-rollout-context.ts +272 -0
- package/src/adapters/codex-skill-discovery.ts +18 -0
- package/src/adapters/codex-token-usage-capture.ts +163 -0
- package/src/adapters/codex-tool-output.ts +53 -0
- package/src/adapters/codex-turn-outcome.ts +27 -0
- package/src/adapters/codex-version.ts +64 -0
- package/src/adapters/codex.ts +1442 -0
- package/src/adapters/incremental-file.ts +110 -0
- package/src/adapters/opencode-api.ts +71 -0
- package/src/adapters/opencode-context.ts +277 -0
- package/src/adapters/opencode-model-registry.ts +126 -0
- package/src/adapters/opencode-provider.ts +169 -0
- package/src/adapters/opencode-server-retry.ts +50 -0
- package/src/adapters/opencode-soft-steer.ts +302 -0
- package/src/adapters/opencode-spawn.ts +145 -0
- package/src/adapters/opencode-subscribe.ts +62 -0
- package/src/adapters/opencode-token-usage-capture.ts +187 -0
- package/src/adapters/opencode-tool-events.ts +302 -0
- package/src/adapters/opencode-tools-config.ts +17 -0
- package/src/adapters/opencode.ts +2264 -0
- package/src/adapters/project-shell.ts +80 -0
- package/src/adapters/provider-launch-config.ts +21 -0
- package/src/adapters/provider-quota-harvest.ts +127 -0
- package/src/adapters/service-access.ts +153 -0
- package/src/adapters/tmux-offload.ts +207 -0
- package/src/adapters/tool-summary.ts +214 -0
- package/src/agent-redact.ts +75 -0
- package/src/agent-runner/commands/dispatch.ts +185 -0
- package/src/agent-runner/commands/lifecycle.ts +84 -0
- package/src/agent-runner/commands/prompt.ts +284 -0
- package/src/agent-runner/credentials.ts +208 -0
- package/src/agent-runner/http-liveness.ts +85 -0
- package/src/agent-runner/lifecycle-milestones.ts +207 -0
- package/src/agent-runner/lifecycle-phase.ts +80 -0
- package/src/agent-runner/registration.ts +163 -0
- package/src/agent-runner/runner-context.ts +158 -0
- package/src/agent-runner/session-mirror.ts +278 -0
- package/src/agent-runner/task-claims.ts +116 -0
- package/src/agent-runner/token-usage-coverage.ts +54 -0
- package/src/agent-runner/turn-report.ts +269 -0
- package/src/api-budget-accounting.ts +91 -0
- package/src/area-memory.ts +255 -0
- package/src/artifact-path-materialize.ts +52 -0
- package/src/async-guard.ts +35 -0
- package/src/attachment-cache-sweep.ts +31 -0
- package/src/attachment-cache.ts +195 -0
- package/src/background-script-reconcile.ts +106 -0
- package/src/bounded-log.ts +59 -0
- package/src/bounded-spawn-sync.ts +18 -0
- package/src/busy-reconciler.ts +282 -0
- package/src/claim-tracker.ts +140 -0
- package/src/claude-settings.ts +167 -0
- package/src/claude-workspace-trust.ts +289 -0
- package/src/config.ts +547 -0
- package/src/context-boundary.ts +101 -0
- package/src/context-command.ts +151 -0
- package/src/context-probe-state.ts +6 -0
- package/src/continuation-archive.ts +179 -0
- package/src/control-server.ts +730 -0
- package/src/delivery-policy.ts +9 -0
- package/src/delivery-result.ts +24 -0
- package/src/effort-command.ts +125 -0
- package/src/empty-turn.ts +816 -0
- package/src/free-port.ts +25 -0
- package/src/fs-offload.ts +26 -0
- package/src/gate-run-config.ts +35 -0
- package/src/gate-run-lease-probe.ts +38 -0
- package/src/host-asset-plan.ts +450 -0
- package/src/host-claude-config-worker.ts +34 -0
- package/src/host-sources.ts +40 -0
- package/src/inbox-carrier.ts +7 -0
- package/src/index.ts +386 -0
- package/src/launch-assembly.ts +955 -0
- package/src/liveness.ts +105 -0
- package/src/logger.ts +108 -0
- package/src/mcp-outbox.ts +204 -0
- package/src/mcp-preflight.ts +86 -0
- package/src/mcp-source-selection.ts +54 -0
- package/src/mcp-tool-deferral.ts +35 -0
- package/src/mcp-vault-env.ts +25 -0
- package/src/message-body-config/config.ts +16 -0
- package/src/message-body-config.ts +1 -0
- package/src/mid-turn-delivery.ts +43 -0
- package/src/native-memory-lever.ts +329 -0
- package/src/native-self-resume.ts +244 -0
- package/src/outbox.ts +453 -0
- package/src/park-post.ts +17 -0
- package/src/pending-permission-store.ts +148 -0
- package/src/process-meta.ts +9 -0
- package/src/profile-home.ts +419 -0
- package/src/profile-projection.ts +411 -0
- package/src/project-hooks.ts +65 -0
- package/src/project-instructions.ts +119 -0
- package/src/provider-double.ts +59 -0
- package/src/provider-hold.ts +228 -0
- package/src/provider-home-marker.ts +3 -0
- package/src/provider-home-tombstone.ts +4 -0
- package/src/provider-input-queue.ts +134 -0
- package/src/provider-integration.ts +93 -0
- package/src/provider-processes.ts +17 -0
- package/src/provider-submit-failure.ts +15 -0
- package/src/providers.ts +35 -0
- package/src/provisioning.ts +703 -0
- package/src/question-decision.ts +18 -0
- package/src/quota.ts +22 -0
- package/src/rate-limit.ts +351 -0
- package/src/refused-prompt-store.ts +36 -0
- package/src/relay-injection-events.ts +161 -0
- package/src/relay-instructions.ts +107 -0
- package/src/relay-mcp-proxy.long-turn-e2e.ts +183 -0
- package/src/relay-mcp-proxy.ts +704 -0
- package/src/relay-mcp.ts +583 -0
- package/src/reply-obligation-cache.ts +211 -0
- package/src/response-capture-report.ts +111 -0
- package/src/response-routing.ts +6 -0
- package/src/runner-core.ts +2955 -0
- package/src/runner-exit.ts +12 -0
- package/src/runner-helpers.ts +582 -0
- package/src/runner-insights.ts +105 -0
- package/src/runner-mcp-proxy.ts +46 -0
- package/src/runner-spawn-config.ts +68 -0
- package/src/runner-stale-scratch-sweep.ts +21 -0
- package/src/runner.ts +9 -0
- package/src/runtime-token-file.ts +45 -0
- package/src/runtime-token-remint.ts +56 -0
- package/src/service-access.ts +88 -0
- package/src/session-destroy.ts +27 -0
- package/src/session-insights.ts +118 -0
- package/src/session-scratch.ts +296 -0
- package/src/spawn-input.ts +147 -0
- package/src/startup-config-fetch.ts +48 -0
- package/src/subreaper.ts +113 -0
- package/src/template-resolver.ts +29 -0
- package/src/test-run-dedup.ts +435 -0
- package/src/transcript-context.ts +99 -0
- package/src/transport-errors.ts +48 -0
- package/src/turn-opener.ts +55 -0
- package/src/turn-reconcile-event.ts +88 -0
- package/src/vault-proxy-hop.ts +99 -0
- package/src/version.ts +44 -0
- package/src/web-tool-call-proxy.ts +128 -0
- package/src/web-tools.ts +59 -0
- 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,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.
|