Repository navigation
MultiAgentV2 is fundamentally broken as a forced runtime and should not be imposed by model metadata #32705
Description
Summary
MultiAgentV2 may be reasonable as an experimental or explicitly enabled runtime. It is not currently viable as a runtime that the model catalog can force on users.
gpt-5.6-sol selects MultiAgentV2 through model metadata even when the local features.multi_agent_v2 flag is disabled. Under the vanilla V2 configuration, Sol cannot reliably perform the obvious intended workflow: orchestrating heterogeneous Terra/Luna or named role-specific subagents with different models, reasoning efforts, and permissions.
This is an umbrella integration/release-policy issue. Individual symptoms have already been reported, but their interaction leaves no supported vanilla path for the intended workflow.
The default failure chain
- The model catalog overrides the user's runtime selection. A model with
multi_agent_version = "v2"selects V2 even whenFeature::MultiAgentV2is explicitly disabled. This behavior is deliberately covered byremote_multi_agent_selector_overrides_feature_flags. - V2 hides the routing controls by default.
hide_spawn_agent_metadata = trueremovesagent_type,model,reasoning_effort, andservice_tierfrom the model-visiblespawn_agentschema. Despite its name, this setting removes functional inputs, not merely metadata from output. - Omitted
fork_turnsdefaults toall. Therefore the natural/default spawn is a full-history fork. - Full-history forks reject heterogeneous routing. V2 rejects
agent_type,model, andreasoning_effortoverrides for a full-history fork and requires them to inherit from the parent. task_nameis not a role selector. Naming a task after a configured[agents.<role>]entry only creates an agent path; it does not select that role. The child can silently recordagent_role = nulland inherit Sol.- Role-specific sandboxing is overwritten by the parent's live permission profile. The spawn path applies the role and then copies the parent turn's permission profile onto the child. In particular, a full-access parent cannot create a genuinely read-only role-defined child through this path.
- The apparent config workaround may collide with the server-reserved schema. Exposing the hidden fields under the default
collaboration.spawn_agentnamespace has been observed to fail before inference because the declared schema does not match the reserved backend schema. Changing the namespace is an undocumented, version-sensitive workaround.
The result is a circular contract:
- the catalog forces V2;
- V2's default schema hides the controls needed for heterogeneous agents;
- its default fork mode forbids those controls anyway;
- named roles are not selectable through
task_name; and - role-defined isolation is replaced with the parent's permissions.
At that point MultiAgentV2 is not merely rough around the edges. For the intended Sol orchestrator workflow, the vanilla product configuration is internally contradictory.
Reproduction
- Use Codex CLI
0.144.xwith ChatGPT authentication and a clean/default configuration. - Start a fresh task using
gpt-5.6-sol. - Observe that the model-selected runtime is V2 even if the local V2 feature is disabled.
- Inspect the visible
spawn_agentschema. On affected configurations it exposes onlytask_name,message, andfork_turns, notagent_type,model,reasoning_effort, orservice_tier. - Register a role such as:
[agents.research_analyst]
description = "Read-only documentation and research specialist."
config_file = "agents/research-analyst.toml"with:
model = "gpt-5.6-terra"
model_reasoning_effort = "medium"
sandbox_mode = "read-only"- Ask Sol to spawn that role. Using
task_name = "research_analyst"creates only the path/name. - Inspect the effective child configuration/rollout metadata. The affected behavior is
agent_role = null, parent Sol model/effort, and the parent's permission profile. - If the hidden arguments are exposed or supplied, omit
fork_turnsand observe that the default full-history fork rejects the override.fork_turns = "none"is required, but this is not the default and does not repair the role-specific sandbox overwrite.
Existing component reports
- [CLI] GPT-5.5 forces MultiAgentV2 despite disable and hides documented custom-agent controls #31097 — model metadata forces V2 despite local configuration
- GPT-5.6 Sol cannot specify subagent models, forcing all subagents to also be Sol instances #31814 — Sol/V2 hides the model and role routing controls
- [Critical UX regression] multi-agent v2 spawn_agent hides model overrides and rejects the default call shape #32031 — hidden controls plus the default full-history call shape
- MultiAgentV2 spawn_agent defaults to full-history fork, rejecting agent_type/model overrides #20077 —
fork_turnsdefaults to full history and rejects overrides - 🩹 All GPT-5.6 Sol turns fail because MultiAgentV2 uses reserved collaboration.spawn_agent #31864 and MultiAgentV2: reserved spawn_agent schema blocks per-child model and reasoning-effort overrides #32674 — reserved namespace/schema incompatibility
- Tool-backed subagents silently inherit Sol Ultra instead of custom agent model settings #32587 and spawn_agent cannot bind to custom [agents.*] profiles in Codex App config.toml #32703 — named roles silently become generic inherited children
- MultiAgentV2 canonical activity items omit effective subagent identity/model/effort metadata #32504 — effective child identity/model/effort is not reliably surfaced
These issues are related, but fixing any one in isolation does not produce a working vanilla Sol → Terra/Luna role-routing path.
Expected behavior
A model-catalog entry must not be able to remove a user's working runtime without providing an equivalent, tested workflow.
At minimum:
- Treat the catalog's
multi_agent_versionas a default, not an override of an explicit user selection. - Remove the forced V2 selector from Sol/Terra until the complete clean-install workflow passes end to end.
- Expose
agent_type,model,reasoning_effort, andservice_tierin a backend-compatible schema. - Default
fork_turnstonone, or make explicit role/model overrides compatible with omitted/full-history forking. - Keep
task_nameand role selection distinct and expose a real role selector. - Allow a child to adopt a stricter permission profile than its parent, including a read-only role under a full-access parent. Less-restrictive escalation can continue to require the normal approval/policy checks.
- Record and display the effective child role, model, effort, and permission profile—not merely requested values.
Required regression test
Please add one product-level test using an empty Codex home and the normal model catalog:
- Select Sol.
- Register a Terra/medium/read-only role and a Luna/low/read-only role.
- Spawn both through the exact model-visible tool schema.
- Assert their effective model, effort, role, permission profile, task delivery, and completed metadata.
- Repeat with V2 explicitly disabled and assert that the user's selection wins.
Until that test passes on the same configuration shipped to users, MultiAgentV2 should remain opt-in rather than being forced by model metadata.
Source confirmation
Confirmed against current source at 2b9c05046038c038ec6bddb9db7d11394995372d and the affected 0.144.x release family. The relevant behavior is directly encoded in:
codex-rs/models-manager/models.json(gpt-5.6-solselects V2)codex-rs/core/tests/suite/model_runtime_selectors.rs(catalog selector overrides feature flags)codex-rs/core/src/config/mod.rs(hide_spawn_agent_metadata = true)codex-rs/core/src/tools/handlers/multi_agents_spec.rs(routing fields are removed)codex-rs/core/src/tools/handlers/multi_agents_v2/spawn.rs(omittedfork_turnsbecomesall)codex-rs/core/src/tools/handlers/multi_agents_common.rs(full forks reject routing overrides and child runtime permissions are copied from the parent turn)
Activity
github-actions commentedon Jul 13, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
gndk commentedon Jul 13, 2026
Good summary. Its really hard to understand how this could have even be released like this.
OAI team, please start actually using Codex internally instead of whatever custom harness you use currently. This would prevent a lot of the recent QA issues.
FRITS-Kh commentedon Jul 13, 2026
Confirmed in another currently affected environment:
The model-visible collaboration.spawn_agent schema exposes only:
There is no agent_type, subagent_type, model, reasoning_effort, or equivalent
role selector.
The project contains valid named custom agents under .codex/agents/*.toml, but
task_name only creates an instance label/path and does not select the configured
agent role. This makes the configured planner/reviewer/coder orchestration
workflow unusable.
Older multi_agent_v1 sessions on the same machine exposed agent_type, so this
also appears to be a regression or runtime/tool-surface mismatch in
MultiAgentV2/collaboration.spawn_agent.
michael0903 commentedon Aug 5, 2026
I can reproduce a stricter native catalog failure on the current published CLI (
0.146.0) with ChatGPT authentication.Reproduction:
Start a clean local CLI run with user config and rules ignored; explicitly enable
features.multi_agent,features.multi_agent_v2, andagents.enabled.Use
gpt-5.6-terraas the parent and request exactly one nativespawn_agentchild withmodel: "gpt-5.6-luna"andfork_turns: "none"; the child has no tools.The router rejects the request before child creation:
Control: a top-level read-only
codex exec -m gpt-5.6-lunasucceeds under the same client, authentication, and policy.This is upstream of the schema-visibility and default-full-fork problems: even an explicit fresh spawn reaches the router but receives a child-model catalog that excludes Luna. There is no local
AGENTS.md, feature-flag, or general Luna-access explanation for this result.