Support per-model effort level defaults
Open 💬 0 comments Opened Jul 13, 2026 by eve0415
Problem
There's no way to set different effort levels for different models. If you switch between models mid-session (e.g., Opus for heavy work, Fable for orchestration), you have to manually /effort max and /effort high each time you switch.
Proposed solution
Allow effortLevel in settings to accept a model-keyed object in addition to the current flat string:
{
"effortLevel": {
"opus": "max",
"fable": "high",
"sonnet": "high",
"default": "high"
}
}
When the active model changes (via /model, CLI flag, or any other mechanism), effort automatically follows the mapping. The flat string form remains valid as a universal default for backward compat.
Alternatives considered
- Global flat
effortLevel— works but wastes tokens on models where max isn't needed, or under-serves models that benefit from it. - Shell aliases (
claude --model opus --effort max) — only helps at session launch, not mid-session switches. - Hooks — no model-change event exists, and hooks can't mutate session state anyway.
Use case
Opus benefits significantly from max effort on hard reasoning tasks, but Fable (used for orchestration/planning in the same session) doesn't need it and runs up cost unnecessarily at max.