What this is
Hermes Agent is an open-source self-improving agent built by Nous Research, released February 2026. I run a self-hosted instance — I didn’t write the agent. This page is the operator story: what I deploy, why, and what I learned keeping it alive.
Problem
I wanted a programmable assistant that could run scheduled jobs, react to events, hold state across sessions, and reply from anywhere — without paying per message or living in someone else’s cloud. The desktop side (Claude Code, the vault) was already strong; the gap was mobile and ambient.
Deployment
A single $5 Hostinger VPS holds the whole stack:
- Hermes Agent (upstream
nousresearch/hermes-agent:latest) — gateway as PID 1, polls a Telegram bot, routes to DeepSeek V4 Flash via OpenRouter (~$3–8/mo at moderate use). - n8n — deterministic glue. Anything that’s not a judgment call goes here.
- Traefik + Let’s Encrypt — TLS for both, on subdomains of the Hostinger-assigned wildcard.
- Filebrowser — read-only window into the vault data dir, gated by HTTP basic auth.
Persistent state lives in a bind-mounted /docker/hermes/data directory:
config.yaml, state.db, SOUL.md, skills/, memories/, sessions/,
cron/. The container is disposable; the data dir is the asset.
What I learned migrating off the one-click image
The Hostinger one-click pinned Hermes at v0.9.0; upstream was on v0.12.0
within 20 days. I swapped to docker.io/nousresearch/hermes-agent:latest
to track the weekly upstream cadence. The bind-mount carried every skill,
memory, and session intact across the cutover — the data dir is what made
the migration painless.
A few non-obvious gotchas worth pinning:
- The gateway is the cron scheduler. Don’t run a second gateway “for cron” — you’ll double-fire jobs.
- The TUI (
hermes) and the gateway are separate processes with separate conversation surfaces but the same on-disk brain. TUI for desk, Telegram for mobile, shared memory. - Upstream image runs as UID 10000; Hostinger ran as root. Bind-mounted
data dirs need
user: "0:0"in compose to avoid permission errors on the cutover.
What’s next
Folding this site’s auto-publish loop into the same VPS — Hermes triggers n8n on a vault commit; n8n runs the Astro build and pushes to Vercel. The vault stays the source of truth; the site becomes a thin readable view of it.