Make /effort auto context-adaptive (currently it just resolves to the model's static default)
Background
/effort auto already exists as a documented option (see model-config docs), but its current semantics are minimal: it resets the session effort to the model's hardcoded default — xhigh on Opus 4.7, high on Opus 4.6 / Sonnet 4.6. The user-visible behavior is identical to setting /effort xhigh (on Opus 4.7), making the keyword effectively redundant.
Why this matters
Default /effort xhigh on Opus 4.7 produces ~89% of output_tokens in extended thinking blocks (measured locally over 4 weeks of mixed coding sessions by parsing ~/.claude/projects/*/*.jsonl and estimating thinking share from the gap between reported output_tokens and the visible characters in text + tool_use blocks of each assistant message).
For users running mixed workloads — complex debugging in one session, mechanical Jira/email/log updates in another — the static default systematically overspends on routine work.
Per-session /effort is now correctly isolated as of v2.1.133 (thanks for that fix!), but users still need to manually adjust before each task, which in practice nobody does consistently.
Proposal
Re-purpose /effort auto to mean "Claude Code adapts effort per turn based on the current prompt and recent conversation context", instead of "reset to model default".
Concrete suggestion:
- When the session is in
automode, Claude Code uses a lightweight classifier (heuristic, small model, or letting Opus self-classify the request) to pick one oflow / medium / high / xhighfor the current turn. - The classification could weight signals like: recent turns (mechanical edits → low), presence of ambiguous design questions in the prompt (→ high), pasted code blocks for analysis (→ high), simple slash-command invocations (→ low), prompt length, etc.
- The current static "use model default" behavior could move under a new keyword (e.g.
/effort default) or be deprecated.
The hooks API in v2.1.133 already exposes effort.level to UserPromptSubmit hooks, but those hooks cannot return a new level — they're read-only for effort. A user-space implementation of this feature is therefore not possible today, which is why this needs to be in Claude Code core (or via a new hook output field — see alternative below).
Impact
For users on Opus 4.7 with mixed workloads, this could realistically halve session cost without any quality regression on tasks that genuinely need high effort (those would still classify as high/xhigh).
Alternative if the existing auto semantics need to stay
Add effort as a valid output field in UserPromptSubmit hook JSON (alongside the existing decision, reason, additionalContext, sessionTitle). That alone would let users write their own classifier as a hook and keep /effort auto as-is. Would also be the smaller-scope change.
Environment
- Claude Code v2.1.133, Windows 11
- Opus 4.7 with 1M context, daily mixed-workload usage
Thanks!
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗