I use Codex every day, and subagents are one of those features where the potential is immediately obvious. They can already work in parallel, use custom roles, and load their own configuration. But once I wanted precise control over model choice, reasoning effort, and a larger queue of jobs, I started hitting differences between the various Codex surfaces.

So I built my own orchestration layer. Not as a replacement for Codex, but as a more programmatic layer on top of it.

What Codex can already do

Native Codex subagents are not a toy. The current official documentation describes the built-in default, worker, and explorer roles, custom agents in .codex/agents/*.toml, thread limits, and per-agent settings for the model, model_reasoning_effort, sandbox, MCP servers, and skills.

Codex can spawn a child, wait for it, send follow-up instructions, interrupt it, and bring its result back to the lead agent. For large repetitive workloads, there is also an experimental spawn_agents_on_csv flow that creates a worker per row and collects structured results into another CSV.