| name | anu-spawn |
| description | Create one or more agent panes running specific AI agents. Use when the user asks to spawn / open / add / create panes running agents ("one codex and one claude", "give me 4 contained claude agents", "add a codex next to me"), or asks what an agent alias means (cx/cxx/cxc/cdx/cdxx/cdxxs/c/pi) or which to use. As an agent you spawn with `pane spawn` (a bin on your PATH); the taa/tsl/tslm/al family are interactive-shell functions for the human and are NOT callable from your Bash tool. Covers the vocabulary, host vs contained (box), and which alias fits which autonomy level. |
anu-spawn: create agent panes
Two choices: which agent (the alias) and how many / where.
As an agent, use pane spawn
You run in a non-interactive Bash tool, where anu's spawn functions (taa,
tsl, al, …) are not defined — they only exist in interactive shells. Spawn
with the pane bin instead (it's on your PATH):
pane spawn <cli> [count]
pane spawn cdx → one Codex beside you. pane spawn cxc 4 → four contained-Claude workers.
- "one codex and one claude" →
pane spawn cdx; pane spawn cx.
<cli> is an alias below (resolved for you) or any command string.
- It prints the new pane id(s); brief each with
pane send <id> "<brief>" (see anu-talk). Give a fresh pane a moment to boot first.
Spawn full-auto for anything you'll drive headlessly (cxx or cxc). A cx /
cdx agent stalls on its first approval dialog waiting for a human — a pane you
intend to message should bypass permissions so it can actually act.
Told to "use codex" (or "use a pane")? Spawn your OWN. Default to pane spawn cdxx (a fresh codex you own), not hunting for an existing codex pane — the panes
already running are usually the human's own work, and grabbing one mid-task hijacks
it. Only reuse an existing pane when it's a continuation where the human points you
to a specific one ("use %180", "the codex from before"). (pane ls/status still
survey everything — this is about which pane you drive.)
The vocabulary
(Each alias also prepends a cosmetic screen-clear; the load-bearing command is shown.)
| Alias | Launches | Tool | Autonomy | Where |
|---|
cx | claude --allow-dangerously-skip-permissions | Claude | skips the startup prompt; still gates tool calls | host |
cxx | claude --dangerously-skip-permissions | Claude | full-auto (no approvals) | host — real FS + creds |
cxc | box claude --dangerously-skip-permissions | Claude | full-auto | contained box/VM |
cdx | codex | Codex | guardrails on (sandbox + approvals) | host |
cdxxs | codex --sandbox workspace-write --ask-for-approval never | Codex | full-auto, sandboxed | host |
cdxx | codex --yolo | Codex | YOLO — no sandbox, no approvals | host |
c | opencode | OpenCode | tool default | host |
pi | command pi | Pi | minimal harness | host |
Ladders: Claude cx → cxx → cxc; Codex cdx → cdxxs → cdxx. cxc is the only
contained alias — full-auto with the blast radius of one worktree (a disposable
apple/container VM, repo mounted at its real path, no host ssh/gh creds).
Unattended / parallel workers → cxc; a conductor that must run host-side
swarm/tmux → cxx (keeps your creds); Codex unattended but fenced → cdxxs.
The human's interactive verbs (reference)
In an interactive shell (the human's, or typed into a pane) anu has function
verbs. They are not callable from your Bash tool — listed so you understand what
the human runs and what pane spawn mirrors.
| Verb | Family | Pane(s) | Tracked? | Notes |
|---|
taa [cmd] | typed-command | adds one beside you | yes | the safe "add an agent next to me". |
tscale <n> [cmd] | typed-command | adds/removes to reach N | yes | — |
tra [pane] / tap | — | remove / list tracked panes | — | only see taa/tscale/al panes. |
tsl <n> <cmd> | typed-command | N tiled — replaces your pane | no | ⚠ pane 1 is you (tmux:411). |
tslm <n1> <c1> … | typed-command | mixed tiled — replaces your pane | no | ⚠ pane 1 is you (tmux:455). |
al [alias] | registry | adds one beside you | yes | takes a registry alias only (fzf if none). |
alw [alias] | registry | one in a new window | no | not tracked. |
tdl <ai> / twdl <ai> | typed-command | dev layout / per-worktree | — | editor + agent(s) + terminal. |
⚠ tsl/tslm include $TMUX_PANE as pane 1 and run the command in it — they
replace the caller's pane, not just add panes. The human runs them from a
launcher pane. pane spawn deliberately never does this (always adds beside you).
Typed-command verbs take a raw command; registry verbs (al/alw) take an
alias only. Only taa/tscale/al track in @agent_panes; find anything else
with pane ls.
Run a team (pane fan)
Spawn a whole team and brief each in one call, labelled so you can address the group:
pane fan <count> <cli> --as <role> "<brief>"
fan spawns <count> agents beside you, labels them all <role>, and sends each the
brief. Use a full-auto alias (cxx/cxc/cdxx) so workers don't stall on approvals.
Then drive the team as a set (see anu-talk): pane broadcast --role <role> "…"
to message them, pane gather --role <role> to wait them idle and collect.
fan --as also gives each worker a reply id and asks it (in the brief) to run
pane reply <id> "<result>" when done; pane gather then shows those confirmed
results, falling back to a best-effort screen capture for any worker that didn't
reply. So if YOU are a fanned worker, finish by recording your result with
pane reply <id> "…" — don't leave the conductor to screen-scrape you. This works
the same inside a box (cxc): the box mounts the reply channel, so a contained
worker's pane reply reaches the host's pane gather as a confirmed result.
After spawning — brief the new pane
pane spawn prints the new id(s). Brief each with pane send <id> "<brief>"
once it's booted (see anu-talk). For real parallel orchestration — many workers,
briefs, collect/merge — that's the orchestration plugin and the swarm
command.