[FEATURE] Per-model effort level in settings.json (modelEffort map)

Open 💬 3 comments Opened Jun 10, 2026 by zachthedev

Summary

effortLevel is a single global value. There is no way to persist "high on Fable 5, max on Opus/Sonnet/Haiku". #51059 proposed a modelEffort map for exactly this and was closed by the stale bot without a response; re-filing as the bot's close message suggests.

Claude Code 2.1.170, Windows 11.

Problem

A single global level can't fit models with different supported ranges. high globally means Opus/Sonnet/Haiku never run at max. max or xhigh globally silently degrades to high on models that don't support it.

The existing escape hatches don't cover it either. --effort is launch-time only: it can't be shared via settings, doesn't apply to desktop/IDE entrypoints, and doesn't survive a mid-session /model switch. The /model and /effort pickers persist immediately to the global ~/.claude/settings.json (#66402), so picking max while on Opus changes what the next session on every other model starts at.

Proposal

{
  "effortLevel": "high",
  "modelEffort": {
    "opus": "max",
    "sonnet": "max",
    "haiku": "max",
    "fable": "high"
  }
}

Precedence, highest first: --effort flag, modelEffort, effortLevel / CLAUDE_CODE_EFFORT_LEVEL, model default. Keys match the way availableModels entries do (alias, version prefix, or full ID). Applied at session start and re-applied on /model switch. If the configured level isn't supported by the active model, clamp to the nearest supported level and show that in the picker rather than falling back silently.

Related

  • #51059: same proposal, closed as stale
  • #31923: persist model variant settings (effort, extended context), closed as stale
  • #66402: open; /model and /effort mutating global settings is the bug this map would mostly remove the need to touch

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗