Expose current effort level to statusline JSON and session JSONL

Resolved 💬 4 comments Opened Apr 17, 2026 by balicat Closed Apr 27, 2026

Summary

The effort level (standard / high / x-high / max) set via /effort is only visible inside the running Claude Code UI. It is not available to any external tooling.

What's missing

The effort level is not included in:

  • The JSON piped to statusLine.command scripts (contains model, output_style, context_window, cost, rate_limits, but no effort)
  • The per-session JSONL at \~/.claude/projects/*/*.jsonl\ (assistant messages have \model\ on each entry but no effort)
  • \~/.claude.json\ project settings
  • \~/.claude/sessions/*.json\ session state files

The flags \unpinOpus47LaunchEffort\ and \effortCalloutV2Dismissed\ exist in \~/.claude.json\ but they're UI-dismissal booleans, not the active setting.

Use case

I run a dashboard that aggregates stats across multiple Claude Code sessions on different machines (desktop and laptop). It pulls context %, model, cwd, and session title from the JSONL files via a background scanner. I'd like to also surface the effort level so I can see at a glance "laptop is on max, desktop is on x-high" — particularly useful when running ping-pong workflows between machines with different effort budgets.

Without effort exposed in the statusline JSON or JSONL, there's no way for external tooling to read it.

Proposal

  1. Simplest: Add an \"effort"\ field to the statusline JSON alongside \model\, \output_style\, etc. This unblocks any custom statusline script immediately.
  2. More useful: Also persist effort in the session JSONL on each assistant message (or at least when it changes), so historical/cross-session analysis can see effort-per-turn.

Either (1) alone would be enough for most live-dashboard use cases.

View original on GitHub ↗

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