OmniscioGuidesClaude Code effort levels
Claude Code effort levels explained
Effort is the setting that tells Claude Code how much work to put into each response: how much it thinks, how many tool calls it makes, and how thorough those calls and its replies are.
Set it with /effort, the --effort flag, or CLAUDE_CODE_EFFORT_LEVEL. The default is high, or medium on Opus 5.5, Sonnet 5.5 and Haiku 5.5, or xhigh on Opus 4.7.
Below: what each level asks for, which source wins when two of them disagree, and what ultracode turns on.
Checked against Anthropic's documentation on October 26, 2026. By the Omniscio team. Updated .
The levels, and what each one asks for
Anthropic's model configuration page puts it this way: “Effort levels control adaptive reasoning, which lets the model decide whether and how much to think on each step based on task complexity. Lower effort is faster and cheaper for straightforward tasks, while higher effort provides deeper reasoning for complex problems.”
Which levels a model accepts depends on the model, and a model missing from the table does not support effort at all.
| Model | Levels offered |
|---|---|
| Fable 5.1 and Fable 5 | low, medium, high, xhigh, max |
| Opus 5.5, Sonnet 5.5, Haiku 5.5, Opus 5, Sonnet 5, Opus 4.8 and Opus 4.7 | low, medium, high, xhigh, max |
| Opus 4.6 and Sonnet 4.6 | low, medium, high, max |
Anthropic's guidance on when to reach for each level, quoted from the same page:
| Level | When to use it |
|---|---|
low | Quick exchanges where you review each result, such as brainstorming, a first sketch, or a small change like a rename |
medium | The default on Opus 5.5, Sonnet 5.5, and Haiku 5.5. On Opus 5.5 and Sonnet 5.5, it fits day-to-day engineering work with a clear scope, such as implementing a new feature. On models with a higher default, reduces token usage for cost-sensitive work that can trade off some intelligence |
high | Work where verification matters or edge cases are likely, such as fixing a bug in an existing codebase. The default on every model except Opus 5.5, Sonnet 5.5, Haiku 5.5, and Opus 4.7 |
xhigh | Deeper reasoning at higher token spend. The default on Opus 4.7 |
max | Hard problems you want Claude to work through without you, such as finding security vulnerabilities. max may show diminishing returns and is prone to overthinking, so test before adopting it broadly |
ultracode | A Claude Code setting rather than a level: plans a dynamic workflow for each substantive task at any effort level |
For a workflow where you approve each step before it runs, see the guide to plan mode.
The scale is set per model, so one level name does not mean the same amount of thinking on two different models. Anthropic says so directly: “The effort scale is calibrated per model, so the same level name does not represent the same underlying value across models.”
Where your session's level comes from
Claude Code takes the first source that applies, in this order:
- An explicit choice: the
CLAUDE_CODE_EFFORT_LEVELenvironment variable, launching with--effort, or/effortin the session. - Your settings: the level you saved for the model, or an
effortLevelkey. - The model's own default.
The first item holds sources that do not agree with each other, and Anthropic settles that inside the environment variable's own entry: it “Takes precedence over --effort, /effort, and the modelSettings and effortLevel settings.” If a variable is set in the shell that launched Claude Code, the picker is not the last word.
A cap sits above all of it. On Claude Enterprise, where an organization sets per-role effort limits, or wherever a maxEffortLevel managed setting is in force, “Levels above the cap aren't offered in the /effort picker, and naming a higher level with --effort or /effort runs at the cap instead.” When both an organization limit and a client cap apply to a model, the lower one wins.
How to change it
Anthropic lists every road to this setting. The ones most readers want:
/effortwith no argument opens an interactive slider./effortfollowed by a level name sets it directly./effort autoclears the saved level for the active model./modelhas the same slider. Use the left and right arrow keys while choosing a model.--effortsets a level for one launch.CLAUDE_CODE_EFFORT_LEVELsets it through the environment.- A
modelSettingsentry saves a level per model, andeffortLevelsets a default for models without one. Neither key acceptsmax, and the section on auto says whateffortLeveldoes on Opus 5.5. - An
effortkey in a skill or subagent file overrides the session level while that skill or subagent runs, but not the environment variable.
How long a change lasts depends on how you confirm it. For low, medium, high or xhigh in an interactive session on your machine, Enter in the slider or a level typed after /effort saves the level as your default for later sessions, while pressing s applies it to this session only, which needs Claude Code v2.1.257 or later. In a -p run, /effort applies to that session only and is never saved. Claude Code saves that level per model under the modelSettings key in your user settings.
max is the exception. Unless you set it through the environment variable, Claude Code applies max to the current session only, so the next launch does not keep it.
To see what a session is using, run /effort status. The session header also carries the level beside the model name, in the form “with low effort”, and the footer shows it briefly at startup and when it changes.
What auto does
auto is not a level. Anthropic's environment variable entry lists it among the accepted values and says what it means: “auto to use the model default”. The session runs at whichever level the model ships with, and that figure differs by model.
highon every model that supports effort, except the cases below.mediumon Opus 5.5, Sonnet 5.5 and Haiku 5.5.xhighon Opus 4.7.- Whatever an organization sets as the default effort level for its own default model, when you run that model.
That is why the same word can leave two machines doing different amounts of work. On a 5.5 model, auto means medium. On most other models, auto means high.
One more rule is worth knowing before you carry a setting across a model change. A saved top-level effortLevel in your user settings does not apply to Opus 5.5. Anthropic calls that key the older form that /effort wrote before Claude Code saved levels per model, and it keeps applying where it applied before, while Opus 5.5 and later models start at their own default until you pick a level with /effort or the /model picker.
What a level costs
Effort moves token spend, and Anthropic is careful about how far that goes: “Effort is a behavioral signal, not a strict token budget. At lower effort levels, Claude still thinks on sufficiently difficult problems, but thinks less than it would at higher effort levels for the same problem.”
The cost guidance is concrete. Anthropic's cost page says that for simpler tasks where deep reasoning is not needed, “you can reduce costs by lowering the effort level with /effort or in /model”.
Anthropic's own guidance on the size of the difference is qualitative. The effort page says the impact varies by task type and tells you to evaluate it on your own use cases, and the model guidance says to run an effort sweep on your evals rather than carrying a setting over from another model. One open report, issue 100278, quotes a warning that appeared every two minutes and read “Claude thinks longer with Max error and can consume 3.5 or more usage than medium.” That is one user's report of a warning, filed October 7, 2026, and still open. The figure comes from the warning as they reported it, and Anthropic's docs publish no such rate.
Effort and the fixed thinking budget
MAX_THINKING_TOKENS still sets a fixed thinking budget, but only on models that use one. Anthropic states that “Fable models, Sonnet 5 and later, Haiku 5.5, and Opus 4.7 and later always use adaptive reasoning. The fixed thinking budget mode and CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING don't apply to them”, and the cost page adds that “Adaptive-reasoning models ignore nonzero budgets, so use effort levels there instead.” On Opus 4.6 and Sonnet 4.6 the older road is still open, because setting CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1 reverts those two models to the fixed budget.
Some models refuse a request that has thinking turned off and an effort above high. On models Claude Code knows about, such as Opus 5, it sends high instead from v2.1.251. Anywhere else the request fails, and Claude Code prints “API Error: Effort 'xhigh' isn't available with thinking turned off on this model” followed by a hint. Anthropic says the hint after the separator varies by session, so the tail can read “run /effort high to continue, or turn thinking back on (unset MAX_THINKING_TOKENS=0)” here and something shorter elsewhere. The documented fix is to lower effort to high or below, or to turn thinking back on. If you are looking up a message Claude Code printed, the error guide collects them word for word.
Thinking cannot be switched off at all on Opus 5.5, Sonnet 5.5, Haiku 5.5 and the Fable models. The session toggle and the /config row report that instead of offering the switch, and on those models the effort level is the control that remains.
If you want deeper reasoning for one turn without moving the setting, put ultrathink anywhere in the prompt. Claude Code recognises the keyword and adds an in-context instruction, and “The effort level sent to the API is unchanged.” The words think, think hard and think more are passed through as ordinary prompt text and are not treated as keywords.
Ultracode is a setting, not a level
Ultracode appears in the same slider as the levels, so it is easy to mistake for one. Anthropic is explicit: “Ultracode is a Claude Code setting rather than a model effort level: with it on, Claude orchestrates dynamic workflows for substantive tasks, at whichever effort level the session runs at.”
Turning it on or off leaves the effort level where it was, and picking a level in the slider or in /model leaves ultracode as it was. The --effort ultracode flag is the one form that does both: it turns ultracode on and sets the level to xhigh. The same is true of effortLevel: "ultracode" in the Agent SDK.
The variable and the saved setting will not carry it. Anthropic says both “don't accept ultracode”, and that if the environment variable or an effort cap sets the session's level, ultracode stays on at that level.
Ultracode is unavailable in two cases: workflows turned off, or a model that does not support xhigh. There, --effort ultracode starts the session with ultracode off, at the highest effort level the model and any cap allow, up to xhigh.
Version notes matter here. The /effort ultracode off form, the slider toggle, and keeping ultracode on at levels other than xhigh need v2.1.284 or later. Before that, turning ultracode on set the session to xhigh, choosing another level turned it off, and an effort cap below xhigh made it unavailable. Passing ultracode to --effort needs v2.1.203 or later, and older releases printed Unknown --effort value 'ultracode'.
When a new level does not seem to take effect
The documented behaviours below explain most of these. Check them in this order.
- Another source outranks the one you changed. The environment variable beats
--effort,/effortand both settings keys, and an effort cap beats everything. - The model does not support the level. If you set a level the active model does not support, Claude Code falls back to the highest supported level at or below it. For example,
xhighruns ashighon Opus 4.6. - The level came from a fallback. When Claude Code switches a session to the fallback model, it keeps the effort level the flagged request ran at, rather than the fallback model's own default.
- It was never saved. A level you confirmed from the slider or from
/modelcan be a one-session choice, andmaxis session-only unless it came from the environment variable.
Run /effort status to settle which level is in force before you change anything else.
Effort levels in Omniscio
Omniscio, the desktop app we make for running many Claude Code sessions at the same time, stores a thinking level for each session and hands it to the CLI as this same variable. One function owns the rule. When the resolved level is a real level, effortLevelEnv returns { CLAUDE_CODE_EFFORT_LEVEL: resolvedThinking }. When it is auto or null, the function returns an empty object, so nothing is set and Claude Code resolves the level itself: a level saved in its own settings first, otherwise the model's default (src/main/process/agent-session-env.ts:309). That builder is applied at the spawn in src/main/process/spawn-build.ts:560, and on the desktop road the variable is deleted from the spawn environment first, so an earlier layer cannot leave a stale value behind (src/main/process/agent-session-env.ts:360).
Which level gets resolved follows the same shape as the app's other per-session choices: the session's own pick first, then the project default, then a per-model, per-provider or per-harness default, and finally the single app-wide level (src/main/process/spawn-build.ts:883). That last one ships at high (src/shared/types/settings/accounts-providers-settings.ts:166), so on a fresh install, before anyone sets a per-model or per-project default, a new Claude session starts with high already set rather than on auto. On an Opus 5.5 session that is one level above the model's own default.
The picker shows Auto, Low, Medium, High, Extra High and Max (src/shared/types/claude-models.ts:338). It hides Extra High on Opus 4.6 and Sonnet 4.6, which accept Max but not Extra High, and hides both Extra High and Max on Sonnet 4.5 and the older Haiku models, so a session is not offered a level its model would refuse (src/shared/types/claude-models.ts:370). The shallower levels stay on every model, because the CLI tolerates them (src/shared/types/claude-models.ts:373).
Omniscio does not pass --effort. The environment variable is the only road it uses.
Setting a level per model has its own page in the library: per-model thinking level. For the app itself, the features page covers the rest, and the download page has the installers.
Sources
Every Anthropic claim on this page was read in the documentation's Markdown form on October 26, 2026. Every Omniscio claim was checked against the source files named beside it.
- Model configuration, for the effort levels, the per-model table, the resolution order, the caps, the defaults, the ultracode rules and the errors that mention effort. Read October 26, 2026.
- Environment variables, for the
CLAUDE_CODE_EFFORT_LEVELvalues, theautomeaning and the precedence over the flag, the command and the settings keys. Read October 26, 2026. - Effort, on the API side, for the description of effort as a behavioural signal rather than a token budget. Read October 26, 2026.
- Manage costs, for lowering effort to reduce spend and for adaptive-reasoning models ignoring fixed budgets. Read October 26, 2026.
- Error reference, for the effort and thinking conflict message and its documented fixes. Read October 26, 2026.
- Settings reference, for
effortLevelandmaxEffortLeveland their version notes. Read October 26, 2026. - Issue 100278, for the warning one user reported about Max effort and usage. Open, filed October 7, 2026, read October 26, 2026.
- Omniscio:
src/main/process/agent-session-env.ts,src/main/process/spawn-build.ts,src/shared/types/claude-models.ts,src/shared/types/settings/accounts-providers-settings.tsandsrc/shared/providers/provider-models.ts, read October 26, 2026.
This material moves with Claude Code releases, and the docs already carry notes such as v2.1.257, v2.1.267 and v2.1.284 beside individual behaviours. Check the version you are running against the source before you rely on a copy of this page from a few months back.
Common questions
What is the difference between auto and low effort in Claude Code?
Auto is not a level. Anthropic documents it as a value that means use the model default, so the session runs at whatever level that model ships with. Low is a real level that asks for the least thinking, which makes it faster and cheaper for simple work.
What is the default effort level in Claude Code?
High is the default on every model that supports effort. The exceptions are Opus 5.5, Sonnet 5.5 and Haiku 5.5, which default to medium, and Opus 4.7, which defaults to xhigh. An organization can also set a default effort level for its own default model. A saved setting or an environment variable changes any of it for the session.
Does CLAUDE_CODE_EFFORT_LEVEL override the /effort command?
Yes. Anthropic says the variable takes precedence over the --effort flag, over /effort, and over the modelSettings and effortLevel settings. A maximum effort cap still applies on top of it.
Is ultracode an effort level?
No. Anthropic describes ultracode as a Claude Code setting rather than a model effort level. With it on, Claude plans a dynamic workflow for each substantive task at whatever effort level the session already runs at.
Why does a higher effort level not seem to apply?
A few things explain most of these. A level the model does not support falls back to the highest level it supports at or below your choice. An organization or maxEffortLevel cap runs a higher level at the cap instead. An environment variable outranks the setting you just changed. And a one-session choice is not saved for the next launch.
How do I see the effort level a session is using?
Run /effort status. The session header also shows the level beside the model name, for example with low effort, and the footer shows it briefly at startup and whenever it changes.