Herdr: One terminal for he whole herd

rldjbpin1 pts0 comments

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

Google

NVIDIA

AWS

ByteDance

Tencent

Alibaba

Salesforce

IBM

Atlassian

Whop

Automattic

JetBrains

Docker

Vercel

Kimi

Sentry

Google

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...

herdr server master terminal from request

Related Articles