Tmux Agent Tools
Fast paths (read this first)
Non-negotiable rules:
- Engine-only — never type raw
tmux at a worker. Drive every worker through agent-tmux <cli> subcommands (send-wait, status, result, capture, stop); read-only inventory is tmux-agent-sessions list, not raw tmux ls. Raw tmux bypasses naming, redaction, result contracts, and cleanup. Before concluding the engine lacks a command, check the capability table below; plain shell is a last resort for genuine gaps — say why.
- A
send is not done until submission is verified. Bare send can leave text unsent in the input box. Default to send-wait: it appends a fresh nonce and waits for it, confirming the prompt landed.
- Every blocking wait takes a timeout — never hand-roll
sleep/polling loops. Multiple workers: one bounded watch --any|--all|--count <n> --timeout <s> --json …. Mixed-engine fleets: trust reason:result_updated or resolve with tmux-agent-sessions.
- Reusing a worker for a follow-up task?
result init first, then send-wait, then result wait-required — never reuse without result init, or the wait returns the stale prior result. Details: references/multi-agent.md#persistent-teammates-worker-reuse.
Fast answers:
- Bounded task with no follow-ups? Default to interactive
start (headed): the tmux pane is the debug surface — capture, status, or attaching shows exactly what the CLI is doing, mid-run and post-mortem. start --headless (claude -p / codex exec) is OPT-IN only: user explicitly asks for it, or the output is trivially verifiable and nobody will need to inspect the run. A headless failure leaves only an exit code and a stdout file — repeatedly observed to cost long blind-debugging sessions (user ruling 2026-08-03: headed by default).
- Wrapper not on PATH? Run it from this bundle:
<skill-dir>/scripts/agent-tmux codex ….
- Worker "failed" but the pane says PASS? Exit code is not the verdict — see
references/core-workflow.md#5-read-the-agents-structured-result ("Exit code is not the verdict") before re-dispatching or reporting failure.
- Auto-delegate substantial work? Use the inline-vs-worker gate in the
using-tmux-agent-tools skill (absorbed there, no longer a separate subagent); details live in references/core-workflow.md.
- Long-running external CLI worker (Codex or Claude Code)? Dispatch it with ONE
agent-tmux <cli> assign <name> <dir> <prompt-file> call — the stepwise sequence (start → result init → send → confirm-processing → blocking supervise) IS the supervision, so the proxy hosts it and nothing else (the OLD per-worker polling proxy stays retired, 2026-08-08). The host is ONE supervision proxy — a general-purpose subagent on sonnet low whose brief runs that single assign call and reports its exit code (see model-dispatch.md §4, 2026-08-17/18 rulings). Parent foreground assign is banned in ALL forms, --detach included, and is denied at the tool call by the tmux-assign-host-gate hook; parent run_in_background is REQUIRED, not a last-resort fallback, whenever the proxy reports anything non-terminal — measured 2026-08-30, the harness reaps a proxy's foreground call at ~600s and a subagent has no TaskOutput, so a reaped proxy can only report in-flight and the parent must own the wait itself (a task orphaned by a terminated subagent notifies nobody; incident c48c0d3a lost 2h40m that way). Log the reason in the run dir, and never pipe the listener — a trailing | tail reports tail's status, so the wrapper's exit 2 reads as success. The parent MUST NOT additionally poll status/capture/probe unless assign reports a failed step or the user asks; harvest with bounded result wait-required --wait <s> calls. A pending result is a TERMINATING PROCEDURE, not a verdict: keep waiting within the bound → bound expires still pending, re-prompt the worker ONCE with the literal path from result --path <name> and wait one more bounded round → only then may a pane capture stand in, labelled UNCONFIRMED and never shipped as a verified answer. Heed assign's result-path delivery UNCONFIRMED warning — a worker that never learned its path can never write result.json, so that pending is permanent. Teardown order: stand the proxy DOWN BEFORE stopping the worker it supervises, or the proxy is stranded on a signal that can no longer arrive. Never brief a proxy to return the worker's output verbatim — it is forbidden to read that output, so the brief is unsatisfiable; have the WORKER write to a declared artifact path and read that file yourself.
- Writing the worker prompt? Shape it with the
delegation-templates skill: GOAL / ACCEPTANCE / REPORT + common footer, plus its tmux addendum (no-cascade ban + literal result path).
- New or renamed CLI? Add a profile with
bin=…, then prove it with doctor --json and start --dry-run; see references/profiles.md.
Overview
agent-tmux <cli> <command> runs any AI coding CLI as a managed tmux worker; claude/codex/agy are built-in presets, other CLIs use an optional profile. The old claude-tmux/codex-tmux/agy-tmux shims are DEPRECATED (removal: v0.39) — always spell agent-tmux <cli> <command>.
Required preflight and safe invocation
Before the first worker command:
- Resolve the wrapper bundle instead of assuming PATH. Probe, in order,
<repo-dir>/skills/tmux-agent-tools/scripts,
~/.agents/skills/tmux-agent-tools/scripts,
~/.claude/skills/tmux-agent-tools/scripts, and
~/.codex/skills/tmux-agent-tools/scripts; use bare wrapper names only when
no bundle exists and PATH lookup succeeds.
- Run the resolved
agent-tmux <cli> setup and stop if preflight fails.
- Pass the raw task as a separately quoted argument or prompt-file content.
Never interpolate task text into
eval, sh -c, or a constructed shell
command.
- Pass task-specific credentials only through
--secret KEY=URI. Never embed
credential values in task text or a constructed shell command.
When to use
- Long-running Claude/Codex/agy/custom CLI work that needs later supervision.
- A worker must write structured
result.json for a parent agent or wrapper.
- You need verified follow-up sends, liveness/status checks, bounded waits, or cleanup.
- Multiple workers need first/all/N completion via one wrapper
watch call.
Command choice
| Need |
Use |
| Run Claude Code / Codex / agy as a worker |
agent-tmux claude / agent-tmux codex / agent-tmux agy |
| Any other CLI (gemini, cursor, grok, custom) |
agent-tmux <cli> (+ optional profile) |
| Any worker, including bounded one-shots |
interactive start (headed) — pane = debug surface; DEFAULT |
| Trivially verifiable fire-and-collect, user opted in |
start --headless — completion = process exit; failures leave only exit code + stdout file |
| Local working directory |
start |
| Repo on another host, tmux stays local |
start-ssh |
| Pin a model for one run |
start --model <m> <name> <dir> '<prompt>' |
| Continue an existing CLI session UUID |
resume (opt-in, off by default) |
| Don't know which wrapper owns a session |
tmux-agent-sessions resolve --name <n> --json first |
| Two-party exchange / one-to-many work |
tmux-agent-dialogue / tmux-agent-fanout |
| Read-only inventory or evidence polling |
tmux-agent-sessions / tmux-agent-monitor |
Start flags precede positionals: start --exact --model <m> <name> <dir>; a misplaced flag exits 2.
Full capability table (every subcommand + when to use it): references/cheatsheets.md.
When not to use
- A one-off shell command or a simple file read, search, test, or build — run it directly instead of spawning a worker.
- Externally visible, destructive, or privacy-sensitive work unless the user has already authorized it.
The 6 commands you need most
# Dispatch a prompt-file task: ONE command runs the whole verified sequence
# (start -> result init -> send --from-file -> confirm the pane is processing
# -> blocking supervise). Prefer this over hand-chaining the steps; it cannot
# be misordered and it catches "task never reached the CLI" before waiting.
agent-tmux codex assign job ~/repo /abs/path/prompt.txt
# Bounded one-shot (headed by default; add --headless only when the user opted in):
agent-tmux codex start --exact job ~/repo 'Task. Write final JSON to the wrapper-provided result path when done.'
agent-tmux codex result wait-required job --fields status,summary --wait 600 --json # returns at process exit
agent-tmux codex supervise --result-required --silent-while-unchanged --json job # one silent call until terminal event
agent-tmux codex stop job
# Interactive one-worker flow (only when follow-ups are needed): start -> send-wait -> supervise -> stop.
agent-tmux codex start --exact worker ~/repo 'Task. Write final JSON to the wrapper-provided result path when done.'
agent-tmux codex send-wait worker 'Follow-up instruction.' 180
agent-tmux codex status --json worker
agent-tmux codex result --json --wait 30 worker
agent-tmux codex stop worker
# Multiple workers: block on first/all/N completion with one bounded call.
agent-tmux codex watch --any --timeout 600 --json w1 w2 w3
Full walkthrough: references/core-workflow.md.
result.json completion contract
Agents write $TMUX_AGENT_DIR/<name>/result.json with schema_version: 1, canonical status (success|failed|blocked|needs-input), summary, artifacts, and errors (optional verdict/decision). Codex/generic prompt sends inject the literal result path once per session; the worker cannot rely on $TMUX_AGENT_RESULT inside tool sandboxes. Branch in this order — never scrape the pane when a valid result exists: .present -> .valid -> .body.
--fields names keys in THAT contract, never a prompt placeholder: harvesting with artifact_path (which no worker writes) left two finished workers unharvested for ~24 minutes on 2026-09-08. Ask for status,summary, read .body, and request a produced file as .body.artifacts. A terminal result missing a requested field now exits 3 (event:"contract-mismatch", worker body attached) instead of waiting — fix the field list, do not re-dispatch. A CLI that cannot launch exits 4 at assign step 0 with blocked_reason (keychain_locked, login_required, quota_exhausted, cli_not_found) and starts nothing: report the blocker, do not wait. For a TUI that submits on every newline, dispatch with assign --prompt-delivery file-ref (profile prompt_delivery; agy ships it) — agy received one pasted prompt as 12 separate inputs, GOAL and CONTEXT never arriving, and still reported assigned:true.
agent-tmux codex result --json --wait 30 worker
agent-tmux codex supervise --result-required --silent-while-unchanged --json worker
If .present:false, the agent never wrote the file — re-prompt with the literal path from result --path <name>. Full schema, worked example, status --json fields, approval-gate exit codes, concurrency model: references/contracts.md.
Safety
- Wrappers use permissive CLI flags by default (
--dangerously-skip-permissions for Claude, --yolo for Codex). Never use for destructive, privacy-sensitive, externally visible, payment, or irreversible work without explicit user authorization.
status --json reports confirmation_detected:true plus blocked_reason when a pane appears to wait for confirmation. It does not auto-accept; answer only after you trust it.
- Before spawning more than one worker: ask the user for tool+model+effort per worker, set a worker upper bound, and forbid cascade spawning in every prompt. Details:
references/multi-agent.md.
- Secret injection (
--secret KEY=URI, fail-closed) and audit log (TMUX_AGENT_TOOLS_AUDIT_LOG): references/security.md.
References
Load these only when you hit the relevant scenario — they are not needed for routine use:
references/core-workflow.md — full single-worker workflow, session naming, remote sessions, peer-review, approval gates, the inline-vs-worker gate.
references/profiles.md — custom CLI profile keys, precedence, examples, detection overrides.
references/cheatsheets.md — full capability table, scenario commands, marker pitfalls, failure triage.
references/multi-agent.md — dialogue/fanout rules, bridge pattern, SSH participants, github-comment behavior.
references/contracts.md — status --json/result.json schemas, approval exit codes, concurrency, inventory/cleanup.
references/security.md — secret injection, audit log, environment overrides, pre-flight checks.
references/troubleshooting.md — failure modes and fixes for stuck/unsent/stale-marker scenarios.
references/recipes.md — copy-pasteable workflows (approval gate, fanout, DAG).
Bundled schemas
schemas/ ships result-status-summary.schema.json and fanout-summary.schema.json — the offline fallback the scripts already resolve for result.json validation when no other copy is found on disk.
The agents/ subagent bundle (tmux-delegate.md, claude-oneshot.md, codex-oneshot.md) is retired — see CHANGELOG. The inline-vs-worker gate and the one-shot forwarding pattern they carried now live in the using-tmux-agent-tools skill's decision tree; there is nothing to install into ~/.claude/agents/ anymore.
1---2name: tmux-agent-tools3description: Mechanics library for running AI coding CLIs as managed tmux workers via agent-tmux <cli> <command> (plus tmux-agent-sessions and the other bundled tools). Entry point is the using-tmux-agent-tools router skill — route through it first; read this skill for wrapper mechanics it defers to. Covers start/send-wait/status/result/stop, structured result.json completion, multi-worker watch, profiles for custom CLIs, and bounded dialogue/fanout. Not for general tmux config, theming, non-tmux headless CLI use, or human team debate.4---56# Tmux Agent Tools78## Fast paths (read this first)910Non-negotiable rules:11121. **Engine-only — never type raw `tmux` at a worker.** Drive every worker through `agent-tmux <cli>` subcommands (`send-wait`, `status`, `result`, `capture`, `stop`); read-only inventory is `tmux-agent-sessions list`, not raw `tmux ls`. Raw `tmux` bypasses naming, redaction, result contracts, and cleanup. Before concluding the engine lacks a command, check the capability table below; plain shell is a last resort for genuine gaps — say why.132. **A `send` is not done until submission is verified.** Bare `send` can leave text unsent in the input box. Default to `send-wait`: it appends a fresh nonce and waits for it, confirming the prompt landed.143. **Every blocking wait takes a timeout — never hand-roll `sleep`/polling loops.** Multiple workers: one bounded `watch --any|--all|--count <n> --timeout <s> --json …`. Mixed-engine fleets: trust `reason:result_updated` or resolve with `tmux-agent-sessions`.154. **Reusing a worker for a follow-up task?** `result init` first, then `send-wait`, then `result wait-required` — never reuse without `result init`, or the wait returns the stale prior result. Details: `references/multi-agent.md#persistent-teammates-worker-reuse`.1617Fast answers:1819- **Bounded task with no follow-ups?** Default to interactive `start` (headed): the tmux pane is the debug surface — `capture`, `status`, or attaching shows exactly what the CLI is doing, mid-run and post-mortem. `start --headless` (`claude -p` / `codex exec`) is OPT-IN only: user explicitly asks for it, or the output is trivially verifiable and nobody will need to inspect the run. A headless failure leaves only an exit code and a stdout file — repeatedly observed to cost long blind-debugging sessions (user ruling 2026-08-03: headed by default).20- **Wrapper not on PATH?** Run it from this bundle: `<skill-dir>/scripts/agent-tmux codex …`.21- **Worker "failed" but the pane says PASS?** Exit code is not the verdict — see `references/core-workflow.md#5-read-the-agents-structured-result` ("Exit code is not the verdict") before re-dispatching or reporting failure.22- **Auto-delegate substantial work?** Use the inline-vs-worker gate in the `using-tmux-agent-tools` skill (absorbed there, no longer a separate subagent); details live in `references/core-workflow.md`.23- **Long-running external CLI worker (Codex or Claude Code)?** Dispatch it with ONE `agent-tmux <cli> assign <name> <dir> <prompt-file>` call — the stepwise sequence (start → result init → send → confirm-processing → blocking supervise) IS the supervision, so the proxy hosts it and nothing else (the OLD per-worker *polling* proxy stays retired, 2026-08-08). The host is ONE supervision proxy — a `general-purpose` subagent on `sonnet` low whose brief runs that single `assign` call and reports its exit code (see `model-dispatch.md` §4, 2026-08-17/18 rulings). Parent foreground `assign` is banned in ALL forms, `--detach` included, and is denied at the tool call by the `tmux-assign-host-gate` hook; parent `run_in_background` is REQUIRED, not a last-resort fallback, whenever the proxy reports anything non-terminal — measured 2026-08-30, the harness reaps a proxy's foreground call at ~600s and a subagent has no `TaskOutput`, so a reaped proxy can only report in-flight and the parent must own the wait itself (a task orphaned by a terminated subagent notifies nobody; incident c48c0d3a lost 2h40m that way). Log the reason in the run dir, and never pipe the listener — a trailing `| tail` reports `tail`'s status, so the wrapper's `exit 2` reads as success. The parent MUST NOT additionally poll `status`/`capture`/`probe` unless `assign` reports a failed step or the user asks; harvest with bounded `result wait-required --wait <s>` calls. A `pending` result is a TERMINATING PROCEDURE, not a verdict: keep waiting within the bound → bound expires still pending, re-prompt the worker ONCE with the literal path from `result --path <name>` and wait one more bounded round → only then may a pane capture stand in, labelled UNCONFIRMED and never shipped as a verified answer. Heed `assign`'s `result-path delivery UNCONFIRMED` warning — a worker that never learned its path can never write result.json, so that `pending` is permanent. Teardown order: stand the proxy DOWN BEFORE stopping the worker it supervises, or the proxy is stranded on a signal that can no longer arrive. Never brief a proxy to return the worker's output verbatim — it is forbidden to read that output, so the brief is unsatisfiable; have the WORKER write to a declared artifact path and read that file yourself.24- **Writing the worker prompt?** Shape it with the `delegation-templates` skill: GOAL / ACCEPTANCE / REPORT + common footer, plus its tmux addendum (no-cascade ban + literal result path).25- **New or renamed CLI?** Add a profile with `bin=…`, then prove it with `doctor --json` and `start --dry-run`; see `references/profiles.md`.2627## Overview2829`agent-tmux <cli> <command>` runs any AI coding CLI as a managed tmux worker; claude/codex/agy are built-in presets, other CLIs use an optional profile. The old `claude-tmux`/`codex-tmux`/`agy-tmux` shims are DEPRECATED (removal: v0.39) — always spell `agent-tmux <cli> <command>`.3031## Required preflight and safe invocation3233Before the first worker command:34351. Resolve the wrapper bundle instead of assuming PATH. Probe, in order,36 `<repo-dir>/skills/tmux-agent-tools/scripts`,37 `~/.agents/skills/tmux-agent-tools/scripts`,38 `~/.claude/skills/tmux-agent-tools/scripts`, and39 `~/.codex/skills/tmux-agent-tools/scripts`; use bare wrapper names only when40 no bundle exists and PATH lookup succeeds.412. Run the resolved `agent-tmux <cli> setup` and stop if preflight fails.423. Pass the raw task as a separately quoted argument or prompt-file content.43 Never interpolate task text into `eval`, `sh -c`, or a constructed shell44 command.454. Pass task-specific credentials only through `--secret KEY=URI`. Never embed46 credential values in task text or a constructed shell command.4748## When to use4950- Long-running Claude/Codex/agy/custom CLI work that needs later supervision.51- A worker must write structured `result.json` for a parent agent or wrapper.52- You need verified follow-up sends, liveness/status checks, bounded waits, or cleanup.53- Multiple workers need first/all/N completion via one wrapper `watch` call.5455## Command choice5657| Need | Use |58| --- | --- |59| Run Claude Code / Codex / agy as a worker | `agent-tmux claude` / `agent-tmux codex` / `agent-tmux agy` |60| Any other CLI (gemini, cursor, grok, custom) | `agent-tmux <cli>` (+ optional profile) |61| **Any worker, including bounded one-shots** | interactive `start` (headed) — pane = debug surface; DEFAULT |62| Trivially verifiable fire-and-collect, user opted in | `start --headless` — completion = process exit; failures leave only exit code + stdout file |63| Local working directory | `start` |64| Repo on another host, tmux stays local | `start-ssh` |65| Pin a model for one run | `start --model <m> <name> <dir> '<prompt>'` |66| Continue an existing CLI session UUID | `resume` (opt-in, off by default) |67| Don't know which wrapper owns a session | `tmux-agent-sessions resolve --name <n> --json` first |68| Two-party exchange / one-to-many work | `tmux-agent-dialogue` / `tmux-agent-fanout` |69| Read-only inventory or evidence polling | `tmux-agent-sessions` / `tmux-agent-monitor` |7071Start flags precede positionals: `start --exact --model <m> <name> <dir>`; a misplaced flag exits 2.7273Full capability table (every subcommand + when to use it): `references/cheatsheets.md`.7475## When not to use7677- A one-off shell command or a simple file read, search, test, or build — run it directly instead of spawning a worker.78- Externally visible, destructive, or privacy-sensitive work unless the user has already authorized it.7980## The 6 commands you need most8182```bash83# Dispatch a prompt-file task: ONE command runs the whole verified sequence84# (start -> result init -> send --from-file -> confirm the pane is processing85# -> blocking supervise). Prefer this over hand-chaining the steps; it cannot86# be misordered and it catches "task never reached the CLI" before waiting.87agent-tmux codex assign job ~/repo /abs/path/prompt.txt8889# Bounded one-shot (headed by default; add --headless only when the user opted in):90agent-tmux codex start --exact job ~/repo 'Task. Write final JSON to the wrapper-provided result path when done.'91agent-tmux codex result wait-required job --fields status,summary --wait 600 --json # returns at process exit92agent-tmux codex supervise --result-required --silent-while-unchanged --json job # one silent call until terminal event93agent-tmux codex stop job9495# Interactive one-worker flow (only when follow-ups are needed): start -> send-wait -> supervise -> stop.96agent-tmux codex start --exact worker ~/repo 'Task. Write final JSON to the wrapper-provided result path when done.'97agent-tmux codex send-wait worker 'Follow-up instruction.' 18098agent-tmux codex status --json worker99agent-tmux codex result --json --wait 30 worker100agent-tmux codex stop worker101102# Multiple workers: block on first/all/N completion with one bounded call.103agent-tmux codex watch --any --timeout 600 --json w1 w2 w3104```105106Full walkthrough: `references/core-workflow.md`.107108## result.json completion contract109110Agents write `$TMUX_AGENT_DIR/<name>/result.json` with `schema_version: 1`, canonical `status` (`success|failed|blocked|needs-input`), `summary`, `artifacts`, and `errors` (optional `verdict`/`decision`). Codex/generic prompt sends inject the literal result path once per session; the worker cannot rely on `$TMUX_AGENT_RESULT` inside tool sandboxes. Branch in this order — never scrape the pane when a valid result exists: `.present -> .valid -> .body`.111112`--fields` names keys in THAT contract, never a prompt placeholder: harvesting with `artifact_path` (which no worker writes) left two finished workers unharvested for ~24 minutes on 2026-09-08. Ask for `status,summary`, read `.body`, and request a produced file as `.body.artifacts`. A terminal result missing a requested field now exits `3` (`event:"contract-mismatch"`, worker `body` attached) instead of waiting — fix the field list, do not re-dispatch. A CLI that cannot launch exits `4` at `assign` step 0 with `blocked_reason` (`keychain_locked`, `login_required`, `quota_exhausted`, `cli_not_found`) and starts nothing: report the blocker, do not wait. For a TUI that submits on every newline, dispatch with `assign --prompt-delivery file-ref` (profile `prompt_delivery`; `agy` ships it) — agy received one pasted prompt as 12 separate inputs, `GOAL` and `CONTEXT` never arriving, and still reported `assigned:true`.113114```bash115agent-tmux codex result --json --wait 30 worker116agent-tmux codex supervise --result-required --silent-while-unchanged --json worker117```118119If `.present:false`, the agent never wrote the file — re-prompt with the literal path from `result --path <name>`. Full schema, worked example, `status --json` fields, approval-gate exit codes, concurrency model: `references/contracts.md`.120121## Safety122123- Wrappers use permissive CLI flags by default (`--dangerously-skip-permissions` for Claude, `--yolo` for Codex). Never use for destructive, privacy-sensitive, externally visible, payment, or irreversible work without explicit user authorization.124- `status --json` reports `confirmation_detected:true` plus `blocked_reason` when a pane appears to wait for confirmation. It does **not** auto-accept; answer only after you trust it.125- Before spawning more than one worker: ask the user for tool+model+effort per worker, set a worker upper bound, and forbid cascade spawning in every prompt. Details: `references/multi-agent.md`.126- Secret injection (`--secret KEY=URI`, fail-closed) and audit log (`TMUX_AGENT_TOOLS_AUDIT_LOG`): `references/security.md`.127128## References129130Load these only when you hit the relevant scenario — they are not needed for routine use:131132- `references/core-workflow.md` — full single-worker workflow, session naming, remote sessions, peer-review, approval gates, the inline-vs-worker gate.133- `references/profiles.md` — custom CLI profile keys, precedence, examples, detection overrides.134- `references/cheatsheets.md` — full capability table, scenario commands, marker pitfalls, failure triage.135- `references/multi-agent.md` — dialogue/fanout rules, bridge pattern, SSH participants, github-comment behavior.136- `references/contracts.md` — `status --json`/`result.json` schemas, approval exit codes, concurrency, inventory/cleanup.137- `references/security.md` — secret injection, audit log, environment overrides, pre-flight checks.138- `references/troubleshooting.md` — failure modes and fixes for stuck/unsent/stale-marker scenarios.139- `references/recipes.md` — copy-pasteable workflows (approval gate, fanout, DAG).140141## Bundled schemas142143`schemas/` ships `result-status-summary.schema.json` and `fanout-summary.schema.json` — the offline fallback the scripts already resolve for `result.json` validation when no other copy is found on disk.144145The `agents/` subagent bundle (`tmux-delegate.md`, `claude-oneshot.md`, `codex-oneshot.md`) is retired — see CHANGELOG. The inline-vs-worker gate and the one-shot forwarding pattern they carried now live in the `using-tmux-agent-tools` skill's decision tree; there is nothing to install into `~/.claude/agents/` anymore.