[BUG] 400 "output_config.effort 'xhigh' is not supported when thinking is disabled" on Opus 4.8 despite alwaysThinkingEnabled: true (VS Code, 2.1.205–2.1.207)
Bug description
On Claude Opus 4.8 with effortLevel: "xhigh", requests intermittently fail with:
API Error: 400 output_config.effort 'xhigh' is not supported when thinking is disabled on this model. Use effort 'high' or below, or enable thinking.
This happens despite alwaysThinkingEnabled: true in settings.json (key verified to exist against claude-code-settings.schema.json shipped with the extension). It looks like the client omits thinking: {type: "adaptive"} in some requests while still sending effort: "xhigh", which the API rejects.
Environment
- Claude Code: 2.1.205 → 2.1.207 (error reproduced across both)
- Entrypoint: VS Code extension (
claude-vscode), Windows 11 Home - Model: Claude Opus 4.8 (subscription)
settings.json:effortLevel: "xhigh",alwaysThinkingEnabled: true(both schema-valid)- Env:
CLAUDE_EFFORT=xhigh
Frequency / evidence
Counted from session transcripts (~/.claude/projects/*/*.jsonl), matching only synthetic API-error records ("isApiErrorMessage":true + the error text), main thread only:
- 13 error events total: 7 on 2026-07-09, 6 on 2026-07-11, across 7 different sessions
- All events have
isSidechain: false(main conversation loop); 0 events in subagent transcripts — subagents never hit this - 3 of the 13 records share an identical timestamp within one session (likely one event recorded three times, or instant retries)
Expected
With alwaysThinkingEnabled: true (or absent, per its schema description: "When absent or true, thinking is enabled automatically for supported models"), every request on Opus 4.8 with effort: xhigh should include thinking: {type: "adaptive"} and succeed.
Actual
Some main-loop requests run without thinking and get rejected with the 400 above. Behavior is intermittent within the same session and across sessions started with identical config.
Possibly related
- Changelog v2.1.203: "Fixed background sessions ignoring
effortLevelchanges in settings.json when forked through the daemon" — same class (effort/thinking config not propagated), shipped right before this started for me (first event 2026-07-09 on 2.1.205) - #65863 (
400 thinking options type cannot be disabled when reasoning_effort is set) - #68567 (
thinking.disabled.display: Extra inputs are not permittedon subagent spawns)
Workarounds found
- Switch to a model where thinking cannot be disabled (Fable 5): error is architecturally impossible there, confirmed gone after switching mid-session
- Or drop to
effortLevel: "high"on Opus 4.8 (error only fires onxhigh)
This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗