Summary
keepNativeChatGptOnV1 remains ineffective at runtime when the global Codex multi_agent_v2 feature override is enabled.
With OpenCodex 2.29.0 and Codex CLI 0.149.0, OpenCodex correctly writes the native ChatGPT catalog row as multi_agent_version: "v1" while routed rows remain V2. However, a brand-new codex exec --ephemeral process with features.multi_agent_v2.enabled=true still creates an encrypted V2 child task. The routed child fails before provider dispatch with unreadable_encrypted_agent_task.
This is a current CLI regression/reproduction of #2184, which covered the same mismatch in the Codex App and was closed after asking users to restart and report if it reproduced. Every A/B run below starts a fresh CLI process, so stale sessions, picker cache and a long-lived app-server are excluded.
Reproduction
Environment and models:
- OpenCodex:
2.29.0
- Codex CLI:
0.149.0
- OS: Linux x86_64
- Parent: native
gpt-5.6-luna
- Child: routed
command-code/deepseek-deepseek-v4-flash
- OpenCodex config:
multiAgentMode: "v2", keepNativeChatGptOnV1: true
The same generated catalog was used on both sides of the A/B test:
gpt-5.6-luna multi_agent_version=v1
command-code/deepseek-deepseek-v4-flash multi_agent_version=v2
google-antigravity/gemini-3.7-flash multi_agent_version=v2
google-antigravity/claude-opus-4-6-thinking multi_agent_version=v2
The test prompt required exactly one spawn_agent call to the routed DeepSeek child, waited for an exact sentinel response, used no shell/files, and ran under the read-only sandbox.
A. Global V2 override enabled
codex exec \
--ephemeral \
--json \
--sandbox read-only \
-c 'features.multi_agent_v2.enabled=true' \
--model gpt-5.6-luna \
'<spawn exactly one command-code/deepseek-deepseek-v4-flash child and wait for its sentinel>'
Actual:
Agent errored:
code=unreadable_encrypted_agent_task
Routed V2 worker task is encrypted for the native ChatGPT backend and cannot be read by the selected provider.
B. Global V2 override disabled
codex exec \
--ephemeral \
--json \
--sandbox read-only \
-c 'features.multi_agent_v2.enabled=false' \
--model gpt-5.6-luna \
'<the same child model and sentinel contract>'
Actual:
spawn_agent completed
child status=completed
child sentinel received
parent sentinel returned
Only the global feature override changed. The catalog, parent, child, prompt contract, OpenCodex process and providers stayed the same.
Routed-parent controls also passed:
| Parent |
Child |
Result |
google-antigravity/gemini-3.7-flash |
command-code/deepseek-deepseek-v4-flash |
PASS |
command-code/deepseek-deepseek-v4-flash |
google-antigravity/gemini-3.7-flash |
PASS |
google-antigravity/claude-opus-4-6-thinking |
command-code/deepseek-deepseek-v4-flash |
PASS |
This isolates the failure to native-parent surface selection. Routed V2 collaboration remains functional.
Expected behavior:
- With
multiAgentMode=v2, keepNativeChatGptOnV1=true, and a native ChatGPT parent, the effective parent surface is V1.
- Routed catalog rows remain V2.
- Native -> routed delegation does not create an unreadable encrypted V2
NEW_TASK under the documented mitigation.
ocx v2 status reports the effective state without contradiction.
Likely cause and suggested remediation:
The catalog is correct. The A/B result suggests Codex 0.149 resolves the global features.multi_agent_v2.enabled=true override before the selected catalog entry's explicit multi_agent_version: "v1" pin.
OpenCodex currently reports a contradictory state:
multi_agent_v2: ON — v2 multi-agent surface active
multi_agent_mode: v2 — ALL models forced to v2 surface
keep_native_chatgpt_on_v1: ON — ChatGPT-native rows stay v1 when mode is v2
A supported fix should establish one effective contract:
- Prefer a catalog-driven hybrid mode when
keepNativeChatGptOnV1=true: global V2 override off, native rows V1 and routed rows V2. Preserve thread-limit semantics during the transition.
- If an installed Codex version cannot honor the hybrid pins, warn or reject the incompatible combination instead of claiming the mitigation is active.
- If fixed upstream in Codex, resolve the selected catalog entry's
multi_agent_version before constructing the collaboration surface so an explicit model pin takes precedence over the global default.
Regression acceptance criteria:
- A fresh native-parent CLI process respects the V1 pin.
- Native -> routed and routed -> routed controls both pass.
- Coverage starts a fresh process/session; catalog-only assertions are insufficient.
ocx v2 on, ocx v2 mode v2, ocx v2 keep-native-v1 on, sync, status, and thread-limit migration converge on the same contract regardless of command order.
- Unsupported Codex versions receive a clear compatibility warning.
Related: #2184, #92, #1540 and #1533. The encrypted-task recovery in #1540 is a compatibility path after ciphertext exists; it does not make an ineffective keep-native-v1 contract correct.
Logs and screenshots
catalog native row: gpt-5.6-luna -> multi_agent_version=v1
catalog routed row: command-code/deepseek-deepseek-v4-flash -> multi_agent_version=v2
global override ON:
error.code=unreadable_encrypted_agent_task
global override OFF:
spawn_agent=completed
child=completed
parent=completed
No screenshots are required. Raw credentials, request headers, account identifiers, private prompts and raw encrypted_content were deliberately excluded.
Area
CLI
Version
OpenCodex 2.29.0; Codex CLI 0.149.0
OS
Linux x86_64
Config shape
{
"multiAgentMode": "v2",
"keepNativeChatGptOnV1": true,
"subagentModels": [
"gpt-5.6-luna",
"command-code/deepseek-deepseek-v4-flash",
"google-antigravity/gemini-3.7-flash",
"google-antigravity/claude-opus-4-6-thinking"
]
}
Checks
Summary
keepNativeChatGptOnV1remains ineffective at runtime when the global Codexmulti_agent_v2feature override is enabled.With OpenCodex 2.29.0 and Codex CLI 0.149.0, OpenCodex correctly writes the native ChatGPT catalog row as
multi_agent_version: "v1"while routed rows remain V2. However, a brand-newcodex exec --ephemeralprocess withfeatures.multi_agent_v2.enabled=truestill creates an encrypted V2 child task. The routed child fails before provider dispatch withunreadable_encrypted_agent_task.This is a current CLI regression/reproduction of #2184, which covered the same mismatch in the Codex App and was closed after asking users to restart and report if it reproduced. Every A/B run below starts a fresh CLI process, so stale sessions, picker cache and a long-lived app-server are excluded.
Reproduction
Environment and models:
2.29.00.149.0gpt-5.6-lunacommand-code/deepseek-deepseek-v4-flashmultiAgentMode: "v2",keepNativeChatGptOnV1: trueThe same generated catalog was used on both sides of the A/B test:
The test prompt required exactly one
spawn_agentcall to the routed DeepSeek child, waited for an exact sentinel response, used no shell/files, and ran under the read-only sandbox.A. Global V2 override enabled
Actual:
B. Global V2 override disabled
Actual:
Only the global feature override changed. The catalog, parent, child, prompt contract, OpenCodex process and providers stayed the same.
Routed-parent controls also passed:
google-antigravity/gemini-3.7-flashcommand-code/deepseek-deepseek-v4-flashcommand-code/deepseek-deepseek-v4-flashgoogle-antigravity/gemini-3.7-flashgoogle-antigravity/claude-opus-4-6-thinkingcommand-code/deepseek-deepseek-v4-flashThis isolates the failure to native-parent surface selection. Routed V2 collaboration remains functional.
Expected behavior:
multiAgentMode=v2,keepNativeChatGptOnV1=true, and a native ChatGPT parent, the effective parent surface is V1.NEW_TASKunder the documented mitigation.ocx v2 statusreports the effective state without contradiction.Likely cause and suggested remediation:
The catalog is correct. The A/B result suggests Codex 0.149 resolves the global
features.multi_agent_v2.enabled=trueoverride before the selected catalog entry's explicitmulti_agent_version: "v1"pin.OpenCodex currently reports a contradictory state:
A supported fix should establish one effective contract:
keepNativeChatGptOnV1=true: global V2 override off, native rows V1 and routed rows V2. Preserve thread-limit semantics during the transition.multi_agent_versionbefore constructing the collaboration surface so an explicit model pin takes precedence over the global default.Regression acceptance criteria:
ocx v2 on,ocx v2 mode v2,ocx v2 keep-native-v1 on, sync, status, and thread-limit migration converge on the same contract regardless of command order.Related: #2184, #92, #1540 and #1533. The encrypted-task recovery in #1540 is a compatibility path after ciphertext exists; it does not make an ineffective
keep-native-v1contract correct.Logs and screenshots
No screenshots are required. Raw credentials, request headers, account identifiers, private prompts and raw
encrypted_contentwere deliberately excluded.Area
CLI
Version
OpenCodex 2.29.0; Codex CLI 0.149.0
OS
Linux x86_64
Config shape
{ "multiAgentMode": "v2", "keepNativeChatGptOnV1": true, "subagentModels": [ "gpt-5.6-luna", "command-code/deepseek-deepseek-v4-flash", "google-antigravity/gemini-3.7-flash", "google-antigravity/claude-opus-4-6-thinking" ] }Checks