Feature Request: Expose active effort level in statusline input JSON
Summary
statusLine.command receives a JSON blob on stdin (.statusline-input.json) with model/context/rate_limits/etc., but the current effort level is not included. This prevents statusline scripts from displaying the actual runtime effort being used for inference.
Current state (v2.1.112)
The JSON fields provided to the statusline command include:
model.id,model.display_namecontext_window.used_percentagerate_limits.five_hour,rate_limits.seven_dayworkspace,cwd,version,cost,output_style, etc.
No effort / reasoning_effort / effortLevel field.
Problem
A user's statusline can read effortLevel and env.CLAUDE_CODE_EFFORT_LEVEL from settings.json directly, but this does not reflect the actual runtime effort:
/effort <value>changes the effort for the session, but this change is never exposed outside Claude Code (no file, no stdin field, no transcript entry)effortLevel: "max"insettings.jsonis "session-only, falls back to xHigh default" per docs, so what the user writes is not necessarily what Claude Code applies (see also #33937, #48051)- Result: the statusline can show
maxwhile the session is actually running at xHigh, or vice versa
This makes it impossible to build an honest "what effort am I actually paying for right now?" indicator.
Proposed change
Add reasoning_effort (or effort) to the statusline stdin JSON:
{
...
"reasoning_effort": {
"active": "xhigh",
"source": "env" // "env" | "settings" | "/effort" | "default"
}
}
active: the effort level the next request will be sent withsource: where this value originated from (helps the user debug if their settings aren't taking effect)
Why it matters
- Honest display: users currently have to choose between reading
settings.json(inaccurate when/effortis used) or(cfg.env)(inaccurate whensettings.json"max" is silently downgraded). Neither is the truth. - Cost transparency:
xhighandmaxhave different token consumption profiles; users on Max plans want a visible indicator of the current level - Debuggability: the
sourcefield makes settings conflicts self-explanatory (e.g., "your/effort maxwas ignored because env var forces xhigh")
Workaround (for reference)
Currently users must:
- Read
settings.jsonand hope no/effortoverride was applied this session - Run
/effortmanually to check, which is interactive and cannot be scripted from the statusline
Neither is suitable for a statusline.
Related issues
- #33937 — effort level 'max' should be persistable
- #48051 — effortLevel "max" runs as medium
- #30726 — effort silently downgraded
Exposing the effective value in the statusline would also help surface these bugs to affected users automatically.
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗