Run a herd of real Claude Code agents ship only what survives review.

Self-hosted mission control for interactive Claude Code — spawn, watch, and steer a herd of real claude sessions from your browser or phone, with best-practice guardrails built in. On your own server, on your own subscription.

$ curl -fsSL https://shepherd.run/install.sh | bash

TASK-07 · shepherd · fix/auth-session Sonnet

> Edit src/auth/session.ts

rotate refresh token on renew

> Bash bun test ./test/session.test.ts

14 pass · 0 fail (1.2s)

> Read src/auth/cookies.ts

What's in the herd

The discipline that keeps parallel agent work shippable

  • Interactive agent control

    Spawn, watch, and steer a herd of real claude sessions in isolated git worktrees, from your browser or phone.

  • Readiness

    Scores a JS/TS repo's guardrails — typecheck, lint, tests, CI, house rules — before you point agents at it, turning gaps into an install task.

  • Plan gate

    Before an autonomous run, the agent writes a plan a separate read-only reviewer grills adversarially; only a plan that survives review is released to implement.

  • Critic

    The moment a PR's CI goes green, an isolated read-only agent reviews the full diff and posts a verdict; with Auto-Address on, findings flow back to the author until the list is empty.

  • Learnings

    Distills past sessions' failure signals into proposed house rules; the ones you approve are injected into every new agent in the repo, so lessons compound.

  • Merge train

    A finished PR lands only when it's open, CI-green, conflict-free, and up to date; one that has fallen behind is rebased and fully re-verified first.

How it works

From bare server to a reviewed merge

  1. Install on your server

    One curl … | bash. Linux gets full support; macOS runs core-only.

  2. Point it at a repo

    Shepherd readiness-scores its guardrails and turns the gaps into setup tasks.

  3. Spawn the herd

    Watch and steer agents from your browser or phone; merge only what survives plan gate, critic, and the merge train.

Opinionated by design

Running many agents is the easy half; keeping their output shippable is the actual product.

Shepherd institutionalizes the practices a careful team would otherwise enforce by hand, as per-repo automation — the discipline layer around the sessions, not just more panels.

  • Plan gate

    Every autonomous plan faces an adversarial read-only reviewer before any code is written.

  • Critic

    Every PR's full diff is reviewed the moment CI goes green; findings can flow back to the author automatically.

  • Learnings

    Approved house rules distilled from past failures are injected into every new agent in the repo.

  • Merge train

    Nothing lands while behind its base — a stale PR is rebased and fully re-verified first.

  • Hygiene gates

    CI and the pre-push hook enforce linear branches, locale-catalog parity, feature-catalog completeness, and a dead-code / complexity audit.

The defining constraint

It only drives real terminal sessions

Shepherd only drives genuine interactive terminal sessions — it never uses the Agent SDK or claude -p. It observes (reads the terminal and agent status) and steers (injects keystrokes into the live pane).

“If a feature can't be done by typing into a real terminal, it doesn't ship.”

Auth

Runs on your own Claude Max/Pro subscription — or opt into API-key auth (footing B) in Settings → Session for a clearly-compliant metered path. Either way these are still genuine interactive sessions, never claude -p or the Agent SDK.

Needs

  • Bun — backend runtime + package manager
  • herdr on PATH — owns the interactive claude PTYs
  • The claude CLI, logged in
  • Node.js — for the PTY helper subprocess

Self-hosted on your own server.

Operating systems

  • Linux Full systemd + unprivileged userns — sandbox membrane, egress allowlist, auto-drain, previews, and the systemd unit.
  • macOS Core-only Installs and builds, but no sandbox, egress allowlist, auto-drain, previews, or systemd unit. Run bun run start manually.
  • Windows Not supported The installer refuses and routes you to WSL2.