claudeers.

🔓 unclaimed — this page was auto-generated from GitHub. Are you the creator?

Claim this page →
// Automation & Workflows

tmux-agent-state

See which AI coding agent needs you — right in your tmux tab bar. A colored dot per window (working/blocked/idle) with off-screen sound alerts. Works with op…

Actively maintained
99/100
last commit 7 days ago
last release none
releases 0
open issues 2
// install
git clone https://github.com/Gentleman-Programming/tmux-agent-state

tmux-agent-state

Know which AI agent needs you — without leaving your tab bar.

Run agents across tmux windows and a colored dot tells you each one's state at a glance. A sound fires only when an agent you're not watching gets blocked or finishes. No more cycling through panes to check who's stuck.

  ● 1 api      ● 2 claude      3 notes
  └ working    └ blocked       └ idle
  (orange)     (red, beeps)    (no dot)

Works with opencode, pi, Claude Code, and Codex — one shared core, each agent opt-in.


Quick path

git clone https://github.com/Gentleman-Programming/tmux-agent-state.git
cd tmux-agent-state
./install.sh --all          # core + every agent you have installed

Then open a fresh tmux (or tmux source-file ~/.config/tmux/tmux.conf) and restart your agents. That's it.

Want only some agents? Pick them explicitly:

./install.sh --with-opencode --with-claude

What the dots mean

DotStateMeaningAlert when off-screen
🟠 orangeworkingagent is churning
🔴 redblockedwaiting on YOU (permission / question)sound + flash
(none)idledone, or not runningsound on finish

The window dot always shows its worst pane: blocked > working > idle. You only get alerted on a real state change, and never for the pane you're already looking at.


Supported agents

AgentFlagWhere it installs
opencode--with-opencode~/.config/opencode/plugins/
pi--with-pi~/.pi/agent/extensions/
Claude Code--with-claudemerges hooks into ~/.claude/settings.json
Codex--with-codexmerges hooks into ~/.codex/hooks.json
all detected--allevery agent whose config dir exists

Adapters are opt-in. The installer never touches a tool you didn't ask for. The Claude/Codex hook merge is append-only and idempotent — it adds one hook without clobbering anything you already configured.


How it works

Every agent emits a different event dialect. Instead of teaching tmux about each one, each agent gets a thin adapter that normalizes its native events into a single canonical vocabulary — working / blocked / idle — and calls one core script:

opencode ┐
pi       ├──▶  agent-report.sh  ──▶  tmux (per-tab dot · rollup · alert)
claude   │
codex    ┘

tmux only ever sees the core — it never knows which agent ran. Add a new agent by writing one adapter; nothing downstream changes. (This is an anti-corruption layer.)

The core pieces
  • agent-report.sh — the normalization core. Maps a canonical state onto the pane, rolls the worst state up to the window, and alerts only on a transition into an attention state while the pane is off-screen.
  • agent-status.sh — the self-heal. Clears a stuck blocked on every pane of the window you're viewing (a window's panes are all on-screen, so a blocked background pane gets healed too). No event fires when a prompt is cancelled, so the state would otherwise stick forever. It runs both as a silent status-right heartbeat AND on tmux navigation hooks (after-select-window, after-select-pane, pane-focus-in, client-session-changed) so it fires the instant you go look — even if your theme clobbers status-right.
  • agent-statusline.sh — idempotently prepends the heartbeat to status-right, re-applied on client-attached because TPM themes set status-right asynchronously and would otherwise clobber the prepend.
  • agents.conf — the display layer: per-tab dot, status interval, navigation hooks, visual bell. Sourced last so it extends your theme's tab format instead of overwriting it.

Configuration

Env varDefault (macOS / Linux)Effect
AGENT_SOUND_BLOCKEDFunk.aiff / dialog-warning.ogasound when an agent gets blocked
AGENT_SOUND_IDLEGlass.aiff / complete.ogasound when a busy agent finishes
HERDR_ENV=1disables every adapter

Dot colors live in agents.conf (kanagawa palette: #e82424 blocked, #dca561 working). Using another theme? Edit the hex values.


Requirements

tmux · jq · python3 · bash

Sound is best-effort and optional: macOS uses afplay; Linux falls back to paplaycanberra-gtk-playaplay, whichever exists. No player, no sound — nothing breaks.


Uninstall

./uninstall.sh

Removes the core, the source line, and the opencode/pi adapter files. Claude/Codex hooks are stripped by name — anything else you configured stays untouched.


License

MIT — see LICENSE.

// compatibility

Platformscli, api
Operating systems
AI compatibilityclaude
LicenseMIT
Pricingopen-source
LanguageShell

// faq

What is tmux-agent-state?

See which AI coding agent needs you — right in your tmux tab bar. A colored dot per window (working/blocked/idle) with off-screen sound alerts. Works with opencode, pi, Claude Code & Codex.. It is open-source on GitHub.

Is tmux-agent-state free to use?

tmux-agent-state is open-source under the MIT license, so it is free to use.

What category does tmux-agent-state belong to?

tmux-agent-state is listed under devtools in the Claudeers registry of Claude-compatible tools.

0 views
39 stars
unclaimed
updated 15 days ago

// embed badge

tmux-agent-state on Claudeers
[![Claudeers](https://claudeers.com/api/badge/tmux-agent-state.svg)](https://claudeers.com/tmux-agent-state)

// retro hit counter

tmux-agent-state hit counter
[![Hits](https://claudeers.com/api/counter/tmux-agent-state.svg)](https://claudeers.com/tmux-agent-state)

// reviews

// guestbook

0/500

// related in Automation & Workflows

🔓

The agent that grows with you

// automationNousResearch/Python208,716MIT[ claude ]
🔓

The API to search, scrape, and interact with the web at scale. 🔥

// automationfirecrawl/TypeScript143,720AGPL-3.0[ claude ]
🔓

🌐 Make websites accessible for AI agents. Automate tasks online with ease.

// automationbrowser-use/Python102,507MIT[ claude ]
🔓

An open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message…

// automationbytedance/Python76,016MIT[ claude ]
→ see how tmux-agent-state connects across the ecosystem