๐Ÿš€

Permanently Set Effort Level to Max

Claude Code

Force 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 line

  • Basic fix, usually correct

  • 10-20s response

High:

  • After finding N+1, decides between joins vs includes

  • Reviews 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 /model UI overwrites the value (GitHub issue #30726). high persists but max doesn't

  • CLI flag: claude --effort max works but requires typing every time. You could alias it, but env var is simpler

  • Env 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

  • max has the highest token usage and slowest responses. Overkill for trivial tasks

  • Temporarily downgrade with /effort low or /effort medium in session

  • Apply env var by opening a new terminal or running source ~/.zshrc

How to Use

1

Add `export CLAUDE_CODE_EFFORT_LEVEL=max` to .zshrc

2

Open a new terminal or run `source ~/.zshrc` to apply

3

Priority: env var > CLI flag > settings.json > model default. Env var wins

4

settings.json doesn't persist max (GitHub issue #30726). Env var required

5

Above ultrathink: ultrathink is high (that turn), env var max is max (permanent)

Tags

#effort-level #zshrc #env-var #ultrathink #max #performance

Source

Community tip (shared 2026-03-16)