[App] Model picker shows duplicate GPT-5.6-Terra because codex-auto-review is exposed as Terra
Summary
The Codex Desktop model picker shows GPT-5.6-Terra twice.
The current models_cache.json contains two different slugs with identical user-visible metadata:
[
{
"slug": "codex-auto-review",
"display_name": "GPT-5.6-Terra",
"visibility": "list",
"priority": 2
},
{
"slug": "gpt-5.6-terra",
"display_name": "GPT-5.6-Terra",
"visibility": "list",
"priority": 2
}
]
This makes an internal auto-review model appear as a second Terra entry.
Environment
- Platform: macOS
- Desktop cache
client_version:0.146.0 - Local CLI used for comparison:
codex-cli 0.144.6 - Cache ETag:
W/"ad1812e980593919a4e61fc64e50566b"
Reproduction
- Start Codex Desktop with its refreshed model catalog.
- Open the model picker.
- Observe two adjacent
GPT-5.6-Terraentries. - Inspect
~/.codex/models_cache.jsonand observe the two records above.
The cache is actively refreshed with client_version=0.146.0; deleting or manually editing it is not durable.
Comparison with the bundled catalog
codex debug models --bundled and the refreshed catalog from codex-cli 0.144.6 both return the expected identities:
gpt-5.6-terra GPT-5.6-Terra list priority=2
codex-auto-review Codex Auto Review hide priority=43
So this does not appear to originate from user config.toml or a duplicate custom provider. It appears specific to the catalog/cache path used by the Desktop 0.146.0 runtime or its server-side cohort.
Expected behavior
gpt-5.6-terrais the only visibleGPT-5.6-Terraentry.codex-auto-reviewremains callable for internal review flows but is returned asCodex Auto Review,visibility=hide,priority=43.
Suggested fix
Restore the codex-auto-review catalog metadata without changing its slug, routing, capabilities, or entitlement:
display_name = Codex Auto Review
visibility = hide
priority = 43
As a defensive UI measure, the picker could also report visible display-name collisions and show the slug when a collision occurs.
Related issue
#33146 also concerns model-cache/catalog divergence, but it reports missing GPT-5.6 models from a stale older cache. This report is different: the current 0.146.0 cache exposes codex-auto-review as a duplicate visible Terra entry.
5 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I can confirm this is not only a duplicate-label/UI problem: it can route a normal user task to the internal reviewer and produce a hard 400.
Environment
0.146.0-alpha.3.1client_version:0.146.0GPT-5.6-Terra, highest reasoningmodel = "gpt-5.6-terra",model_reasoning_effort = "max"Runtime evidence
The failed turn's persisted
turn_contextcontained:The request then failed with:
So the picker displayed Terra, but the actual request used
codex-auto-review. This is especially confusing because the realgpt-5.6-terraacceptsmaxandultra, while the reviewer accepts only throughxhigh.Cache refresh race / recurrence
The same
~/.codex/models_cache.jsonwas observed changing between these two states during one running Desktop session:After a correct refresh, it was overwritten with the incorrect Terra metadata again roughly 30 seconds later. Therefore deleting or manually editing the cache is not a durable workaround.
As a diagnostic workaround, I restored the correct hidden reviewer metadata and temporarily made the cache immutable. After that, all of these clean ephemeral probes succeeded end-to-end:
A previously failing Desktop thread also resumed successfully when explicitly overridden to
gpt-5.6-terra + max; its newturn_contextrecorded the correct slug.This suggests the catalog/cache refresh path is intermittently replacing the entire
codex-auto-reviewmetadata record with Terra's public metadata, not merely duplicating a display string in the UI.I see the same issue
Confirmed on macOS with Codex Desktop
26.721.41059(build5848) and embeddedcodex-cli 0.146.0-alpha.3.1.My global config uses
model = "gpt-5.6-sol"andapprovals_reviewer = "guardian_subagent". There is no project.codex/config.toml, custom model provider, ormodel_catalog_jsonoverride.A fresh cache from
2026-07-27T09:09:40Z, withclient_version = 0.146.0and ETagW/"ad1812e980593919a4e61fc64e50566b", contains:Meanwhile,
codex debug models --bundledcorrectly reports:Therefore, the duplicate remains reproducible on build
5848and appears to come from the refreshed catalogue rather than a custom model configuration.Screenshot attached.
<img width="1081" height="321" alt="Image" src="https://github.com/user-attachments/assets/a8b8346c-7b21-4d6f-af2e-4bb4edda42b6" />
Additional reproduction on a newer macOS Desktop build, with an A/B check that rules out the configured HTTP-only provider as the cause.
Environment
26.727.51351(build6119)0.146.0-alpha.9.2client_version: 0.146.0Reproduction and catalog evidence
The Desktop picker showed two adjacent rows labeled
5.6 Terra. During the same running Desktop session, the shared model cache alternated between these states:The incorrect reviewer record also inherited Terra's reasoning levels through
maxandultra. Multiple distinct ETags were observed while the local configuration remained unchanged. A later refresh restored the hidden reviewer metadata, confirming that deleting or editing the cache is not a durable fix.The bundled catalog is consistently correct:
Provider/WebSocket A/B
I compared the raw catalog returned with:
model_provider = "openai"; andwire_api = "responses"andsupports_websockets = false.Both produced the same duplicate visible records when the bad catalog cohort was active. This isolates the symptom from HTTP/SSE vs Responses WebSocket transport and from the custom provider ID.
Current safe workaround
Explicitly setting
model = "gpt-5.6-terra"avoids accidentally selectingcodex-auto-review, but it does not remove the duplicate picker row. A staticmodel_catalog_jsonwith the reviewer retained asvisibility: "hide"removes the row, but pins the catalog and prevents automatic model updates.This newer-build reproduction supports both fixes already proposed here:
codex-auto-reviewmetadata; andThe cache oscillation also appears consistent with the originator-scoping problem in #33593.