Permanently Set Effort Level to Max
Claude CodeForce max via env var โ bypassing the settings.json bug
What Is Effort Level
A dial that controls how deeply Claude thinks (tokens spent on internal reasoning) when generating a single response. Independent of the final answer's length โ what changes is the depth of the "thinking process" the model runs before responding.
In short:
Low effort = fast, few tokens, intuitive answer
High effort = slow, many tokens, considers multiple cases
Even with the same model (Opus 4.6, Sonnet, etc.), answer quality for the same question varies noticeably by effort level. Low is enough for trivial questions, but high/max produces more accurate answers for complex debugging or architecture design.
Low / Medium / High / Max โ Real Differences
| Level | Reasoning tokens | Speed | Cost | Best for |
|---|---|---|---|---|
| Low | Minimum | Fastest | Cheapest | File checks, simple questions, finding commands |
| Medium | Moderate | Medium | Medium | General coding, small refactors, test writing |
| High | Heavy | Slow | Expensive | Complex bug tracking, multi-file refactors, design review |
| Max | Maximum | Slowest | Most expensive | Hard architecture decisions, code with many edge cases, "must-get-right" tasks |
High vs Medium โ What to Actually Expect
Example: same "optimize N+1 queries" request.
Medium:
Finds visible N+1s, adds
includes(:association)in one lineBasic fix, usually correct
10-20s response
High:
After finding N+1, decides between
joinsvsincludesReviews related queries too
Considers test impact
30-60s response, more refined answer
Where differences show:
Edge case detection: medium misses what high catches (nil handling, concurrency)
Comparing solutions: medium picks first idea, high compares alternatives
Following existing style: medium uses generic patterns, high better follows project conventions
Long reasoning chains: "if A then B, so C, then D..." โ high is much more accurate in multi-step logic
Where differences are small:
Simple tasks touching 1-2 files
Factual questions like "what does this error mean"
Well-known API usage questions
The Point: Why Set Max Permanently
Since Claude Code v2.1.68 (released 2026-03-04), the default effort level dropped from high to medium. It's an official changelog change, but users may feel answer quality has degraded.
To always run at max, adding an environment variable to .zshrc is the simplest approach.
Effort Level Priority
1. Env var: CLAUDE_CODE_EFFORT_LEVEL (highest)
2. CLI flag: claude --effort max
3. settings.json: "effortLevel": "high"
4. Model default (Opus 4.6 is medium)
Higher = takes priority. Env var is #1, so once set it overrides everything else.
How to Add
Append to .zshrc:
# Claude Code: set default effort level to max
# env var is needed because settings.json has a max-persistence bug
export CLAUDE_CODE_EFFORT_LEVEL=max
Automatically applied from new terminal sessions.
Why env var instead of settings.json
settings.json: Setting
"effortLevel": "max"doesn't stick. Known bug where/modelUI overwrites the value (GitHub issue #30726).highpersists butmaxdoesn'tCLI flag:
claude --effort maxworks but requires typing every time. You could alias it, but env var is simplerEnv var: Auto-applies to every session, and sits at the top of priority
Difference from ultrathink Keyword
Claude Code has an ultrathink keyword that, when included in a prompt, raises that turn only to high effort.
| Method | Effort level | Persistence |
|---|---|---|
ultrathink keyword |
high | That turn only |
/effort high |
high | Session |
/effort max |
max | Session |
CLAUDE_CODE_EFFORT_LEVEL=max (env var) |
max | Permanent |
Bottom line: setting max via env var permanently sits above ultrathink. No need to prompt "think harder" every time.
Caveats
maxhas the highest token usage and slowest responses. Overkill for trivial tasksTemporarily downgrade with
/effort lowor/effort mediumin sessionApply env var by opening a new terminal or running
source ~/.zshrc
How to Use
Add `export CLAUDE_CODE_EFFORT_LEVEL=max` to .zshrc
Open a new terminal or run `source ~/.zshrc` to apply
Priority: env var > CLI flag > settings.json > model default. Env var wins
settings.json doesn't persist max (GitHub issue #30726). Env var required
Above ultrathink: ultrathink is high (that turn), env var max is max (permanent)
Tags
Source
Community tip (shared 2026-03-16)