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:
| Level | When to use it |
|---|---|
low | Quick back-and-forth you review each time: brainstorming, a first sketch, a rename |
medium | Day-to-day work with a clear scope, like adding a feature. The default on Opus 5.5, Sonnet 5.5, and Haiku 5.5 |
high | Work where checking matters or edge cases are likely, like fixing a bug in existing code. The default on most other models |
xhigh | Deeper reasoning at higher token spend. The default on Opus 4.7 |
max | Hard 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.
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
Enterin the slider, or typing a level after/effort, saves it as your default for that model in later sessions too. - Pressing
sin the slider applies it to this session only. maxalways applies to the current session only, unless you set it through theCLAUDE_CODE_EFFORT_LEVELenvironment variable./effort autoclears 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
- Claude Code docs: Model configuration (effort levels) and Prompt caching
- Cover photo: "23mm knob with numbered dial" by Retired electrician, via Wikimedia Commons, CC0 1.0 (public domain dedication), cropped
- Gear stick photo: "Manual gear stick" by Pommeau, via Wikimedia Commons, CC BY-SA 4.0
