Deployment Guide
Deploy a Managed Hermes Agent
A step-by-step guide to deploying a Nous Research Hermes Agent on Telegram or Discord — no Docker, no YAML, no VPS. Paste your bot token, pick a model, click deploy. Your bot is live in about a minute.
What Is Hermes Agent?
Hermes Agent is the open-source AI assistant framework from Nous Research. It is intentionally leaner than OpenClaw — one binary, one config.yaml, and a model choice you control per-agent. If you want a focused personal assistant on one chat platform without the full OpenClaw feature surface, Hermes is the right shape.
This guide covers the managed path. If you would rather self-host, the upstream repo is MIT-licensed and runs in Docker. If you are still deciding between frameworks, our Hermes vs OpenClaw comparison walks through the tradeoffs.
Before You Start
You will need three things:
- An OpenClaw Launch account. Create one at /register or log in. Hermes deploys are subscriber-only during the v1 launch — Lite at $6/mo (first month $3) or Pro at $20/mo.
- A bot token for whichever platform you want the bot to run on. For Telegram, DM @BotFather and run
/newbot. For Discord, create an application at discord.com/developers/applications, flip on Message Content Intent, and copy the bot token. - An OpenRouter API key (optional). If your OpenClaw Launch account already has an OpenRouter key on file, Hermes will use it. Otherwise paste one at deploy time — get one at openrouter.ai/keys.
Step 1 — Open the Dashboard
Go to /dashboard. If you are not signed in, you will get bounced to the login page with a redirect back to the dashboard.
On the dashboard, the Deploy New Instance card has two tabs at the top: OpenClaw (the default) and Hermes. Click the Hermes tab. You can also land here directly via /dashboard?framework=hermes — the Hermes tab will be pre-selected.
If the deploy attempt later returns Hermes deploys are subscriber-only during the v1 launch, head to /pricing and pick a plan. Hermes instances count against the same plan cap as OpenClaw instances — 1 on Lite, 3 on Pro.
Step 2 — Fill Out the Form
The inline form asks for just two things: chat platform and bot token. Every other value (model, project name, public-access flag, OpenRouter key) uses a sensible default. If you need to change a default, see Advanced defaults below.
Chat platform
Pick Telegram or Discord. Slack was originally on the roadmap but is deferred to a future release — the deploy API explicitly rejects it for now.
Bot token
Paste the token from BotFather (Telegram, looks like 12345:ABC-...) or the Discord developer portal. We hit getMe (Telegram) or /users/@me (Discord) live to validate the token before provisioning a container. If the token is bad, you will see INVALID_BOT_TOKEN immediately rather than a confused container that quietly fails to connect.
Advanced defaults (what is fixed and how to change it)
The inline dashboard form trades flexibility for speed — five of the six original fields now use these defaults:
- Model:
google/gemini-2.5-flash. Fastest + cheapest on the OpenRouter tier. Upstream Hermes defaults to Claude Opus but at $5 / $25 per million tokens it can blow through a Lite-tier credit budget in about a hundred turns — we pin Gemini instead. To use a different model, editconfig.yamlinside the container after deploy. - OpenRouter API key: we pull the key already attached to your OpenClaw Launch account. Configure or swap it in /settings.
- Public access: off. We do not set the
GATEWAY_ALLOW_ALL_USERSenv var, so Hermes applies its upstream user-filtering logic (allowlist / pair codes). To make the bot open to anyone, editconfig.yamlinside the container. Safer default: on Telegram especially, an open bot can be discovered and used by anyone, which means anyone can spend your OpenRouter credits. - Project name: a fixed default. This is only a dashboard label — rename it later via the card if it matters.
For per-user allowlists or other deep config, read the upstream Hermes docs and edit config.yaml inside the container.
Step 3 — Click Deploy
The form submits, we allocate a port, pull the pinned Hermes image ghcr.io/zhimingq/hermes-agent (version pinned to v2026.4.8), bind-mount /opt/data/ for your config and session state, and start the container. You get redirected to the dashboard.
The instance card starts in starting state while Hermes writes its PID file and hot-reads its config. In 30 to 60 seconds (our smoke-test baseline is around 45s) it flips to running. At that point your bot is live on its chat platform. Go DM it.
If the card is still starting after a couple minutes, check the logs via the Logs button. We validate the bot token live before creating the container, so the stuck cases are usually something post-boot — a Hermes config-parse error, an OpenRouter 401 on the first model call, or the container failing to write its PID file. A background reconciler runs every two minutes and will flip genuinely-dead instances to errorautomatically after ten.
What the Dashboard Card Does
A Hermes card on the dashboard has five buttons and one delete link:
- Start — only shows when the instance is stopped or in error. Brings it back up.
- Stop — graceful container stop. Your state persists.
- Restart — full stop + start. Use this if the bot is misbehaving — stuck in a bad state, pinned on a stale connection, or not responding despite the card showing running.
- Wake — only shows when the instance is sleeping (see auto-sleep below). Brings it back up with a readiness check.
- Logs — pulls the last 100 lines from the container stdout/stderr into a modal. Useful for debugging token errors, rate limits, and model issues.
- Delete instance — click, then confirm. The container is removed, the DB row is marked deleted, and your bind-mount dir is cleaned up. Your bot token is not stored anywhere we can recover — only a hash is kept for duplicate detection.
Auto-Sleep
If your Hermes instance sees no activity for seven days, a nightly job stops the container and marks the row as sleeping. That frees server CPU and memory for active instances and keeps our platform cheap enough to charge $6/mo.
“No activity” is measured by three signals in order: whether you visited any page on the site recently (tracked via user events), whether your OpenRouter credit usage went up, and whether Hermes' log shows actual model-call output. A continuously-polling idle Telegram bot does not count as active — only real messages do.
To wake a sleeping instance, click Wake on the dashboard card. The container starts, Hermes re-attaches to the chat platform (long-poll for Telegram, gateway websocket for Discord), and you are back in business in roughly the same 30-60 second window as a fresh deploy.
Differences from Managed OpenClaw
If you already run an OpenClaw instance on the same account, a few things look different on the Hermes card:
- No Open Gateway button. Hermes does not expose a browser chat UI. Your only interaction surface is Telegram or Discord.
- No model switcher on the card. The model is set at deploy time. If you want to switch, delete and redeploy.
- No skill install flow. Hermes does not use OpenClaw's
SKILL.mdformat. The /skills page hides Hermes instances from its target picker. - No static site hosting. That feature injects an OpenClaw-only skill.
- No Connect Platforms section. Hermes is single-platform per instance — one bot token, one platform. No runtime switching.
Troubleshooting
The instance card stays in starting forever
We validate your bot token live against the chat platform at deploy time, so token issues usually surface before the container is even created. If you got past that and the card is still starting a few minutes later, open the logs modal and check the tail of the container output. The most common remaining causes are: Hermes crashing during config parse, the OpenRouter key being rejected on the first model call, or the container failing to write its PID file due to a filesystem issue.
If the logs look normal but the card will not flip, our background reconciler runs every two minutes and will promote it to running or mark it error automatically. A stuck starting older than ten minutes gets flagged as errored so you can decide to Restart or delete.
The bot is live but does not respond to messages
Two likely causes:
- Public access is off and the user messaging the bot is not in Hermes' allowlist. Hermes silently drops those messages. There is no in-place toggle today — delete the instance and redeploy with the platform-specific “Allow any Telegram/Discord user to chat” checkbox enabled, or edit
config.yamlinside the container manually. - OpenRouter credits are exhausted for your account or key. Check your OpenRouter dashboard. Topping up credits on the same key works without any action on your side — Hermes picks up the restored balance on the next turn. If you need to rotate the key itself, delete the instance and redeploy (the key is baked in at deploy time and we don't yet expose an in-place rotate flow).
I want to change the model
Delete the instance and redeploy with the new model selected. A change-model-in-place button for Hermes cards is on the roadmap but not yet shipped.
The container crashed
Click Restart on the card. If it crashes again, open the logs modal and look for the Python traceback. If it looks like a Hermes bug rather than a config issue, email support with the container name and a log snippet.
Deploy One
Frequently Asked Questions
Is Hermes included in the Lite plan?
Yes. Both Lite and Pro subscribers can deploy Hermes. Each Hermes instance counts against the same instance cap as OpenClaw — 1 on Lite, 3 on Pro.
Can I run OpenClaw and Hermes on the same account?
Yes. Your dashboard will show both types of instances side by side. Each one gets the right card — OpenClaw cards have the Open Gateway button and model switcher; Hermes cards have the simpler start/stop/restart/wake/logs set.
Do you store my bot token?
No. We hash the token with SHA-256 to detect duplicate deploys across instances, but the raw token lives only inside the container's environment variables. Deleting the instance wipes it.
Can I bring my own Hermes model config?
Not at the API level today — the deploy form is locked to the five curated OpenRouter models. You can exec into the container and edit /opt/data/config.yaml manually if you want a different setup, but that drops out of our support envelope. Long-term we plan a BYO-config path for Pro.
What happens to my sessions when I restart?
They persist. Hermes stores session state in its bind-mounted /opt/data/ directory, which lives on the host filesystem outside the container lifecycle. Stop, start, restart, sleep, wake — your conversation history survives all of them. Only delete instance wipes state.
Can I upgrade from Hermes to OpenClaw or vice versa?
Not in place. They are different runtimes with different config formats. If you want to switch, delete the Hermes instance and deploy an OpenClaw one (or vice versa) from the landing page.