Feature request: expose an activity/state field (Ready/Thinking/Working/Error) in statusLine stdin JSON

Status Open
Maintainer reply None cached
Activity 0 comments · opened Jul 23, 2026

Summary

The statusLine command's stdin JSON currently has no field describing what Claude is actively doing right now (e.g. idle/ready, extended-thinking in progress, running a tool, or the last turn errored). The documented schema (session/model/workspace/context_window/effort/thinking.enabled/rate_limits/vim/agent/pr/worktree) is entirely about static session state — nothing reflects live turn activity.

The TUI itself already renders this as a spinner + hint text (e.g. "Thinking…", tool-run hints), so the underlying state clearly exists internally — it's just not exposed to the statusLine hook for custom rendering.

Request

Add something like:

"turn_state": {
  "phase": "idle" | "thinking" | "tool_use" | "responding" | "error",
  "detail": "string"   // optional, e.g. tool name or spinner hint text
}

Given the statusLine command already supports event-driven re-runs (plus an optional every-N-seconds timer), this would let custom statusLines surface a live Ready/Thinking/Working/Error indicator instead of only static session metrics.

Motivation

Users running custom statusLine scripts (colorized rate limits, model/effort display, etc.) have no way to fold in "what is Claude doing right now" without guessing from side channels like transcript_path mtime, which is unreliable and can't distinguish states like "thinking" vs "errored."

Alternatives considered

Polling transcript_path file mtime as a liveness proxy — rejected because it's not a real signal (can't detect specific phases, and is unrelated to editing-in-progress vs error states).

View original on GitHub ↗