Sitemap
ABHISHEK GUPTA

ABHISHEK GUPTA

Curious about what’s next in data and platform engineering. Reading, experimenting, and exploring the ideas shaping how we build systems at scale.

Orca vs herdr: Where Should Your Agents Live?

10 min readSep 26, 2026

--

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.

Press enter or click to view image in full size

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.

Press enter or click to view image in full size

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.

Press enter or click to view image in full size

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

If 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 continue or yes, 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 3600000

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

Press enter or click to view image in full size

Same verbs, two CLIs

Both tools expose the same verbs: spawn, prompt, read, wait, ask a human. They just sit at different layers.

Press enter or click to view image in full size

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

Press enter or click to view image in full size
  • 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 nightshift

2. 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_done or question
  • 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."
Press enter or click to view image in full size

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

Press enter or click to view image in full size

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.md brief 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 notify or plain OSC sequences
  • Remote like local: cmux ssh user@remote opens 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-teams runs Claude Code teammates as native splits, no tmux needed
brew tap manaflow-ai/cmux && brew install --cask cmux
cmux ssh you@devbox
cmux hooks setup

This 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 serve runs it headless, npx t3 pair prints 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 pair

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

--

--