๐Ÿ›๏ธ Hermes Agent

Complete VPS Setup Guide โ€” Install, Configure & Run

๐Ÿ“… April 18, 2026 ๐Ÿ‘ค Thota ๐Ÿ” Setup Guide ๐Ÿง Linux VPS

1. What Is Hermes Agent?

Hermes Agent is an open-source AI assistant framework by Nous Research. It provides:

MIT License ยท Python 3.11+ ยท github.com/nousresearch/hermes-agent

2. Prerequisites

System Requirements

RequirementDetails
OSLinux (native), macOS, WSL2 (Windows), Termux (Android)
Python3.11 or newer
RAM~200โ€“500 MB idle; 1 GB+ recommended for heavy use
Disk~500 MB for install + space for sessions/skills
NetworkOutbound HTTPS to LLM APIs + messaging platform APIs
๐Ÿ’ก Tip: This guide is for a Linux VPS (like Thota's Bluehost VPS). All commands assume a Debian/Ubuntu-style Linux. Replace apt with your distro's package manager if needed.

Required Accounts & Tokens

Before installing, gather at least one LLM API key:

ProviderEnv VarWhere to get it
OpenRouterOPENROUTER_API_KEYopenrouter.ai (recommended โ€” aggregates many models)
AnthropicANTHROPIC_API_KEYconsole.anthropic.com
OpenAIOPENAI_API_KEYplatform.openai.com
DeepSeekDEEPSEEK_API_KEYplatform.deepseek.com

You also need platform-specific tokens for each messaging channel you enable (Telegram bot token, Discord bot token, etc.).

System Dependencies

# Install Python 3.11+ and git if not present
sudo apt update
sudo apt install -y python3.11 python3.11-venv python3-pip git

# Verify Python version
python3 --version

3. Installation

โš ๏ธ Important: If OpenClaw is already running on this VPS, Hermes will install to ~/.hermes/ โ€” completely separate from OpenClaw's ~/.openclaw/. No config conflicts.

Method A โ€” Installer Script (Recommended)

1

Run the official installer. This installs the hermes CLI to ~/.local/bin/:

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
2

Add ~/.local/bin to your PATH if not already there:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
3

Verify the installation:

hermes --version

Method B โ€” Source Install

git clone https://github.com/NousResearch/hermes-agent.git
cd hermes-agent

# Install uv package manager first
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.cargo/env   # or source ~/.bashrc

# Install Hermes with all extras (includes MCP support)
pip install -e ".[mcp]"
# OR for full extras:
pip install -e ".[full]"
โš ๏ธ Docker: Hermes has no official Docker image. If you want Docker isolation, install manually inside a container โ€” there's no docker-compose.yml provided. You'll need to manage the container yourself (port forwarding, volume mounts for ~/.hermes/).

Post-Install Setup

# 1. Interactive first-run wizard
hermes setup

# 2. Select your LLM provider + enter API key
hermes model

# 3. Configure messaging platforms
hermes gateway setup

# 4. Add to shell profile
echo 'source ~/.hermes/hermes.sh' >> ~/.bashrc   # if installer created one
# OR simply ensure ~/.local/bin is in PATH (done in Step 2 above)

4. Configuration

Config Directory Structure

Hermes stores everything in ~/.hermes/:

~/.hermes/
โ”œโ”€โ”€ config.yaml       # Main configuration file
โ”œโ”€โ”€ .env              # API keys and secrets
โ”œโ”€โ”€ auth.json         # Messaging platform credentials
โ”œโ”€โ”€ SOUL.md           # Agent personality (optional)
โ”œโ”€โ”€ memories/         # Long-term memory files
โ”œโ”€โ”€ skills/           # Installed skills
โ”œโ”€โ”€ cron/             # Scheduled jobs
โ”œโ”€โ”€ sessions/         # Session data (SQLite)
โ””โ”€โ”€ logs/             # Log files
๐Ÿ’ก Multiple Hermes installs? Set HERMES_HOME to point to a different directory โ€” useful for testing configs or running multiple instances.

Key Environment Variables

VariablePurpose
OPENROUTER_API_KEYOpenRouter LLM access (recommended)
ANTHROPIC_API_KEYAnthropic Claude access
OPENAI_API_KEYOpenAI GPT access
HERMES_HOMEOverride default ~/.hermes/
HERMES_MODELProcess-level model override
HERMES_INFERENCE_PROVIDERProvider: auto, openrouter, anthropic, etc.
TELEGRAM_ALLOWED_USERSComma-separated Telegram user IDs
DISCORD_ALLOWED_USERSComma-separated Discord user IDs
GATEWAY_ALLOW_ALL_USERStrue to allow anyone (not recommended)
HERMES_BACKGROUND_NOTIFICATIONSJob notification mode: all, result, error, off

Messaging Platform Setup

# Start the interactive gateway setup wizard
hermes gateway setup

# WhatsApp pairing flow (QR code)
hermes whatsapp

# Approve DM pairing requests
hermes pairing approve <platform> <code>

# Example: Approve a Telegram user
hermes pairing approve telegram 12345
โš ๏ธ Security: Set ALLOWED_USERS per platform in .env before exposing the bot publicly. Leaving GATEWAY_ALLOW_ALL_USERS=false (default deny) is strongly recommended.

Skills Configuration

# Skills live in ~/.hermes/skills/ (SKILL.md format)
# Optional external skill directories (read-only) can be added in config.yaml

# Agent can create/update/delete skills via the skill_manage tool
# Bundled skills are in the agentskills.io catalog

5. Running & Operations

Start / Stop / Restart

CommandWhat it does
hermes gateway runRun gateway in foreground (for Docker/WSL2/Termux/screen/tmux)
hermes gateway startStart gateway as background service (systemd/launchd)
hermes gateway stopStop the background service
hermes gateway restartRestart the service
hermes gateway statusShow gateway status

Auto-Start on Boot (systemd)

# User-level service (recommended for VPS)
hermes gateway install

# System-level service (requires sudo)
sudo hermes gateway install --system

# Check status
hermes gateway status --system
๐Ÿ“ WSL2 note: systemd inside WSL2 can be unreliable. If hermes gateway install doesn't work under WSL2, use tmux instead:
tmux new -s hermes
hermes gateway run
# Press Ctrl+B, D to detach
And add tmux new -s hermes -d 'hermes gateway run' to your ~/.bashrc for auto-start.

Logs

# View/tail logs
hermes logs

# Filter by type
hermes logs --type agent
hermes logs --type gateway
hermes logs --type error

# Diagnostic check
hermes doctor

Log files are stored in ~/.hermes/logs/.

Updates

# Pull latest code + reinstall dependencies
hermes update

# Check version
hermes --version

Backup & Restore

# Built-in backup (creates a zip of ~/.hermes/)
hermes backup

# Restore from backup
hermes import /path/to/backup.zip

# Manual backup
zip -r ~/.hermes/ heremes-backup-$(date +%Y%m%d).zip

6. Messaging Platform Quick Reference

PlatformSetup MethodKey Config
TelegramBotFather โ†’ create bot โ†’ get tokenTELEGRAM_BOT_TOKEN, TELEGRAM_ALLOWED_USERS
DiscordDiscord Developer Portal โ†’ create app โ†’ bot tokenDISCORD_BOT_TOKEN, DISCORD_ALLOWED_USERS
WhatsApphermes whatsapp โ†’ scan QR codeALLOWED_USERS (phone numbers)
SignalPhone number + linked device setupSIGNAL_PHONE
SlackSlack App โ†’ Bot TokenSLACK_BOT_TOKEN
EmailSMTP/IMAP credentialsEMAIL_* env vars
MatrixMatrix homeserver credentialsMATRIX_* env vars
Home AssistantHA long-lived access tokenHA_URL, HA_TOKEN

7. MCP Integration

Hermes includes an MCP (Model Context Protocol) client for connecting to external tool servers:

# MCP is configured in config.yaml under the mcpServers section
# Supports both stdio and HTTP (with header auth)

# Example: Adding an MCP server
# In ~/.hermes/config.yaml:
#
# mcpServers:
#   my-server:
#     type: stdio
#     command: ["npx", "-y", "@some/mcp-server"]
#   remote-server:
#     type: http
#     url: "https://my-server.example.com/mcp"
#     headers:
#       Authorization: "Bearer ${MY_API_KEY}"
๐Ÿ’ก Tip: The ${ENV_VAR} syntax is supported in config โ€” env vars are substituted at runtime. This lets you keep API keys in .env without hardcoding them in config.yaml.

8. Coexistence with OpenClaw

OpenClaw (already running)

  • Gateway: ws://127.0.0.1:18789 (loopback)
  • Workspace: ~/.openclaw/
  • Runtime: Node.js 24+
  • Startup: systemd user service

Hermes (new install)

  • Gateway: internal port allocation
  • Config: ~/.hermes/
  • Runtime: Python 3.11+
  • Startup: systemd user service

No port conflicts. OpenClaw binds to 127.0.0.1:18789; Hermes uses internal port allocation by default. If you enable Hermes' optional API server, pick a different port.

WhatsApp โ€” Both on Same Account?

โš ๏ธ WhatsApp limitation: Both OpenClaw and Hermes use QR-code linking (WhatsApp Web protocol). Running both on the same WhatsApp account = two separate linked devices. WhatsApp allows ~4 linked devices total. Both assistants will respond independently โ€” this can be confusing. Recommended: use separate WhatsApp accounts for each, or accept that both will respond to messages.

Resource Usage on Your VPS

ServiceRAM (idle)Notes
OpenClaw~100โ€“300 MBNode.js, low CPU idle
Hermes~150โ€“400 MBPython, CPU-light idle
Both combined~300โ€“700 MBFine on 2GB+ VPS

Recommended Setup for Dual Install

# 1. Run OpenClaw (already configured)
openclaw daemon status   # or systemctl --user status openclaw

# 2. Install Hermes (don't reinstall OpenClaw)
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

# 3. Point Hermes to a different config dir (optional)
export HERMES_HOME=/opt/hermes/config   # if you want it fully separate

# 4. Use different bot tokens for each platform
# OpenClaw: Bot A for Telegram, Bot B for Discord
# Hermes:   Bot C for Telegram, Bot D for Discord

# 5. Set ALLOWED_USERS on Hermes to restrict access
echo "TELEGRAM_ALLOWED_USERS=YOUR_USER_ID" >> ~/.hermes/.env
echo "DISCORD_ALLOWED_USERS=YOUR_DISCORD_ID" >> ~/.hermes/.env

9. Sources & Docs

Research notes: The Hermes gateway default HTTP port (for the api_server platform adapter), exact RAM benchmarks under load, maximum concurrent session counts, and WhatsApp multi-device long-term stability were marked [uncertain] during research. The Hermes systemd service unit file location when installed with --system was also not confirmed. Test these in your environment. The documentation site was live at time of research but some details may have changed โ€” always verify with the official docs.