Herdr: one terminal for the whole herd
Agent multiplexer · a binary, not an app
One terminal. The whole herd.
Run all your coding agents from one terminal, on any<br>box, even over ssh. Each runs in its own real terminal,<br>on a server that keeps it alive when you close the<br>laptop. See<br>blocked,<br>working, and<br>done at a glance, and<br>reattach from your phone.
Quick start<br>Read the docs
Stable install<br>Script<br>Homebrew<br>Nix flake
curl -fsSL https://herdr.dev/install.sh | sh<br>Copy
Windows beta · preview only<br>Preview docs
PS><br>irm https://herdr.dev/install.ps1 | iex<br>Copy
Stable Linux/macOS · Windows preview beta · no Electron, no account, no telemetry
spaces
herdr master
llm-proxy master
qmp autoresearch/qmp-ra…
agentsall
herdr working · claude
✓explore idle · opencode
◉llm-proxy blocked · claude
●qmp done · codex
opencodeherdr+
✻ Claude Code v2.1.168
~/Projects/herdr · master
❯ the sidebar flickers when an agent flips state fast
● Found it. The rollup recomputes on every PTY chunk, so a double state flip repaints the dot mid-frame.
● Plan:
· src/app/state.rs — buffer state events per tick
· src/ui/sidebar.rs — repaint rollups once per frame
❯ go, and add a regression test
⠋ Working… (13m 36s · esc to interrupt)
~/Projects/herdr > master > ctx ─── 3% 34k/1M
>> bypass permissions on (shift+tab to cycle)
~/Projects/herdr master
❯ bun run dev
$ node scripts/prepare-docs.mjs && astro dev
02:10:44 [types] Generated 0ms
02:10:44 [content] Synced content
astro v5.18.1 ready in 668 ms
┃ Local http://localhost:4321/
Network use --host to expose
02:10:44 watching for file changes...
+ Thought: 468ms
→ Read src/main.rs
+ Thought: 292ms
This is src/main.rs — the entry point for herdr . Here's what it does:
1. Arg parsing — session::configure_from_args, then remote args for the SSH bridge.
2. Subcommand dispatch — server, client, update — each returns early.
3. Session mode — auto_detect_launch() connects to a running server or spawns one.
Build · MiMo V2.5 Free · 16.6s
Build · MiMo V2.5 Free OpenCode Zen
25.2K (13%) ctrl+p commands
migratelogs+
✻ Claude Code v2.1.168
~/Projects/llm-proxy · master
❯ prep the request-log migration and run it
● Wrote migrations/0007_request_log.sql — request_log table, retention index on created_at, daily rollup view.
● Local checks pass: sqlx prepare is clean, backfill dry-run touches 41,209 rows. Ready to apply.
Bash command
cargo sqlx migrate run
Apply pending database migrations
Do you want to proceed?
❯ 1. Yes
2. No, and tell Claude what to do differently (esc)
~/Projects/llm-proxy master
❯ tail -f logs/proxy.log
02:30:58 INFO request id=4818 route=/v1/messages 200 312ms
02:31:04 INFO request id=4819 route=/v1/messages 200 287ms
02:31:09 DEBUG cache hit ratio 0.93
02:31:12 INFO request id=4820 route=/v1/messages 200 301ms
02:31:15 WARN upstream latency p99 1.8s
02:31:18 INFO request id=4821 route=/v1/messages 200 295ms
02:31:21 WARN 429 from upstream, retrying in 2s
02:31:24 INFO request id=4822 route=/v1/messages 200 1102ms
02:31:30 DEBUG cache hit ratio 0.94
02:31:33 INFO request id=4823 route=/v1/embeddings 200 88ms
codexserver+
• Explored
└ Read live_handoff.rs
• Ran
└ cargo nextest run -E 'test(live_handoff)'
└ 14 passed · 0 failed · 41.3s
• The handoff suite passes. Pane PTYs survive server replacement, and long-lived workloads — including the http.server in the next tab — keep responding afterward.
• Next I can wire the soak test into nightly CI and fail on p95 regressions. Want that?
gpt-5.5 medium · ~/qmp · master · Context 6% used
~/qmp master
❯ python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 ...
02:28:41 "GET /runs/latest.json" 200
02:29:03 "GET /runs/latest.json" 200
02:29:25 "GET /qmp/report.html" 200
02:30:07 "GET /runs/latest.json" 200
02:30:18 "GET /favicon.ico" 404
02:30:42 "GET /qmp/report.html" 200
02:31:09 "GET /runs/latest.json" 200
The whole herd in one terminal. Click the sidebar, it's a real layout.
# used in the wild
Popular with engineers from
JetBrains
Docker
Vercel
Kimi
Sentry
NVIDIA
AWS
ByteDance
Tencent
Alibaba
Salesforce
IBM
Atlassian
Whop
Automattic
JetBrains
Docker
Vercel
Kimi
Sentry
NVIDIA
AWS
ByteDance
Tencent
Alibaba
Salesforce
IBM
Atlassian
Whop
Automattic
# why herdr
Run agents where the work is. Attach from anywhere.
Agents run wherever the work is: a server, a Mac Mini,<br>a sandbox VM, anywhere you can ssh. You attach from any<br>terminal, even a phone. Desktop agent managers can't<br>leave the machine with the GUI. Herdr can.<br>Why switch from an app →
local<br>Your machine
Split panes, create tabs, and keep agents running<br>while your terminal comes and goes.
$ herdr
over ssh<br>Like tmux, on the server
SSH in and run Herdr on the remote shell. The session<br>stays after you detach, ideal from a phone SSH client.
$ ssh you@server<br>$ herdr
thin client<br>Native remote attach
A local client to a remote session. Installs...