diff --git a/website/css/site.css b/website/css/site.css index 44a63e1a..07363b15 100644 --- a/website/css/site.css +++ b/website/css/site.css @@ -787,6 +787,47 @@ body.site .toc a { body.site .toc a:hover { color: var(--ink); } body.site .toc a[aria-current] { color: var(--spot); border-left-color: var(--spot); } +body.site .cmp { padding: 40px var(--gut) 46px; border-bottom: 1px solid var(--line2); } +body.site .cmp-scroll { overflow-x: auto; } +body.site .cmp table { + width: 100%; min-width: 940px; border-collapse: collapse; + font-family: var(--mono); font-size: 12.5px; line-height: 1.6; +} +body.site .cmp th, body.site .cmp td { + text-align: left; vertical-align: top; padding: 12px 14px; + border: 1px solid var(--line); color: var(--dim); font-weight: 400; + background: none; +} +body.site .cmp thead th { + color: var(--faint); font-size: 10px; letter-spacing: .16em; + text-transform: uppercase; background: var(--panel); white-space: nowrap; +} +body.site .cmp tbody th { color: var(--ink); } +body.site .cmp .h { color: var(--ink); background: color-mix(in srgb, var(--spot) 6%, transparent); } +body.site .cmp thead .h { color: var(--spot); } +body.site .cmp .no { color: var(--faint); } + +body.site .caps .cap-flat { cursor: default; } +body.site .caps .cap-flat:hover { background: none; } +body.site .caps .cap-flat:hover h3 { color: var(--ink); } +body.site .caps .cap-flat:hover .n > span:first-child { color: var(--mass); } + +body.site .vs { padding: 40px var(--gut) 46px; border-bottom: 1px solid var(--line2); } +body.site .vs-list { border: 1px solid var(--line2); } +body.site .vs-list article { + display: grid; grid-template-columns: minmax(150px, 230px) minmax(0, 1fr); + gap: 0 30px; padding: 16px 18px; border-bottom: 1px solid var(--line); +} +body.site .vs-list article:last-child { border-bottom: 0; } +body.site .vs-list b { + font-family: var(--mono); font-weight: 400; font-size: 12px; + letter-spacing: .04em; color: var(--ink); +} +body.site .vs-list p { margin: 0; color: var(--dim); font-size: 14px; line-height: 1.7; max-width: 74ch; } +@media (max-width: 700px) { + body.site .vs-list article { grid-template-columns: minmax(0, 1fr); gap: 7px 0; } +} + /* ── close ── */ body.site .end { position: relative; overflow: hidden; padding: 96px var(--gut) 104px; border-bottom: 1px solid var(--line2); } /* The bleed is a fraction of the mark, not of the section. As a percentage it diff --git a/website/index.html b/website/index.html index 95b384a6..d761fd66 100644 --- a/website/index.html +++ b/website/index.html @@ -90,7 +90,7 @@ window.herdrGround.apply(window.herdrGround.read()); - +
@@ -101,6 +101,7 @@ Docs Plugins Blog + Compare @@ -122,6 +123,7 @@ Docs Plugins Blog + Compare @herdrdev
Ground @@ -497,6 +499,7 @@ docs plugins blog + compare built in the terminal · © 2026 Herdr, Inc. diff --git a/website/src/components/SiteLayout.astro b/website/src/components/SiteLayout.astro index a8878646..aa933728 100644 --- a/website/src/components/SiteLayout.astro +++ b/website/src/components/SiteLayout.astro @@ -95,7 +95,7 @@ const facts = version ? `v${version} · Apache 2.0` : 'Apache 2.0'; window.herdrGround.apply(window.herdrGround.read()); - +
@@ -105,6 +105,7 @@ const facts = version ? `v${version} · Apache 2.0` : 'Apache 2.0'; Docs Plugins Blog + Compare {fmt(starCount)} @@ -126,6 +127,7 @@ const facts = version ? `v${version} · Apache 2.0` : 'Apache 2.0'; Docs Plugins Blog + Compare @herdrdev
Ground @@ -143,6 +145,7 @@ const facts = version ? `v${version} · Apache 2.0` : 'Apache 2.0'; docs plugins blog + compare built in the terminal · © {year} Herdr, Inc. {facts} diff --git a/website/src/pages/compare.astro b/website/src/pages/compare.astro index b9131be6..315d6a1b 100644 --- a/website/src/pages/compare.astro +++ b/website/src/pages/compare.astro @@ -1,478 +1,265 @@ - - - - - - Compare Herdr — terminal-native agent multiplexer - - - +--- +import SiteLayout from '../components/SiteLayout.astro'; +--- - - - - - - - - - + +
+
+
+
compare
+

Apps manage the herd. Herdr runs it.

+

+ Most tools Herdr gets compared to are apps: a window you open to + manage coding agents, and a window the work depends on. Herdr is a + different kind of thing: a runtime. A server holds real terminals + open on the machine, the agents live in those, and every UI, ours + included, is just a client that attaches. Keep that split in mind + and the matrix below mostly explains itself. +

+
+ +
- - - - - +
+
+ herdr against the field + scrolls sideways on a phone +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
capabilityherdrtmux · zellijcmux · warpsoloconductor · emdash · superset
Kind of thingruntime + clientsterminal multiplexerterminal appprocess dashboardmanager app
Work survives its own UI closingyes, the server owns the terminalsyes, detachsession restorewhile the app is openwhile the app is open
Runs inside your existing terminalyesyesreplaces itno, desktop appno, desktop app
Semantic agent stateblocked · working · done · idleattention cuesprocess statusworkspace status
Detach, reattach, SSH inyes, any ttyyespartialremote projects
Direct attach to one agentyes
API agents drive themselvesread · send · wait · split · attachterminal scriptingapp APIsMCP for processesworkflow APIs
Worktree and diff review flowpairs with itpartialyes, their core
Clients on the same runtimeTUI · CLI · plain SSH, more comingits own clientthe app onlythe app onlythe app only
+
+

+ The columns are categories, not enemies: Herdr pairs happily with a + worktree manager and runs fine inside a fancy terminal. + The row that sorts the field is the second one: what happens to + the agents when the thing you're looking at goes away. +

+
- - - - - - - - - -
-
-
-

Compare Herdr

-

The agent multiplexer that lives in your terminal.

-

- Herdr gives coding agents the thing tmux gave terminal users: - persistent real panes, detach and reattach, remote access, and a - control surface. Then it adds agent state and an API the agents can use. -

- -
-
-

Herdr combines

-

tmux persistence, agent awareness, no terminal replacement.

-
    -
  • Runs inside your existing terminal
  • -
  • Owns persistent PTY sessions
  • -
  • Attaches locally, over SSH, or directly to one agent
  • -
  • Tracks blocked, working, done, and idle state
  • -
  • Exposes CLI and socket APIs agents can drive
  • -
-
-
- -
-
-
-

The stack

-

Pick the center of gravity.

-
-

- The question is not whether a tool can run a terminal. Most can. - The question is whether it combines terminal-native persistence with - agent state and agent-controlled automation. -

-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CapabilityHerdrtmux / Zellijcmux / WarpSoloConductor / Emdash / Superset
Runs inside your existing terminalyesyesno, terminal appno, desktop appno, app workspace
Persistent PTY session runtimeyesyessession/app restoremanaged processesembedded terminals
Detach, reattach, and SSH inyesyespartialnoremote projects
Direct attach to one agent terminalyesnononono
Semantic agent stateblocked / working / done / idlenoattention or native-agent statusprocess statusworkspace status
Agent-shaped APIread, send, wait, split, attachterminal scriptingapp APIsMCP for processesworkflow APIs
Git worktree and diff review flowpairs with itnopartialnoyes
-
-
- -
-
-

How Herdr differs

-

The intersection other tools miss.

-
-
-
- Herdr -

Persistent terminal runtime, built for agents.

-

- Herdr keeps real terminal panes alive like a multiplexer, but treats agents - as first-class runtime objects. You can scan state, jump to blocked work, - attach directly to one agent, and let agents read, send, split, and wait - through the CLI/socket API. -

-
- existing terminal - persistent PTYs - SSH attach - direct agent attach - agent state - agent API -
-
-
-
- tmux / Zellij -

Classic multiplexers stop at terminals.

-

They own panes and persistence. They do not know which pane is blocked, working, done, or ready for an agent wait.

-
-
- cmux / Warp -

Terminal apps replace the terminal.

-

They can add polished desktop UX, but the workflow moves into their app. Herdr stays inside the terminal you already use.

-
-
- Solo -

Dashboards supervise processes.

-

Process health and auto-restart are useful, but Herdr is about persistent interactive agent panes, not dev-stack supervision.

-
-
- Conductor / Emdash / Superset -

Worktree tools own review flow.

-

They are for branch isolation, diffs, and PRs. Herdr is the live terminal layer those agents can run inside or alongside.

-
-
-
-
- -
-
-

One-line comparisons

-

Use this when deciding.

-
-
-
Herdr vs tmuxtmux persists terminals; Herdr persists agent workspaces and understands agent state.
-
Herdr vs ZellijZellij is a modern terminal workspace; Herdr is an agent multiplexer with state, waits, and orchestration.
-
Herdr vs cmuxcmux is a Mac terminal app for agents; Herdr is a terminal-native multiplexer that runs anywhere your terminal and SSH do.
-
Herdr vs WarpWarp is an agentic development platform; Herdr is the local terminal control layer for your existing agents.
-
Herdr vs OpenCode webOpenCode's web mode serves one agent over HTTP; Herdr is a terminal-native multiplexer for many agents and harnesses, reachable over plain SSH.
-
Herdr vs SoloSolo manages your dev stack; Herdr manages persistent interactive agent panes.
-
Herdr vs Conductor, Emdash, SupersetThey orchestrate isolated worktrees and review diffs; Herdr orchestrates live terminals and agent state.
-
-
- -
-

Start with the multiplexer

-

If your agents live in terminals, put the terminals in Herdr.

-

- Install Herdr, run two agents, split a pane, then detach once. The difference is obvious when the agents keep running. -

- -
-
- - - -
- - light - [/] +
+
+
01
+
+

Herdr is the runtime.

+

+ A server owns the terminals; every UI is a client of it. The TUI in + the screenshots attaches, detaches and even crashes without the + agents noticing. Same for the CLI, plain SSH, and whatever + attaches next. The TUI is the first client, not the last. +

- - +
+
02
+
+

Multiplexers persist terminals, not agents.

+

+ tmux gave humans persistence, and Herdr keeps that whole + inheritance: real PTYs, detach, SSH. What it adds is the part + multiplexers never had: knowing which pane is an agent, whether + it's blocked, and how to wait on it instead of polling it. +

+
+ +
+
+
03
+
+

Terminal apps replace your terminal.

+

+ cmux and Warp can be genuinely polished, but the deal is that the + work moves into their window, with their renderer, on the machines + they support. Herdr changes nothing about your terminal. It runs + inside it, wherever a terminal and SSH already reach. +

+
+ +
+
+
04
+
+

Manager apps are clients without a runtime.

+

+ Conductor, Emdash and Superset manage a herd from a window: + worktrees, diffs, review queues. Useful, and Herdr pairs fine with + that flow. But a window that manages agents is not a place agents + live: quit the app and the herd goes with it. +

+
+ +
+
+
05
+
+

Dashboards watch processes.

+

+ Solo supervises a dev stack: health, restarts, logs. Herdr's job + is different: interactive agent terminals that stay open, hold + scrollback and state, and stay yours whether or not anything is + watching them. +

+
+ +
+
- - - +
+ +
+

A runtime, not another window.

+

+ Install it and nothing about your setup changes: same terminal, same + agent CLIs. They just stop dying when a window does. +

+ +
+
+
+