Regression: Codex CLI 0.133.0 breaks native subagent spawning for local Ollama provider; 0.132.0 works
What version of Codex CLI is running?
Regression observed between: - Working: codex-cli 0.132.0 - Broken: codex-cli 0.133.0
What subscription do you have?
ChatGPT Plus
Which model were you using?
Local models through Codex local-provider launch paths: 1. Ollama: qwen3.6:35b-a3b-coding-mxfp8 2. oMLX: Qwen3.6-35B-A3B-8bit-MTPLX-Optimized-Speed OpenAI-backed gpt-5.5 was also tested as a control and real subagents worked there.
What platform is your computer?
uname -mprs
What terminal emulator and version are you using (if applicable)?
iTerm2 on macOS 3.6.10
Codex doctor report
What issue are you seeing?
Native Codex subagent spawning regressed for local/custom provider sessions between codex-cli 0.132.0 and codex-cli 0.133.0.
With the same minimal smoke-test repository, same config, and same local models:
0.132.0successfully spawns real worker subagents with both Ollama and oMLX local provider launch paths.0.133.0fails to expose working native subagents for local provider sessions and reportsSUBAGENTS_UNAVAILABLE/multi_agent_v1 unsupported, or the Main agent does the work itself.
This is not just role simulation. On 0.132.0, the Codex UI shows real child workers in the Subagents panel, and the transcript includes real Spawned ... / Waiting for ... agents / Finished waiting events.
OpenAI-backed Codex with gpt-5.5 was tested as a control and native subagents work there. The regression appears specific to local/custom provider sessions in 0.133.0.
This is serious for local LLM Codex workflows because upgrading from 0.132.0 to 0.133.0 silently breaks native multi-agent orchestration that worked previously.
What steps can reproduce the bug?
1. Enable multi-agent in ~/.codex/config.toml
Add or confirm the following settings:
[features]
multi_agent = true
[agents]
max_threads = 6
max_depth = 1
job_max_runtime_seconds = 900
2. Create a minimal smoke-test repository
mkdir -p ~/codex-subagent-smoke-test
cd ~/codex-subagent-smoke-test
cat > AGENTS.md <<'EOF_AGENTS'
# Codex Subagent Smoke Test
This repo is only for testing whether real Codex runtime subagents can spawn.
Rules:
- Do not modify files unless asked.
- Do not SSH.
- Do not run backend commands.
- If real subagents are unavailable, report SUBAGENTS_UNAVAILABLE.
- Do not simulate subagents inside Main.
EOF_AGENTS
cat > README.md <<'EOF_README'
# Codex Subagent Smoke Test
Tiny repo to test whether Codex can spawn real child subagents.
EOF_README
cat > file_a.txt <<'EOF_A'
Agent A fact: apples are red.
EOF_A
cat > file_b.txt <<'EOF_B'
Agent B fact: bananas are yellow.
EOF_B
cat > file_c.txt <<'EOF_C'
Agent C fact: cherries are dark red.
EOF_C
cat > SUBAGENT_TEST_PROMPT.md <<'EOF_PROMPT'
Test real Codex subagent spawning only.
Do not modify files.
Do not SSH.
Do not simulate roles inside Main.
Do not let Main do the child agents' work.
Hard requirement:
Use the real Codex multi_agent/subagent runtime.
Spawn exactly three real subagents:
1. Agent A
Mission:
Read file_a.txt and report the fact.
2. Agent B
Mission:
Read file_b.txt and report the fact.
3. Agent C
Mission:
Read file_c.txt and report the fact.
Main agent role:
Coordinator only.
If real subagents are unavailable, stop and report exactly:
SUBAGENTS_UNAVAILABLE
Return:
- whether real subagents were spawned
- subagent names/IDs if available
- each subagent report
- final conclusion: SUBAGENTS_AVAILABLE or SUBAGENTS_UNAVAILABLE
EOF_PROMPT
3. Working case: @openai/codex@0.132.0 with a local provider
Install the known-working version:
npm install -g @openai/codex@0.132.0
codex --version
Launch Codex through a local provider. Example using Ollama:
cd ~/codex-subagent-smoke-test
ollama launch codex --model qwen3.6:35b-a3b-coding-mxfp8
Inside Codex, run:
Read SUBAGENT_TEST_PROMPT.md and execute it.
Observed result on 0.132.0:
Spawned ...
Spawned ...
Spawned ...
Waiting for 3 agents
Newton [worker]
Kepler [worker]
Euclid [worker]
Finished waiting
Newton [worker]: Completed
Kepler [worker]: Completed
Euclid [worker]: Completed
The Subagents panel shows real child workers, for example:
1. Main [default]
2. Newton [worker]
3. Kepler [worker]
4. Euclid [worker]
This confirms that the local-provider session can spawn real runtime subagents in 0.132.0.
4. Working case: @openai/codex@0.132.0 with another local OpenAI-compatible provider
Using the same smoke-test repo and the same prompt, launch Codex through another local OpenAI-compatible provider, for example an oMLX wrapper:
cd ~/codex-subagent-smoke-test
/Applications/oMLX.app/Contents/MacOS/omlx-cli launch codex
Inside Codex, run:
Read SUBAGENT_TEST_PROMPT.md and execute it.
Observed result on 0.132.0:
Spawned ...
Spawned ...
Spawned ...
Waiting for 3 agents
Finished waiting
The Subagents panel shows Main plus real worker agents. This confirms the behavior is not limited to one local provider wrapper.
5. Broken case: upgrade to @openai/codex@0.133.0
Upgrade Codex:
npm install -g @openai/codex@0.133.0
codex --version
Repeat the same local-provider launch from the same smoke-test repo.
Example with Ollama:
cd ~/codex-subagent-smoke-test
ollama launch codex --model qwen3.6:35b-a3b-coding-mxfp8
Inside Codex, run the exact same prompt:
Read SUBAGENT_TEST_PROMPT.md and execute it.
Observed result on 0.133.0:
SUBAGENTS_UNAVAILABLE
multi_agent_v1 unsupported
or the Main agent performs the child tasks itself and no real child workers appear in the Subagents panel.
6. Control: OpenAI-backed Codex
Using OpenAI-backed Codex with the same smoke-test repo and the same prompt, native subagents spawn successfully.
This suggests that native subagents are not globally broken. The regression appears to affect local/custom provider sessions in 0.133.0.
7. Summary of reproduction result
0.132.0 + local provider + multi_agent=true:
Real subagents spawn successfully.
0.133.0 + local provider + multi_agent=true:
Real subagents fail / multi_agent_v1 unsupported / Main-only behavior.
OpenAI-backed Codex:
Real subagents spawn successfully.
What is the expected behavior?
`0.133.0` should preserve the `0.132.0` behavior:
- Local-provider sessions using Ollama or oMLX should expose the native multi-agent/subagent runtime when `[features].multi_agent = true`.
- The same smoke-test prompt should spawn real child workers.
- The Subagents panel should show Main plus worker agents.
- The Main agent should not silently perform the child work itself when the prompt explicitly forbids simulation.
Additional information
This may be related to existing custom-provider/subagent issues, especially:
- #17598 — Native subagent orchestration does not work correctly with non-OpenAI custom providers.
- #13204 — Subagent ignores active custom provider/profile and falls back to OpenAI.
- #15250 / #14579 — custom/project-local subagent definitions not being available as expected.
However, this report adds a direct version regression:
0.132.0: local provider subagents work.0.133.0: local provider subagents fail.
Temporary workaround:
npm install -g @openai/codex@0.132.0
Recommendation for local-provider users: avoid upgrading to 0.133.0 if you depend on native Codex subagents with Ollama/oMLX until this is clarified or fixed.
8 Comments
same
+1
Root Cause Analysis
I traced this regression to commit
bf9fd885b(PR #25722 — "Resolve per-thread multi-agent runtime").What changed
Before #25722,
collab_tools_enabled()incore/src/tools/spec_plan.rscheckedFeature::Collabdirectly (which defaults totrue), so subagent tools were always registered regardless of provider.After #25722, it depends on
turn_context.multi_agent_version, which is resolved from model metadata. The resolution chain:multi_agent_version_from_features()inconfig.rschecksModelMetadata::multi_agent_versionModelInfo::fallback()returnsmulti_agent_version: NoneNoneresolves toMultiAgentVersion::Disabledcollab_tools_enabled()returnsfalseforDisabled→ subagent tools are never registeredReproduction
Any
OPENAI_BASE_URLpointing to a non-OpenAI provider (ollama, vllm, litellm, local proxy, etc.) with any model name not in the hardcoded metadata list will hit this path. Thecodex-agent-spawnandcodex-agent-messagetools silently disappear from the tool registry.Proposed Fix
In the
MultiAgentVersion::Disabledarm, fall back toFeature::Collabcheck (the pre-v0.133.0 behavior) so custom providers retain subagent capabilityThis is safe because:
V1orV2, never hitting theDisabledfallbackFeature::Collabenabled (default: true)Verification
cargo check -p codex-core— compiles cleanlyspec_plantests pass (cargo test -p codex-core --lib -- spec_plan)Branch with the fix: https://github.com/StevanusPangau/codex/tree/fix/subagent-custom-provider-regression
Happy to submit a PR if the team would like to take this approach.
This issue has not yet been fixed with the latest release:
0.141.0If you run a custom model and have it spawn subagents, it will just spawn a process instead (and parallel processes if you request multiple subagents)
<img width="962" height="539" alt="Image" src="https://github.com/user-attachments/assets/e5cda24d-b88b-4e27-9a5e-6fc2c1afd640" />
<img width="1509" height="287" alt="Image" src="https://github.com/user-attachments/assets/0dcadf1b-9af4-4466-b1da-a91307d59a3e" />
Still present in
0.142.4:<img width="1110" height="152" alt="Image" src="https://github.com/user-attachments/assets/9eb0c766-40bd-4da5-bc16-1fdd0c1cc44f" />
This is still happening in 0.143.0
Cross-links for visibility:
This appears to be the main upstream ticket for native subagent spawning regressions on local/custom providers.
This also breaks caara - which gave codex the ability to run claude and antigravity as native subagents.