herdr · interactive guide
the agent runtime

Learn Herdr by driving it.

Herdr is a terminal workspace manager for AI coding agents. A background server owns the real terminals, so your agents keep working after you detach — and it reads each pane to tell you which agent is working, blocked, or done. This guide teaches the concept model, then makes you practise the keys until they stick.

step 1 / 6 mouse-first — no keybindings required

What it actually is

Like tmux, it is a multiplexer: a background server holds real terminal processes and clients attach to render them. Panes survive detach, a closed terminal, and a dropped SSH connection. Unlike tmux, it is mouse-first and agent-aware.

server-owned

The terminals live in a background server, not in your terminal window. Close the lid; the work continues.

mouse-first

Panes, tabs, workspaces, split borders and right-click menus are all clickable. Keybindings are optional.

agent-aware

Herdr detects coding agents inside panes and surfaces each one's state so you never hunt for the stuck one.

drivable

A CLI and a local socket API let scripts — and agents themselves — control Herdr programmatically.

Herdr is not tmux. Don't carry over tmux commands, tmux config syntax, or .tmux.conf advice. The model is familiar; the surface is its own.

Install

curl -fsSL https://herdr.dev/install.sh | sh

macOS & Linux. Windows PowerShell: irm https://herdr.dev/install.ps1 | iex — and if endpoint security blocks that fileless command, use the install.cmd route from the docs. Check with herdr --version; update with herdr update.

The six concepts, in order

This is the order the docs teach them in, smallest scope last. Click any rung to expand it.

01Session
A persistent background server namespace.
Running herdr attaches to the default session. Named sessions (herdr session attach work) are fully separate runtime namespaces — most people only ever need the default.
02Workspace
The project-level container — one per repo, task or investigation.
Owns tabs and panes. The sidebar rolls agent states up per workspace, which is how you see across projects at a glance.
03Tab
A layout inside a workspace.
Used to separate views — e.g. agents, logs, server.
04Pane
A real terminal. Splittable right or down.
Survives client detach. This is the thing that actually holds your running process.
05Agent
A process Herdr recognises inside a pane.
States: working, blocked, done, idle, unknown. Shown live in the sidebar.
06Modes
Terminal, prefix, and navigate.
Terminal mode sends keys to the focused pane. Prefix mode (ctrl+b, then one action key) sends a single command to Herdr. Navigate mode is a persistent navigation surface.

Agent states, as the sidebar shows them

herdr — the herd, nobody attached
agents
herdrworking
web-dashboardblocked
data-pipelinedone
exploreidle
pane 1 · claude
❯ refactor the loader
● Reading src/main.rs…
● typecheck clean · 41.2 kB
⠴ working… (13m 36s)

blocked is the state that earns its keep — it means an agent stopped and needs an answer from you, so you don't go pane by pane looking for whoever is waiting.

Your first six steps

Straight from the walkthrough. Tick them off as you go — progress is saved locally.

Already inside a Herdr pane? If HERDR_ENV=1 is set you're attached already — skip step 1. Herdr blocks nested launches by design, so never run herdr from inside a pane.

Stopping things

Detaching leaves everything running — that's the whole point. To actually stop the server and its panes:

herdr server stop

The prefix, and why it exists

A multiplexer sits between your terminal and the programs inside it — and those programs already claim most key combinations. If Herdr grabbed common keys directly it would break them. So it reserves one: press ctrl+b, release, then press an action key. prefix+? lists every active binding live.

Learn these five first

ActionKey
New tabprefix c
Split right / downprefix v / prefix -
Move between panesprefix h j k l
Workspace navigationprefix w
Detach, leave everything runningprefix q

These cover most daily movement. Everything else can stay on the mouse.

The rest, by task

panes

zoom z · close x · swap shift+h/j/k/l · resize mode r · copy mode [

tabs

next/prev n/p · jump 1–9 · rename shift+t · close shift+x

workspaces

new shift+n · rename shift+w · close shift+d · goto picker g · sidebar b

Going prefix-free? Any chord works, but it must survive your OS, your outer terminal, and the program in the pane. The docs mapped ten terminals plus GNOME/KDE and found one family almost untouched everywhere: ctrl+alt. Avoid ctrl+alt+arrows, ctrl+alt+t, ctrl+alt+l, ctrl+alt+a, ctrl+alt+s, ctrl+alt+u and ctrl+alt+f1..f12 — they're already owned.
If a direct chord does nothing, the OS or your terminal ate it before Herdr saw it. That's not a Herdr bug — rebind either side.

Prefix Trainer

A drill for the real keymap. You get a task; press the actual chord. The pane view reacts so you can see what each binding does, not just memorise it. Two-step bindings work exactly like Herdr: arm the prefix, then press the action key.

herdr-trainer terminal mode
score 0 streak 0 best 0 lvl 1

Press Start to begin.

6 levels · mouse-first means you can always skip a chord you don't like
ctrl+b → ?
workspace: herdr · tab 1 · 1 pane
workspaces
herdr
web-dashboard
data-pipeline
pane 1
❯ claude
● waiting for input…
trainer ready — real bindings only, nothing invented.
Click-to-play note: keys are captured by this page while the trainer is running, so ctrl+b won't page your browser. Press Esc to disarm the prefix, same as Herdr.

Config, diagnosis, automation

Config

Herdr works with no config at all. When you want one: ~/.config/herdr/config.toml on Linux/macOS, %APPDATA%\herdr\config.toml on Windows.

herdr --default-config
herdr server reload-config

Sections: [keys] bindings · [theme] themes · [ui] sidebar & UI · [terminal] shell defaults · [update] channel.

When something looks wrong

SymptomFirst move
Agent not detected, or wrong stateherdr agent list
Want to know why it classified a paneherdr agent explain <target> --json
Integration behaviour unclearherdr integration status
Runtime / socket looks offherdr status, status server, status client
A keybinding does nothingOuter terminal or DE owns the chord — rebind either side
Logs. Default session: ~/.config/herdr/ (Linux/macOS) or %APPDATA%\herdr\ (Windows). Named sessions live under sessions/<name>/ inside that directory.
Integrations don't necessarily replace screen detection. Depending on the agent, an integration provides lifecycle state, native session restore, or both. For example herdr integration install claude adds native session restore, while Claude's state still comes from screen detection. Check the support table before assuming.

Two ways to work remotely

ssh then run

SSH to the machine and run herdr there — works like tmux.

thin client

herdr --remote <host> attaches as a local client. Trade-offs are in the how-to-work doc.

Let your agent drive Herdr

Herdr ships a skill file that teaches a coding agent to control Herdr from inside a pane — splitting panes, running commands without stealing focus, reading output, and waiting until another agent is genuinely blocked.

npx skills add herdrdev/herdr --skill herdr -g

For agents with no skill system, add the SKILL.md from the repo to their global custom instructions instead. For scripting, the CLI reference and socket API docs are the surface to read.

Onboarding shortcut. Paste this to any coding agent you already run:
Help me understand and set up Herdr. Read https://herdr.dev/agent-guide.md first, then walk me through it step by step.
Built from herdr.dev/agent-guide.md and the keyboard docs. Every binding and command here is from those pages — none invented. Canonical docs: herdr.dev/docs.