Desktop app strips documented service_tier config key from config.toml on launch
Setting service_tier = "default" as a top-level key in config.toml (per the documented config reference, supported since PR #21697) persists correctly while the Codex Desktop app is quit. On launching the app, the key is silently removed from config.toml within seconds — the Desktop app appears to serialize its own internal settings model back to the file on load, and that model doesn't track service_tier, so it's dropped even though the CLI/engine itself supports and would honor it.
Net effect: for any model whose catalogue entry sets a non-default default_service_tier (e.g. gpt-5.6-sol → priority, displayed as "Fast"), there is no way to durably override it to default via config — the Desktop app reverts it on every launch.
Repro:
- Quit the Codex Desktop app.
- Add
service_tier = "default"to~/.codex/config.toml(top-level key). - Confirm it persists in the file while the app is quit.
- Relaunch the app.
- Re-read
config.toml— the key is gone within seconds of launch.
Versions: bundled codex-cli 0.145.0-alpha.30; client_version 0.145.0 in ~/.codex/models_cache.json. macOS.
Expected: an explicit, documented, engine-supported service_tier config value should survive the Desktop app's own config load/save cycle, letting users durably override a model catalogue's default_service_tier (and its UI label, e.g. "Fast") to default.
Actual: the Desktop app's own settings serializer silently discards the key on every launch, since its internal settings model doesn't track that field.
1 Comment
Windows reproduction / corroborating evidence (2026-08-28)
I am seeing the same class of behavior on Codex Desktop for Windows.
Environment:
26.820.71523gpt-5.6-solhighservice_tier = "default"andfast_mode = falseObserved global config state after Desktop use:
~/.codex/config.tomlstill hasfast_mode = falseservice_tieris absent entirelyservice_tier = "default"that had been configured as a hardening override is no longer presentThis was detected because a repository preflight intentionally checks the global Codex config before material work. The preflight stopped the task when it saw the global tier missing. The repository-local config itself was still explicitly
default, so the missing key is isolated to the user-global config.I cannot prove from this single snapshot which process performed the write, so I am not attributing the mutation conclusively yet. I am installing a local file watcher that will record config hashes/timestamps and the relevant tier keys before automatically restoring
service_tier = "default"; that should provide exact before/after evidence if Desktop strips it again.This matters because an absent explicit override can interact with Codex-managed/model-catalog service-tier defaults, while the user intended Standard. It is especially concerning for long-running/high-reasoning tasks because Fast/Priority can materially increase allowance consumption.
Related issues that appear adjacent:
service_tier)Expected: an explicit user-global
service_tier = "default"should remain durable across Codex Desktop load/save/restart cycles on Windows as well as macOS.