[FEATURE] Expose current effort level in statusline JSON

Resolved 💬 4 comments Opened Apr 19, 2026 by leonxia1010 Closed Apr 24, 2026

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.id and model.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. xhighhigh 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.

View original on GitHub ↗

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