Statusline JSON missing effort level field
Description
The statusline JSON input (piped via stdin to custom statusLine commands) does not include the current effort level. This makes it impossible for custom status line scripts to display the active effort level accurately, especially for session-only changes made via /effort max.
Current statusline JSON schema
The JSON includes: context_window, cost, cwd, model, output_style, rate_limits, session_id, transcript_path, version, vim, workspace
Missing: No effort or effort_level field.
Current workaround limitations
Custom statusline scripts (like ClaudeCodeStatusLine) currently try to detect effort via:
CLAUDE_CODE_EFFORT_LEVELenvironment variable — not set by Claude Code in the statusline subprocesssettings.jsoneffortLevelfield — only stores persisted values (low|medium|high), not session-only changes, and doesn't includemax
This means:
/effort max(session-only) is never visible to statusline scripts/effort highworks only because it's persisted in settings.json- The env var path is dead code — Claude Code never sets it for statusline subprocesses
Proposed fix
Add an effort (or effort_level) field to the statusline JSON, reflecting the effective effort level for the current session (including session-only overrides):
{
"effort_level": "max", // Current effective effort: "low" | "medium" | "high" | "max"
...existing fields...
}
This would allow custom statuslines to accurately display the effort level without relying on external sources.
Environment
- Claude Code version: 2.1.80+
- OS: macOS (Darwin 25.4.0)
This issue has 7 comments on GitHub. Read the full discussion on GitHub ↗