The fork
herdrup runs on an open-source fork of the herdr daemon, jerryfane/herdr. Official herdr is a local-first terminal runtime with no way to reach it from a phone, so the fork adds exactly that remote layer and nothing else.
Every change is additive, and the fork tracks upstream herdr closely (it sits on v0.8.2 today). You keep herdr’s own fixes and improvements, and gain the mobile control plane on top. Here is each change, and why official herdr does not include it.
Install the fork
The installer downloads the matching prebuilt fork binary and verifies its checksum. Rust, Cargo, Zig, and a source checkout are not required.
curl -fsSL https://herdrup.themartian.app/install.sh | sh
Then run herdr pair and scan the code from the app.
Remote API bridge
The fork ships an api-bridge subcommand that exposes the daemon’s JSON control API over your own SSH connection, so the app drives the same API the local terminal UI already uses. Official herdr only listens on a local Unix socket, so there is simply nothing for a phone to connect to.
Push notifications
An APNs sender and a Live Activity mean your phone is pinged the moment an agent needs input, exits, or finishes, even when the app is closed. You no longer have to sit and watch a terminal to know when you are needed. Upstream herdr has no push path of any kind, because it was built to run in front of you rather than to reach you.
Message your agents
Gram is a native channel for sending an agent a short note or a file and getting its replies back on your phone. Anything that looks like a credential is redacted automatically before it leaves the machine. This is a new concept the fork introduces, with no equivalent upstream.
Live terminal, streamed
pane.stream sends the real PTY output to your phone, pane.input.stream carries your keystrokes back to it, and pane.set_pty_size keeps the width and height correct. The result is that the terminal in your pocket is the actual live session, not a periodic screenshot.
All your machines
A peer manager, a capability-gated handshake, and a stream and write proxy let the fork federate several machines at once. Agents keep a stable identity across restarts, so every agent, wherever it runs, shows up in one app and can be driven from there. Official herdr only ever knows about the box it runs on.
One-tap updates
server.staged_update and apply_staged_update swap the daemon binary in place using a live handoff, so agents that are mid-run survive the upgrade. You update from the app instead of opening an SSH session to redeploy. The running commit is stamped into --version as well, so the app can tell you when a machine has fallen behind.
Accounts and usage
The fork keeps a per-harness account registry and reads live subscription usage, so you can see how much of a plan an agent is burning and move it onto a different account, all from the app.
Smoother agents
Smaller quality-of-life additions round it out: restart an agent in place with its session resumed, browse a machine’s folders and its installed harnesses when starting a new agent, keep agent names across restarts, and recover terminal history after a full-screen program exits.
All of it is open source and additive. Nothing above changes how herdr behaves locally, and the fork merges upstream releases as they land, so you are never trading herdr’s roadmap for the mobile features. The code lives at github.com/jerryfane/herdr.