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.

By Eric Provencher08-18 · 9 min read
🎧 Listen to the podcast0:00 / --:--
0:00 / --:--
Tool tutorial · XiaoHu Explains
One-minute overview
  • 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.

Decide whether to split first, then assemble the team, then tally the cost The seven questions aren't seven isolated tips—they form a configuration chain with a deliberate order.
  1. 1Why do you need multiple agents?
  2. 2Which tasks can be split?
  3. 3Which model should handle each piece?
  4. 4How should agents coordinate?
  5. 5How much context should each agent get?
  6. 6How do you turn this into a reusable Skill?
  7. 7What do you save, and what does it cost?
Look at task structure before talking models or parallelism; otherwise every later configuration may rest on a faulty split.

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 same four pieces of work, with the only difference being whether the first three must queue.
Single agentWaits on each item
Check codeVerify permissionsFind testsIntegrate
Multiple agentsIndependent investigations overlap
Check codeVerify permissionsFind testsIntegrate
What actually shrinks is wall-clock timeOnly independent steps can overlap; final judgment and integration still have to happen.
Diagram isn't a fixed timing model. The time benefit of multiple agents depends on how cleanly the task can be divided.

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.

3 / 3 conditions met
Good for parallel execution

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.

The interaction only changes split conditions, not the underlying fact: agent count isn't what determines whether a task can be parallelized.

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.

Same model family, but assign reasoning intensity by task difficultyThis is a simple starting configuration, not a platform whitelist.
RoleSuggested configResponsible forHow they deliver
ScoutScoutSol · LightRead-only location of files, call chains, tests, and risk entry pointsEvidence, paths, conclusions; no code changes
WorkerWorkerSol · MediumWell-scoped implementation, checks, and assistanceLocalized changes, tests, and results
Smart workerSpecialistSol · HighDifficult implementation, resolving ambiguity, and high-risk coordinationKey judgments, approach, and verification
Escalation principleRaise reasoning when uncertainty, coupling, or cost of failure rises; don't pick a tier mechanically by role name.
You can also use other supported models like Terra or Luna. Fixing one baseline reduces the number of variables you change at once.

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.

Message paths between Scout, lead agent, and WorkerRelay path goes through the lead agent; direct path connects Scout to Worker directly. The lead agent always retains ownership and acceptance.
ScoutDiscovers dependency info
Lead agentTask graph and acceptance
WorkerAwaits evidence to implement
Relay: report first, then forward Direct: facts go straight to the dependent
Direct path: cuts one round of relay and waitingGood for clearly scoped findings like file paths, test locations, and verified facts.
Shared boundaryFile ownership, shared contracts, final integration, and user approval stay with the lead agent.
Shortest message path doesn't mean coordination disappears. Significant scope changes should still route back to the lead 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 context
Current task spec

Goals, scope, deliverable, acceptance, and constraints must be restated

Conversation history

No irrelevant discussion or orchestration instructions from the parent conversation

Good for narrow, read-only investigations that can stand alone
fork_turns: all / NInherit relevant history
Current task spec

Current ownership and stop conditions still need to be explicit

Conversation history

Keeps overall goals, prior decisions, and compatibility constraints

Good for implementation and complex judgment that depends on prior context
Both inheritsandbox · permission mode · platform tool boundaries

Lack of chat history doesn't mean lack of system constraints.

More context isn't always better; the real standard is whether the task has all the information it needs and manageable noise.

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.

A Skill isn't a one-off prompt—it's a reusable default discipline that can be regression-testedOnly rules that survive real execution and acceptance deserve to become the default next time.
  1. 1Write default rulesRoles, boundaries, stop conditions
  2. 2Run on a real taskWatch whether communication and parallelism are effective
  3. 3Unified acceptanceTime, conflicts, rework, quality
  4. 4Revise rulesKeep reproducible experience, drop template noise
Four types of info worth codifying
  • 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
Acceptance results feed back into the next revision of the Skill, instead of treating the first config as immutable truth
Skills codify orchestration discipline; they don't pre-decide how every project should split tasks.

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.”
Time ledger

From start to finish

Overlapping independent work → may decrease
  • Less waiting on serial investigation
  • Risks and dependencies surface earlier
≠
Work ledger

Total consumption across all agents

Multiple reads and reasoning → usually increases
  • More tokens, tool calls, and checks
  • Coordination, conflict, and rework costs
Keep single-agentHigh coupling, forced serial, shared core area changes
Good team fitIndependent progress, independent acceptance, low write conflicts
Completion timeDuplicate investigationWrite conflictsFinal rework
No universal savings ratio fits every task. First record a single-agent baseline, then compare on similar tasks.

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.

From deciding whether work can be split to routing, handoff, and validation: four execution-ready tools plus the open-source Skill links.
  • Role and reasoning-effort matrix
  • The three gates for splitting work
  • Reusable delegation brief
  • Multi-agent experiment scorecard
  • Open-source Skill and source links
Source
Practical multi-agent orchestration in CodexEric Provencher·View primary source
Site note
This article is based on Eric Provencher's public practice notes, the accompanying Skill, and current OpenAI model guidance. Product capabilities and defaults may change across versions.
↑ End of article
✓ This article is free to read in full

Members can copy or download the full Markdown, and let their AI subscribe and ask.

Read the original ↗
📮 New explainers, straight to your inbox

Found this useful? Leave your email — every new explainer, the moment it's out. Unsubscribe anytime.