Security

What's exposed, and how

Hermes Mobile is a remote control for software on your own computer. Here's exactly what that opens up, so you can decide what you're comfortable with.

Nothing is hosted by us

There's no Hermes Mobile account and no server of ours in the middle. The phone talks directly to your Hermes dashboard over one of:

  • Tailscale (default): a private WireGuard network between your own devices, with HTTPS via Tailscale Serve. The dashboard isn't exposed to the internet.
  • Your local network: plain HTTP on your Wi-Fi. Only use it on networks you trust.
  • Your own HTTPS URL: for example a reverse proxy or tunnel you run.

This website is static and only hosts documentation and the pairing page.

Sign-in

The app signs in with the dashboard's username and password. The installer generates a random password and stores it in ~/.hermes/.env on your computer; on macOS it's also kept in the Keychain.

The pairing link

The pairing page receives your URL, username and password in the link's fragment (the part after #), which browsers never send to a server. The page removes it from the address bar and history as soon as it loads, draws the QR code locally, and makes no network requests with it. Anyone who sees the QR code can sign in to your Hermes, so don't share or screenshot it.

Self-hosted relay (opt-in)

With --network relay, a small connector on your computer dials out to a relay you run, and the app reaches Hermes through it. HTTPS ends at the relay, so whoever runs the relay could see traffic: run it on a server you control. Hermes' password still guards every request, the relay slows down password guessing, and the connector refuses to expose Hermes whenever Hermes isn't requiring sign-in.

Screen share

The live view only shows, and relays mouse, keyboard and touch input to, browsers that Hermes itself opened. It runs over the same authenticated dashboard connection as everything else. It can't see or control the rest of your desktop.

1Password (opt-in)

The service account is read-only and scoped to the vaults you choose. Every bot's commands can read those vaults, so keep only items that are appropriate for bots to use there.

Real-browser mode (opt-in, per bot)

--real-browser <bot> gives that bot a copy of your Chrome profile, including its cookies and signed-in sessions. That bot can then act as you on those sites. Enable it only for bots you trust with that.

Full Disk Access on macOS

Granting Full Disk Access to Hermes.app lets anything Hermes runs read your files without asking. That's the price of unattended operation. If you'd rather approve access case by case, skip it and accept the occasional prompt.

Uninstalling

Re-run the installer with --uninstall to remove everything it added: the plugin, the dashboard service, network setup, the push relay and Hermes.app.

curl -fsSL https://raw.githubusercontent.com/michaeldimuro/hermes-mobile/main/install/install.sh | bash -s -- --uninstall

Windows (PowerShell):

$env:HERMES_MOBILE_UNINSTALL=1; irm https://raw.githubusercontent.com/michaeldimuro/hermes-mobile/main/install/install.ps1 | iex

On macOS, also remove Hermes from the Full Disk Access list. Then delete the app from your phone.

Found a vulnerability? Please report it privately through GitHub security advisories rather than a public issue.