GPT-5.6 Sol root exposes spawn_agent without agent_type, blocking custom agent routing
Summary
When a Codex task is rooted on GPT-5.6 Sol, the available multi-agent spawn schema can omit agent_type. That prevents custom-agent routing from selecting configured agents, even when the same custom agents work from a root runtime that exposes stable multi_agent_v1.spawn_agent(agent_type=...).
Expected behavior
A GPT-5.6 Sol root should expose a spawn contract that can select a configured custom agent, for example:
{
"agent_type": "gpt56_router_terra_explorer",
"task_name": "bounded exploration task",
"message": "...",
"fork_turns": "none"
}
or the stable v1 equivalent:
{
"agent_type": "gpt56_router_terra_explorer",
"fork_context": false,
"message": "..."
}
Observed behavior
In the failing GPT-5.6 Sol-rooted tasks, the spawn schema appears to provide only fields like:
task_name
message
fork_turns
There is no agent_type field. Supplying a custom agent name through task_name only names the child task; it does not select the configured custom agent.
Why this matters
This blocks model-pinned custom-agent routing. A router skill cannot safely delegate to configured roles such as:
gpt56_router_luna_workerpinned togpt-5.6-lunagpt56_router_terra_explorerpinned togpt-5.6-terragpt56_router_sol_debuggerpinned togpt-5.6-sol
Without agent_type, the parent cannot select the role-specific TOML configuration, sandbox defaults, model, or reasoning effort.
Working comparison
In a current non-GPT-5.6-Sol-rooted runtime, the callable spawn tool is multi_agent_v1.spawn_agent and includes agent_type and fork_context. Using that schema, the same router successfully spawned:
agent_role: gpt56_router_terra_explorer
model: gpt-5.6-terra
effort: medium
ok: true
The persisted child metadata confirmed the selected custom agent and pinned model.
Requested fix
Please expose custom-agent selection for GPT-5.6 Sol-rooted tasks, either by:
- adding
agent_typeto the GPT-5.6 Sol multi-agent v2 spawn schema, or - routing GPT-5.6 Sol-rooted tasks through the stable v1 spawn schema when custom agents are available.
The key requirement is that task_name remains only a descriptive child-task identifier and does not need to be overloaded as a role selector.
Additional validation note
On the client/plugin side, we hardened our inspector to fail if the child role matches but the child model does not match the configured pinned model. That catches the case where a runtime accepts the role name but silently runs the root model instead.
9 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
up pls
I can reproduce this from a
gpt-5.6-sol-rooted Codex session in VS Code Remote.Environment:
openai.chatgpt26.707.71524(linux-x64)codex-cli 0.144.2; thecodexcommand resolves to the extension-bundled executable1.128.0(x64), in a Remote session; this is the server-side version, not a verified desktop-client versiongpt-5.6-solThe project contained a valid standalone researcher profile. Relevant excerpt (the file also contains
descriptionanddeveloper_instructions):The project also had a reviewer profile configured for
gpt-5.6-sol.I gave the root agent this prompt:
The exposed
spawn_agentschema accepted only:task_namefork_turnsmessageThere was no
agent_typeor other named-profile selector. The root therefore made generic child-task calls namedresearcher_package_nameandreviewer_package_name, with the intended roles described only in message text.The researcher child used
gpt-5.6-sol, not thegpt-5.6-terraconfigured in theresearcherprofile. Itstask_namebecame only the child task/path name; it did not select the named profile.The reviewer child also used Sol, but that is not independent evidence of role routing because both the reviewer profile and the root were configured for Sol.
Expected:
researcherprofile.Actual:
task_nameand prompt text did not bind a configured profile.This is evidence of a role-resolution gap, not only a per-spawn model-override gap. #32749 exposes
modelandreasoning_effortfor V2 spawns, which can help choose a model per child, but it does not restore selection of a named agent profile or apply that profile’s instructions and sandbox configuration.Additional reproduction from an independent integration diagnosis involving a third-party runtime harness. I am not affiliated with OpenAI or the Codex project.
Environment
0.144.40.145.0-alpha.11gpt-5.6-solObserved schema
On stable, the callable
spawn_agentschema exposed only:On alpha, it additionally exposed
modelandreasoning_effort, but still did not exposeagent_typeor another configured-agent selector.task_nameremained the canonical child task/path identifier. It did not select an installed custom-agent TOML or apply the configured role instructions/model.Additional diagnostic
I ran a one-process, nonpersistent alpha probe with MultiAgentV2 metadata visibility enabled:
The request was rejected before model execution:
This was only a diagnostic override, not a proposed persistent workaround.
Public-source observation
At public source commit
69acc71cb18fc9a1b7858f92489cc8d135e450f2:multi_agents_v2/spawn.rsalready parses optionalagent_typeand callsapply_role_to_config.multi_agents_spec.rsremovesagent_typewhenhide_agent_type_model_reasoningis true.config/mod.rsdefaultshide_spawn_agent_metadatato true.References:
Inference, not confirmed root cause
The client implementation appears capable of applying a named role, while the model-reserved tool schema rejects exposing that selector. This may require the reserved server/model tool schema and client-generated schema to be aligned, rather than only changing the local handler.
The important semantic requirement is that
task_nameremain descriptive and that configured-agent selection be explicit, so the selected TOML role, instructions, model, reasoning effort, and sandbox can be verified independently.No application or project-specific data was used in this reproduction.
Attribution and prior work
This reproduction arose while diagnosing oh-my-codex (OMX), an independent third-party runtime harness that is not affiliated with OpenAI.
OMX issue #3118, opened by @arikon and investigated by @Yeachan-Heo, had already identified the native
spawn_agentcapability-contract mismatch and the need to avoid presentingtask_nameas native role selection. That prior work materially informed the framing of this reproduction.Authorship disclosure: this comment was submitted by @nicholasjkershaw-arch with assistance from OpenAI Codex. The follow-up version probes, public-source inspection, and evidence-versus-inference synthesis were performed through Codex and checked against the installed binaries and linked public repositories. OMX supplied the runtime context and prior investigation; it is not being represented as affiliated with or part of Codex.
Additional post-#32749 configured-profile evidence:
Configuration under test:
ralph-architectprofile:gpt-5.5/high3181f9717ec96043519ac43c8c961364ffbaf9693301946177a75f0923ea9e85Fresh V1 positive control (CLI v0.141.0):
gpt-5.5/highspawn_agentusedagent_type: ralph-architectandfork_context: falseagent_role: ralph-architectgpt-5.5/highwas appliedPost-#32749 V2 comparison (CLI v0.145.0-alpha.7):
modelandreasoning_effortfields but noagent_typetask_namewithfork_turns: none, without manually repeating the profile valuesagent_role: nullgpt-5.5/highwas not applied; the child inherited rootgpt-5.6-sol/xhighConclusion: #32749 restores a manual per-spawn override channel. It does not restore selection of a registered
[agents.<role>]profile, automatic application of that profile's model/effort, or injection of its developer instructions. The v0.145 run does not test whether manual overrides work; it shows that named-profile resolution still fails. Manually duplicating two runtime fields is not configured-agent parity.Separate product-contract request for configured-agent parity:
Even if MultiAgent V2 intentionally keeps instruction bodies opaque, could the persisted/runtime contract expose an authenticated effective-profile receipt containing:
An end-to-end regression test should register one real
[agents.<role>]profile with distinctive instructions, runtime values, and isolation policy; select it through the model-visible V2 spawn tool; and assert the complete effective envelope. A schema test for optionalmodelandreasoning_effortinputs does not certify profile resolution or developer-payload application.This would let downstream systems verify configured-agent receipt without logging instruction bodies.
Consolidated diagnosis: this is a MultiAgentV2 capability-contract regression
After reviewing this issue, its duplicate set (#31893, #32587, #32291, #32703, and #32705), the related component reports, the current documentation, and current public source, the evidence points to one central failure rather than invalid custom-agent TOML or insufficient prompt steering.
Environment for this reproduction
0.144.40.144.20.144.226.707.72221(build5307)The standalone CLI version is not the Desktop runtime version in this environment. Updating the standalone binary therefore does not change the engine or tool schema used by an already-running Desktop task.
Root problem
The documented custom-agent configuration layer and the GPT-5.6 / MultiAgentV2 model-visible
spawn_agentcontract are disconnected.Current V2 client code can parse
agent_typeand apply the selected role configuration throughapply_role_to_config. However, the defaulthide_spawn_agent_metadata = truebehavior removesagent_typefrom the model-visible schema. Despite its name, this setting removes a functional routing input, not merely display or response metadata.That leaves the model with fields such as:
and, after #32749, potentially:
but still no configured-agent selector.
task_nameis only the canonical child task/path identifier. It does not resolve a custom agent by name. Prompt text cannot compensate for a missing structured selector. The resulting child can complete successfully while recording:and without applying the configured agent's full instructions and configuration layer.
This explains why V1 controls work with the same agent files: V1 exposes
agent_type, so the role resolver is reachable. The problem is therefore not custom-agent discovery itself; it is the default V2 tool surface and its backend contract.Why #32749 is only a partial fix
PR #32749 restores manual per-spawn
modelandreasoning_effortoverrides. That is useful, but it is not custom-agent parity.It does not restore:
agent_roleidentity;developer_instructions;Manually copying two profile values into a generic spawn is not equivalent to selecting the configured agent.
Compounding V2 problems
The missing selector interacts with several other defaults:
hide_spawn_agent_metadata = falsecan trigger the reserved-schema error forcollaboration.spawn_agent, because the locally expanded schema does not match the backend-reserved schema.fork_turnsdefaults toall, while full-history forks rejectagent_type, model, and reasoning overrides. Merely exposing the fields would still leave the natural override call shape broken.Expected behavior
The V2 tool should expose distinct role and task identity:
with these semantics:
Selecting an agent should apply its complete configuration layer: role identity, developer instructions, model, reasoning effort, MCP/skills/tool configuration, and permission defaults. An unknown or unavailable agent should fail explicitly rather than silently spawning a generic
agent_role = nullchild.Proper fix
agent_typeto the default server-approved GPT-5.6/MultiAgentV2 reserved schema. Release the backend schema and client-generated schema together.hide_spawn_agent_metadatacontrol returned/display metadata only. It must not remove functional routing inputs.task_namedescriptive and separate from configured-agent selection.agent_type,model, orreasoning_effortis supplied andfork_turnsis omitted, default to a context-free or documented bounded fork. Continue rejecting an explicitly requested full-history fork with heterogeneous overrides.multi_agent_versionas a default. An explicit user or managed runtime choice should win. Until V2 has custom-agent parity, GPT-5.6 should not force users away from the working V1 role-routing path.Required product-level regression test
Using an empty Codex home and the normal shipped model catalog:
Until that end-to-end test passes on the exact schema shipped to users, the safe release behavior is to stop forcing V2 for GPT-5.6 or fall back to V1 when configured-agent selection is required.
In short: GPT-5.6 currently forces a V2 runtime whose default reserved schema prevents the model from reaching the existing custom-agent resolver. The complete fix is an explicit backend-supported
agent_typeselector plus correct fork, configuration-precedence, permission, observability, and runtime-selection semantics.cc @jif-oai @bolinfest @aibrahim-oai @viyatb-oai @etraut-openai @shijie-oai @pakrym-oai @owenlin0
Additional sanitized confirmation
Reproduced on macOS arm64 with Codex CLI
0.144.4and a temporary, non-installed0.145.0-alpha.14run.A schema-only
codex exec --ignore-user-configprobe enabledmulti_agent,multi_agent_v2, anduse_agent_identity; no child was spawned.task_name,message,fork_turns.model,reasoning_effort.agent_typeor an equivalent named-profile selector.Repeating the stable probe with terminal/tmux environment markers unset produced the same schema, so that compatibility layer was not the differentiator.
A separate prior run confirmed the impact: children given Architect- and Critic-descriptive task names completed, while persisted native metadata recorded
agent_role: null.task_namenamed the child task but did not select a configured role.Expected: explicit configured-agent selection in the model-visible schema and persisted effective-role metadata. No private or project-specific data is included.
This will land soon. I merged the discussions here: https://github.com/openai/codex/issues/31814#issuecomment-4991048945