4.4 KiB
4.4 KiB
title, type, created, tags
| title | type | created | tags | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Hermes / Atlas Architecture Diagram | architecture-note | 2026-05-29 |
|
Hermes / Atlas Architecture Diagram
A vector architecture diagram was created for the current Hermes/Atlas agent setup, host Docker/systemd AI services, AgentMon stack, and k0s Kubernetes homelab services.
Primary artifacts
- SVG vector source:
/home/will/diagrams/hermes-atlas-architecture.svg - High-resolution PNG export:
/home/will/diagrams/hermes-atlas-architecture-6400.png - HTML presentation page:
/home/will/hermes-atlas-architecture.html - Maintenance README:
/home/will/diagrams/README-hermes-atlas-architecture.md - SVG extraction script:
/home/will/diagrams/extract-svg.py
Why SVG
The diagram is kept as standalone SVG so it can be:
- scaled without resolution loss,
- edited later in Inkscape, Figma, Illustrator, VS Code, or a browser-aware SVG editor,
- exported to PNG at any resolution,
- updated from the HTML presentation page when the layout changes.
Current coverage
Hermes / Atlas agent plane
- Telegram, Discord, email, and local UI entrypoints.
- Default Hermes gateway process.
- Hermes state/context layer:
state.db, sessions, memory, skills, config, auth pools. - Kanban dispatcher configured inside the gateway.
- Specialist profiles including engineer, reviewer, orchestrator, researcher/writer, ops, and glm-simple.
- Cron jobs and webhook subscriptions.
- n8n/webhook producers for reminders, diary nudges, medication reminders, and Pi run results.
Host AI / automation plane
- Docker Compose services under
/home/will/lab/swarm:- Brave Search MCP
:18802 - SearXNG
:18803 - Whisper GPU
:18801 - Whisper CPU
:18811 - Kokoro TTS
:18805 - n8n
:18808 - LiteLLM defined on
:18804, but not running in the captured snapshot
- Brave Search MCP
- User systemd services:
llama-server.serviceon:18806ollama.serviceon:18807
- AgentMon:
- ingest
:8080 - query API
:8081 - UI
:8082 - Postgres and NATS backing services
- ingest
k0s Kubernetes plane
- Cluster:
k0s-cluster - Nodes:
pi50control-plane,192.168.153.210pi51worker,192.168.153.206pi3worker,192.168.153.184
- Main layers:
- ArgoCD GitOps
- MetalLB
- HAProxy, nginx, and Traefik ingress
- Tailscale exposure
- atlas-control
- gitea
- minio
- home-assistant
- monitoring
- pihole2
- plex
- tools
- backup stores
Refresh workflow
For simple edits, edit the SVG directly:
inkscape /home/will/diagrams/hermes-atlas-architecture.svg
For larger layout/content edits, edit the HTML page and regenerate the SVG:
$EDITOR /home/will/hermes-atlas-architecture.html
/home/will/diagrams/extract-svg.py
To export a fresh high-resolution PNG from the SVG:
chromium --headless --disable-gpu --no-sandbox --hide-scrollbars \
--window-size=3200,2240 \
--force-device-scale-factor=2 \
--screenshot=/home/will/diagrams/hermes-atlas-architecture-6400.png \
file:///home/will/diagrams/hermes-atlas-architecture.svg
Refresh checklist
When updating the diagram from live infrastructure, re-check:
- Hermes profile roster and gateway status.
- Active Kanban worker processes.
- Cron jobs and webhook subscriptions.
/home/will/lab/swarm/docker-compose.yamlservices and currently running containers.- User systemd service units for local model endpoints.
- AgentMon containers and exposed ports.
- k0s nodes, load balancer services, ArgoCD app sync/health status, and selected namespaces.
- Deliberate dormant or degraded states, such as OpenClaw remaining dormant or LiteLLM being defined but not running.
Source commands used
The initial diagram was based on live read-only checks:
docker ps
cd /home/will/lab/swarm && docker compose config --services
cd /home/will/lab/swarm && make ps
systemctl --user is-active llama-server.service ollama.service llama-swap.service
systemctl --user cat llama-server.service
systemctl --user cat ollama.service
ss -ltnp
hermes profile list
hermes cron list
hermes webhook list
kubectl config get-contexts
kubectl get nodes -o wide
kubectl get ns
kubectl get svc -A --field-selector spec.type=LoadBalancer -o wide
kubectl get applications -n argocd
kubectl get deploy,sts,ds,pods,svc,ingress -n <namespace>
Secrets were intentionally omitted.