Statusline JSON missing effort level field

Resolved 💬 7 comments Opened Mar 24, 2026 by FZ1010 Closed Apr 24, 2026

Description

The statusline JSON input (piped via stdin to custom statusLine commands) does not include the current effort level. This makes it impossible for custom status line scripts to display the active effort level accurately, especially for session-only changes made via /effort max.

Current statusline JSON schema

The JSON includes: context_window, cost, cwd, model, output_style, rate_limits, session_id, transcript_path, version, vim, workspace

Missing: No effort or effort_level field.

Current workaround limitations

Custom statusline scripts (like ClaudeCodeStatusLine) currently try to detect effort via:

  1. CLAUDE_CODE_EFFORT_LEVEL environment variable — not set by Claude Code in the statusline subprocess
  2. settings.json effortLevel field — only stores persisted values (low|medium|high), not session-only changes, and doesn't include max

This means:

  • /effort max (session-only) is never visible to statusline scripts
  • /effort high works only because it's persisted in settings.json
  • The env var path is dead code — Claude Code never sets it for statusline subprocesses

Proposed fix

Add an effort (or effort_level) field to the statusline JSON, reflecting the effective effort level for the current session (including session-only overrides):

{
  "effort_level": "max",  // Current effective effort: "low" | "medium" | "high" | "max"
  ...existing fields...
}

This would allow custom statuslines to accurately display the effort level without relying on external sources.

Environment

  • Claude Code version: 2.1.80+
  • OS: macOS (Darwin 25.4.0)

View original on GitHub ↗

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