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.
Install
Section titled “Install”brew install herdrherdr 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:
herdr serverFor an always-on box, run it under Homebrew services so it comes back after a reboot:
brew services start herdrEither 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.
Everyday usage
Section titled “Everyday usage”herdr # launch or attach to the persistent sessionherdr status # client and server versions, socket, healthherdr session list # named persistent sessionsherdr agent list # every agent, its state, cwd and paneherdr --remote <ssh-target> # attach to a herdr server on another boxThe interesting half is scripting. Panes and agents are addressable, so you can inspect or drive them without attaching:
herdr pane listherdr pane read <pane-id>herdr pane send-text <pane-id> "bun test"herdr pane send-keys <pane-id> Enterherdr agent prompt <target> "summarise what you changed" --wait --until idleherdr 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.
Config
Section titled “Config”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.
Related
Section titled “Related”- Local setup for the machine this sits on top of.
- Claude Code for what actually runs inside the panes.