Skip to content

Hearth Agent

Headless Hermes Agent runs as a sidecar in the Hearth Deployment — same pod, same Flux app. Hermes WebUI / hermes-oncall is retired.

Pod hearth in observability (containers hearth + agent)
Agent API http://127.0.0.1:8642 (loopback from Hearth container)
Dashboard https://hermes-dash.${DOMAIN_0} (port 9119; basic auth admin / ${ADMIN_PASS})
Auth (API) Authorization: Bearer ${HEARTH_AGENT_API_KEY}
Tools Hearth MCP at http://127.0.0.1:8000/mcp (HEARTH_SANDBOX_AGENT_API_KEY in agent env only)
Model Chosen in Hearth Settings → AIOps; sent per-request as OpenAI model. Hermes maps it via platforms.api_server.extra.model_routes (synced from Ollama on agent boot).
State PVC hearth-agent-data + ConfigMap hearth-agent-seed

Secrets (never in chat)

Secret Used by
HEARTH_AGENT_API_KEY Hearth → agent API; agent API_SERVER_KEY; dashboard session secret
HEARTH_SANDBOX_AGENT_API_KEY Agent → Hearth /mcp
ADMIN_PASS Hermes dashboard basic auth
HERMES_ALERT_TRIAGE_SECRET Optional Hearth TRIAGE_AUTH_TOKEN for legacy /homelab/* API paths

Flow

ntfy Ask AI / Investigate / incident chat (Hearth UI)
  → ensure sandbox pod (best-effort)
  → POST 127.0.0.1:8642 /v1/responses (streamed)
  → agent MCP → 127.0.0.1:8000/mcp → sandbox_exec
  → transcript on incident (provider=agent)

Ask AI (ntfy): opens https://incidents.<domain>/go/alert?fingerprint=<fp>&investigate=1 — Hearth raises/finds the incident and starts Investigate.

Incident chat (Hearth UI, replaces Hermes WebUI): on the incident page, operators continue a narrowly scoped conversation via POST /api/incidents/:id/agent/chat. Replies render as markdown. Chat reuses the same Hermes conversation as Investigate; blocked while status is running.

GitOps

All under observability/hearth/app/:

File Role
deployment.yaml Hearth + agent sidecar (+ dashboard process)
service.yaml Ports 8000 (UI/API) and 9119 (dashboard)
ingress.yaml incidents.* → UI; hermes-dash.* → dashboard
pvc-agent.yaml Agent ~/.hermes state
agent-seed-configmap.yaml First-boot model/MCP seed
sandbox-rbac.yaml Ephemeral triage pods (separate)

Provider: HEARTH_AIOPS_PROVIDER=agent.