Tmux Claude Status banner
LiveNL LiveNL

Tmux Claude Status

Development community

Description

Every Claude Code session's state, live in your tmux tab bar — animated, event-driven, zero polling

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

tmux-claude-status

Every Claude Code session's state, live in your tmux tab bar — a spinner while it works, amber when it asks, red when it's blocked on an approval, green when it's done.

[![tests](https://github.com/LiveNL/tmux-claude-status/actions/workflows/tests.yml/badge.svg)](https://github.com/LiveNL/tmux-claude-status/actions/workflows/tests.yml)

![Demo: Claude state cycling through running → permission → input → done across four tmux windows](screenshots/demo.gif)

Run five Claude sessions in five windows and you spend your day guessing which tab wants you. This makes the bar answer it at a glance:

State Glyph Color When
running (animates) cyan Claude is working
input ? amber Claude is waiting on your reply
permission ! red Claude needs approval to run a command
done green Claude finished without a question
(idle) dim No active Claude session

**No polling. No cron. No daemons.** [Claude Code hooks](https://docs.anthropic.com/en/docs/claude-code/hooks) fire at each lifecycle event; the tab is repainted at that exact moment. Questions latch, finished turns hold their colour, and the transitions Claude never reports — Esc, a granted permission, a stop hook resuming the turn — are caught by watchers. Subagents can't repaint a tab that's waiting on you. The whole state machine is pinned by 260+ assertions run in CI, including a payload contract checked against captured real Claude payloads.

Curious why the tab never lies? Read [how it works](docs/how-it-works.md).

Install

git clone https://github.com/LiveNL/tmux-claude-status
cd tmux-claude-status
bash install.sh

The installer copies the hook scripts to `~/.claude/hooks/` and merges their wiring into `~/.claude/settings.json` (backs up first, preserves existing hooks).

Requires [tmux](https://github.com/tmux/tmux) ≥ 3.0, [jq](https://stedolan.github.io/jq/), and the [Claude Co