effortLevel not persisted for Max mode, and model/effort settings have no per-session isolation

Resolved 💬 2 comments Opened Mar 22, 2026 by Melroseee-e Closed Mar 22, 2026

Problem 1: Max effort level is not reflected anywhere

When switching to Max effort mode, neither settings.json nor the statusline stdin JSON reflects this change:

  • settings.jsoneffortLevel retains its previous value (e.g. "high") and is never updated to "max"
  • Statusline stdin JSON — effortLevel is not included at all; output_style.name stays "default"; the only observable change is model.id gaining a [1m] suffix, but this only indicates the 1M context window size (Sonnet also supports [1m]), so it cannot reliably indicate Max effort

There is currently no programmatic way for external tools, statusline scripts, or hooks to know whether Max effort is active.

Expected: effortLevel: "max" should be written to settings.json when Max is selected, and also exposed in the statusline stdin JSON.

---

Problem 2: Model and effort settings have no per-session isolation

All Claude Code sessions share a single ~/.claude/settings.json. This means:

  • If you run multiple Claude Code sessions simultaneously (e.g. one on Opus/high, another on Sonnet/low), changing model or effort in one session overwrites the setting globally and affects all other sessions
  • There is no way for a statusline script or hook to know which model/effort belongs to this session — only the last-written global value is available

Expected: Model and effortLevel should either be stored per-session (e.g. keyed by session_id), or exposed as session-scoped values in the statusline stdin JSON so each session can independently read its own state.

This would enable accurate per-session status display and prevent sessions from interfering with each other's configuration.

View original on GitHub ↗

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