herdr

A background server that owns your agents' terminals, and knows which one is blocked.

herdr is a terminal workspace manager written in Rust, in the tmux lineage: a background server owns real PTYs, clients attach and detach, and the processes keep running in between. What it adds on top is agent awareness — it identifies which panes are running coding agents and classifies each one as working, blocked, done or idle, then rolls that state up to tabs and workspaces so you can jump to the one that needs a decision. Agents can drive it themselves through a CLI and a local socket API, including `herdr agent wait --until blocked` to wait on a sibling. It runs inside whatever terminal you already use rather than replacing it.

This is not a decision you make on day one. It becomes relevant at the point where you are running more than one agent at a time and cannot tell, without reading each pane, which one finished and which one has been sitting on a permission prompt since before lunch. A multiplexer keeps the terminals alive but has no idea what is inside them. That one gap is the entire case — which also means that if you run one agent at a time, a terminal tab is still enough.

Our take

Worth installing at the point where you run more than one agent at a time, because that is the point where a multiplexer stops being enough: tmux can tell you a pane went quiet, but not whether it went quiet because it finished or because it is waiting for your approval. herdr's whole value is that one distinction. Read the supported-agents table before you assume it applies to you, though — for Claude Code, Codex and Cursor Agent CLI, state is inferred by matching rules against the visible screen, and only agents with lifecycle hooks or plugins report it authoritatively.

Last checked 2026-09-10

Best for

  • Running several coding agents in parallel and needing to know which one is waiting
  • Long agent runs on a remote box you SSH into and disconnect from
  • Scripted or agent-driven workflows that need to wait on another agent's state

Limitations

  • For most agents, blocked is matched against the visible screen, so a UI change can misclassify it
  • A server restart kills the pane processes; only layout, and conversations for supported agents, come back
  • Pane scrollback is not saved across a restart unless you enable it, because output can contain secrets
  • Pre-1.0 and moving fast; configuration and API surface are still changing

When to pick something else

  • People running one agent at a time, where a terminal tab is already enough
  • Setups that must not add a background daemon holding every terminal
  • Anyone who wants their agent state to come from the agent, not from screen matching

Key features

  • Background server owns the PTYs; detaching or losing SSH does not stop the work
  • Semantic agent state per pane — working, blocked, done, idle — rolled up to workspaces
  • CLI and socket API so agents can split panes, read output and wait on each other
  • Native session resume after a server restart for agents that report a session id
  • Runs inside your existing terminal; single Rust binary, no Electron

herdr alternatives

If herdr is not the right fit, these solve similar problems.

herdr alternatives →