hermes
hermes is the fleet message bus. It runs on the orchestrator host and provides the coordination layer that lets Iris, minotaur, and model backends find each other, report health, and exchange control messages.
hermes does not carry inference traffic. It carries control messages only: routing decisions, capability updates, health signals, and RPC between components.
Responsibilities
Section titled “Responsibilities”- Capability discovery — backends register their loaded models at startup. hermes maintains a live capability table queried by minotaur when scheduling work.
- Topology propagation — Iris fetches the current fleet topology from hermes at startup and on a periodic refresh interval.
- Component RPC — lightweight publish/subscribe protocol for point-to-point messages between named components.
- Health tracking — backends send periodic heartbeats; hermes marks stale entries and minotaur skips them.
Default port
Section titled “Default port”hermes listens on :7677 by default. This is a LAN-local binding; hermes does not expose a public interface.
Install
Section titled “Install”hermes is installed automatically when you select the orchestrator host role:
curl --proto '=https' --tlsv1.2 -fsSL https://pantheon.lhocke.dev/installs/install.sh | sh# Select: orchestrator hostConfiguration
Section titled “Configuration”hermes configuration lives at /etc/pantheon/hermes.toml on the orchestrator host:
[hermes]listen = "0.0.0.0:7677" # LAN-local; restrict with firewall if neededlog_level = "info"
[auth]require_bearer = true # require token for off-LAN clientstoken_file = "/etc/pantheon/hermes-tokens"Restart hermes after config changes:
pantheon hermes restartpantheon hermes status # show connected components + capability tablepantheon hermes log # tail hermes log (live)pantheon hermes backends # list registered model backends and loaded modelspantheon hermes restart # restart the hermes processCapability table
Section titled “Capability table”When a backend comes online it registers with hermes:
{ "id": "backend-gpu-01", "models": ["qwen2.5:72b", "llama3.1:8b"], "classes": ["sonnet-class", "haiku-class"], "last_seen": "2026-05-30T10:12:00Z"}minotaur queries this table when it receives a work item from Iris. If no backend has the requested model class loaded, minotaur signals Iris to fall back to Anthropic (if the routing policy allows it).