Claude Code as a Sub-Agent
Claude Code is Anthropic's terminal coding agent. Its headless mode,
claude -p (a.k.a. --print), makes it a disposable sub-agent: you write the
metaprompt, Claude explores/edits/runs commands on its own, and returns a final
message you capture and verify. You stay the planner; Claude is the implementer —
it's a strong long-context planner, so this is useful for reviews, big-picture
design, and cross-cutting refactors.
Golden rule: Claude's self-report is a claim, not the truth. Capture its
output, then independently verify the artifacts yourself (read the files, re-run
the tests) before treating the task as done.
Verified locally: claude 2.1.167. Confirm install with claude --version.
The core command
claude -p "your metaprompt here" \
--add-dir <workdir> \
--permission-mode <default|acceptEdits|plan|bypassPermissions> \
--output-format json >/tmp/claude_<rand>.json 2>>/tmp/claude_<rand>.log
-p, --print — headless: print the response and exit. Required for scripting.
- Prompt as the arg, OR pipe via stdin:
echo "$PROMPT" | claude -p (good for
long/generated prompts).
--output-format — text (default), json (single object with result +
session_id + cost/usage), or stream-json (NDJSON events as they arrive).
Use json for clean capture and to grab the session_id for resume.
- Redirect stdout to a capture file and stderr to a log so progress noise
doesn't pollute your context. Generate
<rand> once per run.
--model <alias|id> — pin the model (e.g. opus, sonnet, or a full id).
--add-dir <dir>... — extra directories Claude may read/write.
--append-system-prompt <text> — inject extra instructions/persona.
Permission modes (pick the least privilege)
default — Claude asks before edits/commands. In headless -p it cannot
prompt, so write actions are effectively blocked → good for read-only
review/analysis.
plan — Claude plans but does not edit. Use for "design this / find the bug".
acceptEdits — auto-accepts file edits. Use for real implementation.
bypassPermissions (or --dangerously-skip-permissions) — no gating at all.
Powerful; only use when the user has explicitly authorized autonomous edits AND
the working dir is scoped, or in a throwaway dir. When unsure, ask which mode
before granting write access.
Output & session resume
Delegation patterns
- One-shot task — scope
--add-dir, acceptEdits, capture, verify.
- Second opinion / adversarial review —
plan mode, ask Claude to critique
your diff or find bugs. Different model, different blind spots.
- Plan/implement split — Claude designs; you implement (or vice-versa).
- Parallel fan-out — for N independent tasks, launch N
claude -p runs, each
with its own capture/log file. For concurrent WRITE runs, give each its own
git worktree add dir and point --add-dir there to avoid edit collisions.
The supervision loop (never skip)
- Delegate —
claude -p ... --output-format json >out 2>>log.
- Capture — read the
result from out (and log/stream-json for detail).
- Verify INDEPENDENTLY — do not trust "tests pass" / "done":
git status / git diff to see what actually changed.
- Read the changed files yourself.
- Re-run the build/tests/linter yourself and read the real output.
- Iterate — if wrong,
claude -p --continue "<correction>" and repeat.
- Report — state what changed, what you verified, and how. Say plainly when
something failed or was skipped.
Cleanup: remove /tmp/claude_* capture/log files (and any throwaway worktrees)
when done.
1---2name: claude-code3description: Drive Anthropic's Claude Code CLI (`claude -p`) as a non-interactive coding sub-agent from inside Codex. Use when you want to delegate a coding/analysis/refactor task to Claude, get a second opinion / adversarial review from another model, hand off long-context planning, or fan out parallel agents. Covers the exact `claude -p` flags, permission modes, output capture, JSON/stream-json modes, session resume, parallel fan-out, and the mandatory "delegate → capture → independently verify, never trust the self-report" supervision loop.4---56# Claude Code as a Sub-Agent78Claude Code is Anthropic's terminal coding agent. Its **headless** mode,9`claude -p` (a.k.a. `--print`), makes it a disposable sub-agent: you write the10metaprompt, Claude explores/edits/runs commands on its own, and returns a final11message you capture and verify. You stay the planner; Claude is the implementer —12it's a strong long-context planner, so this is useful for reviews, big-picture13design, and cross-cutting refactors.1415**Golden rule:** Claude's self-report is a claim, not the truth. Capture its16output, then independently verify the artifacts yourself (read the files, re-run17the tests) before treating the task as done.1819Verified locally: `claude` 2.1.167. Confirm install with `claude --version`.2021## The core command2223```bash24claude -p "your metaprompt here" \25 --add-dir <workdir> \26 --permission-mode <default|acceptEdits|plan|bypassPermissions> \27 --output-format json >/tmp/claude_<rand>.json 2>>/tmp/claude_<rand>.log28```2930- `-p, --print` — headless: print the response and exit. Required for scripting.31- Prompt as the arg, OR pipe via stdin: `echo "$PROMPT" | claude -p` (good for32 long/generated prompts).33- `--output-format` — `text` (default), `json` (single object with `result` +34 `session_id` + cost/usage), or `stream-json` (NDJSON events as they arrive).35 Use `json` for clean capture and to grab the `session_id` for resume.36- Redirect stdout to a capture file and stderr to a log so progress noise37 doesn't pollute your context. Generate `<rand>` once per run.38- `--model <alias|id>` — pin the model (e.g. `opus`, `sonnet`, or a full id).39- `--add-dir <dir>...` — extra directories Claude may read/write.40- `--append-system-prompt <text>` — inject extra instructions/persona.4142## Permission modes (pick the least privilege)4344- `default` — Claude asks before edits/commands. In headless `-p` it cannot45 prompt, so write actions are effectively blocked → good for **read-only**46 review/analysis.47- `plan` — Claude plans but does not edit. Use for "design this / find the bug".48- `acceptEdits` — auto-accepts file edits. Use for real implementation.49- `bypassPermissions` (or `--dangerously-skip-permissions`) — no gating at all.50 Powerful; only use when the user has explicitly authorized autonomous edits AND51 the working dir is scoped, or in a throwaway dir. When unsure, ask which mode52 before granting write access.5354## Output & session resume5556- Parse `--output-format json`: the `result` field is the final message; the57 `session_id` field lets you continue the same conversation.58- Resume with context intact:59 ```bash60 claude -p --continue "now also update the tests" # most recent session61 claude -p --resume <session-id> "..." # a specific session62 ```63- Use resume for multi-turn delegation (draft → refine → fix) instead of64 re-sending all context.6566## Delegation patterns6768- **One-shot task** — scope `--add-dir`, `acceptEdits`, capture, verify.69- **Second opinion / adversarial review** — `plan` mode, ask Claude to critique70 your diff or find bugs. Different model, different blind spots.71- **Plan/implement split** — Claude designs; you implement (or vice-versa).72- **Parallel fan-out** — for N independent tasks, launch N `claude -p` runs, each73 with its own capture/log file. For concurrent WRITE runs, give each its own74 `git worktree add` dir and point `--add-dir` there to avoid edit collisions.7576## The supervision loop (never skip)77781. **Delegate** — `claude -p ... --output-format json >out 2>>log`.792. **Capture** — read the `result` from `out` (and `log`/stream-json for detail).803. **Verify INDEPENDENTLY** — do not trust "tests pass" / "done":81 - `git status` / `git diff` to see what actually changed.82 - Read the changed files yourself.83 - Re-run the build/tests/linter yourself and read the real output.844. **Iterate** — if wrong, `claude -p --continue "<correction>"` and repeat.855. **Report** — state what changed, what you verified, and how. Say plainly when86 something failed or was skipped.8788Cleanup: remove `/tmp/claude_*` capture/log files (and any throwaway worktrees)89when done.