[FEATURE] Expose current effort level in statusline JSON
Problem
2.1.111 introduced an interactive /effort slider and a new xhigh level for Opus 4.7. Combined with auto mode and the existing low/medium/high/max levels, the effort setting has become a first-class, frequently-toggled piece of session state — one that directly affects latency, cost, and output quality.
However, the statusline stdin JSON (documented at https://code.claude.com/docs/en/statusline#full-json-schema) does not expose the current effort level. Users who want an at-a-glance readout of "am I on xhigh or cruising on low right now" have no clean way to build it — the only fallbacks are parsing ~/.claude/settings.json or scanning the transcript for /effort invocations, both fragile.
Current state
model.idandmodel.display_name— exposed ✅context_window.*,cost.*,transcript_path— exposed ✅- Effort level — not exposed ❌
Statusline plugins like claude-hud already surface model + context %. Effort is the natural next field, and currently the only commonly-wanted piece of session state that requires out-of-band inspection.
Proposed
Expose the effective current effort level in the statusline stdin JSON. Suggested path:
{
"model": {
"id": "claude-opus-4-7",
"display_name": "Claude Opus 4.7",
"effort": "xhigh"
}
}
Nesting under model matches the fact that effort is (a) a per-model setting, and (b) subject to per-model fallback (e.g. xhigh → high on non-Opus-4.7 models). The emitted value should be the effective level after fallback, so consumers render what the model is actually running at — not the requested level.
Alternative paths considered: top-level effort, or output_config.effort to mirror CLAUDE_CODE_EXTRA_BODY.output_config.effort. Either works — the key requirement is that the effective post-fallback value is surfaced so statusline tools don't have to replicate the fallback logic.
Use case
Users on Max / Team / Enterprise plans running Opus 4.7 frequently toggle between high, xhigh, and max depending on task complexity. A statusline field lets plugins render something like 🤖 [Opus 4.7 · xhigh] without the user typing /effort just to check the current value.
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗