[FEATURE] Animate the project name chip while waiting for user input
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
Summary
Pulse the project name chip in the TUI (slow ~1.5s opacity/tint cycle) when Claude is in the Stop state and awaiting user input. Revert to static on UserPromptSubmit / while working.
Why
Running multiple concurrent Claude Code sessions in tabs, glance-detecting which one just finished a turn is a bottleneck. The project chip is already the most visible element Claude renders, already carries session identity, and is purely ANSI (works in any terminal emulator). Animating it during Stop answers "which session needs me?" and "what is it?" in one peripheral glance — without adding new visual elements or requiring terminal-emulator integration.
Related
- #21894 — umbrella request for visual prompt state indicators; this is a concrete UI for the "waiting" state
- #42107 — multi-tab state icons; same use case, different mechanism
Notes
- Settings opt-out (e.g.
idlePulse: false, or a newpreferredNotifChannelvalue) - Same mechanism could later differentiate the
Notificationstate (tool approval pending) with a faster, more urgent pulse or other style
Proposed Solution
Pulse the project name chip in the TUI when Claude is in the Stop state and awaiting user input.
Alternative Solutions
preferredNotifChannel: "terminal_bell"— one-shot BEL on completion / permission prompts. On Tilix + GNOME this renders as a smallA̲|icon on the tab; too subtle to scan across
6 tabs.
- Custom
Stophook writing BEL directly to the pty via/proc/$PPID/fd/1(necessary because hook subprocesses have their stderr captured by Claude Code, so>&2never reaches the
terminal). Produces the same A̲| indicator — same subtlety problem.
- Tilix Triggers regex-matching Claude's output to
UpdateTitle(text-only) orUpdateBadge. Tilix's trigger vocabulary has no tab-color or animation action, and the recap text
isn't a stable contract to match against.
- Mobile push via Remote Control — covers "walked away from desk," not "sitting at desk with 6 tabs visible."
- Custom
statusLinescript — can render anything I want, but the JSON Claude passes doesn't expose "waiting on user" as a state, so it would have to read from a sentinel file
written by a separate Stop hook.
Priority
Medium - Would be very helpful
Feature Category
Interactive mode (TUI)
Use Case Example
- Open ~6 Tilix tabs, one Claude Code session per project (one running tests, one drafting docs, one refactoring, etc.)
- Kick off a long-running turn in tab 1, then tab over to tab 2 to do something while it runs
- Work in tab 2 for a few minutes; tab 1 finishes mid-stream
- Glance at the tab strip to see which session(s) are waiting on me — currently this means reading each tab's content or relying on a subtle tab-bell icon. With chip pulsing, the
project chip in the just-finished tab would slow-pulse, making it the obvious target at a glance
- Switch to tab 1, type my next prompt; pulse stops the moment input is submitted
Additional Context
_No response_
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗