Help

“Invalid username or password” and other Hermes sign-in errors

Herald signs in to Hermes the way its web dashboard does. On the same computer it uses a session token; over Wi-Fi, Tailscale or a proxy, Hermes requires a sign-in and Herald uses the dashboard username and password from dashboard.basic_auth. Most sign-in errors come from a changed password, a missing auth provider, or a dashboard that only offers OAuth, which Herald can’t use.

Two ways Hermes lets Herald in

How Hermes Agent authenticates Herald
ModeWhen it appliesWhat Herald sends
TokenHermes is bound to loopback and reached as 127.0.0.1 or localhost, as in a simulatorThe HERMES_DASHBOARD_SESSION_TOKEN value
GatedHermes is reached through any other name: a Wi-Fi address, a Tailscale name or a proxyThe dashboard username and password, then a one-time ticket per connection

Herald reads which mode applies from Hermes itself, so you can’t force one from the app.

Likely causes

Hermes sign-in errors in Herald and their usual causes
What you seeLikely cause
“Invalid username or password”The password changed, or a typo
“Too many attempts — wait a minute and try again”Hermes is limiting sign-in attempts
“Sign-in failed (HTTP …)”Hermes refused the sign-in for another reason; check that a username and password provider is set up
Hermes won’t start on a Wi-Fi addressA non-loopback bind needs an auth provider, and Hermes fails closed without one
HTTP 400 “Invalid Host header”A loopback-only Hermes was reached by a non-loopback name
A session token works on the Mac but not the phonePhones always arrive with a non-loopback name, so token mode can’t work for them

Fix it

  1. Let the helper set it up

    Run npx herald-setup. It writes a username and an scrypt-hashed password under dashboard.basic_auth, sets dashboard.public_url when needed and prints a QR code that carries the new credentials.

  2. Need a new password? Reset it

    Run npx herald-setup --reset-password and scan the new QR code.

  3. Or set it by hand

    From your hermes-agent install directory, with its virtual environment active, hash a password. Then add it to ~/.hermes/config.yaml with the address your phone uses.

    python -c "from plugins.dashboard_auth.basic import hash_password; print(hash_password('your-password'))"
    
    # ~/.hermes/config.yaml
    dashboard:
      public_url: https://<machine>.<tailnet>.ts.net
      basic_auth:
        username: you
        password_hash: 'scrypt$…'
  4. Sign in again in Herald

    Open Settings › Connections, tap the connection and enter the username and password.

Dashboards that only use OAuth

Hermes can also sign people in with Nous Portal OAuth, set up with hermes dashboard register, or with your own OpenID Connect provider. Herald signs in only with the username and password provider. If your dashboard offers OAuth alone, add dashboard.basic_auth alongside it so Herald can sign in.

Questions

Is this the same login as the web dashboard?

Yes. The username and password npx herald-setup prints are your Hermes dashboard login too.

Where is the password stored?

On the computer, as an scrypt hash in config.yaml. On the phone, in the iOS Keychain or Android’s Keystore-backed encrypted storage.

Does --insecure switch the login off?

No. Since Hermes’s June 2026 hardening, --insecure is ignored and a non-loopback bind always needs an auth provider.

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.