Skip to content

Commit 3ea01aa

Browse files
dem-extra1claude
andauthored
docs(agents): document Herdr (closes #208) (#218)
* start: document Herdr (closes #208) * docs(agents): document Herdr terminal multiplexer for coding agents (closes #208) Herdr overlaps with the lab's existing practice of running many Claude Code sessions in parallel worktrees, so the chapter needs a note on what it adds (agent-status attention queue, session persistence, socket API) and what it does not (sandboxing, file isolation, a stable release). The fragment cites the maintainer docs and two early-adopter write-ups and stamps the volatile figures with the measurement date. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(bib): rebuild references.bib as a clean union after the main sync The union resolver used for the sync dropped the blank line between every pre-existing entry and truncated one entry, which made pandoc reject the file and failed the build. The file is now rebuilt from the two parent versions: main's entries in main's order and formatting, then this branch's new entries appended, validated with pandoc. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
1 parent 7978f48 commit 3ea01aa

4 files changed

Lines changed: 301 additions & 0 deletions

File tree

chapters/ai-tools/herdr.qmd

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
[Herdr](https://herdr.dev/) [@herdr]
2+
is a terminal multiplexer built for running several coding agents at once
3+
(measured 2026-09-09).
4+
It describes itself as "the runtime your coding agents live on":
5+
a background server owns the real terminal processes,
6+
clients attach to render them,
7+
and the server keeps every agent running when the client closes
8+
or an SSH connection drops.
9+
On top of that `tmux`-like core it detects which agent is running in each pane
10+
and reports whether that agent is working, blocked, done, or idle,
11+
so the operator looks only at the pane that needs attention.
12+
13+
#### Maker and activity
14+
15+
Herdr is developed by [`herdrdev`](https://github.com/herdrdev/herdr) [@herdr_github],
16+
a one-person company founded in 2026 by Can Celik in Ankara, Turkey,
17+
and part of the Y Combinator Fall 2026 batch [@herdr_yc].
18+
The project is written in Rust and licensed under Apache 2.0.
19+
The GitHub repository was created on 2026-03-27
20+
and had about 37,000 stars, 2,700 forks, and 326 open issues on 2026-09-09,
21+
with the most recent commit the day before;
22+
the latest stable release was v0.9.0 on 2026-09-07,
23+
following v0.8.2 (2026-08-19) and v0.8.0 (2026-08-03) [@herdr_github].
24+
A Show HN thread drew 166 points and 110 comments [@herdr_hn],
25+
and a community-maintained list of plugins and integrations
26+
has grown around the tool [@awesome_herdr].
27+
The software is pre-1.0 and changes quickly,
28+
so expect some of what follows to be out of date.
29+
30+
#### What it does
31+
32+
Herdr organizes terminals into a hierarchy of
33+
sessions, workspaces, tabs, and panes [@herdr_concepts].
34+
A pane is a real terminal (a PTY) that the server owns;
35+
a workspace groups the tabs and panes for one repository, task, or investigation.
36+
The distinctive features, beyond ordinary multiplexing, are:
37+
38+
- **Agent status detection**:
39+
Herdr recognizes 21 coding agents out of the box,
40+
including Claude Code, Codex, Cursor Agent CLI, OpenCode, GitHub Copilot CLI,
41+
Hermes Agent, Pi, Amp, Grok CLI, Antigravity CLI, and Kiro CLI,
42+
with Gemini CLI and Cline detected but less thoroughly tested [@herdr_agents].
43+
Where an agent ships lifecycle hooks, the hook reports state authoritatively;
44+
otherwise Herdr matches the bottom of the live terminal buffer
45+
against a TOML detection manifest,
46+
and marks a pane `blocked` only when that snapshot matches
47+
a known approval, question, or permission prompt.
48+
- **Git worktree management**:
49+
the socket API exposes `worktree.list`, `worktree.create`, `worktree.open`,
50+
and `worktree.remove`,
51+
which "manage Git checkouts as Herdr workspaces" [@herdr_socket_api].
52+
Creating a worktree checks out (or creates) a branch
53+
and opens the checkout as a new workspace grouped under the source workspace;
54+
the CLI form is `herdr worktree create --branch <name>` [@flaviocopes_herdr].
55+
- **A CLI and socket API for agents to drive**:
56+
the two are "the same surface agents drive",
57+
speaking newline-delimited JSON over a Unix socket
58+
(a named pipe on Windows) at `~/.config/herdr/herdr.sock`.
59+
Methods include `pane.read` to read a pane's recent output,
60+
`agent.prompt` to send a prompt,
61+
and `agent.wait` to block until another agent reaches `done` or `blocked`
62+
rather than polling [@herdr_socket_api].
63+
- **Persistence and resume**:
64+
detaching with `ctrl+b q` leaves every process running;
65+
a server restart stops processes but restores workspaces, tabs, panes,
66+
working directories, and layout from a `session.json` snapshot,
67+
and supported agents can resume their own conversation
68+
(for example `claude --resume <id>`) from a saved session reference [@herdr_session_state].
69+
- **Remote machines**:
70+
`herdr machine add <ssh-host>` registers a machine reachable over ordinary SSH,
71+
installs or starts the Herdr server there, and folds its agents
72+
into one combined agent list;
73+
authentication stays with OpenSSH,
74+
and Herdr stores no keys or passwords [@herdr_machines].
75+
Remote servers must run Linux or macOS;
76+
a native Windows server is not supported as an SSH target.
77+
78+
#### Install and use
79+
80+
Herdr ships stable binaries for Linux, macOS, and Windows x86_64 [@herdr_install].
81+
The one-line installers are:
82+
83+
```bash
84+
curl -fsSL https://herdr.dev/install.sh | sh
85+
```
86+
87+
```powershell
88+
powershell -ExecutionPolicy Bypass -c "irm https://herdr.dev/install.ps1 | iex"
89+
```
90+
91+
Homebrew (`brew install herdr`), `mise`, and Nix are also supported.
92+
Run `herdr` to start the server and attach a client,
93+
`herdr agent list` to see detected agents and their states,
94+
`herdr status` to summarize the runtime,
95+
and `herdr update` to upgrade.
96+
The default prefix key is `ctrl+b`, as in `tmux`,
97+
and the configuration file lives at `~/.config/herdr/config.toml`
98+
(`%APPDATA%\herdr\config.toml` on Windows) [@herdr_agent_guide].
99+
The maintainers publish an
100+
[agent guide](https://herdr.dev/agent-guide.md) [@herdr_agent_guide]
101+
meant to be handed to a coding agent so it can set Herdr up for you.
102+
103+
#### Pricing and license
104+
105+
The runtime is free and open source under the Apache 2.0 license.
106+
The landing page announces a paid "Herdr Cloud" as "coming soon",
107+
described as connecting your own machines without configuring SSH,
108+
with a waitlist and no published pricing (measured 2026-09-09) [@herdr].
109+
110+
#### Useful to us?
111+
112+
Herdr overlaps with two things the lab already does
113+
(@sec-orch-baseline):
114+
running several Claude Code sessions in parallel,
115+
and isolating each one in its own git worktree.
116+
It does not replace either.
117+
Herdr runs the same agent CLIs unchanged,
118+
and its worktree commands wrap the same `git worktree` calls
119+
that Claude Code's own worktree isolation makes.
120+
What it adds is the layer between those sessions and the person watching them:
121+
122+
- **An attention queue instead of a wall of terminals.**
123+
When a dozen sessions run at once,
124+
the expensive part is finding the one waiting on a permission prompt.
125+
The blocked, working, and done states Herdr aggregates across every workspace
126+
and every machine answer that question at a glance,
127+
which is the gap one early adopter reported it filling
128+
when herding parallel agents on a remote box [@coles_herdr].
129+
- **Sessions that survive a closed laptop.**
130+
Long runs of the lab's review-and-iterate loop
131+
currently die with the terminal that started them
132+
unless they are already running on a server under `tmux`.
133+
Herdr gives the same persistence with a friendlier client,
134+
and can reattach to a Claude Code conversation by session ID after a restart.
135+
- **A machine-readable control surface.**
136+
`agent.wait` and `pane.read` let a supervising agent
137+
spawn helpers in separate worktrees, wait until each is done or blocked,
138+
and read their output,
139+
without the polling loops our current scheduled check-ins use.
140+
141+
The same early adopters name the limits [@coles_herdr; @flaviocopes_herdr].
142+
Herdr provides no sandboxing and does not isolate file changes
143+
between agents sharing a directory;
144+
worktrees, permissions, and network egress remain the user's problem,
145+
so our hooks and permission rules stay in place unchanged.
146+
Windows support is in beta,
147+
a Windows machine cannot serve as a remote target,
148+
and the tool is pre-1.0.
149+
It also sits beside, not inside, the editor-hosted session views
150+
described in @sec-ai-vscode-agent-sessions:
151+
VS Code discovers CLI sessions and hands work between harnesses,
152+
while Herdr owns the terminals those sessions run in.
153+
154+
The practical recommendation is to try Herdr on a Linux workstation or server
155+
where a lab member already runs several Claude Code sessions,
156+
using one workspace per worktree.
157+
It is a small, reversible addition
158+
(no wrapper around the agent, no change to `ai-config`),
159+
and the status sidebar alone may justify it.
160+
Adopting the socket API as an orchestration layer is a larger step
161+
that we should defer until the project reaches a stable release.

chapters/coding-agents.qmd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,10 @@ to [help you code](https://en.wikipedia.org/wiki/AI-assisted_software_developmen
213213

214214
{{< include ai-tools/vscode-agent-sessions.qmd >}}
215215

216+
# Herdr: A Terminal Multiplexer for Coding Agents {#sec-ai-herdr}
217+
218+
{{< include ai-tools/herdr.qmd >}}
219+
216220
# Installing Claude Code on Windows {#sec-ai-claude-code-windows}
217221

218222
{{< include ai-tools/installing-claude-code-windows.qmd >}}

inst/WORDLIST

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ CLI
4040
CLI's
4141
CS336
4242
CUDA
43+
Celik
4344
Celonis
4445
ChatGPT
4546
ChatGPTCoding
@@ -56,6 +57,7 @@ Codespaces
5657
Codestral
5758
Codestral's
5859
Codex
60+
Combinator
5961
Composability
6062
Composio
6163
Conchords
@@ -116,13 +118,15 @@ Grok
116118
GummySearch
117119
HIPAA
118120
HKUDS
121+
HN
119122
HPC
120123
HTTPS
121124
HUD
122125
Handoff
123126
Helicone
124127
Hephaestus
125128
Herbert
129+
Herdr
126130
Hermes
127131
Homebrew
128132
Hoyeon
@@ -222,13 +226,15 @@ OpenHands
222226
OpenHarness
223227
OpenID
224228
OpenRouter
229+
OpenSSH
225230
PATs
226231
PBC
227232
PEFT
228233
PID
229234
PR's
230235
PRMs
231236
PRs
237+
PTY
232238
Pandoc
233239
Parquet
234240
Pipedream
@@ -289,6 +295,7 @@ Stanford
289295
SuperGrok
290296
Supermemory
291297
SymPy
298+
TOML
292299
TORQCLAW
293300
TTY
294301
TUI
@@ -591,6 +598,7 @@ usefulai
591598
vLLM
592599
versionable
593600
vibecoding
601+
waitlist
594602
wakeup
595603
wakeup's
596604
walkthrough

references.bib

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,3 +1267,131 @@ @misc{devin_docs
12671267
url = {https://docs.devin.ai/get-started/devin-intro},
12681268
note = {Accessed 2026-09-09}
12691269
}
1270+
1271+
@misc{herdr,
1272+
title = {Herdr: the runtime coding agents run on},
1273+
author = {{herdrdev}},
1274+
year = {2026},
1275+
howpublished = {Website},
1276+
url = {https://herdr.dev/},
1277+
note = {Accessed 2026-09-09}
1278+
}
1279+
1280+
@misc{herdr_github,
1281+
title = {herdrdev/herdr: the runtime your coding agents live on},
1282+
author = {{herdrdev}},
1283+
year = {2026},
1284+
howpublished = {GitHub repository},
1285+
url = {https://github.com/herdrdev/herdr},
1286+
note = {Apache 2.0 License. Accessed 2026-09-09}
1287+
}
1288+
1289+
@misc{herdr_yc,
1290+
title = {herdr: building the open agent runtime},
1291+
author = {{Y Combinator}},
1292+
year = {2026},
1293+
howpublished = {Company profile},
1294+
url = {https://www.ycombinator.com/companies/herdr},
1295+
note = {Accessed 2026-09-09}
1296+
}
1297+
1298+
@misc{herdr_agents,
1299+
title = {Agents},
1300+
author = {{herdrdev}},
1301+
year = {2026},
1302+
howpublished = {Herdr documentation},
1303+
url = {https://herdr.dev/docs/agents/},
1304+
note = {Accessed 2026-09-09}
1305+
}
1306+
1307+
@misc{herdr_concepts,
1308+
title = {Concepts and keybindings},
1309+
author = {{herdrdev}},
1310+
year = {2026},
1311+
howpublished = {Herdr documentation},
1312+
url = {https://herdr.dev/docs/concepts/},
1313+
note = {Accessed 2026-09-09}
1314+
}
1315+
1316+
@misc{herdr_socket_api,
1317+
title = {Socket API},
1318+
author = {{herdrdev}},
1319+
year = {2026},
1320+
howpublished = {Herdr documentation},
1321+
url = {https://herdr.dev/docs/socket-api/},
1322+
note = {Accessed 2026-09-09}
1323+
}
1324+
1325+
@misc{herdr_session_state,
1326+
title = {Session state},
1327+
author = {{herdrdev}},
1328+
year = {2026},
1329+
howpublished = {Herdr documentation},
1330+
url = {https://herdr.dev/docs/session-state/},
1331+
note = {Accessed 2026-09-09}
1332+
}
1333+
1334+
@misc{herdr_machines,
1335+
title = {Connecting machines},
1336+
author = {{herdrdev}},
1337+
year = {2026},
1338+
howpublished = {Herdr documentation},
1339+
url = {https://herdr.dev/docs/connecting-machines/},
1340+
note = {Accessed 2026-09-09}
1341+
}
1342+
1343+
@misc{herdr_install,
1344+
title = {Install Herdr},
1345+
author = {{herdrdev}},
1346+
year = {2026},
1347+
howpublished = {Herdr documentation},
1348+
url = {https://herdr.dev/docs/install/},
1349+
note = {Accessed 2026-09-09}
1350+
}
1351+
1352+
@misc{herdr_agent_guide,
1353+
title = {Herdr agent guide},
1354+
author = {{herdrdev}},
1355+
year = {2026},
1356+
howpublished = {Herdr documentation},
1357+
url = {https://herdr.dev/agent-guide.md},
1358+
note = {Accessed 2026-09-09}
1359+
}
1360+
1361+
@misc{herdr_hn,
1362+
title = {Herdr: Agent multiplexer that lives in your terminal},
1363+
author = {{Hacker News}},
1364+
year = {2026},
1365+
howpublished = {Show HN discussion thread},
1366+
url = {https://news.ycombinator.com/item?id=48714802},
1367+
note = {Accessed 2026-09-09}
1368+
}
1369+
1370+
@misc{awesome_herdr,
1371+
title = {awesome-herdr: A curated guide to the Herdr ecosystem},
1372+
author = {Konur, Yigit},
1373+
year = {2026},
1374+
howpublished = {GitHub repository},
1375+
url = {https://github.com/yigitkonur/awesome-herdr},
1376+
note = {Accessed 2026-09-09}
1377+
}
1378+
1379+
@misc{coles_herdr,
1380+
title = {Herding parallel agents on a remote box with herdr},
1381+
author = {Coles, Matt},
1382+
year = {2026},
1383+
month = jun,
1384+
howpublished = {Blog post},
1385+
url = {https://coles.codes/posts/herding-agents-with-herdr/},
1386+
note = {Accessed 2026-09-09}
1387+
}
1388+
1389+
@misc{flaviocopes_herdr,
1390+
title = {A deep dive into Herdr},
1391+
author = {Copes, Flavio},
1392+
year = {2026},
1393+
month = aug,
1394+
howpublished = {Blog post},
1395+
url = {https://flaviocopes.com/herdr/},
1396+
note = {Accessed 2026-09-09}
1397+
}

0 commit comments

Comments
 (0)