Codex Desktop automations overwrite custom provider model IDs after view/edit
What version of the Codex App are you using (From “About Codex” dialog)?
codex-cli 0.133.0-alpha.1
What subscription do you have?
API key / custom provider
What platform is your computer?
Microsoft Windows NT 10.0.26200.0 x64
What issue are you seeing?
Codex Desktop automations do not preserve custom provider model IDs.
I configured Codex with a custom OpenAI-compatible provider and a namespaced model ID such as vendor/model-name. The model works when the automation is first created or when the underlying config is used directly.
After opening the automation details or editing/saving the automation in Codex Desktop, the saved automation is rewritten to a built-in model such as gpt-5.4, or to an un-namespaced suffix such as gpt-5.5.
The next automation run sends the wrong model string to the custom provider and fails:
unexpected status 404 Not Found: The model `gpt-5.5` does not exist or you do not have access to it
url: https://example-proxy.local/v1/responses
This appears related to #19694, but broader: the model picker/filtering problem corrupts persisted automation configuration and breaks previously working unattended jobs.
I also observed that non-ASCII automation names/prompts may round-trip as mojibake after opening or editing automation details.
What steps can reproduce the bug?
- Configure a custom provider in
~/.codex/config.toml.
model_provider = "custom_proxy"
model = "vendor/model-name"
model_catalog_json = "C:\\Users\\me\\.codex\\custom-model-catalog.json"
[model_providers.custom_proxy]
base_url = "https://example-proxy.local/v1"
wire_api = "responses"
env_key = "OPENAI_API_KEY"
- Add the model to
custom-model-catalog.json.
{
"models": [
{
"slug": "vendor/model-name",
"display_name": "Vendor Model",
"visibility": "list",
"supported_in_api": true,
"shell_type": "shell_command",
"supported_reasoning_levels": []
}
]
}
- Create a Codex Desktop automation using that custom model.
- Open the automation details, or edit and save the automation in the Desktop UI.
- Inspect the saved automation configuration or run the automation.
Actual result:
- The model is rewritten from
vendor/model-nameto a built-in model or suffix-only model such asgpt-5.5. - The automation calls the custom provider with the wrong model string.
- The request fails with a 404 from the provider.
What is the expected behavior?
- Desktop automations should preserve the exact configured model ID, including namespaced IDs such as
vendor/model-name. - If
model_catalog_jsoncontains a visible API-supported model, the automation editor should allow that model or at least not rewrite it. - Opening or viewing an automation should not mutate its saved model field.
- If the Desktop automation editor cannot support a model, it should show a validation warning instead of silently replacing it.
- Custom provider settings should remain coherent with the selected model.
- Automation names and prompts containing non-ASCII text should round-trip as UTF-8.
Additional information
Source-level observations from a local clone of openai/codex:
model_catalog_jsonis loaded incodex-rs/core/src/config/mod.rs.- When present, provider creation uses
StaticModelsManagerincodex-rs/model-provider/src/provider.rs. - Picker visibility is derived from
ModelInfo.visibility == ModelVisibility::Listincodex-rs/protocol/src/openai_models.rs. - The TUI model popup filters on
show_in_picker, so custom catalog models should be listable when they are visible and API-supported. - The open-source repo appears to contain only
automation_updatediscovery/protocol references, not the full Desktop automation editor persistence layer. This suggests the Desktop automation UI may be using a separate built-in model list or normalizing model slugs incorrectly.
Possible fix:
- Make the Desktop automation editor use the same resolved model catalog/model provider path as CLI/TUI/app-server.
- Treat configured custom model IDs as valid if they match the active
config.tomlmodel or appear inmodel_catalog_json. - Preserve the exact model string on view/edit unless the user explicitly changes it.
- Add regression coverage for namespaced model IDs such as
vendor/model-name. - Add a Windows guard or documentation warning for
python3in automation examples, sincepythonor an explicit interpreter path is safer on Windows.
Workaround:
I disabled Codex Desktop automations for this workflow and moved unattended runs to Windows Task Scheduler, calling a pinned python.exe path and setting the model in the task environment. This avoids the Desktop automation model rewrite but loses the built-in automation UI.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗