Remote access

Reach Hermes Agent from anywhere with Tailscale

Tailscale is the route Herald recommends for reaching Hermes Agent from your phone away from home. Install Tailscale on the computer and the phone, turn on HTTPS certificates, then run npx herald-setup. It keeps Hermes on 127.0.0.1, publishes it to your tailnet with tailscale serve --bg 9119 at https://<machine>.<tailnet>.ts.net, sets a dashboard password and prints a QR code for Herald.

Herald’s first setup screen: you need a computer with Hermes Agent, and the same Wi-Fi or Tailscale on both devices

What Tailscale does

Tailscale joins your devices into a private network called a tailnet, with connections encrypted end to end. Tailscale Serve shares a service on one machine with the rest of your tailnet over HTTPS, using a certificate for the machine’s ts.net name. Nothing is opened to the internet and your router stays untouched.

For Herald, Serve sits in front of a Hermes that only listens on 127.0.0.1. Hermes treats the ts.net name as a non-loopback address, so it still asks for the dashboard password. Hermes’ docs say a password-protected dashboard belongs behind a VPN, and call Tailscale the clean option.

How the options compare

Ways to reach Hermes Agent from Herald, compared
MethodSecuritySetup effortAway from homeHTTPSCost
TailscaleOnly your tailnet can reach it, and the dashboard password still appliesLow: an app on each device and npx herald-setupYesYes, an automatic ts.net certificateFree Personal plan
Same Wi-FiPassword and chats cross your network unencryptedLowest: npx herald-setupNoNo, plain HTTPFree
Cloudflare TunnelThe sign-in page is on the public internetMedium: an account, a domain and cloudflaredYesYes, Cloudflare’s certificateFree plan, plus a domain
Reverse proxyDepends on who can reach the proxyHigh: a domain, a certificate and proxy configOnly if the proxy is public or on your VPNYes, your own certificateFree software, plus a domain

Tailscale’s Personal plan is free for non-commercial use, for up to six users. Cloudflare Tunnel is available on every Cloudflare plan, including Free.

Set up Tailscale for Herald

  1. Install Tailscale on the computer

    On a Mac, install Tailscale’s Standalone app. On Linux, run curl -fsSL https://tailscale.com/install.sh | sh, then sudo tailscale up. Sign in to your tailnet.

  2. Install Tailscale on your phone

    Sign in with the same account, on every iPhone, iPad or Android device that runs Herald. Your Apple Watch and CarPlay don’t need it, because they relay through your iPhone.

  3. Turn on HTTPS certificates

    In the Tailscale admin console, open the DNS page, check that MagicDNS is on, and select Enable HTTPS under HTTPS Certificates. If you skip this, tailscale serve asks you to approve it.

  4. Run herald-setup on the computer

    It reads tailscale status, picks https://<machine>.<tailnet>.ts.net, writes the dashboard password and dashboard.public_url, runs tailscale serve --bg 9119 and checks that the mapping took.

    npx herald-setup
  5. Scan the QR code in Herald

    Tap Scan the QR code in Herald. Keep Tailscale connected on the phone whenever you use Herald.

What herald-setup checks before changing Serve

  • It keeps a Serve mapping that already points at Hermes.
  • If another site is on /, it shows what is there and asks before replacing it. With --yes it never replaces it.
  • It lists every other path or port served on the same name, since those stay published next to Hermes.
  • It refuses to publish where Tailscale Funnel is on, unless you answer yes in a terminal. --yes never does.
  • If a first HTTPS certificate takes longer than 30 seconds, it reports that Serve is still finishing instead of failing.
  • --no-tailscale-serve leaves your Serve settings alone if you manage them yourself.

Doing it by hand

dashboard:
  public_url: https://<machine>.<tailnet>.ts.net
  basic_auth:
    username: you
    password_hash: 'scrypt$…'
In ~/.hermes/config.yaml. Make the hash from your hermes-agent folder with its virtualenv active: python -c "from plugins.dashboard_auth.basic import hash_password; print(hash_password('your-password'))". Find your machine’s name with tailscale status --json | jq -r .Self.DNSName and drop the trailing dot.
hermes serve --port 9119      # Still listens on loopback only.
tailscale serve --bg 9119     # Forwards the ts.net name to 127.0.0.1:9119.
Then start Hermes and publish it on your tailnet. Run hermes update first: on older Hermes versions, public_url also locked the Hermes desktop app out of its own backends.

Security notes

  • Serve is tailnet-only. Funnel publishes to the public internet, and Herald doesn’t need it; turn it off with tailscale funnel --https=443 off.
  • Tailscale’s access rules apply to Serve like any other service, so you can limit which people and devices reach the computer.
  • Hermes still asks for the dashboard password: a non-loopback public_url always turns its sign-in gate on.
  • Turning on HTTPS publishes your machine names in the public Certificate Transparency log. Rename a machine first if its name gives away something private.
  • You don’t open any ports on your router.

Troubleshooting

  • Serve is not enabled on your tailnet yet. Open the approval link herald-setup prints, then run it again.
  • HTTPS certificates are not enabled. Turn them on in the admin console’s DNS page. See Tailscale HTTPS certificates.
  • Tailscale refused the change for this user. On Linux, run sudo tailscale set --operator=$USER, then run herald-setup again.
  • Tailscale is installed but not signed in. Run tailscale up. Until then, herald-setup falls back to your Wi-Fi address.
  • The phone can’t connect. Check that Tailscale is on in the phone and that tailscale serve status shows the mapping. See Herald can’t connect.

Questions

Is Tailscale free?

For personal use, yes. Tailscale’s Personal plan is free for non-commercial use, with up to six users and unlimited user devices.

Do I need Tailscale Funnel?

No. Funnel puts a service on the public internet. Herald only needs Serve, which keeps Hermes inside your tailnet, and herald-setup won’t publish through Funnel without an explicit yes.

Can I use the Tailscale IP instead of the ts.net name?

Yes. Run npx herald-setup --url http://<tailscale-ip>:9119. Herald allows plain HTTP to Tailscale addresses because the traffic travels inside Tailscale’s encrypted connection, but the helper then has to stay open to carry it, as it does on Wi-Fi.

Do my Apple Watch and car need Tailscale?

No. Herald on Apple Watch and CarPlay relays through your iPhone, so only the phone needs Tailscale. See Herald on Apple Watch.

What happens if Tailscale is off on my phone?

Herald can’t reach the computer. For a ts.net or Tailscale address, its error message tells you to check Tailscale on both devices.

Sources

Get Herald for Hermes Agent

iPhone, iPad, Apple Watch, CarPlay and Android. $12.99 once, no subscription, no account and no Herald server.

Herald is an independent, unofficial app. It is not made, endorsed or supported by Nous Research.