Dashboard API
What it is
The FastAPI surface for config, sessions, files, memory, skills, cron, messaging, and operations.
In plain terms
Behind every screen, button, and phone notification Hermes produces sits one shared answer: the dashboard API. It behaves less like a single feature and more like a bank’s central account ledger — the desktop app, a Telegram message, and a command-line script are just different windows onto it, a teller’s desk, an ATM, a banking app, but going through any one of them updates the exact same balance underneath.
Why it matters
210 routes in the current pinned snapshot make up the single FastAPI surface every other interface in Hermes is actually built on top of, from the desktop app to gateway connections. Route groups mirror the runtime’s major subsystems directly — sessions, memory, cron, skills, messaging, operations — each in its own namespace rather than one undifferentiated endpoint. Memory’s provider-specific routes (/api/memory/providers/{name}/…) live under this same API, so adding a new memory backend extends it rather than requiring a parallel system.
How it works
hermes_cli/web_server.py builds the FastAPI app and, per its own module docstring, serves the built Vite/React frontend alongside its REST endpoints from the same running process, so the interface and the API answering it are one deployable unit rather than two servers to keep in sync. Some routes exist purely to control the other interfaces built on top of this one: POST /api/gateway/start, /stop, and /restart start, stop, or relaunch the separate long-running gateway process; /drain instead tells that already-running process to stop accepting new turns without killing it outright. /api/pairing/approve is how a pending device — a phone trying to pair so it can message Hermes remotely — actually gets let in. On launch the process prints a line announcing its port once uvicorn has bound the socket, which is the exact signal the desktop app’s launcher is waiting for before it will show a window.
A concrete example
A developer wants to check whether the gateway is currently running without opening Hermes Desktop at all.
- They send a plain HTTP request to the dashboard API’s ops routes from a terminal.
- The same process that would answer the desktop app’s request answers theirs, since there’s only one backend.
- Seeing the gateway is stopped, they call POST /api/gateway/start directly.
- The gateway comes up exactly as if someone had clicked the equivalent button inside the desktop app, because both paths hit the same endpoint.
How it connects
This note belongs to the Interfaces family. Its closest neighboring concepts are: Hermes Desktop, Gateway, Agent Runtime, Personal OS.
Source evidence
web_server— Explicit Source Map scope boundary: hermes_cli/web_server.py is outside the approved Core scope.
Workflows
- No first-pass workflow mapping yet; this concept still appears in the vault graph through articles and source evidence.
Related articles
- No article currently mentions this concept by name/alias often enough to qualify (see mention-mining policy).
