Add effort_level and mode to status line JSON

Resolved 💬 4 comments Opened Feb 22, 2026 by chriscoey Closed Apr 13, 2026

Summary

The status line script receives session state as JSON via stdin, but two useful fields are missing: effort level and current mode.

Motivation

The status line is great for operational awareness — you can see model, context usage, cost, git state, etc. at a glance. But two pieces of state that significantly affect Claude's behavior are invisible:

  1. Effort level (low/medium/high/max) — Controls thinking depth and token spend. When you're debugging a hard problem at max effort vs doing quick edits at low, it's useful to see this without running /model. Currently the only workaround is reading CLAUDE_CODE_EFFORT_LEVEL from the environment, which doesn't reflect changes made via /model during a session.
  1. Current mode — The active permission/interaction mode (e.g. plan, bypassPermissions, default, etc.). Different modes change what Claude can do, and it's easy to forget which mode you're in during a long session — especially after toggling plan mode on and off.

Proposed fields

{
  "effort_level": "high",
  "mode": "plan"
}

Both are simple scalar values that are already tracked internally — just not exposed to the status line script.

Current schema for reference

The status line JSON currently includes: model, workspace, cost, context_window, output_style, vim, agent, exceeds_200k_tokens, session_id, transcript_path, version.

View original on GitHub ↗

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