Hermes v2026.5.29 Update: Docker Security, Supervised Gateways & Smarter Interruptions
Hermes v2026.5.29 (2026-05-29) update: Hermes Agent v0.15.1 (2026.5.29) — The P
Hermes v2026.5.29 Update: Docker Security, Supervised Gateways & Smarter Interruptions
Hey there, Hermes fans! The latest update is here, and it’s a big one for anyone running Hermes in Docker. We’ve tightened up security, made your gateway more resilient, and added some much-needed guardrails for unattended bots. Let’s break it all down in plain English.
Two Ways to Use Docker with Hermes
First, a quick refresher. There are two ways Docker fits into the Hermes picture:
- Running Hermes inside Docker – The agent lives in a container, and all your data (config, API keys, sessions) is stored in a single folder on your host machine, mounted at
/opt/data. This is the main focus of this update. - Docker as a terminal backend – Hermes runs on your host but executes every command inside a persistent sandbox container. That container survives across tool calls,
/new, and even subagents for the life of the Hermes process.
This update focuses on the first option, and it’s all about making that experience smoother and safer.
⚠️ Important: Avoid Browser-Based VPS Consoles
Before we dive in, a critical heads-up. If you’re using a VPS provider like Hetzner Cloud, don’t use their browser-based console to paste install commands. These consoles mangle special characters – : can become ;, @ gets garbled, and pasted API keys can get corrupted silently. This will break your docker run commands in confusing ways.
Always connect over SSH (ssh root@<host>) for copy-paste-safe command entry. If you must use the browser console, type commands manually and double-check every :, @, =, and / before hitting Enter.
Quick Start: Setup Wizard
Getting started is easier than ever. Create a data directory and run the setup wizard interactively:
mkdir -p ~/.hermes
docker run -it --rm \
-v ~/.hermes:/opt/data \
nousresearch/hermes-agent setup
This walks you through API key setup and writes everything to ~/.hermes/.env. You only need to do this once. Pro tip: set up a chat system (Telegram, Discord, etc.) at this point so your gateway has somewhere to talk.
Running in Gateway Mode (Now Supervised!)
Once configured, run Hermes as a persistent gateway in the background:
docker run -d \
--name hermes \
--restart unless-stopped \
-v ~/.hermes:/opt/data \
-p 8642:8642 \
nousresearch/hermes-agent gateway run
Here’s the big change: your gateway is now automatically supervised by s6-overlay. If the gateway process crashes, it restarts within seconds – no container restart needed. The dashboard (when enabled) gets the same treatment.
You’ll see a breadcrumb in docker logs confirming the upgrade. Want the old behavior where the container exits when the gateway exits? Pass --no-supervise or set HERMES_GATEWAY_NO_SUPERVISE=1. That’s useful for CI smoke tests, but for production, the supervised default is strictly better.
Tool-Loop Hard Stops for Unattended Gateways
This one’s a lifesaver. By default, tool_loop_guardrails.hard_stop_enabled is false. That’s fine for interactive sessions where a human can see warnings. But for unattended gateways, warnings alone won’t stop an agent stuck in a repeated tool-call loop.
Operators who want circuit-breaker behavior should enable hard stops in their profile’s config.yaml:
tool_loop_guardrails:
hard_stop_enabled: true
hard_stop_after:
exact_failure: 5
idempotent_no_progress: 5
This means after 5 exact failures or 5 no-progress loops, the agent gets hard-stopped. No more infinite loops burning your API credits.
Running the Dashboard (Supervised Too!)
The built-in web dashboard now runs as a supervised service alongside the gateway in the same container. Just set HERMES_DASHBOARD=1:
docker run -d \
--name hermes \
--restart unless-stopped \
-v ~/.hermes:/opt/data \
-p 8642:8642 \
-p 9119:9119 \
-e HERMES_DASHBOARD=1 \
nousresearch/hermes-agent gateway run
If the dashboard crashes, s6-supervise restarts it automatically after a short backoff. Dashboard output goes to docker logs <container>, so debugging is straightforward.
Security: Exposing the API Server
The API server is gated on API_SERVER_ENABLED=true. If you need to expose it beyond 127.0.0.1, you must also set API_SERVER_HOST=0.0.0.0 and provide an API_SERVER_KEY (minimum 8 characters – generate one with openssl rand -hex 32):
docker run -d \
--name hermes \
--restart unless-stopped \
-v ~/.hermes:/opt/data \
-p 8642:8642 \
-e API_SERVER_ENABLED=true \
-e API_SERVER_HOST=0.0.0.0 \
-e API_SERVER_KEY="$(openssl rand -hex 32)" \
-e API_SERVER_CORS_ORIGINS='*' \
nousresearch/hermes-agent gateway run
A word of caution: opening any port on an internet-facing machine is a security risk. Don’t do it unless you fully understand the implications.
What’s Next?
This update is all about making Hermes more reliable and secure in production. The supervised gateway means fewer outages, the hard-stop guardrails prevent runaway loops, and the security hardening keeps your API keys safer. Upgrade your image, enable those hard stops, and enjoy a more stable Hermes!
📖 Official Docs
This article is based on the official Hermes Agent documentation:GitHub ›/releases/tag/v2026.5.29