Add a config profile selector to Codex Desktop for <name>.config.toml files
What variant of Codex are you using?
Codex Desktop
What feature would you like to see?
Please add a profile selector to Codex Desktop for named configuration profiles defined as separate files under CODEX_HOME, for example:
~/.codex/config.toml
~/.codex/work.config.toml
~/.codex/personal.config.toml
~/.codex/local-model.config.toml
The Desktop UI should discover valid *.config.toml profile files and expose them in a dropdown or picker, ideally near the model/permission controls or in the new-task composer. The base configuration should also be selectable explicitly.
Selecting work, for example, should use the existing profile-layer semantics:
~/.codex/config.toml
overlaid by
~/.codex/work.config.toml
Suggested behavior:
- List the available named profile files from
CODEX_HOME. - Show the active profile clearly in the Desktop UI.
- Allow choosing a profile before starting a new task.
- Apply the selected profile to the app-server context used for that task.
- Keep the selected profile stable for the task and make it visible when the task is resumed.
- Validate profiles and show a clear error if a selected file is invalid or cannot be loaded.
- Provide an explicit
Base config / No profileoption. - Avoid silently falling back to another profile if loading fails.
An initial implementation does not need runtime hot reload of an already-running turn. Selecting the profile for a new task would address the primary use case while avoiding ambiguous mid-task configuration changes.
Why this is useful
Named profile files can bundle model, provider, reasoning, sandbox, permission, MCP, plugin, and other settings. Desktop users currently have no first-class way to choose among these profiles, even though the same Codex home, authentication, projects, threads, history, skills, and plugins can be shared.
Common examples include:
- work versus personal settings;
- OpenAI versus a custom/local model provider;
- conservative versus autonomous permission policies;
- different MCP/plugin configurations;
- different model and reasoning-effort combinations.
Without a Desktop selector, users must modify the base config, manipulate launch-time state, or use separate Codex homes, all of which make the active configuration less discoverable and more error-prone.
Relationship to existing issues
- #38104 requests startup-time profile selection for app-server/Desktop through an environment variable. It explicitly excludes a profile-switching UI. This issue requests the missing first-class Desktop UI.
- #22160 requested exposing legacy config profiles in the Desktop model picker, but it was closed because that profile mechanism was being replaced. This request targets the current separate-file profile format:
<name>.config.toml. - #3860 requested broader dynamic profile switching and hot reload for CLI/IDE. This request is narrower: profile discovery and selection in Codex Desktop, with selection before starting a task as a sufficient MVP.
- #23417 tracks app-server support for applying a named profile and may be relevant to the underlying implementation.
Expected workflow
Open Codex Desktop
-> create a new task
-> choose "work" from the profile picker
-> Desktop/app-server loads config.toml + work.config.toml
-> the task visibly retains the "work" profile
Additional information
This request concerns configuration profiles, not switching ChatGPT/OpenAI accounts and not permission profiles alone.
1 Comment
A concrete Windows Desktop use case for this selector is per-task context-window profiles.
I need two profiles for the same project and account:
Some long-running reverse-engineering and integration tasks lose too much working context after aggressive compaction or handoff, so they genuinely benefit from the larger window. Most ordinary tasks do not need it.
Making the 1M setting global is problematic: in one measured long Desktop thread, the effective window was 828,400 and repeated small continuation cycles processed roughly 200k cached tokens per event. Reducing the global configuration to 272k produced an effective 258,400 window and reduced average local token volume, but it also made complex long-horizon continuity harder. Related usage evidence is documented in #34971.
The desired workflow is therefore:
long-contextonly when creating a task that needs it.New-task selection is sufficient; mid-turn hot switching is not required. A dedicated context preset in the composer would also solve this narrower use case, but reusing the existing named profile mechanism seems more general and avoids adding another configuration system.
This would let users trade continuity against rate/latency cost intentionally per task instead of repeatedly editing the global
config.tomlor fragmenting work across short threads.Important current caveat: the 1M option can amplify the existing replay bug
Until the repeated cached-context processing reported in #34971 is fixed or ruled out, opting into a 1M profile can currently be a trap rather than a simple continuity/cost choice.
A larger retained window gives the task more history to understand, but it also gives the affected continuation/re-entry loop more cached history to process repeatedly. In the measured case, 99%+ of input was cached and individual small progress cycles still recorded roughly 200k local tokens, while the user-visible Codex allowance appeared to drain rapidly. The 1M configuration increased the impact compared with the smaller configuration.
Local token telemetry is not asserted to equal the private subscription billing ledger one-to-one. The observable combination is nevertheless concerning: a larger context setting, repeated near-full-history processing, and substantially faster user-visible allowance depletion.
Therefore, a Desktop profile selector should not present 1M as an unqualified “more context” upgrade while this behavior remains possible. It should ideally:
Per-task profiles are still the desired mitigation, but they should complement—not conceal—the underlying replay/compaction bug.