Replaces dormant OpenClaw. Author: Brian (Hetzner). Ack: Jonah.
Shared via/root/Downloads/SHARED COMPUTERS/DOCUMENTATION/(synced to Mac).
Nous Research's Hermes Agent (v0.12.0, 129K ⭐, MIT). The official successor to OpenClaw, by the same lineage. Multi-platform messaging gateway, NL cron scheduler, 89 bundled skills, FTS5 session search, closed-loop skill curator (self-improvement).
OpenClaw container had been dormant for 7+ days (0 calls). Stopped 2026-05-02 12:35 UTC, restart-policy=no, preserved for rollback.
| Code | /usr/local/lib/hermes-agent/ |
| Data | /root/.hermes/ |
| Binary | /usr/local/bin/hermes |
| Service | hermes-gateway.service (systemd, system-wide, run-as-user=root, enabled) |
| Memory | 114 MB resident |
| Skills | 24 bundled + 534 OC-imported = 558 total |
| Cron jobs | 3 POC: hermes-hourly-heartbeat, hermes-daily-doctor, hermes-skill-curator |
| Pre-migration backup | /root/.hermes/backups/pre-migration-2026-05-02-133200.zip (2.9 MB, restorable via hermes import) |
# /root/.hermes/config.yaml
model:
default: "primary"
provider: "custom"
base_url: "http://localhost:4000" # LiteLLM proxy enforces PAID_DAILY_CAP_USD=0
OPENROUTER_API_KEY in /root/.hermes/.env is set to LITELLM_MASTER_KEY so the bearer token reaches LiteLLM. Default Hermes calls land on Gemma 3 27B :free via OpenRouter (free), routed through LiteLLM with circuit breakers and the daily $0 cap.
Direct provider keys are wired in ~/.hermes/.env (Anthropic, OpenAI, Google AI Studio). They only fire when explicitly requested:
hermes -m anthropic/claude-opus-4.6 --provider anthropic -z "..."
hermes -m openai/gpt-5.4 --provider openai-codex -z "..."
hermes -m gemini-2.5-pro --provider gemini -z "..."
Status at install:
- Anthropic key valid but balance is $0 — top up at console.anthropic.com → Plans & Billing.
- OpenAI uses OAuth via hermes auth — Jonah needs to log in once with his OpenAI account for Codex CLI to authorize.
- Google AI Studio (Gemini): ✓ working, free quota active.
Brian's two existing systemd services already long-poll the bots:
- agent-telegram ↔ @jonah_claude_bot (COMMS — Jonah convos + business wins)
- agent-telegram-logs ↔ @brian_system_logs_bot (LOGS — errors + automation noise)
Two consumers per bot would conflict. Tokens are present in ~/.hermes/.env but commented out to keep hermes-gateway in cron-only mode. To cut over to Hermes:
systemctl stop agent-telegram agent-telegram-logs
sed -i 's|^# TELEGRAM_|TELEGRAM_|' /root/.hermes/.env
systemctl restart hermes-gateway
Open question for Jonah: cut over fully (cleaner — single agent on each bot), keep Brian's (safer — TG lifeline doesn't depend on Hermes), or new bots for Hermes (4 bots total, both stay running).
Discord, Slack, WhatsApp, Signal: not configured — Jonah hasn't asked for any. WhatsApp would conflict with agent-evolution if attempted.
Lives in /root/.claude/projects/-/memory/reference_when_to_delegate_to_hermes.md. Short version:
Hermes for: skill-driven background work matching one of the 558 skills, NL cron jobs that don't write to Brian's TG/CRM/Postgres, skill curator runs, one-shot CLI prompts.
Brian for: anything Jonah is talking to right now (voice/TG/dispatch), 20CRM/Cal/Composio/Stripe/Evolution writes, code edits + specialist agent dispatch, /agency social publishing (hard rule), GEO daily hour, daily evening brief.
hermes claw migrate --source /opt/agent/data/openclaw/config --preset full --overwrite --yes
--overwrite (model section restored from config.yaml.pre_migrate backup to preserve LiteLLM routing)/root/.hermes/backups/pre-migration-2026-05-02-133200.ziphermes doctor # full check
hermes cron list # 3 POC jobs
hermes curator status # 530 active skills tracked
systemctl status hermes-gateway # service running
journalctl -u hermes-gateway -f # live logs
ls /root/.hermes/sessions/ # session FTS5 db + per-call dumps
Known minor issues:
- ~/.local/bin/hermes symlink missing (root uses /usr/local/bin PATH — irrelevant). hermes doctor --fix would create it.
- MESSAGING_CWD=~/.openclaw/workspace in .env is a deprecated OC import — harmless warning. Move to terminal.cwd in config.yaml if you want it gone.
- Cron-fired calls hit a LiteLLM 400 No connected db error on first try (interactive -z calls work fine; under investigation — likely a virtual-key / DB-auth path issue when called from the curator's tool-use loop).
If Hermes needs to come down:
systemctl stop hermes-gateway && systemctl disable hermes-gateway
rm /etc/systemd/system/hermes-gateway.service && systemctl daemon-reload
docker update --restart=unless-stopped agent-openclaw && docker restart agent-openclaw
hermes uninstall # nukes /usr/local/lib/hermes-agent + /root/.hermes
/usr/local/lib/hermes-agent/ (full repo, ~170 MB)/root/.hermes/ (config.yaml 53KB, .env, 558 skills, sessions/, cron/, logs/, backups/)/usr/local/bin/hermes (symlink to venv binary)/etc/systemd/system/hermes-gateway.service/root/.hermes/backups/pre-migration-2026-05-02-133200.zip/root/.claude/projects/-/memory/reference_when_to_delegate_to_hermes.md/root/.claude/projects/-/memory/feedback_act_dont_ask_except_money.md/root/.claude/projects/-/memory/MEMORY.md (2 new lazy-load lines)agent-openclaw container (preserved for rollback, restart-policy=no, currently up — will stop on next reboot)