v2.1.113: --effort max CLI flag and CLAUDE_CODE_EFFORT_LEVEL env var ignored
Bug Description
The --effort max CLI flag and CLAUDE_CODE_EFFORT_LEVEL=max environment variable are not being respected. Effort level defaults to "medium" (v2.1.113) or displays as "xhigh" in the /effort slider even when "max" is explicitly configured through every available mechanism.
Environment
- Claude Code version: v2.1.112 -> v2.1.113 (auto-updated during debugging)
- OS: macOS 26.4.1
- Shell: zsh
- Model:
claude-opus-4-6[1m](pinned in~/.claude/settings.json) - Plan: Claude Max
Steps to Reproduce
Method 1: Environment variable in settings.json
{
"model": "claude-opus-4-6[1m]",
"env": {
"CLAUDE_CODE_EFFORT_LEVEL": "max"
}
}
Result: Banner does NOT show "with max effort". /effort slider shows "xhigh", not "max".
Method 2: Environment variable in ~/.zshrc
export CLAUDE_CODE_EFFORT_LEVEL=max
Verified with echo $CLAUDE_CODE_EFFORT_LEVEL which outputs max in the shell before launching claude.
Result on v2.1.112: Banner briefly showed "Opus 4.6 (1M context) with max effort" (this worked once, then stopped working on subsequent launches with identical configuration). /effort slider still showed "xhigh" even when the banner showed "max effort".
Result on v2.1.113: Banner shows just "Opus 4.6 (1M context) - Claude Max" with no effort indicator. Status bar shows "medium".
Method 3: CLI flag via alias
alias claude='claude --effort max'
Verified with type claude which outputs claude is an alias for claude --effort max.
Result on v2.1.113: Banner shows "Opus 4.6 (1M context) - Claude Max" with no effort indicator. Status bar shows "medium". The --effort max flag is completely ignored.
Method 4: Both env var AND settings.json AND alias simultaneously
All three methods active at once.
Result: Still shows "medium" effort. No effect.
Expected Behavior
--effort maxCLI flag should persistently set effort to "max"CLAUDE_CODE_EFFORT_LEVEL=maxenv var should persistently set effort to "max"- The
/effortslider should reflect the configured effort level (show "max", not "xhigh") - The banner should display "with max effort" when max effort is configured
- These settings should persist across sessions without needing
/efforteach time
Actual Behavior
- All configuration methods are ignored
- v2.1.113 defaults to "medium" effort regardless of configuration
/effortslider shows "xhigh" as the active level even when "max" is configured (display bug)- Behavior is inconsistent between launches with identical configuration (worked once on v2.1.112, then stopped)
- Auto-update from v2.1.112 to v2.1.113 made things worse (went from "xhigh" display to "medium" default)
Additional Observations
Banner inconsistency with model display
When model is pinned to claude-opus-4-6[1m] in settings.json, the startup displays conflicting information:
Claude Code v2.1.112
Opus 4.6 (1M context) with max effort - Claude Max <-- correct model
/Users/username
Welcome to Opus 4.7 xhigh! <-- wrong model, wrong effort
The info line correctly shows Opus 4.6, but the "Welcome to" line says Opus 4.7. This secondary banner also shows "xhigh" instead of "max". In v2.1.113, this "Welcome to" line disappeared entirely.
Opus 4.6 vs 4.7 effort scale mismatch
According to the docs, Opus 4.6 supports low, medium, high, max - NOT xhigh. The /effort slider displaying xhigh on an Opus 4.6 session suggests the UI is rendering the 4.7 effort scale regardless of the active model.
CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING
Also have export CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1 set. Unknown if this interacts with the effort level bug, but mentioning for completeness.
Workaround
The only workaround is manually using /effort at the start of every session and arrow-keying to "max". This does not persist between sessions.
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗