Desktop app
Starts the host and herdr-core on this computer, installs herdr-core for you when it is missing, and offers this computer to your phone.
Every machine you own, linked through an end-to-end encrypted mesh. Start OmO on the mac mini at home and answer it from your phone.
From Sisyphus Labs, the people who made Dori and OmO.
01Mesh
Each machine keeps its own key and signs the membership records it writes with Ed25519. The records sync over the same encrypted relay as your terminals. The relay stores none of it and can forge none of it.
Three machines, one mesh. Your laptop, the mac mini at home and a cloud box share one mesh, and each one lists the others in its sidebar. The phone you paired sees all three.
Work runs where you start it. Start OmO on the mac mini and answer it from your phone. Each record is sealed with Noise on the machine that sends it and opens only on the machine it is for.
A new machine asks to join. mesh pair on the laptop invites pi. You
approve it on the laptop, the signed admit record syncs, and every member dials pi.
One record removes one. mesh revoke cloud-box --compromised reaches every
member as one signed record. Each closes its sessions with cloud-box and refuses its keys.
A machine joins after you approve it on a member, unless you opened the invite with --auto.
For seven days every member shows who joined, who invited it and its fingerprint.
Each member adds every other member as a herdr machine on its own, so their spaces and agents appear under their names.
With --compromised, one record removes a member and every machine it admitted. Its sessions
close and its keys are refused on every path.
02App
Spaces on the left, agents grouped by whether they need you, are working or are done, and split terminals on the right. On a phone the same terminal gets a key bar with ctrl, esc and the arrows. The window at the top of the page is the app's own components, live, with sample data.
03Relay
Your phone and your machine agree on keys with a Noise IK handshake, then seal every record with ChaCha20-Poly1305 and rekey every 220 messages. The relay, on Cloudflare Workers, matches the two ends by host id and copies bytes between them. It keeps no accounts and stores no messages.
~/app $ git status
no key, no plaintext, no storage
~/app $ git status On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean
04Pairing
The pairing secret lives in the link's #fragment, which a browser never sends to any server.
No camera handy? Type the 8-character code instead.
CPace keeps the relay from testing guesses offline, and the host answers at most 10 tries
per offer.
~ $ doriface-host pair
05Platforms
Terminals render with libghostty, built from Ghostty's own source and compiled to WebAssembly, so a pane on your phone draws the same cells as on your desktop.
Starts the host and herdr-core on this computer, installs herdr-core for you when it is missing, and offers this computer to your phone.
Open app.doriterm.com, pair, and every pane of every machine is there. Nothing to install on a borrowed computer.
Install it from the browser as an app. A key bar puts ctrl, esc and the arrows under your thumb, so you can answer an agent from anywhere.
$ doriface-host pair # a QR code, a link and a code for your phone
$ doriface-host mesh pair # invite another machine into your mesh
$ doriface-host mesh join <code> # on that machine: ask to join
$ doriface-host mesh revoke <member> # remove a member everywhere
ultrawork to a prompt and it plans, proves each step
and checks the result; type mass ulw and one job becomes a graph of agents, each on the
model that fits it.
omo.dev
doriterm is open source under AGPL-3.0, and the wire format it is built against is published, relay section included.