Until now, every message to a Hermes agent started a fresh Hermes process. That cost about 9 to 10 seconds before the agent even read your message. 0.9 keeps one Hermes gateway running per agent, so that wait is gone.
A gateway that stays open
Each agent gets one long-lived gateway, and each Emperor thread maps to one Hermes session. The bridge overhead per turn dropped from about 9 to 10 seconds to about 0.2 seconds.
- Stopping a turn interrupts the Hermes session directly.
- Compaction runs on a separate maintenance connection and never during a turn.
- New profile defaults: approvals and clarify questions time out after 60 s, running turns get 30 s to finish on restart, and title generation is off.
Two ways to run agents
- Managed. Emperor creates and updates Docker agents itself, on the same machine as the app.
- Remote. Run
emperor-hermes install --profile <name>on any Linux machine with systemd: a VPS, a spare PC or a Raspberry Pi.
Low-memory hosts can opt into one shared gateway for several agents. emperor-hermes doctor --plan tells you whether a host fits.
mkdir -p ~/.local/bin
curl -fsSL https://github.com/emperorclaw/emperorclaw/releases/download/v0.9.0/emperor-hermes.sh -o ~/.local/bin/emperor-hermes
chmod +x ~/.local/bin/emperor-hermes
emperor-hermes doctor --plan --profiles <name>
emperor-hermes install --profile <name>
Watch each run
A live run timeline streams each run's steps, tool calls and replies into the agent's Runs tab and into the status row in chat.
Replies you can count on
- Replies go through a durable outbox and are resolved after a crash, so a restart no longer loses or duplicates them.
- Duplicate runtimes are detected: a second copy of the same agent goes into standby instead of answering twice.
Fixed
- Retried turns keep their attempt number, so Hermes no longer rejects them as duplicates.
- Run ids include the agent, so two agents answering the same team message no longer share a run.
- The bridge no longer polls in a tight loop or rewrites its state file on every pass.
- After a long outage the bridge syncs the oldest pending messages first instead of skipping them.
Breaking changes
The 0.9 bridge requires Hermes Agent v0.22.4. Do not run hermes update on an agent host before migrating.
- The 0.3 bridge (
emperor_hermes_bridge.py) is removed. It cannot drive Hermes v0.22, and v0.22 rejects its--source emperormode. - Remote agents are installed and run with
emperor-hermes(systemd unitsemperor-hermes-gateway@andemperor-hermes-bridge@) instead of a hand-started bridge script. - Managed Docker agents use a new image that the server recreates after an update. The
:latestHermes image is no longer published. - Renamed bridge variables:
EMPEROR_CLAW_HERMES_TIMEOUT_SECONDS→EMPEROR_CLAW_HERMES_TURN_TIMEOUT_SECONDS, andEMPEROR_CLAW_HERMES_IDLE_TIMEOUT_SECONDS→EMPEROR_CLAW_HERMES_TURN_IDLE_TIMEOUT_SECONDS. - The
approvals.single_query_modeprofile default is gone. It only applied tohermes chat -q.
Upgrade notes
Update the server first. From your install folder:
docker compose pull
docker compose up -d
Managed agents are recreated with the new image after the update. Remote agents need the new emperor-hermes installer; follow Migrating Hermes agents to 0.9 step by step.