Skip to content

herdr

Once you run more than one coding agent at a time, the terminal stops being the constraint and window management does. Two agents is fine. Five is a wall of tabs where you cannot tell which one is waiting on you, which one is grinding, and which one finished ten minutes ago while you were reading something else. You end up cycling tabs just to check.

herdr is an agent multiplexer: a single terminal workspace where each agent gets a pane, a background server keeps every session alive whether or not a terminal is attached, and a CLI can read from and write to any pane without you touching a keyboard. Think tmux, but built around the fact that the thing in the pane is an agent with a lifecycle rather than a shell you are typing into.

Three properties do most of the work:

  • A pane per agent, laid out at once. You see the whole herd rather than the one tab you happen to be on. herdr tracks each agent’s state (idle, working, blocked, done) so “which of these needs me” is a glance, not an audit.
  • A server that outlives your terminal. Agents run in real PTYs owned by a background process. Close the terminal, reboot your terminal emulator, ssh in from elsewhere: the work carries on and you reattach to it.
  • Panes you can drive from code. Because the server exposes a socket API, you can send text or keys to a pane, read its output, or submit a prompt to an agent from a script. Agents can orchestrate other agents.

Any terminal agent works in a pane. herdr additionally ships integrations for Claude Code, Codex, OpenCode, Cursor, Copilot and others, which is what feeds it accurate state rather than guessing from output.

Terminal window
brew install herdr

herdr is a single binary (AGPL-3.0), no Electron and no account. The server can run in the foreground when you want to see it, which is also the simplest way to try it:

Terminal window
herdr server

For an always-on box, run it under Homebrew services so it comes back after a reboot:

Terminal window
brew services start herdr

Either way, herdr on its own launches or attaches to the persistent session, and herdr status tells you what the client and server think is going on.

Terminal window
herdr # launch or attach to the persistent session
herdr status # client and server versions, socket, health
herdr session list # named persistent sessions
herdr agent list # every agent, its state, cwd and pane
herdr --remote <ssh-target> # attach to a herdr server on another box

The interesting half is scripting. Panes and agents are addressable, so you can inspect or drive them without attaching:

Terminal window
herdr pane list
herdr pane read <pane-id>
herdr pane send-text <pane-id> "bun test"
herdr pane send-keys <pane-id> Enter
herdr agent prompt <target> "summarise what you changed" --wait --until idle

herdr worktree create opens a Git worktree as its own workspace, which is the usual way to give two agents the same repo without them fighting over the same checkout.

Configuration lives at ~/.config/herdr/config.toml, covering keybindings (including the prefix key), sidebar sizing and agent panel behaviour. herdr --default-config prints the defaults to crib from, and herdr server reload-config applies changes to a running server without restarting it.