Complete VPS Setup Guide โ Install, Configure & Run
Hermes Agent is an open-source AI assistant framework by Nous Research. It provides:
agentskills.ioMIT License ยท Python 3.11+ ยท github.com/nousresearch/hermes-agent
| Requirement | Details |
|---|---|
| OS | Linux (native), macOS, WSL2 (Windows), Termux (Android) |
| Python | 3.11 or newer |
| RAM | ~200โ500 MB idle; 1 GB+ recommended for heavy use |
| Disk | ~500 MB for install + space for sessions/skills |
| Network | Outbound HTTPS to LLM APIs + messaging platform APIs |
apt with your distro's package manager if needed.
Before installing, gather at least one LLM API key:
| Provider | Env Var | Where to get it |
|---|---|---|
| OpenRouter | OPENROUTER_API_KEY | openrouter.ai (recommended โ aggregates many models) |
| Anthropic | ANTHROPIC_API_KEY | console.anthropic.com |
| OpenAI | OPENAI_API_KEY | platform.openai.com |
| DeepSeek | DEEPSEEK_API_KEY | platform.deepseek.com |
You also need platform-specific tokens for each messaging channel you enable (Telegram bot token, Discord bot token, etc.).
# 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
~/.hermes/ โ completely separate from OpenClaw's ~/.openclaw/. No config conflicts.
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
Add ~/.local/bin to your PATH if not already there:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Verify the installation:
hermes --version
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-compose.yml provided. You'll need to manage the container yourself (port forwarding, volume mounts for ~/.hermes/).
# 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)
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
HERMES_HOME to point to a different directory โ useful for testing configs or running multiple instances.
| Variable | Purpose |
|---|---|
OPENROUTER_API_KEY | OpenRouter LLM access (recommended) |
ANTHROPIC_API_KEY | Anthropic Claude access |
OPENAI_API_KEY | OpenAI GPT access |
HERMES_HOME | Override default ~/.hermes/ |
HERMES_MODEL | Process-level model override |
HERMES_INFERENCE_PROVIDER | Provider: auto, openrouter, anthropic, etc. |
TELEGRAM_ALLOWED_USERS | Comma-separated Telegram user IDs |
DISCORD_ALLOWED_USERS | Comma-separated Discord user IDs |
GATEWAY_ALLOW_ALL_USERS | true to allow anyone (not recommended) |
HERMES_BACKGROUND_NOTIFICATIONS | Job notification mode: all, result, error, off |
# 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
ALLOWED_USERS per platform in .env before exposing the bot publicly. Leaving GATEWAY_ALLOW_ALL_USERS=false (default deny) is strongly recommended.
# 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
| Command | What it does |
|---|---|
hermes gateway run | Run gateway in foreground (for Docker/WSL2/Termux/screen/tmux) |
hermes gateway start | Start gateway as background service (systemd/launchd) |
hermes gateway stop | Stop the background service |
hermes gateway restart | Restart the service |
hermes gateway status | Show gateway status |
# 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
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.
# 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/.
# Pull latest code + reinstall dependencies
hermes update
# Check version
hermes --version
# 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
| Platform | Setup Method | Key Config |
|---|---|---|
| Telegram | BotFather โ create bot โ get token | TELEGRAM_BOT_TOKEN, TELEGRAM_ALLOWED_USERS |
| Discord | Discord Developer Portal โ create app โ bot token | DISCORD_BOT_TOKEN, DISCORD_ALLOWED_USERS |
hermes whatsapp โ scan QR code | ALLOWED_USERS (phone numbers) | |
| Signal | Phone number + linked device setup | SIGNAL_PHONE |
| Slack | Slack App โ Bot Token | SLACK_BOT_TOKEN |
| SMTP/IMAP credentials | EMAIL_* env vars | |
| Matrix | Matrix homeserver credentials | MATRIX_* env vars |
| Home Assistant | HA long-lived access token | HA_URL, HA_TOKEN |
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}"
${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.
ws://127.0.0.1:18789 (loopback)~/.openclaw/~/.hermes/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.
| Service | RAM (idle) | Notes |
|---|---|---|
| OpenClaw | ~100โ300 MB | Node.js, low CPU idle |
| Hermes | ~150โ400 MB | Python, CPU-light idle |
| Both combined | ~300โ700 MB | Fine on 2GB+ VPS |
# 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
--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.