🩹 All GPT-5.6 Sol turns fail because MultiAgentV2 uses reserved collaboration.spawn_agent

Open 💬 7 comments Opened Jul 9, 2026 by spadaval

What issue are you seeing?

For affected GPT-5.6 Sol sessions, every request fails before the model processes the prompt with:

Invalid Value: 'tools'. Function 'collaboration.spawn_agent' is reserved for use by this model and must match the configured schema.

This happens even for prompts that do not request a subagent, making GPT-5.6 Sol unusable with the default configuration for affected users.

The failure appears to be a collision between the model-reserved collaboration.spawn_agent tool contract and Codex's independently generated MultiAgentV2 spawn_agent schema:

  • models-manager/models.json selects tool_mode = "code_mode_only" and multi_agent_version = "v2" for gpt-5.6-sol.
  • core/src/config/mod.rs defaults features.multi_agent_v2.tool_namespace to collaboration.
  • core/src/tools/spec_plan.rs wraps the locally generated MultiAgentV2 functions in that namespace.
  • The Responses API recognizes collaboration.spawn_agent as model-reserved and rejects the request because the submitted schema does not exactly match the configured model schema.

This default namespace was introduced by #29067.

What steps can reproduce the bug?

  1. Use GPT-5.6 Sol in a fresh Codex task with the default MultiAgentV2 configuration.
  2. Send any prompt; it does not need to request delegation or call spawn_agent.
  3. Observe that the request fails immediately with the reserved-schema error above.
  4. Add this configuration and start a fresh task:
[features.multi_agent_v2]
tool_namespace = "agents"
  1. Send the same prompt again.
  2. Observe that it succeeds.

The A/B result changes the fully qualified tool identity from functions.collaboration.spawn_agent to functions.agents.spawn_agent without changing the underlying MultiAgentV2 implementation. This strongly isolates the failure to the reserved collaboration namespace/schema collision.

Observed with the current GPT-5.6 Sol rollout. The checked local Codex runtime reports codex-cli 0.144.0; current repository main at the time of investigation was a6b99ee5c45e35165c9bac9da4cec65f2ca55bc9.

What is the expected behavior?

GPT-5.6 Sol should accept ordinary requests with the default Codex configuration.

Codex should either:

  • submit the exact canonical schema configured for Sol's reserved collaboration tools;
  • use a non-reserved namespace for its independently generated MultiAgentV2 schema; or
  • negotiate the model's supported collaboration tool contract rather than assuming the namespace is available.

A tool incompatibility should not make every turn fail before inference.

Fixes

Workaround:

[features.multi_agent_v2]
tool_namespace = "agents"

Ideal fix:
Either make that the default, or change the Responses API backend to no longer make collaboration special.

Additional information

This appears distinct from #26753, #27331, and #27589. Those issues report request-wide failures caused by encrypted parameters not being enabled for the selected model. This report concerns the separate validator error that collaboration.spawn_agent is reserved and does not match the model-configured schema.

View original on GitHub ↗

7 Comments

ignatremizov · 1 month ago

You can do this to stay on v1:

# ~/.codex/config.toml
model_catalog_json = "~/.codex/models-v1.json"

[features]
multi_agent = true
multi_agent_v2 = false

Then create ~/.codex/models-v1.json from the current model catalog and change only these fields:

"slug": "gpt-5.6-sol",
"multi_agent_version": "v1"

and optionally:

"slug": "gpt-5.6-terra",
"multi_agent_version": "v1"

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.

jschyz · 1 month ago

Confirmed: this issue also affected a Codex Desktop setup using a third-party Responses-compatible proxy.

For fresh GPT-5.6 Sol/Terra tasks, an ordinary prompt failed before inference with a proxy-facing 502 Bad Gateway. The proxy masked the upstream validation error, so the useful signal was only visible by replaying the exact request body.

I isolated the failure with A/B tests against the same recorded request:

  • Keeping the generated additional_tools namespace named collaboration returned 502.
  • Keeping collaboration but setting its tools array to [] still returned 502.
  • Removing the namespace entirely returned 200.
  • Keeping every tool and changing only the namespace name from collaboration to agents returned 200.

That confirms the collision is caused by the reserved collaboration.* namespace itself, not by a particular child tool schema or the request size.

Applying this workaround fixed new Codex Desktop tasks after a full restart:

[features.multi_agent_v2]
enabled = false
tool_namespace = "agents"

Existing tasks retained their original tool snapshot and continued to fail; newly created tasks succeeded. This is a strong match for the reserved-schema collision described in the issue.

spadaval · 1 month ago

The codebase also has tests validating that the "agents" namespace works, which leads me to believe that that was always the intended namespace, but that refactor never happened.

spadaval · 1 month ago

@jschyz fyi disabling multi_agent_v2 does nothing, as the codex CLI currently ignores this flag if the model catalog defines a value (which it does for Terra/Sol).
I've generally found multi_agent_v2 to be pretty good and I wouldn't recommend disabling it.

Note that you may also want to set this flag to avoid a certain insidious class of subagent delegation bug:

[features.multi_agent_v2]
hide_spawn_agent_metadata = false

Reference #31814 for more on that.

heeyagun-max · 1 month ago

Confirmed on Windows x64 with Codex App 26.707.9981.0 and Codex CLI 0.144.1.

With multi_agent = true, both gpt-5.6-terra and gpt-5.6-sol failed before inference with the exact reserved collaboration.spawn_agent schema error. The same failure reproduced with the 0.144.4 binary.

Adding only this configuration, while keeping multi-agent enabled, fixed both models in a local Codex CLI request:

[features.multi_agent_v2]
tool_namespace = "agents"

The Codex App was restarted to load the same configuration. This confirms the collaboration namespace collision and the agents namespace workaround on a native Windows setup.

romacv · 1 month ago

Confirmed on Codex for iOS (2026-07-26). An ordinary prompt failed before inference with this exact response:

{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "Invalid Value: 'tools'. Function 'collaboration.spawn_agent' is reserved for use by this model and must match the configured schema.",
    "param": "tools"
  },
  "status": 400
}
chigkim · 9 days ago

The pr #29067 (tool_namespace: None changed to Some("collaboration"), with the previously-configurable features.multi_agent_v2.tool_namespace removed) appears to be the root cause of a recurring class of bug reports since it merged.

Any provider that reports namespace_tools: true (the default for everything except Bedrock) now has its multi-agent-v2 tools force-wrapped under the collaboration namespace, which requires the model/backend to emit a genuine structural namespace field on function calls - something most non-OpenAI-hosted models/servers (and even some OpenAI-hosted configurations on non-ChatGPT backends) don't produce.

I confirmed this with a direct before/after test: same custom OpenAI-compatible provider, same open-weight model (Qwen3.8-27B), same prompt.

  • codex-cli 0.142.0 (last stable release before the PR merged): spawn_agent / wait_agent / list_agents are called flat, all succeed, and the subagent actually runs and replies.
  • Current builds (0.147.0+): the exact same setup produces ERROR: unsupported call: collaboration.spawn_agent, because the model has no way to emit the namespace field this now requires.

Open-weight models such as Qwen (and presumably any other model/server not specifically fine-tuned on this namespace-grouped tool-call convention) can no longer use multi-agent-v2 at all, even when tool-calling otherwise works fine for that model (flat tools like shell_command and update_plan are unaffected).

Since tool_namespace was removed as a config surface, there's no way to opt back out to flat tool names to restore compatibility.

Also issue #31882.

Would it make sense to reintroduce a way to disable namespace wrapping (or gate it on a provider capability that reflects actual namespace-tool-call support, not just "is not Bedrock") so non-namespace-capable providers/models can keep using flat multi-agent-v2 tool names?