Feature: include effort level in statusline JSON input

Resolved 💬 3 comments Opened Mar 20, 2026 by lilooraf Closed Mar 24, 2026

Request

Add the current effort level to the JSON data passed to custom statusline scripts via stdin.

Context

The effort level (low / medium / high / max) significantly affects Claude's behavior — it controls thinking depth, number of tool calls, and output verbosity. Users who build custom statuslines (via settings.json statusLine config) have no way to display the active effort level.

Claude Code already shows effort next to the spinner ("with max effort"), but this information isn't available to custom statusline scripts.

Proposed addition

Add an effort field to the statusline JSON input:

{
  "model": { "id": "claude-opus-4-6", "display_name": "Opus" },
  "effort": "max",
  ...
}

The value should reflect the effective effort level for the current turn, accounting for the full precedence chain:

  1. CLAUDE_CODE_EFFORT_LEVEL env var
  2. Active skill/agent frontmatter effort override
  3. Session level (/effort, --effort)
  4. Model default

Why this matters

  • Effort affects cost and latency — users monitoring sessions need to see it
  • Skill/agent frontmatter can silently change effort — invisible without this
  • The statusline already has model, cost, context_window, rate_limits — effort is the missing piece for full observability
  • Custom HUD plugins (like statusline scripts that track plan progress) want to show effort alongside model name

Current workarounds (insufficient)

  • Read effortLevel from settings.json — misses /effort session overrides and skill/agent frontmatter
  • Read CLAUDE_CODE_EFFORT_LEVEL env var — only works if explicitly set, misses all other sources
  • Neither captures skill/agent frontmatter overrides

Environment

  • Claude Code v2.1.79
  • Opus 4.6 (1M context)

View original on GitHub ↗

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