Codex Desktop ignores project-local model_catalog_json for fresh project threads
This bug report was written by Codex.
Summary
Codex Desktop appears to ignore a trusted project's .codex/config.toml model_catalog_json setting when creating a fresh project thread, while the CLI/debug path from the same cwd respects it.
This prevents project-local custom model catalogs from working in Desktop, including per-model base_instructions / model_messages.instructions_template changes.
Environment
- OS: Windows
- Codex Desktop fresh-thread originator in rollout:
Codex Desktop - Desktop rollout
cli_version:0.136.0-alpha.2 - Desktop rollout source:
vscode - CLI test originator in rollout:
codex-tui - CLI test
cli_version:0.130.0-alpha.5 - Project cwd:
F:\Projects\_sandbox
Project Config
Project-local config was created at:
# F:\Projects\_sandbox\.codex\config.toml
model_catalog_json = "model-catalog.json"
The referenced catalog exists at:
F:\Projects\_sandbox\.codex\model-catalog.json
The catalog was generated from the normal Codex model cache, but with the trailing ## Intermediary updates section removed from both fields for every model entry:
base_instructionsmodel_messages.instructions_template
This was done for all cached models:
gpt-5.5gpt-5.4gpt-5.4-minigpt-5.3-codex-sparkcodex-auto-review
Expected Behavior
When creating a fresh Codex Desktop thread in trusted project F:\Projects\_sandbox, Desktop should load the project-local .codex/config.toml, resolve model_catalog_json = "model-catalog.json" relative to the project .codex directory, and use the corresponding catalog entry for the selected model.
In this test, a fresh Desktop thread using gpt-5.5 should have received base instructions without ## Intermediary updates.
Actual Behavior
Fresh Codex Desktop project threads continued to receive base instructions containing ## Intermediary updates, despite the project-local catalog having that section removed from both base_instructions and model_messages.instructions_template.
Two Desktop test threads showed the issue:
codex://threads/019e90cd-abd3-7f73-99fe-2f9015a40047
codex://threads/019e90d5-47f0-7e81-861f-abe3778312d8
Inspection of the persisted rollout for 019e90d5-47f0-7e81-861f-abe3778312d8 showed:
Cwd: F:\Projects\_sandbox
Originator: Codex Desktop
Source: vscode
cli_version: 0.136.0-alpha.2
SessionHasUpdates: True
ProjectBaseHasUpdates: False
ProjectTemplateHasUpdates: False
GlobalBaseHasUpdates: True
GlobalTemplateHasUpdates: True
The Desktop session base instructions still contained the stripped section, indicating Desktop did not use the project-local catalog.
CLI Control Test
Running the CLI from the same cwd did respect the project-local catalog.
CLI test thread:
codex://threads/019e90dd-884f-7b01-b969-988e3e9f1a69
Inspection of that rollout showed:
Cwd: F:\Projects\_sandbox
Originator: codex-tui
Source: cli
cli_version: 0.130.0-alpha.5
SessionHasUpdates: False
SessionHasUpdateAsYouGo: False
ProjectBaseHasUpdates: False
ProjectTemplateHasUpdates: False
GlobalBaseHasUpdates: True
GlobalTemplateHasUpdates: True
codex debug models from F:\Projects\_sandbox also loaded the project-local catalog and reported that both base_instructions and model_messages.instructions_template no longer contained ## Intermediary updates.
Why This Matters
The documented project-local .codex/config.toml config path is useful for repo-specific model catalog overrides, including per-model base-instruction tuning. It currently appears to work in CLI/debug but not in Desktop project thread creation.
This makes it difficult to use project-local model catalog behavior in Desktop without changing global C:\Users\<user>\.codex\config.toml, which is too broad for repo-specific experiments.
Notes
One remaining initial progress note in the CLI test was expected because a separate injected AGENTS wrapper rule said:
For multi-step or tool-heavy work, start with a short progress note stating the first step.
That is separate from the model catalog behavior. The important distinction is that the CLI session did not receive the stripped ## Intermediary updates model-base section, while Desktop did.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗