[CLI] GPT-5.5 forces MultiAgentV2 despite disable and hides documented custom-agent controls
What version of Codex CLI is running?
codex-cli 0.142.5
What subscription do you have?
ChatGPT Plus
Which model were you using?
gpt-5.5
What platform is your computer?
Linux 6.18.33.2-microsoft-standard-WSL2 x86_64 x86_64
What terminal emulator and version are you using?
VS Code 1.127.0 under WSL (Ubuntu 22.04); no terminal multiplexer.
Codex doctor report
codex doctor --json confirmed Codex 0.142.5, valid configuration, ChatGPT authentication, reachable HTTP/WebSocket endpoints, and gpt-5.5 as the configured model. The report's overall failure was caused by the expected side-by-side npm test executable differing from the global npm installation. The full report is omitted here because it contains local filesystem paths and unrelated local session inventory; it can be provided in redacted form if needed.
What issue are you seeing?
GPT-5.5 forces the MultiAgentV2 tool surface even when MultiAgentV2 is explicitly disabled in both config.toml and command-line overrides.
The effective feature listing says:
multi_agent stable true
multi_agent_v2 under development false
Adding or removing those persistent [features] entries produces no observable difference in the tested sessions: fresh GPT-5.4 threads use V1 in either case, while fresh GPT-5.5 threads use V2 in either case. The entries are accepted by configuration loading and reflected by features list, but multi_agent_v2 = false is not effective for GPT-5.5.
The current model catalog says:
gpt-5.5 multi_agent_version: v2
gpt-5.4 multi_agent_version: null
gpt-5.4-mini multi_agent_version: null
In a fresh GPT-5.5 thread, spawn_agent exposes the V2 parameters task_name, message, and fork_turns. A V1 call fails with:
failed to parse function arguments: missing field task_name
Changing that existing thread from GPT-5.5 to GPT-5.4 does not change its tool surface; it remains V2. In contrast, a fresh GPT-5.4 thread exposes the V1 schema and successfully spawns gpt-5.4-mini with an explicit reasoning effort.
This matches the 0.142.5 implementation: model_info.multi_agent_version takes precedence over config.multi_agent_version_from_features() and the selected version is pinned to the thread:
https://github.com/openai/codex/blob/rust-v0.142.5/codex-rs/core/src/session/mod.rs#L2954-L2968
This makes the local feature listing misleading for GPT-5.5 and prevents users from following the published recommendation not to use MultiAgentV2 while it remains under development.
It also removes documented custom-agent functionality. The current Subagents documentation says Codex identifies custom agents by their name, and that agent files may pin model, model_reasoning_effort, sandbox_mode, and developer_instructions:
https://developers.openai.com/codex/subagents
For example, valid personal profiles named reviewer and harness_reviewer exist under ~/.codex/agents/. In a fresh GPT-5.4/V1 thread, spawning agent_type: "harness_reviewer" succeeded and returned role harness_reviewer, displayed model gpt-5.4, displayed reasoning effort medium, and the expected child response. In a GPT-5.5/V2 thread, the callable schema does not expose agent_type, model, or reasoning_effort. A task named reviewer is only a generic task identifier and does not activate the configured reviewer profile. The profile's pinned model, reasoning effort, read-only sandbox, and developer instructions therefore cannot be selected through the available tool surface.
Operational impact
- Users selecting GPT-5.5 cannot opt out of an implementation the same CLI still labels
under development, even with both persistent and command-line disables. features listreports V2 as disabled while the active GPT-5.5 thread uses V2, so the reported feature state does not describe effective behavior.- Documented custom reviewer profiles cannot be selected, including their pinned model, reasoning effort, sandbox policy, and developer instructions.
- A reproduced V2 child run failed during encrypted communication, so this is not only a schema or presentation difference.
- Switching an affected thread from GPT-5.5 to GPT-5.4 does not recover V1 because the selected multi-agent version remains pinned to that thread.
What steps can reproduce the bug?
- Configure:
``toml``
[features]
multi_agent = true
multi_agent_v2 = false
- Launch Codex 0.142.5 normally with GPT-5.5:
``bash``
codex -m gpt-5.5
- Observe that the persistent
multi_agent_v2 = falsesetting does not change the GPT-5.5 tool surface.
- As an independent confirmation, launch with explicit command-line overrides:
``bash``
codex -m gpt-5.5 -c 'features.multi_agent_v2=false' -c 'features.multi_agent=true'
- Ask Codex to list the exact
spawn_agentschema, or call it with V1'sfork_contextargument.
- Observe that both launch paths require V2's
task_nameandfork_turns, despite the persistent and command-line disables.
- Run
codex debug modelsand observe that GPT-5.5 carriesmulti_agent_version: v2while GPT-5.4 does not.
- Start a fresh GPT-5.4 thread with the same feature configuration and observe that V1 works normally, including selection of a configured
harness_reviewerprofile with its pinned GPT-5.4 medium settings.
What is the expected behavior?
An explicit local features.multi_agent_v2=false should take precedence over model metadata. If GPT-5.5 cannot operate with V1, Codex should reject the incompatible configuration or clearly warn that selecting GPT-5.5 overrides the local setting and mandates an under-development feature. features list should report the effective per-model behavior rather than saying V2 is disabled while the active thread uses it.
If GPT-5.5 must use V2, the V2 tool surface should retain the documented ability to select custom agents and their configured model, reasoning, sandbox, and instructions, or the documentation should clearly disclose that these capabilities are unavailable with GPT-5.5.
Additional information
This is related to, but distinct from:
- #26753: encrypted MultiAgentV2 schema/backend failures.
- #28058: encrypted V2 messages remove the readable local delegation audit trail.
- #26210: the encryption implementation.
When V2 metadata was explicitly exposed during testing, a spawned GPT-5.4-mini child also failed with:
stream disconnected before completion: Encrypted function output content could not be decrypted or decoded
The central issue here is configuration precedence: GPT-5.5 makes V2 effectively mandatory even though the CLI still labels V2 under development.
9 Comments
GPT-5.5 no longer has a defined multi_agent_version, so this is likely out of date.
But, GPT-5.6-Sol does, so the broader point is still true.
You can do this to stay on v1:
Then create
~/.codex/models-v1.jsonfrom the current model catalog and change only these fields:and optionally:
You can also optionally instead set version as
"null"for all three Sol, Terra, and Luna, so that multi-agent schema version is defined by features config, not model catalog, but that's up to you.Additional deterministic reproduction from Codex CLI/TUI 0.144.1. This appears to narrow the model-switch behavior to the first submitted turn, rather than session creation, dropdown selection alone, or MCP initialization.
Environment
26.623.19656.0x64codex-cli 0.144.1, originatorcodex-tui26200openaicodex --yolo(approval_policy=never,sandbox=danger-full-accessin rollouts)model = gpt-5.6-sol,model_reasoning_effort = highconfig.tomlcodex features list:multi_agent=true,multi_agent_v2=falsev2, Terra=v2, Luna=v1, GPT-5.5 has nomulti_agent_versionPersonal TOML roles used as controls:
cheap_explorer:gpt-5.6-terra, medium, read-onlyticket_worker:gpt-5.6-sol, high, workspace-writeSession 1: first submitted turn on GPT-5.5
Session
019f4a75-8d31-7620-8be5-fae49ac41a39:codex --yolo, initially showing the default GPT-5.6-Sol.turn_context:model=gpt-5.5,multi_agent_version=v1.cheap_exploreris dispatched throughmulti_agent_v1.spawn_agent(agent_type=cheap_explorer).019f4a77-1e18-7a90-a8a8-677e83512996recordsagent_role=cheap_explorer,model=gpt-5.6-terra,effort=medium, matching its TOML.model=gpt-5.6-sol, but remainmulti_agent_version=v1.ticket_workeris dispatched throughmulti_agent_v1.spawn_agent(agent_type=ticket_worker).019f4a7b-0dda-7a90-bcf4-f86f938992e9recordsagent_role=ticket_worker,model=gpt-5.6-sol,effort=high, also matching its TOML.Session 2: no submitted turn while GPT-5.5 is selected
Session
019f4a7b-c48d-7e00-b0bd-32ccb4899ca2:model=gpt-5.6-sol,multi_agent_version=v2,multi_agent_mode=explicitRequestOnly.Session 3: commit one ordinary GPT-5.5 turn first
Session
019f4a7c-bc64-7163-aff8-62546ade4e0a:hiand receive the reply.model=gpt-5.5,multi_agent_version=v1.multi_agent_version=v1.cheap_explorersuccessfully dispatches throughmulti_agent_v1.spawn_agent; child019f4a7e-7a95-7883-9f38-1932ad75be6eagain records Terra/medium and the correct custom role.Inference from the three controls
The reproducible rule appears to be:
So the apparently relevant
hiis not initializing MCP. It commits the first GPT-5.5 turn and causes the thread to select V1. Model dropdown changes before any submitted turn do not appear to initialize or change the multi-agent version.This also gives a stronger control for the custom-agent portion of this issue and the tool-backed mismatch in #15250: TOML discovery, role resolution, and role-specific child model configuration all work when the thread selects V1. The missing capability is specific to the Sol-selected V2 tool surface.
I can provide sanitized rollout excerpts if useful.
I can reproduce this on macOS arm64 with Codex CLI 0.144.1, and the impact also includes agent-scoped MCP configuration.
Environment
codex-cli 0.144.1Darwin 25.5.0 arm64gpt-5.6-solcodex features listreports:multi_agent = truemulti_agent_v2 = falseReproduction
I have two valid personal custom agents under
~/.codex/agents/:Sensitive command arguments, URLs, headers, and credentials are omitted.
Both custom agent TOML files parse successfully and declare
name,description,developer_instructions, and agent-specificmcp_servers.The Context7 MCP server itself was tested independently using only
initializeandtools/list:However, when Codex delegates through the V2 subagent tool surface:
the resulting child is generic:
The child tool registry contains no Context7 MCP tools. The same behavior occurs
with the HTTP-backed custom agent: its agent-specific MCP tools are absent and
no request reaches that MCP server.
Using the custom agent name as
task_nameonly changes the task path; it doesnot resolve or apply the custom agent TOML.
Expected behavior
The current Subagents documentation says custom agent TOML files are loaded as
configuration layers for spawned sessions and may contain
mcp_servers.Selecting a custom agent should therefore apply:
developer_instructionsmcp_serversActual behavior
The V2 tool surface provides no custom-agent selector. The spawned child records
agent_role = null, inherits generic parent behavior, and does not load theagent-specific MCP configuration.
This confirms the issue on macOS arm64 and shows that the regression affects
agent-specific tool isolation in addition to model/reasoning configuration.
Seems to be fixed for 5.5, but now Terra and Sol showing the same issue using v2, while Luna is using the v1.
Correction / scope update to my earlier diagnostic comment:
I have now run six fresh control experiments on a second machine with:
codex-cli 0.144.1In all six runs, the custom TOML subagents were exposed immediately and could be selected from the GPT-5.6 parent. The GPT-5.5-first workaround was not needed.
This was not simply a generally unaffected Codex installation: the same machine also reproduced the separate interactive-subagent problem.
Therefore my earlier inference — that the first submitted GPT-5.5 turn deterministically selects V1 and is required for custom-agent exposure before switching to GPT-5.6 — is not universal across Codex CLI 0.144.1 environments. The Windows reproduction and rollout evidence remain accurate for that machine, but they should not be generalized to the CLI as a whole.
At minimum, the behavior appears sensitive to another variable such as the delivered model catalog/runtime configuration, account rollout, tool-surface negotiation, or platform integration. On this Ubuntu CLI setup, direct GPT-5.6 entry did not reproduce the hidden-custom-agent bug across six attempts.
I do not yet have a V1/V2
turn_contextcomparison from the Ubuntu runs, so I cannot say which of those variables differs. The important correction is that GPT-5.5 priming is not inherently required in current Codex CLI 0.144.1.Additional matched-model reproduction on Codex CLI 0.144.1. This rules out a simple parent/child model mismatch for the encrypted V2 handoff failure.
Environment
openaimulti_agent=truemulti_agent_v2=trueagentsgpt-5.6-sol, highMatched control
Parent rollout metadata:
gpt-5.6-solhighopenaimulti_agent_version=v2019f5d2a-8d53-7cf3-b843-5fd1b9d84c7dExactly one named child was dispatched:
agent_type=k_reviewerfork_turns=nonek_reviewergpt-5.6-solhighopenai019f5d2b-80e8-7b51-8778-7d71a370b659The child still terminated with:
No child JSON or assistant response arrived, no retry was attempted, and the repository status was identical before and after.
Rollout clues
The child rollout contains the canonical task handoff as an
encrypted_contentitem, then token-count events, but no assistant output before terminal completion. During that child turn, rate-limit metadata changes from the genericcodexlimit to:even though both parent and child
turn_contextrecords remaingpt-5.6-solhigh. I do not know whether this represents a backend fallback, accounting-only metadata, or another routing layer, but it may be relevant to the encrypted-content failure. This resembles the model/provider transition mechanism discussed in #17541, while still reproducing with matched visible parent/child model metadata.A separate configuration inconsistency was also visible: the named
k_reviewerprofile declares a read-only sandbox, but the childturn_contextrecordsdanger-full-access, inherited from the parent. The role, model, reasoning effort, and developer instructions were applied; the sandbox setting was not.The same encrypted transport error had already reproduced from a fresh Terra parent with the same named Sol reviewer. The Sol/Sol control above shows that merely matching the configured parent and child model is not a workaround.
Correction/escalation to my July 12 update: I now have rollout-level evidence that this is a more severe regression than simple model- or prompt-dependent behavior.
On a fresh Ubuntu 24.04.4 host, I invoked the exact retained Codex 0.144.1 executable by absolute path:
/home/antoine/.codex/packages/standalone/releases/0.144.1-x86_64-unknown-linux-musl/bin/codexThe resulting session metadata confirms
cli_version: 0.144.1, so this is not contamination from the currently installed 0.144.4 CLI.codex features listunder that executable reports:multi_agent: stable, truemulti_agent_mode: removed, falsemulti_agent_v2: under development, falseThere are no
multi_agentorhide_spawn_agent_metadataoverrides in the user config, environment, or systemd user-manager environment.Nevertheless, a fresh
codex exec --json --yolosession recorded:gpt-5.6-solmulti_agent_version: "v2"multi_agent_mode: "explicitRequestOnly"More importantly, the collaboration
spawn_agentschema exposed to the model did not containagent_type. The resulting call could only specify:The requested custom role exists in
~/.codex/agents/outer_recon.tomland specifies:gpt-5.6-terraBut the spawned child recorded:
It ran on
gpt-5.6-solatxhigh, received none of the custom role’s developer instructions, and returnedNO_CUSTOM_ROLE_INSTRUCTIONS.This distinction matters:
task_name: "outer_recon"creates a path that looks like a named agent, so a behavioral probe can produce a false positive. The reliable indicators areagent_role, the selected model/effort, and receipt of the role-specific developer instructions. All of those failed here.I also launched a separate fresh session with:
codex exec --disable multi_agent_v2 ...That session still recorded:
multi_agent_version: "v2"multi_agent_mode: "explicitRequestOnly"So the documented/local feature state and the explicit CLI disable are both being overridden by the effective per-thread runtime.
This is no longer plausibly a “the model chose the default spawn path” prompt issue. The tool schema itself omits
agent_type; no prompt can select a custom role through a field that the runtime has removed.For the affected rollout, documented custom subagents are therefore not merely degraded—they are unreachable. The only available operation creates generic task children, while silently ignoring the custom role’s model, effort, sandbox, and instructions.
Could the Codex team please:
agent_typedespite both configured and explicit CLI state.--disable multi_agent_v2actually restore the legacy custom-agent surface.codex execreceives its configured role, model, effort, sandbox, and developer instructions.codex features listreport the effective negotiated behavior, or otherwise clearly disclose when server-side state overrides it.I can provide sanitized rollout excerpts if useful.
I reproduced this regression on Codex CLI 0.144.5 on Windows and found a working local model-catalog override.
Environment
0.144.5gpt-5.6-sol,gpt-5.6-terra,gpt-5.6-luna, andgpt-5.3-codex-sparkObserved behavior
codex features listreported:However, before applying any local catalog override,
codex debug modelsreported:Fresh Sol/Terra sessions exposed the V2 spawn schema:
task_namemessagefork_turnsThe callable schema did not expose
agent_type,model, orreasoning_effort. Consequently, configured custom agents and their pinned model, reasoning effort, sandbox, and developer instructions could not be selected through the spawn call.As an A/B test, I started a fresh
gpt-5.3-codex-spark xhighsession. It used the V1 behavior and displayed a spawned agent as:This indicates that the effective multi-agent tool surface is selected from model/runtime metadata and is pinned when the thread is created. Switching the model inside an existing V2 thread was not sufficient to recover the V1 schema.
Working workaround
I generated a snapshot of the current model catalog and changed only these entries:
I then configured Codex to load that local catalog:
After fully restarting Codex and creating a fresh session,
codex debug modelsreported V1 for Sol, Terra, and Luna, and the V1 subagent controls became available again.The JSON file must be UTF-8 without a byte-order mark. Some Windows PowerShell versions add a BOM when using
Set-Content -Encoding utf8, causing Codex to fail with:I avoided this with:
Caveat
model_catalog_jsonfreezes the entire model catalog, not onlymulti_agent_version. Users must temporarily remove the override and regenerate the snapshot to receive future model metadata updates.There is also a potentially significant Ultra compatibility risk. Sol and Terra advertise Ultra support and were originally assigned MultiAgentV2. Forcing their tool surface to V1 may prevent proactive delegation, reduce orchestration quality, or produce a mismatch between Ultra runtime behavior and the available multi-agent tools. Users who rely on Ultra should not assume that a successful V1 spawn test proves that Ultra is fully functional.
Hypothesis, not a confirmed cause
In the original catalog, Sol and Terra were both assigned V2 and supported the new
ultrareasoning level, while Luna was assigned V1 and did not support Ultra. The official Subagents documentation states that Ultra can proactively delegate suitable work to subagents.This correlation suggests that MultiAgentV2 may be related to Ultra orchestration. I have not found source code or a maintainer statement confirming that MultiAgentV2 was created specifically for Ultra. It is also not yet verified whether every Ultra delegation behavior works correctly after forcing the V1 tool surface.
For that reason, this workaround should be considered experimental when
model_reasoning_effort = "ultra"is used. A controlled V1/V2 comparison of proactive delegation, child creation, steering, waiting, and result collection is still needed.---
Complete workaround guide
The full PowerShell procedure, validation steps, maintenance notes, and rollback instructions are available here:
https://gist.github.com/occupty/f049819475e934803df98c04e279eee9