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.

View original on GitHub ↗