Codex Multi-Agent V2 in practice: splitting tasks, assigning models, and controlling costs
Eric Provencher from the OpenAI Codex DX team shares a multi-agent orchestration approach: first decide whether a task can be split cleanly, then configure models, reasoning effort, communication, and context, and finally track both time and token budgets.
- The value of multi-agent setups is overlapping independent work. Tasks that are tightly coupled, must run sequentially, or involve heavy shared edits usually shouldn't be split.
- Use three checks before parallelizing: independent completion, independent verification, and low write conflicts. Then assign reasoning effort to Scout, Worker, and Smart worker based on difficulty.
- The lead agent keeps ownership and final sign-off. Dependencies can be sent directly between agents, and context is trimmed to match task dependencies. Platform security boundaries still apply.
- Multi-agent setups can reduce wall-clock time, but total token usage and coordination overhead usually go up. Always validate with a real task, checking time, duplication, conflicts, and rework.
Eric Provencher on the OpenAI Codex DX team recently published a practical guide to multi-agent workflows. It details how, under Codex's Multi-Agent V2, you can split a complex task across different agents without creating duplicate investigation, bloated context, or overlapping changes.
The real value here isn't the advice to "spin up more agents." It's the recommended configuration order: first decide whether the work can be split, then determine who does what, how much reasoning to use, and how much context to carry. Only then do you codify the rules into a Skill. The core principle isn't "switching models saves money" but rather reduce unnecessary reasoning first, then use parallelism to cut down on unavoidable wait time.
Codex's Ultra mode makes agent coordination the default behavior. It's suited for work with high ambiguity, scattered context, or significant risk; routine tasks don't need Ultra from the start. Eric's alternative is to stay on Sol Medium and use a short prompt or Skill to define the orchestration rules explicitly: the lead agent continues to communicate with the user, delegates background work, and only raises the reasoning effort for the genuinely hard parts.
- 1Why do you need multiple agents?
- 2Which tasks can be split?
- 3Which model should handle each piece?
- 4How should agents coordinate?
- 5How much context should each agent get?
- 6How do you turn this into a reusable Skill?
- 7What do you save, and what does it cost?
Why multi-agent
A single agent completing a complex task typically works through a sequence: read the code, check tests, confirm boundaries, implement, then verify. The problem isn't that each step is slow—it's that many investigations that could happen in parallel are forced into a queue.
Time structure
Each step isn't faster—overlappable waits get stacked together
The first benefit of multiple agents is overlapping independent waits: one scout traces the call chain, another checks permissions and test coverage, while the lead agent confirms scope with the user. Once the evidence comes back, the implementation phase avoids a detour.
But if the work is tightly coupled, adding agents is pointless. When the next step depends on the previous result, everyone needs to modify the same core code, or the final answer can only be judged as a whole, a single agent is usually faster. Whether to parallelize depends on the task structure, not on how many agents your tool can launch.
What tasks can be split
A task is worth splitting only if it meets three criteria at once: subtasks can proceed independently, their results can be verified independently, and their write scopes won't collide.
Split experiment
Toggle off any condition and watch how the parallel recommendation changes
All three need to hold together for a relatively clean parallel boundary.Click the conditions below to see how the parallelization advice changes.
Give each agent clear ownership, deliverables, and acceptance criteria.
Good for parallel executionGive each agent clear ownership, deliverables, and acceptance criteria.
Define boundaries first, then splitWhen independence or acceptance criteria are missing, the lead agent should spell out the contract upfront.
Keep a single agentWhen write surfaces overlap heavily, parallelization usually manufactures conflicts early.
Take adding an "export CSV" feature to an existing product. Investigating the current data flow, checking permission rules, and finding test locations can all run in parallel. But the field definitions and permission contract must be settled first. Once that contract is stable, the backend API, frontend entry point, and tests can be implemented separately. If three agents concurrently modify shared types and the same core functions, parallelism just brings the conflicts sooner.
What you actually export isn't a command like "go build the export feature." It's each subtask's goal, scope, deliverable, and acceptance criteria. If a task spec is vague, the boundaries aren't drawn yet. Continuing to split at that point just copies the ambiguity onto more agents.
Which model to assign
Eric Provencher's simplest configuration is to stay within the same model family and only adjust reasoning_effort. That isolates task difficulty as the single variable you're tuning, without having to compare multiple models' capabilities, pricing, and output habits from the start.
| Role | Suggested config | Responsible for | How they deliver |
|---|---|---|---|
| ScoutScout | Sol · Light | Read-only location of files, call chains, tests, and risk entry points | Evidence, paths, conclusions; no code changes |
| WorkerWorker | Sol · Medium | Well-scoped implementation, checks, and assistance | Localized changes, tests, and results |
| Smart workerSpecialist | Sol · High | Difficult implementation, resolving ambiguity, and high-risk coordination | Key judgments, approach, and verification |
Light doesn't mean less capable; it just spends less reasoning on narrow discovery work. High isn't automatically better for everything—it should be reserved for parts with genuinely higher ambiguity, risk, or system coupling. Handing every file-location task to High turns cheap searches into expensive deliberation. Assigning architectural conflicts to Light saves reasoning upfront but pays for it in rework.
This role table is a practical default, not a platform whitelist. The current GPT-5.6 family also includes Terra, Luna, and other options; multi-agent setups can delegate to any supported model. The safe path is to get a baseline working first, then compare real tasks across different models and reasoning levels. Don't confuse using the most expensive setting with finding the best configuration.
How agents coordinate
Once the task is split, the lead agent remains the coordinator. It's responsible for avoiding duplicate investigation, defining file ownership, tracking dependencies, integrating results, and continuing to communicate with the user. What gets delegated is the specific work, not the final responsibility.
Collaboration paths
Information can go direct, but ownership stays with the lead agent
Switch paths to see that message forwarding and accountability are two separate things.Click either path to compare how information reaches the dependent agent.
But information doesn't have to flow up the chain. When a scout finds a permission check entry point, it can send the file path and conclusion directly to the worker that depends on it. The lead agent only needs to know the dependency is resolved. That saves a round of relay and keeps the coordinator's context from filling up with every intermediate message.
The concurrency budget can be set per thread. When Eric shared this method, the default was four agents, including the coordinator. The most straightforward combo is one coordinator plus three parallel scouts, each investigating a different question. Alternatively, a smart worker can lead a scout and a worker as a small team handling a complex subproblem. Four was the default at the time, not a permanent cap, and certainly not a quota to fill every time.
Direct communication doesn't mean decentralized chaos. Who can edit which files, who decides shared contracts, when to merge, and who does the final acceptance—these still need a clear task graph. Communication can take the shortest path; ownership must not be ambiguous.
How much context to give
Whether a subagent inherits the parent conversation should depend on how much it relies on existing decisions. Narrow, read-only investigations often work well with fork_turns: "none": give it just the current question, the scope it's allowed to read, the output format, and the acceptance criteria. Workers that need to carry forward architectural decisions, compatibility constraints, or user preferences should inherit the relevant history.
Context layering
Trim chat history, but not the boundaries needed to finish the task
The two modes change task context; the platform security layer is the common base.fork_turns: noneClean contextGoals, scope, deliverable, acceptance, and constraints must be restated
No irrelevant discussion or orchestration instructions from the parent conversation
fork_turns: all / NInherit relevant historyCurrent ownership and stop conditions still need to be explicit
Keeps overall goals, prior decisions, and compatibility constraints
Lack of chat history doesn't mean lack of system constraints.
A clean context isn't a blank task sheet. The tool scope, business constraints, and "don't touch this" rules from earlier conversations don't automatically carry over—they need to be explicitly written into the dispatch. Conversely, inheriting too much history drags in unrelated discussion, and can even make a leaf agent think it should keep spawning more agents. In that case, be explicit: complete the task directly, no further delegation.
Eric's boundary prompt for leaf agents is short enough to reuse directly:
Complete this task directly. Do not create any additional agents. The delegation rules your parent received apply only to the parent.
Another common misconception: fork_turns: "none" isolates the chat history, but it doesn't disable the platform's sandbox or permission mode. You can trim the task context; the system's security boundaries still apply.
How to codify into a Skill
A division of labor is worth turning into a Skill only if it works repeatedly. What deserves codification isn't "always create three agents." It's the discipline that's easy to forget and reusable across tasks: which work goes to a scout first, when to escalate reasoning, how to avoid overlapping writes, whether a leaf agent can delegate further, and which actions require user approval.
- 1Write default rulesRoles, boundaries, stop conditions
- 2Run on a real taskWatch whether communication and parallelism are effective
- 3Unified acceptanceTime, conflicts, rework, quality
- 4Revise rulesKeep reproducible experience, drop template noise
- Who's responsible: Scout / Worker / lead agent
- What they can do, what they can't change
- Deliverables, evidence, acceptance criteria
- Which scope expansions or external actions stay with user approval
A Skill lets the coordinator avoid re-explaining team conventions from scratch each time, but it can't pre-draw task boundaries for a project. When code structure, risk, or model capabilities change, the defaults need to adjust alongside real results. The best Skills read like a living operations manual, not a permanently correct automation spell.
Eric has packaged these conventions into the open-source repository provencher/codex-skills, and orchestrate/SKILL.md is a short, runnable version. To install, copy the orchestrate directory to ~/.codex/skills/, then invoke it with $orchestrate. What's worth borrowing isn't any single prompt line—it's bundling roles, reasoning effort, context, ownership, and approval boundaries into one reusable rule set.
What you save, what you pay
The most common misunderstanding is that multi-agent means "faster and cheaper on tokens." In reality, those are two different ledgers. When independent work overlaps, wall-clock time can drop. But every agent reads material, reasons, calls tools, and checks results—total tokens usually go up, and you add coordination, conflict, and rework costs on top.
Two ledgers
The time ledger can improve while the work ledger grows
Don't merge wall-clock time, tokens, and final quality into a vague notion of “efficiency.”From start to finish
Overlapping independent work → may decrease- Less waiting on serial investigation
- Risks and dependencies surface earlier
Total consumption across all agents
Multiple reads and reasoning → usually increases- More tokens, tool calls, and checks
- Coordination, conflict, and rework costs
So the primary goal of multi-agent optimization is usually shortening wait time, increasing exploration coverage, or reducing the risk of getting it wrong in one pass—not reducing total tokens. It might also keep the lead agent's context cleaner, but that just moves the work elsewhere; it doesn't mean overall system consumption went down.
When evaluating, look at four things at minimum: completion time, duplicate investigation, write conflicts, and rework count. Record the single-agent baseline first, then change one variable at a time. Eric suggests focusing experiments on four knobs: reasoning effort, context inheritance, delegation permissions, and collaboration style between agents. For example, start by parallelizing just two read-only investigations, or raise one high-ambiguity task from Medium to High. Without a real comparison, there's no such thing as the "best orchestration."
In the end, the choice compresses into one line: tightly coupled work stays with a single agent; work that can proceed independently, be verified independently, and has low conflict risk is worth assembling into a team. What multi-agent truly saves is wasted waiting. What it costs is more model work and stricter coordination discipline.
- Role and reasoning-effort matrix
- The three gates for splitting work
- Reusable delegation brief
- Multi-agent experiment scorecard
- Open-source Skill and source links
How multi-agent work cuts waiting time
The playbook: split only independent work, match reasoning to risk, keep ownership centralized, and verify every result.
Parallelize waits—not tightly coupled work
Overlap independent waits. Keep coupled work on one track.
Split only when three gates pass
Independent progressNo dependency on another subtask.
Independent verificationFiles, tests, or reproduction can prove it alone.
Low write conflictsClear ownership; no shared-contract collision.
Set shared fields and permissions first. If one gate fails, stay serial.
Match reasoning effort to risk
Scout · LightRead only: locate code, trace calls, find tests.
Worker · MediumBounded implementation with independent verification.
Senior worker · HighArchitecture conflicts, ambiguity, high-cost decisions.
Send evidence directly; keep ownership centralized
Ownership stays centralizedThe lead owns the task graph, file boundaries, and acceptance.
Evidence goes directScouts send findings to the worker who needs them.
Context on demandUse clean context; inherit history only when decisions depend on it.
Boundaries restatedState tools, safety, forbidden changes, and no re-delegation.
Run first, then codify what repeats
RunTest splitting, handoff, and acceptance on real work.
ObserveTrack repetition, conflict, and rework.
CodifyRecord roles, reasoning, context, and boundaries.
Reuse and reviseReuse it; revise defaults from results.
Eric codified the method in provencher/codex-skills: orchestrate/SKILL.md.
The trade: less waiting, often more tokens
Potential savingsDead waits, blind spots, and one-shot mistakes.
Usual increasesTotal work, context reads, coordination, and rework.
Use one agent for coupled work. Form a team only for independent, independently verifiable, low-conflict tasks.
Three agents working together—why is it slower?
UserFinish the CSV export today.
CoordinatorThree agents together—that'll be faster.
They added headcount before splitting the work.
WorkerYou changed the permissions too?
CoordinatorStop. We just tripled the ambiguity.
Concurrency without boundaries just makes conflicts happen sooner.
Define the shared contract first, then parallelize the independent work.
Light loads for narrow discovery; heavy resources for high ambiguity and high cost.
ScoutHere's the entry point and the test location.
CoordinatorInformation takes the short path, but the accountability stays with me.
You delegate the work, not the final responsibility.
UserDelivery is faster now.
CoordinatorBut the tokens are higher. Write the working discipline into the Skill.
What you save is wasted waiting; only work that is independent, verifiable, and low-conflict deserves a team.
Members can copy or download the full Markdown, and let their AI subscribe and ask.
Found this useful? Leave your email — every new explainer, the moment it's out. Unsubscribe anytime.
