Expose session effortLevel in statusline stdin JSON

Resolved 💬 2 comments Opened Apr 1, 2026 by olucasbusch Closed Apr 24, 2026

Feature Request

Expose the current session's effortLevel in the JSON payload passed to statusline scripts via stdin.

Current behavior

The statusline script receives this structure on stdin:

{
  "model": { "display_name": "Claude Opus 4.6" },
  "context_window": { ... },
  "rate_limits": { ... },
  "cost": { ... }
}

There is no field for the session's effort/reasoning level.

Desired behavior

Include the active session effort level in the payload:

{
  "model": { "display_name": "Claude Opus 4.6" },
  "effort_level": "high",
  "context_window": { ... },
  "rate_limits": { ... },
  "cost": { ... }
}

Why

  • The effort level affects model behavior significantly (token usage, reasoning depth, cost)
  • Users who customize their statusline want to see which effort level is active alongside the model name
  • The global effortLevel in ~/.claude/settings.json does NOT reflect the current session value — it's the default, not the runtime state
  • When toggling with /fast or switching effort mid-session, there is no way for the statusline to reflect the change
  • Model + effort are a pair — knowing "Opus 4.6" without knowing if it's running at "low" or "high" effort is incomplete information

Suggested field name

effort_level — string, one of "low", "medium", "high" (matching the existing effortLevel setting values).

Alternatively, nest it under model:

{
  "model": {
    "display_name": "Claude Opus 4.6",
    "effort_level": "high"
  }
}

Environment

  • Claude Code CLI v1.0.33
  • macOS

View original on GitHub ↗

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