Experiment branch — NOT for merge without eval evidence (writing-skills
discipline; RED/GREEN campaign to follow if the manual run validates).
Two targeted changes against the measured Codex 5.6-era spinout
(36% of SDD runs >8h, PRI-2672):
1. codex-tools.md — SDD dispatch rules: fork_turns "none" on every
spawn (the default "all" forks the whole transcript and refuses
model/effort overrides — S2's terminal 13-agent final wave was all
full-history forks at sol/xhigh); capability-check for 0.145+ spawn
params with an explicit terra/high role table (re-review terra/medium),
no sol seats, no effort escalation between fix rounds; honest
inheritance warning for <=0.144 where routing is impossible (T0-probed
on 0.144.4: schema is {task_name, message, fork_turns} only, role
TOMLs inert).
Role-table bet: census shows task seats already ran terra/high in the
spinout sessions — the surgical bet is fork_turns:none + no-sol-seats
+ wave termination, not task-seat downgrade. T1 cross-review matrix
will refine reviewer tiers (may support terra/medium or lower).
2. SKILL.md final review — wave closure is policy, not a verdict:
strong reviewers find real defects indefinitely, so "review until
clean" never terminates; new breakage in the final fix diff joins
residual adjudication instead of opening wave two; one-off human
review procedures (competing reviewers, scoring) never become
standing. Two matching rationalization-table rows.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3.8 KiB
Subagent dispatch requires multi-agent support
Add to your Codex config (~/.codex/config.toml):
[features]
multi_agent = true
This enables spawn_agent, wait_agent, and close_agent for skills like dispatching-parallel-agents and subagent-driven-development. When using subagent-driven-development, close reviewer subagents when their review returns. Keep each implementer subagent open until its task's review passes — the fix loop resumes the implementer — then close it. If your harness cannot send another message to a spawned agent, dispatch each fix round as a fresh implementer carrying the brief, the report file, and the findings.
SDD dispatch: pin fork_turns and the model on every spawn
Every spawn_agent call in subagent-driven-development sets
fork_turns: "none". The parameter defaults to "all", which forks your
entire session transcript into the child — the opposite of the fresh,
constructed context SDD requires — and a full-history fork also refuses
model and effort overrides. Never omit the parameter, and never pass
"all" or a turn count for an SDD dispatch.
Before Task 1, check your spawn_agent tool schema for model and
reasoning_effort parameters (present on Codex 0.145+).
If the parameters exist, set both explicitly on every dispatch:
| Role | model | reasoning_effort |
|---|---|---|
| Implementer (all rounds) | gpt-5.6-terra |
high |
| Task reviewer | gpt-5.6-terra |
high |
| Scoped re-review | gpt-5.6-terra |
medium |
| Final whole-branch review | gpt-5.6-terra |
high |
On Codex this table IS the Model Selection mapping — including the final review, which stays on terra/high rather than "most capable available." Never give a subagent your session's model when you run a frontier config (sol at xhigh or max): reviewer tier never exceeds implementer tier, and a fix round never gets an effort bump. Rounds 4-5's "more capable model" means a fresh implementer at the same tier; a task that genuinely needs more than terra/high is a BLOCKED escalation to your human partner, not a quiet tier climb. Frontier-tier subagents at inherited effort are the measured top driver of Codex SDD runs spinning out to 8+ hours (PRI-2672): review seats that inherited sol found real-but-endless defects every round, and fix diffs ballooned instead of converging.
If the parameters do not exist (Codex 0.144 and earlier), every child
inherits your session's model and effort and no override is possible —
role files in ~/.codex/agents/ do not attach to spawns either. Say so
to your human partner before starting a plan of more than a few tasks,
and offer the choice: proceed with inheritance, or restart the session
at a lower effort so the whole run — controller and children — pays the
lower rate.
Environment Detection
Skills that create worktrees or finish branches should detect their environment with read-only git commands before proceeding:
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
BRANCH=$(git branch --show-current)
GIT_DIR != GIT_COMMON→ already in a linked worktree (skip creation)BRANCHempty → detached HEAD (cannot branch/push/PR from sandbox)
See using-git-worktrees Step 0 and finishing-a-development-branch
Step 1 for how each skill uses these signals.
Codex App Finishing
When the sandbox blocks branch/push operations (detached HEAD in an externally managed worktree), the agent commits all work and informs the user to use the App's native controls:
- "Create branch" — names the branch, then commit/push/PR via App UI
- "Hand off to local" — transfers work to the user's local checkout
The agent can still run tests, stage files, and output suggested branch names, commit messages, and PR descriptions for the user to copy.