# Hermes Hermes is the self-improving AI agent from Nous Research. It runs in a terminal, Telegram, Discord, Slack, WhatsApp, or Signal, and keeps a persistent learning loop: it creates skills from experience, searches past conversations, and builds a model of the user across sessions. **Host:** Dankclaw — **Hostname:** `hermes.dankclaw.local` — **Docs:** https://hermes-agent.nousresearch.com/docs **Persistent state:** `/home/dank/hermes-data` on Dankclaw, mounted as `/data` in both containers. The tracked, sanitized configuration baseline is [`dankclaw/hermes/config.yaml.example`](../../dankclaw/hermes/config.yaml.example). ## Facts (from research, primary source) | Item | Value | |------|-------| | Image | built from `NousResearch/hermes-agent` (official Dockerfile in repo) | | License | MIT | | Model backends | Nous Portal, OpenRouter, OpenAI, or any custom endpoint | | Interfaces | TUI, Telegram, Discord, Slack, WhatsApp, Signal | | Memory | FTS5 session search, Honcho user modeling | | Skills | self-created, self-improving during use | ## Configuration - Point Hermes at the local model endpoint or an external provider through its provider config. - The gateway process exposes one port for chat integration; the exact port is set in the Hermes config (`8090` convention in this repo). - The data volume persists skills, memory, and session history. - Hermes has two named local providers: `dankclaw-large` reaches `http://192.168.0.143:7770/v1` and exposes `frank-default-large`; `dankserver-small` reaches `http://192.168.0.235:7770/v1` and exposes `frank-default-small`. - The live `config.yaml` contains secrets and user state and is not committed; the tracked example is the sanitized backup of its non-secret settings. ## Volumes | Container path | Host path (convention) | |----------------|------------------------| | `/data` | `/home/dank/hermes-data` | ## Gotchas - Hermes is under active development; pin the image tag for reproducibility. - Model choice drives quality; the local `frank-default-large` (Dankclaw, 7770) is the intended backend. - Do not expose the gateway without auth — put it behind [[Caddy]] with basic auth. ## Browser automation (Chrome DevTools Protocol daemon) The agent's browser tool is an MCP client (`mcp_tool.py` in the image) that spawns `npx -y chrome-devtools-mcp@latest --browserUrl=http://127.0.0.1:9222` per session; the browser itself lives in a dedicated daemon container, the digest-pinned headless-shell unit `chrome-devtools-protocol.container` (host network, loopback-only bind on 127.0.0.1:9222). Both consumers — the Signal gateway and the webui server — run in the host network namespace, so they can dial the daemon on loopback; nothing on the LAN can reach the CDP endpoint. The wiring lives in the live `/data/config.yaml` under `mcp_servers.chrome-devtools` (command `npx`, args `-y chrome-devtools-mcp@latest --browserUrl=http://127.0.0.1:9222`). The npx package cache lives in the container layer, so a recreation (not just a restart) pays one first-call npm download; subsequent calls are cached. ## See Also - [[Hermes-Dashboard]] — the LAN browser management UI - [[Hermes-WebUI]] — the Hermex server (phone-facing API, SSH-tunneled) - [[Dankclaw Stack]] - [[OpenWebUI]] — the chat UI that pairs with Hermes - Knowledge base: [[SearXNG]] (Hermes as the search agent)