Codex Desktop automations overwrite custom provider model IDs after view/edit

Open 💬 1 comment Opened May 22, 2026 by yujiezhang-ops

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?

  1. 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"
  1. 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": []
    }
  ]
}
  1. Create a Codex Desktop automation using that custom model.
  1. Open the automation details, or edit and save the automation in the Desktop UI.
  1. Inspect the saved automation configuration or run the automation.

Actual result:

  • The model is rewritten from vendor/model-name to a built-in model or suffix-only model such as gpt-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_json contains 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_json is loaded in codex-rs/core/src/config/mod.rs.
  • When present, provider creation uses StaticModelsManager in codex-rs/model-provider/src/provider.rs.
  • Picker visibility is derived from ModelInfo.visibility == ModelVisibility::List in codex-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_update discovery/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.toml model or appear in model_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 python3 in automation examples, since python or 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.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗