effortLevel not persisted for Max mode, and model/effort settings have no per-session isolation
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.json—effortLevelretains its previous value (e.g."high") and is never updated to"max"- Statusline stdin JSON —
effortLevelis not included at all;output_style.namestays"default"; the only observable change ismodel.idgaining 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.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗