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.