WebSearch always returns HTTP 400 when session effort is xhigh/max on Opus 5 (regression from v2.1.219 default flip)
Summary
On Claude Code v2.1.220 with Claude Opus 5, every WebSearch call fails with HTTP 400 when the session effort level is xhigh or max. The tool is completely non-functional at those effort levels.
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.
Cause
WebSearch appears to issue an internal sub-request with thinking disabled, while inheriting the session's effort level. Per the Effort docs, Opus 5 rejects thinking: {"type": "disabled"} at xhigh/max with a 400. The two combine into an unconditional failure.
Setting alwaysThinkingEnabled: true does not help — that governs the main loop, not the sub-request.
Repro
Controlled A/B, same model and prompt, one variable:
claude -p "Use the WebSearch tool once to search for: anthropic claude opus 5. Reply WORKED or the exact error." --model opus --effort high
# -> WORKED
claude -p "Use the WebSearch tool once to search for: anthropic claude opus 5. Reply WORKED or the exact error." --model opus --effort xhigh
# -> ERROR API Error: 400 output_config.effort 'xhigh' is not supported when thinking is disabled on this model.
Deterministic: 4/4 failures at xhigh across two distinct queries, 0 failures at high.
Regression window
This broke when Opus 5 became the default Opus model in v2.1.219. Opus 4.8 permitted thinking-disabled at any effort, so the identical configuration worked previously. Anyone with "effortLevel": "xhigh" in settings lost WebSearch silently on upgrade.
Impact
The failure mode is worse than the outage. It surfaces as a generic tool error rather than "research is unavailable", so an agent's next move is to answer from training data instead. Users running xhigh — the level the docs recommend for demanding agentic work — get silently degraded research quality.
Expected
Either the WebSearch sub-request should not inherit an incompatible effort level (clamp to high), or it should keep thinking enabled, or the failure should be surfaced as a capability error rather than a raw 400.
Environment
- Claude Code 2.1.220 (also reproduced on the 2.1.219 desktop binary)
- Model: Claude Opus 5
- macOS 15 (Darwin 25.5.0)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗