Statusline payload reports wrong effort level after /effort change

Status Closed — duplicate
Reported on v2.1.220
Maintainer reply None cached
Activity 1 comment · opened Aug 3, 2026 · closed Aug 15, 2026

Description

The statusline JSON payload's effort.level field does not reflect the current effort level after changing it via /effort. It remains stuck at "high" regardless of the configured level.

Steps to reproduce

  1. Configure a custom statusline command that reads effort.level from the JSON payload (per statusline docs)
  2. Change effort level via /effort xhigh (or any other level)
  3. Confirm the setting is saved — settings.json shows "effortLevel": "xhigh"
  4. Observe the statusline still displays "high"

Expected behavior

The effort.level field in the statusline JSON payload should reflect the current effort level ("xhigh" in this case), both:

  • Immediately after a /effort change within the same session
  • In new sessions that inherit the saved effortLevel from settings.json

Actual behavior

The payload always reports {"effort":{"level":"high"}} regardless of the actual configured effort level. This persists across new sessions even when settings.json correctly contains "effortLevel": "xhigh".

Debug payload captured

{
  "effort": {"level": "high"},
  ...
}

Meanwhile settings.json contains:

{
  "effortLevel": "xhigh",
  ...
}

Environment

  • Claude Code version: 2.1.220
  • OS: Linux 7.0.0-28-generic
  • Model: Opus 4.6 (1M context)

Statusline script (for reference)

The script correctly reads .effort.level via jq — the issue is in the payload, not the consumer:

effort=$(printf '%s' "$input" | jq -r '.effort.level // "-"')

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗