ClaudeFolio

Claude Code effort levels explained: low to max, ultrathink, and ultracode

What each Claude Code effort level actually changes, the default on each model, how to set it and how long the setting lasts, and why ultrathink and ultracode are two different things.

·5 min read
Claude Code effort levels explained: low to max, ultrathink, and ultracode

Effort is the setting in Claude Code that decides how hard the model thinks before it answers. It's easy to treat as a quality dial, where higher always means better. It works more like a budget. Turning it up buys more checking and more edge cases, and it spends more of your usage limit and more time across the session.

The setting has changed recently, too. Levels are now saved per model, and ultracode works differently than it did a few versions ago, so a lot of advice floating around describes older behavior. This guide sticks to what Anthropic's docs say about the current ones.

Current models use adaptive reasoning: the model decides on each step whether to think and how much, and the effort level sets how willing it is to spend. On the current Claude models there are five levels. Anthropic's docs describe when each one fits:

LevelWhen to use it
lowQuick back-and-forth you review each time: brainstorming, a first sketch, a rename
mediumDay-to-day work with a clear scope, like adding a feature. The default on Opus 5.5, Sonnet 5.5, and Haiku 5.5
highWork where checking matters or edge cases are likely, like fixing a bug in existing code. The default on most other models
xhighDeeper reasoning at higher token spend. The default on Opus 4.7
maxHard problems Claude should work through alone, like hunting for security holes. Prone to overthinking

Two details from the docs matter more than the table. First, the scale is calibrated per model, so "high" on one model isn't the same amount of thinking as "high" on another. In Anthropic's testing, Opus 5.5 at medium matches or beats Opus 5 at high on coding and knowledge-work tests, and at any given level it tends to think more per turn than Opus 5 did. If you're moving from Opus 5, start at medium rather than carrying your old setting over. Second, older models support fewer levels. Opus 4.6 and Sonnet 4.6 have no xhigh, and if you ask for a level a model doesn't have, Claude Code falls back to the closest level below it.

Close-up of a car's manual gear stick with the shift pattern for five gears and reverse printed on the knob
Image Credit: Pommeau via Wikimedia Commons

The current level shows in the session header next to the model name, as in "with low effort", so you don't have to guess which one is active. Which model to run in the first place is a separate question, covered in this comparison.

How to set it, and how long it sticks

Run /effort with no argument to open a slider, or name the level directly, as in /effort high. You can also adjust it with the left and right arrows inside /model. How you confirm decides how long it lasts:

  • Pressing Enter in the slider, or typing a level after /effort, saves it as your default for that model in later sessions too.
  • Pressing s in the slider applies it to this session only.
  • max always applies to the current session only, unless you set it through the CLAUDE_CODE_EFFORT_LEVEL environment variable.
  • /effort auto clears your saved level so the model's default comes back.

There are also a launch flag (claude --effort high), the environment variable, and settings files. Claude Code saves levels per model under modelSettings in your user settings, so each model keeps its own. When several sources disagree, an explicit choice wins first (the environment variable, --effort, or /effort), then your saved settings, then the model's default.

One trap is worth knowing. An older top-level effortLevel key in your user settings still applies to Opus 5, Fable 5.1, and earlier models, but not to Opus 5.5 or anything released after it. Those start at their own default until you set a level for them. So if you upgraded and your saved level seems to have vanished, that's why.

Skills and subagents can set their own level with an effort line in their frontmatter. A review subagent can run at high while the main session stays at medium, for example. If you drive a session from your phone through Remote Control, a level picked there applies to that session only.

ultrathink and ultracode are different things

The names make these sound like extra levels above max. Neither one is.

ultrathink is a keyword. Put it anywhere in a prompt and Claude Code adds an instruction to reason more deeply on that one turn. Your session's effort setting doesn't change, and neither does the level sent to the model. Other phrases, such as "think hard" or "think more", aren't keywords. They pass through as ordinary words in your prompt, though the model does respond to plain requests like that within its current level.

ultracode is a Claude Code setting. With it on, Claude plans a multi-step workflow for each substantial task, at whatever effort level you're running. Turn it on with /effort ultracode, the toggle in the slider (press Tab), or "ultracode": true in settings. The one way it touches the level is the launch flag: claude --effort ultracode turns it on and starts the session at xhigh. It's unavailable when workflows are turned off or the model doesn't support xhigh.

Picking a level in practice

Higher effort costs more than the extra thinking itself. More reasoning means more tokens counted against your plan's limits. So max as a permanent setting tends to burn through a weekly allowance on routine work without much to show for it, and the docs warn it can overthink. This post covers how usage turns into cost.

Changing level mid-session can also cost you the prompt cache. On most models each effort level has its own cache, so the next request after a change re-reads the whole conversation with no cache hits, and Claude Code asks you to confirm the switch while the cache is still warm. On Opus 5.5, Sonnet 5.5, Haiku 5.5, and Fable 5.1, using an API key or a Claude subscription, the cache survives the change. That doesn't hold on Amazon Bedrock, Google Cloud, or through a gateway.

A workable pattern is to leave the session at the model's default and move only when the task changes character. Drop to low for a run of renames and small edits you're checking one by one. Go to high when you're fixing a bug in code you didn't write, where the extra checking is what you're paying for. Save max for the rare job you want Claude to grind on alone, and use ultrathink when one question deserves more care than the rest of the session. If you want Claude to think more or less often across a whole project, say so in CLAUDE.md. The docs note the model follows that guidance within its effort setting.

Sources

Steps

  1. Check the current level

    Look at the session header next to the model name, which shows the active effort level.

  2. Open the effort slider

    Run /effort, or adjust the slider with the arrow keys inside /model.

  3. Choose how long it lasts

    Press Enter to save the level as your default for that model, or s to use it for this session only.

  4. Match the level to the task

    Use low for small checked edits, the default for normal work, high for bug fixing, and max only for hard solo problems.

  5. Use ultrathink for one question

    Add ultrathink to a prompt for deeper reasoning on that turn without changing the session setting.

  6. Reset when finished

    Run /effort auto to clear a saved level and return to the model's default.

Frequently asked questions

What are the effort levels in Claude Code?
Current Claude models have five: low, medium, high, xhigh, and max. They control how much the model reasons before acting. Higher levels check more and spend more tokens, and older models like Opus 4.6 support fewer levels.
What is the default effort level in Claude Code?
It depends on the model. Opus 5.5, Sonnet 5.5, and Haiku 5.5 default to medium, Opus 4.7 defaults to xhigh, and the other models that support effort default to high. The session header shows which level is active.
How do I change the effort level in Claude Code?
Run /effort to open a slider, or type a level such as /effort high. Pressing Enter saves it as your default for that model, pressing s applies it to the current session only, and /effort auto clears the saved level.
Is max effort always better in Claude Code?
No. Max spends the most tokens, uses up plan limits faster, and Anthropic's docs warn it can overthink. It fits hard problems you want Claude to work through alone, not routine edits.
What is the difference between ultrathink and ultracode?
Ultrathink is a keyword that asks for deeper reasoning on a single prompt without changing the effort setting. Ultracode is a setting that makes Claude plan a multi-step workflow for each substantial task, at whatever effort level you run.
Does changing effort level reset the prompt cache?
On most models, yes, and the next request re-reads the whole conversation. On Opus 5.5, Sonnet 5.5, Haiku 5.5, and Fable 5.1 with an API key or Claude subscription, the cache survives the change.

Built something with Claude Code?

ClaudeFolio is the directory of projects built with Claude Code. If this guide helped you ship something, the community would like to see it.

More guides