Statusline input missing effortLevel field

Resolved 💬 3 comments Opened Mar 14, 2026 by Zheckan Closed Mar 14, 2026

Problem

The statusline command's JSON input (via stdin) does not include the current effortLevel. This makes it impossible for custom statusline scripts to display the active effort level accurately.

Current behavior

  • effortLevel is not included in the statusline JSON input
  • The only way to read it is from ~/.claude/settings.json, but:
  • max and auto effort levels are session-only and never persist to settings.json
  • Changes via /effort, /model, or Option+P don't update settings.json for these values, causing the statusline to show a stale value

Expected behavior

The statusline JSON input should include the effective effort level for the current session, e.g.:

{
  "model": {
    "id": "claude-opus-4-6[1m]",
    "display_name": "Opus 4.6 (1M context)",
    "effort_level": "max"
  },
}

Reproduction

  1. Start a session (e.g. with effortLevel: "high" in settings.json)
  2. Change effort to max or auto via /effort or /model
  3. Custom statusline reads effortLevel from settings.json → still shows "high"
  4. No field in the stdin JSON reflects the change

Environment

  • Claude Code v2.1.76
  • macOS (25.3.0)
  • Custom statusline via statusLine.type: "command"

View original on GitHub ↗

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