One manages Hermes, the other is for using it
The web dashboard is part of Hermes Agent from Nous Research. hermes dashboard starts it at 127.0.0.1:9119. One server manages every profile on the machine, with pages for config, API keys, sessions, logs, analytics, cron, profiles, skills, MCP, channels and system tasks. Its Chat tab runs the real Hermes terminal interface in the browser.
Herald is an independent app for using Hermes away from the desk. It shows each bot as a chat, streams replies and tool activity, and adds phone features: approval cards, push banners, a wake word, Hermes Pet, an Apple Watch roster and CarPlay.
The dashboard and Herald side by side
| Feature | Herald | Hermes dashboard |
|---|---|---|
| Made by | An independent developer (unofficial) | Nous Research, as part of Hermes Agent |
| Price | $12.99 once | Free with Hermes |
| What it is | Native app for phone, tablet, watch and car | Browser app on port 9119 |
| Chat | A chat per bot, group chats and resumed sessions | The Hermes terminal interface in the browser, with a session switcher |
| Configuration | Bot settings, model per bot, plugins, skills and MCP toggles | Every config field, API keys, profiles, channels, webhooks and system tools |
| Scheduled jobs | Schedules screen per bot | Cron page with pause, resume and run now |
| Usage and cost | Usage and cost charts | Analytics by day and by model |
| Remote use | Built for phones over Tailscale or Wi-Fi | Loopback by default; any other address needs sign-in |
| Phone extras | Push, wake word, Live Activity, Apple Watch, CarPlay | None; it is a web page |
Use the dashboard when…
- You’re setting Hermes up: models, API keys, profiles and messaging channels.
- You want to read logs, check analytics or run maintenance such as backups and updates.
- You want the full terminal interface, slash commands and all, in a browser.
- You’re at a computer with a big screen.
Use Herald when…
- You’re away from the desk and want to chat with your bots in a native app.
- You want a push when a bot finishes or needs approval.
- You want to talk hands-free with “Hey Herald”, glance at your Apple Watch or talk to a bot in CarPlay.
- You run Hermes on several computers and want all their bots in one roster.
How Herald uses the dashboard’s sign-in
When Hermes is reached through anything other than loopback, such as your Wi-Fi address or a Tailscale name, it engages an auth gate and won’t serve without a sign-in provider. That fails closed by design.
npx herald-setup sets this up for you. It writes a dashboard username and a scrypt-hashed password into ~/.hermes/config.yaml, sets dashboard.public_url to the address your phone will use, starts hermes serve if nothing answers and prints a QR code with the address and credentials. Herald then signs in like any dashboard client and uses a single-use ticket for each connection. If you see 401 errors, read dashboard sign-in help.
Keep the dashboard private. Hermes’s docs say the username and password provider is for trusted networks or a VPN, not the open internet. Use Tailscale, or the Nous Portal OAuth provider if it must face the internet.
Price
The dashboard is free and included with Hermes Agent. Herald is $12.99 once, with no subscription; one App Store purchase covers iPhone, iPad, Apple Watch and CarPlay, and Google Play is separate.
Questions
Can I just use the dashboard on my phone?
Yes, over Tailscale or your Wi-Fi with sign-in turned on. It works in a phone browser, but you won’t get push banners, a wake word or Lock Screen updates.
Does Herald replace the dashboard?
No. Herald relies on the dashboard’s sign-in for remote connections and doesn’t try to cover every settings page. Use the dashboard for setup and maintenance.
Is it safe to put the dashboard on the internet?
Not with a username and password alone. Hermes’s docs recommend a VPN such as Tailscale, or OAuth through Nous Portal or your own OpenID Connect provider for public access.
Why does Hermes refuse to start on my LAN address?
A non-loopback address needs an auth provider. Run npx herald-setup, or set dashboard.basic_auth yourself. See dashboard auth help.
