# ADR 0013 — Signal trigger architecture **Status:** Accepted **Date:** 2026-07-08 ## Overview When Nomos is asked "what are the thermals of hubris?", here is exactly what happens: ```mermaid sequenceDiagram participant N as Nomos (Agent) participant A as Oikos API participant S as Scheduler (Docker) participant H as Hubris (Proxmox) participant T as TimescaleDB Note over S,H: Every 60s (autonomous loop) S->>H: SSH exec /opt/oikos/checks/cpu_check.sh H-->>S: {"health":"ok","metrics":{"cpu_pct":2.5,"cpu_temp":48}} S->>T: INSERT metric_samples (cpu_pct, cpu_temp) S->>T: UPSERT entity_status (health) alt unhealthy S->>T: UPSERT signal (dedup by target+kind) end Note over N,T: User asks "what are the thermals of hubris?" N->>A: MCP query_metrics(metric=["cpu_pct","cpu_temp"]) A->>T: SELECT time_bucket(…) FROM metric_samples T-->>A: cpu_pct=15%, cpu_temp=48°C A-->>N: {avg, min, max} per bucket ``` ## Two Paths ### Path A — Autonomous Collection (Scheduler) 1. Operator creates a check via REST API: `POST /api/v1/checks` 2. Scheduler loads enabled checks every 30s from `check_defs` table 3. For `ssh-script` checks, scheduler SSHs to target host and runs `/opt/oikos/checks/