Files
serverAppConfigs/serverAppConfigs-docs/Dankclaw/Hermes.md
T
Frank 207235420c hermes: CDP browser daemon + MCP client wiring for the agent
Adds a digest-pinned headless-shell Chrome DevTools Protocol daemon as a
boot-persistent quadlet unit (chrome-devtools-protocol.container). The
entrypoint override drops the image's socat front so the CDP endpoint binds
loopback-only on 127.0.0.1:9222 in the host network namespace; only the two
host-network consumers (Signal gateway, webui server) can drive it.

hermes-webui flips Network=dankclaw_default -> Network=host so its agent
process shares the daemon's namespace (0.0.0.0:8787 bind is LAN-facing as
before; no exposure change). deploy_hermes installs the new unit and starts
it if inactive without restarting in-flight browser sessions.
2026-08-31 16:25:28 -07:00

3.3 KiB

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.

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