back to projects

tmux process list & agent alerts

something i built and integrated into my dotfiles: one fzf picker over every running and finished command across my tmux sessions (allows me to jump to it, kill it, or rerun it), plus per-agent and exit-code alerts that surface on the status bar and clear when i switch back.

tmux process list & agent alerts

stack

ShellShelltmuxtmuxfzffzf

about

something i wanted to showcase from my dotfiles

a process list and alert system built on plain tmux and zsh, a single fzf switcher over every command i’m watching across my sessions: running tests, builds, and servers show as live rows with elapsed time, finished ones as pass/fail/stopped icons. from the picker i’m able to jump to a process’s window, interrupt a running one or dismiss a finished one, or rerun a finished command, either staging or running it straight away.

it’s all powered by one central layer, an alerts system. a zsh precmd hook flags any command that finishes in a pane which no client is currently viewing, highlighting the window tab green or red and showing a pass/fail icon on the status bar for other sessions. coding agents hook into it the same way: when Claude Code, Codex, or Copilot stops and waits for input, a thin per-agent wrapper raises a status-bar icon; OpenCode, which exposes no shell hooks, only a plugin API, feeds the same alerts through a plugin i published separately. alerts clear automatically upon switching back to the window, and adding a new agent is just another pair of wrapper scripts.

the same picker pattern runs across the rest of my setup: per-agent and per-editor switchers list every running neovim, Claude, Codex, OpenCode or Copilot instance across my tmux sessions, so i can jump straight to one, spawn a new one in place, or kill it without leaving the keyboard. the process list, the alerts, and these pickers all stem from the same core idea; the ability to, in one keystroke, see everything i’ve got running and be able to act on it.

features

  • process list: one fzf switcher merging running and finished commands across all sessions into a single picker
  • live ● rows with elapsed time for running tests, builds, and servers; ✓/✗/⊘ rows for finished commands (pass, fail, or signal-stopped)
  • jump to any process window, interrupt a running process, dismiss a finished one, or rerun it (stage on the origin prompt to edit, or stage and run)
  • instance pickers: per-agent and per-editor fzf switchers listing every running Claude, Codex, OpenCode, Copilot, or nvim across all sessions; jump to one, spawn a new one, or kill it in place
  • per-agent status-bar icons for Claude, Codex, OpenCode, and Copilot when an agent waits for input
  • command exit-code alerts: pass/fail icons and window-tab colours for long commands that finish while you're away
  • zsh preexec/precmd hooks with zero overhead on the command itself; a per-pane registry tracks running commands, a finished-history file feeds completed ones
  • alerts and finished rows clear automatically when you switch back to the window
  • built on plain shell, zsh, tmux, and fzf primitives, no daemons or dependencies