tap

Agent-aware tmux pane picker with live coding-agent status

View the Project on GitHub ahmedelgabri/tmux-agent-panel

tap — Tmux Agent Panel

An agent-aware tmux pane picker. tap lists every pane across all your tmux sessions in an fzf popup and shows, live, what your coding agents (Claude Code, Codex, pi) are doing in each of them: blocked on a permission request, waiting for your input, running, or idle — and what they’re working on. Blocked agents sort first, so the pane that needs you is always at the top.

The tap picker: agent panes with live state glyphs sorted first, plain panes below

fzf is embedded as a Go library, so the only runtime dependency is tmux itself.

Features

Quick Start

# Homebrew
brew install ahmedelgabri/tap/tmux-agent-panel

# mise
mise use github:ahmedelgabri/tmux-agent-panel

# Nix Flakes
nix run github:ahmedelgabri/tmux-agent-panel

# Or build from source
go build -o tap ./cmd/tap/

Wire the agent hooks and verify:

tap install
tap doctor

Or wire them through each agent’s own package manager instead — the repo doubles as a plugin/package for all three:

# Claude Code
/plugin marketplace add ahmedelgabri/tmux-agent-panel
/plugin install tap@tmux-agent-panel

# Codex (consumes Claude-compatible plugin marketplaces)
codex plugin marketplace add https://github.com/ahmedelgabri/tmux-agent-panel
codex plugin add tap-codex@tmux-agent-panel

# pi (the repo is the pi-tmux-agent-panel package)
pi install https://github.com/ahmedelgabri/tmux-agent-panel

Open the picker from any shell inside tmux:

tap pick

Bind it to a key, e.g. a zsh widget on C-Space:

if [[ -n ${TMUX-} ]]; then
  tap-widget() { tap pick; zle reset-prompt }
  zle -N tap-widget
  bindkey '^@' tap-widget
fi

How it works

Agents report state into pane-scoped tmux user options (@agent_state, @agent_task) through hooks that invoke tap state — the single writer of the protocol across all three agents. Hooks run as children of the agent process, so $TMUX_PANE identifies the right pane. Which agent a pane runs is never stored — the picker derives it from the pane’s current command.

Agent Integration States
Claude Code hook entries in ~/.claude/settings.json running / idle / waiting / blocked
Codex hook entries in ~/.codex/hooks.json running / idle / blocked; task from prompt
pi extension dropped into pi’s extensions dir running / idle; task from prompt

See the README for the full documentation.

License

MIT © Ahmed El Gabri