Codex App model picker
opencodex does not patch Codex App. It writes the same Codex configuration and model catalog that Codex CLI/TUI already use. Because Codex App reads that shared state, routed models can appear in the App’s model picker as normal Codex catalog entries.
Integration path
Section titled “Integration path”ocx init, ocx start, and ocx sync keep these Codex files aligned under the resolved
CODEX_HOME directory:
$CODEX_HOME/config.toml$CODEX_HOME/opencodex.config.toml$CODEX_HOME/opencodex-catalog.json$CODEX_HOME/models_cache.jsonThe active provider is installed as a root config key:
model_provider = "opencodex"model_catalog_json = "/absolute/path/to/opencodex-catalog.json"The provider itself is registered as a Responses-compatible endpoint:
[model_providers.opencodex]name = "OpenCodex Proxy"base_url = "http://localhost:10100/v1"wire_api = "responses"requires_openai_auth = truewebsockets is off by default. opencodex only advertises supports_websockets = true in the
provider table and catalog entries when "websockets": true is set.
Why routed models show up
Section titled “Why routed models show up”Codex’s model picker expects Codex-shaped catalog entries. opencodex builds those entries by cloning a native Codex model template, then replacing the routed model identity:
slug = "anthropic/claude-sonnet-..."display_name = "anthropic/claude-sonnet-..."visibility = "list"The clone keeps strict-parser fields such as reasoning levels, shell type, API support flags, and base instructions. That makes each routed entry look like a valid picker-visible Codex model.
Fast tier rules
Section titled “Fast tier rules”Codex currently stores fast mode as:
service_tier = "fast"
[features]fast_mode = trueBut the model catalog and runtime request tier id use:
priorityopencodex preserves that split. Native OpenAI passthrough models keep fast support; routed non-OpenAI models strip service-tier metadata so the fast option is not advertised where it cannot be honored.
Subagent selection
Section titled “Subagent selection”Codex’s spawn_agent advertises the highest-priority first 5 catalog models. Pick up to five
provider/model or native ids through subagentModels or the web dashboard; opencodex sorts those
entries to the front of the shared catalog.
Refreshing model state
Section titled “Refreshing model state”If the picker still shows stale entries, refresh the catalog and restart the target Codex surface:
ocx syncopencodex also invalidates Codex’s models_cache.json when it changes routed model visibility or
catalog metadata.