Skip to content

Hermes Agent VPS setup walkthrough: create a Hetzner VPS, non-root user, Tailscale, SSH hardening, and systemd service. Covers the three-layer memory architecture, how skills differ from OpenClaw, and production folder structure with playbooks above skills.

Memory Architecture

Hermes has three memory layers:

  • Session memory: current session context, similar to Claude Code
  • Persistent memory: SQL database storing conversation history, facts, and learned behaviors across sessions
  • Skills: SKILL.md files loaded progressively, not all at once

Skills load only when relevant to the current task. With 150 skills, Hermes does not load all 150. This makes Hermes more token-efficient than systems that load everything at session start.

Comparison to Other Harnesses

HarnessMemorySelf-ImprovementBest For
Claude CodeEphemeralNoCoding, one-off tasks
OpenClawSome persistentManualTeam identity, custom memory builds
HermesFull SQL-backedYesOperator workflows, recurring automation

Hermes self-improves: correct it once, it writes the correction to memory, updates the relevant skill, and remembers for next time.

VPS Setup Steps

1. Create Hetzner VPS

  • European location, Ubuntu OS
  • Add SSH key (generate with ChatGPT or Claude if needed)
  • Cheapest option ($5-10/month) is sufficient

2. Create Non-Root User

bash
adduser hermes
usermod -aG sudo hermes

Never run Hermes as root.

3. Install Tailscale Run the one-liner from tailscale.com, run sudo tailscale up, authenticate via browser. Gives you the VPS Tailscale IP for secure access from anywhere.

4. SSH Hardening Copy authorized_keys from root to hermes user's .ssh directory. Set UFW firewall to allow UDP 41641 (Tailscale). Block unnecessary ports.

5. Install Hermes Connect VS Code Remote to the Tailscale IP, log in as hermes user, run the Hermes one-liner install command. Setup wizard covers: model selection, messaging platform, systemd service.

6. Configure Telegram Create bot via @BotFather, get token, find your Telegram user ID via @userinfobot. Telegram topics bind to different CWD directories for project isolation.

Production Folder Structure

playbooks/     - SOPs defining which skills to use for which task
execution/     - deterministic Python/Node scripts for consistent output
output/        - drafts and working files
projects/      - per-project Git repos, each with its own agents.md

The playbooks sit above skills: they define the workflow, skills handle execution. Scripts in the execution layer make tasks more deterministic than relying on the agent to improvise.

agents.md vs soul.md

  • agents.md (or agent.md): per-repo instructions for the agent. Equivalent to CLAUDE.md in Claude Code. Lives in each project folder.
  • soul.md: agent persona and communication style. Lives in .hermes/ at the profile level. Keep under 60-100 lines to avoid token waste every session.

Key Principles

  • VPS preferred over local machine: runs 24/7, can be hardened, can be destroyed and recreated without risk to your main machine
  • CWD binding: CD into a project folder and initialize Hermes there; it operates only within that repo
  • Telegram topics map to projects: one topic = one project context

Private reference - Merlino AI