Everything from the backend to your first Job. Follow it top to bottom — most people are done in an afternoon.
Three essentials, plus Xcode to build the apps during the beta. A paid Apple Developer account is needed only if you also want phone notifications (step 7).
claude CLI installed and logged in.claude you already have.The backend is a small Node server that runs on your Mac and drives Claude for every chat and Job. One command sets it all up.
# clone and run the installer
git clone https://github.com/edbyrne/herald.git
cd herald
./install.sh
The installer checks your prerequisites, generates a secure bearer token, writes your config, installs a launch agent so Herald runs on boot, and finishes by printing the server address + token you'll pair your apps with:
Server address http://your-mac.tailnet.ts.net:4123
Bearer token 3a5b1f39cc38b1bb8c31626b8652ea15…
✓ Herald is installed and running. 🤖
ANTHROPIC_API_KEY. Herald refuses to start if it's present (error E05) — that's what keeps it on your Claude subscription rather than a metered API key. Need Node first? Install v22+ from nodejs.org; the installer flags anything missing.The installer already generated this for you and printed it — it's the single password that lets your apps talk to your backend. You'll enter it (with the server address) once in each app when you pair.
# to see it again any time:
grep HERALD_TOKEN herald/.env
HERALD_TOKEN in .env, restart Herald, and re-pair your apps.Tailscale creates a private, encrypted network just between your devices — so your phone can reach your Mac from anywhere without opening any ports or exposing anything to the public internet.
your-mac.tailnet-name.ts.net (or its 100.x.x.x address).That hostname plus the port — http://your-mac.tailnet.ts.net:4123 — is the address your apps will use.
During the beta you build the apps yourself in Xcode — a few clicks once Xcode is installed. (Signed, notarised downloads that need no account are coming.)
brew install xcodegen.herald/ios, run xcodegen, open Herald.xcodeproj, and under Signing & Capabilities choose your own Apple ID / team for both targets.Open the app for the first time and it'll ask for two things:
http://your-mac.tailnet.ts.net:4123Tap connect. You should see your (empty) chat list. Send a first message — “hello, are you there?” — and watch the reply stream in. That's your agent, running on your Mac, answering on your phone.
Herald keeps notifications sovereign: there is no notification server in the middle that anyone — us included — could read. The trade-off is that to get push on your phone you build one tiny open-source companion app, Herald Notify, signed with your Apple account and your push key. Notifications then travel your Mac → Apple → your phone, and no one else is ever in the loop.
Skip this entirely if you don't need phone push — chat and Jobs work fully without it, and the Mac app shows its own notifications while it's running.
A small receiver app. When a Job finishes or a reply lands, your backend sends a push straight to it; tapping the notification opens the main Herald app to the right place. It stays out of the way otherwise.
.p8 file); note its Key ID and your Team ID.# ~/.herald-secrets/apns.env (+ the AuthKey_*.p8 file alongside)
APNS_KEY_ID=<your-key-id>
APNS_TEAM_ID=<your-team-id>
APNS_BUNDLE_ID=<your-notify-bundle-id>This is one of Herald's best tricks: give it an email address of its own and it can send, receive and reply to real email on its own — something Claude by itself can't do. Reply to a thread from any mail app and Herald acts on it and writes back.
Herald keeps email secrets outside the app folder, in a protected file on your Mac:
mkdir -p ~/.herald-secrets
# put these two lines in ~/.herald-secrets/email.env
GMAIL_ADDRESS=herald.yourname@gmail.com
GMAIL_APP_PASSWORD=<paste-the-16-char-app-password>
Restart Herald and it'll start watching that inbox. Every authenticated email from you becomes an instruction it acts on.
Just email it, or ask it to handle mail in chat:
Jobs are recurring chats that run on a schedule. The clever part: you don't fill in forms — you just tell Herald what you want in plain English, and it sets the schedule, the prompt and the tools for you.
Herald confirms the schedule and switches the Job on. From then on it runs itself.
Leave the Mac running. Tomorrow morning, the work will already be done.