Orca vs herdr: Where Should Your Agents Live?
A quick bite on two open-source tools for running many coding agents at once, and why picking one says a lot about how you like to work.
11:47 PM, Tuesday
Five agents running. Claude Code refactoring a Spark job. Codex writing tests. A third “just fixing lint” across 14 files. Two more in tabs I’d lost track of.
The one that mattered had been stuck on Do you want to proceed? (y/n) for three hours. Two others had both edited conftest.py on the same branch.
That’s not an agent problem. It’s an ops problem: a tiny distributed system with no scheduler, no isolation and no observability.
What I actually wanted was simple: go to sleep, wake up to reviewable PRs. So I tried the two tools everyone keeps linking, Orca and herdr, and then made them work together.
TL;DR
- Orca is where you work with agents: an IDE, a task board and a phone app for your fleet.
- herdr is where agents live: a runtime that keeps them alive and knows when they’re stuck.
: herdr keeps the night shift running, Orca schedules and isolates the work, and your phone is the pager.
Orca: the control plane
Orca is an open-source Agent Development Environment (Electron, MIT, 70k+ stars). The core idea fixes my conftest.py mess:
Every task gets its own git worktree.
- Fan-out: send one prompt to Claude Code, Codex and Gemini, diff the attempts and merge the winner
- Design Mode: click an element in a built-in Chromium window, and its DOM, CSS and a screenshot go into the prompt
- GitHub + Linear built in, plus SSH worktrees for remote boxes
The underrated part: the CLI
Everything in Orca is scriptable with --json, and agents learn it via skills (orca-cli, orchestration). The standout is orca orchestration (experimental), basically a workflow engine for agents: runs, tasks with dependencies, dispatches with heartbeats, a typed inbox and decision gates that park a task until someone answers.
orca orchestration run-create --objective "Migrate ingest jobs to schema v2" --json
orca orchestration task-create --task-title "ingest: orders" --spec "..." --json
orca orchestration worker-start --task <taskId> --worktree new-child --agent codex --json
orca orchestration check --wait --types worker_done,question --timeout-ms 900000 --jsonIf you’ve babysat an Airflow DAG at 2 AM, this will feel familiar. Add orca automations (cron for agents) and orca serve (headless Linux), and Orca becomes a scheduler, not just an IDE.
Your phone becomes a pager
Orca’s mobile app (iOS App Store, Android APK, both in beta) is a remote control, not an editor:
- Push notifications when an agent finishes
- Unblock from bed: reply
continueoryes, dictate or attach a photo - Review from the couch: browse files, stage and commit
- Start work: create a workspace or run saved Quick Commands
Pair it with a one-time code over Orca Relay, your LAN or Tailscale. The catch: it controls a running Orca. Close the desktop app and the session drops. For overnight work, run orca serve on an always-on box.
herdr: the runtime
herdr is a single ~10MB Rust binary (Apache 2.0, 40k+ stars). Its own tagline says it best: “Apps manage the herd. Herdr runs it.” A background server owns every terminal, and every UI is just a client.
Think tmux that knows what an agent is:
- Agent state: idle, working, blocked or done, detected automatically for Claude Code, Codex, Cursor, opencode and more
- Detach, don’t kill:
ctrl+b q, close the lid, and agents keep going - Remote like local:
herdr --remote ssh://you@box, or reattach from your phone over SSH - Honest about reboots: if the server restarts, processes die, but the layout comes back and integrated agents resume their sessions
The API is the product
A local Unix socket (newline-delimited JSON) and a matching CLI cover workspaces, panes, agents, worktrees, notifications and events. herdr api schema --json dumps the whole contract.
herdr pane run w1:p2 "make test"
herdr pane wait-output w1:p2 --match "passed" --timeout 120000
herdr agent prompt reviewer "Review the diff on night/ingest-orders" --wait
herdr agent wait night-lead --until blocked --timeout 3600000The herdr skill teaches agents to use all this politely: work in sibling panes, don’t steal focus, and refuse to run unless HERDR_ENV=1.
Get ABHISHEK GUPTA’s stories in your inbox
Join Medium for free to get updates from this writer.
Want the full terminal setup? Dave’s Datalumina guide pairs herdr with Ghostty, Neovim, lazygit and zoxide. It was good enough for him to drop Cursor as a diff viewer.
Same verbs, two CLIs
Both tools expose the same verbs: spawn, prompt, read, wait, ask a human. They just sit at different layers.
Neither ships an integration with the other. They don’t need one. Give one agent both CLIs and both skills, and it becomes the bridge.
The night shift
- herdr = supervisor. It keeps the lead agent alive, runs tests in side panes and knows when anything is blocked.
- Orca = scheduler. It holds the task board, gives each worker its own worktree, parks human decisions behind gates and pings your phone.
- Night-lead = glue. One Claude Code session inside herdr, with the herdr, orca-cli and orchestration skills installed.
1. One always-on box
orca-linux.AppImage serve --port 6768 --pairing-address <tailscale-ip>
herdr session attach nightshift2. Write the brief, not the code
Objective: migrate the 5 ingest jobs to schema v2.
Done = tests green in a herdr pane + one PR per job. Never push to main.
You may: retry flaky tests (max 2).
You may NOT: drop columns or touch prod configs. Open a gate and move on.3. Kick it off with cron
0 23 * * 1-5 HERDR_SESSION=nightshift herdr agent prompt night-lead "$(cat ~/nightshift/tonight.md)"4. What the lead does all night
- Plan: one Orca task per job, with workers in fresh worktrees
- Wait: block on the Orca inbox for
worker_doneorquestion - Verify: run tests in a herdr pane, wait for PASS, have a reviewer agent read the diff
- Retry or park: failures go to
worker-start --retry-of, and anything outside the brief becomes a gate
5. Wake up to a summary
orca automations create --name morning-brief --trigger "0 7 * * *" \
--timezone Asia/Kolkata --provider claude --repo <repo> \
--prompt "Summarize last night's run: done, failed, open gates, PR links."Don’t want to hand-roll it?
firstmate (MIT) packages this exact pattern: “Talk to one agent. Ship with a crew.” A “first mate” agent dispatches crewmates into isolated worktrees, and a bash watcher sleeps on the fleet at zero token cost. It escalates only real decisions, and /afk covers away mode. It runs on tmux by default, supports herdr, and lists Orca as an experimental backend with Orca-managed worktrees. Worth a look before you write your own glue.
Before you try this tonight
- Limit the blast radius: one worktree per task, PRs only, never
main - Time-box everything: every wait gets a timeout, every retry a cap
- Humans own irreversible calls: schema drops and prod configs go behind a gate
- Run one lead: two coordinators is how you get split-brain
- Expect churn: Orca orchestration is experimental, the mobile app is beta and both CLIs move fast. Have agents read the live docs (
orca skills get orchestration --full,herdr api schema --json).
The cheat sheet
7:04 AM
One buzz. Four PRs, one gate asking to drop a column (no), and one task that failed twice and stopped, as the brief said.
No rotting y/n prompts. Just coffee and code review.
Orca vs herdr was the wrong question. You want a control plane you look at and a runtime that doesn’t care whether you’re looking. Both are free. Write the brief and go to sleep.
Your turn
I kept this short on purpose. If you want the deep cut, tell me in the comments:
- the full
tonight.mdbrief template - the herdr watchdog that pages you when the lead gets stuck
- a hands-on firstmate + herdr walkthrough
- how this maps to data SDLC flow
Running agents overnight already, or stuck setting it up? Drop your question or setup below. I read every comment, and the most-asked topic becomes the next Quick Bite.
Update: cmux and T3 Code join the herd
Added October 2026.
I’m still learning this space, and the more I use these tools, the more of them I get to know. Two that deserve a spot next to Orca and herdr: cmux and T3 Code. So this post gets an update.
cmux: the terminal that knows about agents
cmux is a native macOS terminal (Swift + AppKit, rendered by libghostty, GPL-3.0). No Electron, and it reads your existing Ghostty config, so your fonts, themes and keybindings come along.
- A sidebar that tells you things: vertical tabs showing git branch, PR status, working directory, listening ports and the latest notification
- A blue ring when an agent needs you: plus unread badges and macOS notifications, fired by
cmux notifyor plain OSC sequences - Remote like local:
cmux ssh user@remoteopens a workspace on another box, and browser panes route through its network, so localhost just works - Drag-and-drop images: drop a screenshot into a remote session and it gets uploaded over scp, ready for the agent to read
- A scriptable browser pane: agents can snapshot the accessibility tree, click, fill forms and evaluate JS
- CLI + Unix socket API: create workspaces, split panes, send keystrokes.
cmux claude-teamsruns Claude Code teammates as native splits, no tmux needed
brew tap manaflow-ai/cmux && brew install --cask cmux
cmux ssh you@devbox
cmux hooks setupThis is why a lot of CLI-first folks, after trying herdr, T3 Code and Conductor, end up on cmux. It’s a highly customizable terminal that behaves like a GUI, it handles remote SSH, it lets you drag images straight into a terminal session, and it doesn’t ask you to change the CLI workflow you already have.
The catch: macOS only, and no orchestration layer. It restores your layout and resumes supported agent sessions on relaunch, but it isn’t a background server like herdr, so quit the app and plain local processes go with it. The iOS companion is still a TestFlight beta.
T3 Code: the GUI for when you’re done reading scrollback
T3 Code (MIT) calls itself “the open-source control plane for coding agents”. Where cmux bets on the terminal, T3 Code bets on a clean chat-and-diff GUI: desktop apps for macOS, Windows and Linux, a web app, plus iOS and Android.
- Bring your own subscription: it drives the Claude Code, Codex, Cursor, OpenCode and Grok logins you already have. No token reselling
- Projects and threads: each thread is one task, and it can run in its own git worktree
- Diffs, turn by turn: review what the agent changed after every turn, unified or split
- One-button ship: generate the commit message, commit, push and open the PR
- Remote and mobile:
npx t3 serveruns it headless,npx t3 pairprints a pairing link and QR code, and it plays well with Tailscale or an SSH-launched remote box
npx t3@latest
npx t3 serve
npx t3 pairThe catch: it’s young, and the README says so: expect bugs. Today there’s no CI-failure handling, no auto-merge and no issue-tracker hookup. It’s built for a human reviewing every diff, not for a fleet running unattended.
So which one, when?
- You live in a terminal on a Mac and want it agent-aware, with SSH and a browser built in: cmux, can use herdr inside cmux also.
- You’d rather review diffs and click “Create PR” than read scrollback, or you’re on Windows or Linux: T3 Code
- Agents must outlive a closed lid, or the work lives on a remote Linux box: herdr
- You need a task board, worktree fan-out, gates and cron: Orca
The way I think about it now: these tools aren’t mutually exclusive, and the right stack depends on how you like to work. My daily driver is cmux as the default terminal with herdr running inside it, and I review code straight on the PR. If you want to review diffs locally before anything gets pushed, T3 Code or the Claude Code app is the better fit. Orca is still my night shift, because the night shift needs a runtime that survives without a window and a scheduler that knows what “done” means.
Quick Bites: short takes on AI dev tooling, platform engineering and building agents. Follow for the next one.
Sources: onorca.dev · Orca orchestration · Orca automations · Orca mobile · stablyai/orca · herdr.dev · herdr socket API · herdr persistence · herdr on GitHub · firstmate · Datalumina herdr guide · cmux.com · manaflow-ai/cmux · t3.codes · pingdotgg/t3code · T3 Code remote access · Herdr vs cmux (Flavio Copes)








