# Ultra Config switches your whole Claude Code setup between five profiles mid-session

> Source: <https://dev.to/dani_avila7/ultra-config-switches-your-whole-claude-code-setup-between-five-profiles-mid-session-4199>
> Published: 2026-10-19 15:00:58+00:00

I keep changing the same handful of things in Claude Code depending on what I am doing. Cheap and quiet when I am grinding through a long refactor. The most capable model and maximum effort when the problem is actually hard. Everything asking first when I am working in someone else’s repo. Those are different values in different places, and I was editing them by hand every time.

[Ultra Config](https://www.aitmpl.com/component/mod/productivity/ultra-config) is a Mod I built so that it is one press instead.

// Detect dark theme var iframe = document.getElementById('tweet-2111558707033018828-99'); if (document.body.className.includes('dark-theme')) { iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2111558707033018828&theme=dark" }

Each profile is a list of settings with a reason attached to every one of them. This is what they set:

`sonnet`, effort `low`, subagents on `haiku`, Concise output, no prompt suggestions or recap, auto-compact on, small workflow fan-outs, the `ultracode` keyword off, and MCP output capped at 10,000 tokens (the default is 25,000).`medium`, edits auto-accepted, Concise output, prompt suggestions on, turn duration and the progress bar on, medium workflows.`xhigh`, subagents keep whatever model they ask for, default output style, workflows on with large fan-outs and the `bypassPermissions` disabled, Read deny rules for `.env`, `secrets/`, `~/.ssh` and `~/.aws`, checkpoints on, verbose output, `high`, workflows on, recap on, push notifications when Claude decides something or needs you, auto-compact on.
The pane shows how much of a profile is already in force as a fraction, 3/11, and marks it active when all of it is. Open a profile and every line is either a change (old value struck through, new value, and why), something already set, or something skipped.

Token saver is the one I reach for most, and it is worth noticing what it is: the same model split I posted about last week, without installing a separate setting for it.

// Detect dark theme var iframe = document.getElementById('tweet-2108687263043575923-831'); if (document.body.className.includes('dark-theme')) { iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2108687263043575923&theme=dark" }

```
npx claude-code-templates@latest --mod productivity/ultra-config
```

It needs Claude Code 2.1.287 or later, which is the version where Mods are on by default, and a trusted project folder.

Then:

`/ultra-config` opens the pane`/ultra-config <profile>` opens it on one profile (`saver`, `flow`, `quality`, `guarded`, `autopilot`)`/ultra-config apply <profile>` activates one and prints what it changed and what it skipped`/ultra-config undo` reverts the last profile you activated, newest first`/ultra-config close` closes the pane
Everything in the pane is a press, not a menu. There are no tabs and no arrow-key navigation, which matters because Claude Code already uses the left arrow for its own agents view.

In the fullscreen layout the pane docks next to the transcript, which needs `/tui fullscreen` and at least 110 columns. On the classic layout it sits above the prompt. In Claude Desktop it draws in the session's side panel.

// Detect dark theme var iframe = document.getElementById('tweet-2111624442413756446-753'); if (document.body.className.includes('dark-theme')) { iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2111624442413756446&theme=dark" }

This is the part worth understanding before you let something rewrite your configuration.

Rows that exist in Claude Code’s own settings menu, like the model, the permission mode, the output style or auto-compact, are set through the same path the menu uses. Claude Code decides which file they go in, exactly as if you had changed them yourself.

Effort is saved per model, the way `/effort` saves it, under `modelSettings` in `~/.claude/settings.json`. That keying matters: since Claude Code 2.1.251, a top-level `effortLevel` is ignored by Opus 5.5 and later models, so the Mod never writes one. A model id containing a dot, which is what you get on Bedrock and Vertex, cannot be saved this way, and the effort then applies to that one request only.

Four keys have no menu row, so they are written straight into `~/.claude/settings.json`:

```
{
  "env": {
    "CLAUDE_CODE_SUBAGENT_MODEL": "haiku",
    "MAX_MCP_OUTPUT_TOKENS": "10000"
  },
  "permissions": {
    "disableBypassPermissionsMode": "disable",
    "deny": ["Read(./.env)", "Read(./secrets/**)", "Read(~/.ssh/**)"]
  }
}
```

Before each of those writes the file is copied to `settings.json.ultra-config.bak`, and a `settings.json` that is not valid JSON is never overwritten: those steps are skipped and the pane says why. The last 20 activations are kept in the plugin's store, so `undo` still works after a restart and puts back the values it changed, leaving alone any deny rule you already had.

`Read()` rules, and a Read deny rule blocks Claude's file tools, not a shell command that reads the same file. The Mod's own README says this plainly, which is more than most components do, but it is the thing people get wrong about deny rules.`CLAUDE_CODE_SUBAGENT_MODEL` on its own does not change the model the built-in Explore and Plan subagents run on. If you want Token saver's `CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1`, which requires 2.1.257 or later.` MAX_MCP_OUTPUT_TOKENS` are read when Claude Code starts. The menu rows apply right away and the effort applies from your next message, but those two do not.`"disable"`, it works from any settings file, and while it is set Claude Code rejects `--dangerously-skip-permissions` and ignores an agent definition asking for `undo` is how you get it back, not a flag.
