Switching models & defaults

The menu edits the defaults each tool already reads from its own config file. BlackFlare invents no settings and stores none of its own — it writes the same keys you would edit by hand, and the change applies to your next session.

Claude Code

Written to ~/.claude/settings.json.

Menu Key Values
Model model Aliases (opus, sonnet, haiku, opusplan), pinned claude-* IDs pulled live from models.dev, or your own custom IDs. Default removes the key.
Permission Mode permissions.defaultMode default · auto · acceptEdits · plan · bypassPermissions
Effort effortLevel low · medium · high · xhigh
Always Thinking alwaysThinkingEnabled on / off

Offline, the alias list is always available; pinned versions come from the last successful catalog fetch or a built-in fallback.

Codex

Written to ~/.codex/config.toml, top-level keys only — the editor never descends into [tables], so your [sandbox_workspace_write] network and writable-root settings are never touched.

Menu Key(s) Values
Model model Slugs from Codex’s own models_cache.json (models.dev’s OpenAI list as fallback), or custom slugs. Default removes the key.
Reasoning Effort model_reasoning_effort Whatever the selected model advertises, in Codex’s order. Default removes the key.
Permission Mode sandbox_mode + approval_policy + approvals_reviewer Read Only · Ask for approval · Approve for me · Full Access

Effort follows the model

Codex publishes reasoning levels per model, so the menu offers exactly what your configured model supports — GPT-5.6 Sol and Terra add max and ultra, Luna adds max only, GPT-5.5 neither. A model with no metadata (a custom slug, the models.dev fallback, or Default) gets the conservative common set low · medium · high · xhigh.

If your config already names a level the model doesn’t advertise, the menu shows it as Current: <value> (unsupported) rather than hiding it or quietly rewriting it. Same principle for models: ones Codex marks visibility = "hide" stay out of the list, but a hidden model already named in your config still appears, checked.

Permission mode writes three keys at once

BlackFlare writes the same combinations Codex’s own /permissions menu does, in a single atomic edit:

Mode sandbox_mode approval_policy approvals_reviewer
Read Only read-only on-request user
Ask for approval workspace-write on-request user
Approve for me workspace-write on-request auto_review
Full Access danger-full-access never user

Picking a mode also removes the beta default_permissions key so the two permission systems can’t coexist.

There is no Default here. Permissions are security state, so BlackFlare only ever writes a mode you explicitly picked. Any other combination — a missing key, a value Codex’s own menu never writes, a lingering default_permissions — displays as Custom and is left exactly as it is.

Which Codex front-end honors what

config.toml is shared between Codex front-ends, but they don’t all read the whole file. This was measured by changing one key and reading the next session’s rollout turn_context, plus the runtime’s own turn logs:

Key Codex CLI VS Code ChatGPT Desktop
model honors honors ignored
model_reasoning_effort honors honors ignored
sandbox_mode honors honors honors
approval_policy honors ignored ignored
approvals_reviewer honors ignored ignored

The desktop app runs its own codex app-server and sends model and reasoning effort per thread from its composer picker, so config.toml never reaches those sessions. That is why the menu footnote says changes apply to the next CLI and IDE session.

Approvals are a second gap. In the GUI hosts, their own agent mode owns the approval decision, so Approve for me behaves exactly like Ask for approval (they differ only by the ignored reviewer key), and Full Access opens the sandbox but still asks you to approve. Read Only and Ask for approval are accurate everywhere.

One more thing worth knowing: traffic is bidirectional. The GUI apps write their own model and permission picks back into config.toml, so whoever wrote last wins. A change made in Codex’s UI can replace one made here, and the reverse is equally true.