Desktop app strips documented service_tier config key from config.toml on launch

Open
#35,136 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
65/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
rust
Domain
desktop

Research direction

Start by tracing the Desktop app's config load/save cycle for ~/.codex/config.toml and how its internal settings model handles service_tier. Reproduce the macOS launch sequence from the issue, then verify that an explicit service_tier = "default" remains in the file after launch and continues to override the model catalogue default.

Written by the indexing model from the issue text.

Description

app bug config

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-solpriority, displayed as "Fast"), there is no way to durably override it to default via config — the Desktop app reverts it on every launch.

Repro:

  1. Quit the Codex Desktop app.
  2. Add service_tier = "default" to ~/.codex/config.toml (top-level key).
  3. Confirm it persists in the file while the app is quit.
  4. Relaunch the app.
  5. 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.

Dominant language
Rust
Stars
125k
Forks
19.5k
Avg merge
1m
Merged PRs (30d)
1k

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from openai/codex

All issues in openai/codex

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.