Product architecture
What CausalAgent actually is, minus the demo
Nine services. One job each. An agent's own telemetry goes in one end; a causal graph of why it behaved that way comes out the other. Everything here ships to a customer — nothing here is the Astronomy Shop.
Deliberately left out: the Astronomy Shop (11 storefront microservices), its OTel Collector, Kafka, Postgres, Locust, and Ollama — that's a synthetic traffic generator for local demos and CI, not part of what ships. See the Wiring page for that full picture.
Also not drawn:
api queries ClickHouse, Redis, and variable-extractor directly for live status, not only through causal-engine — omitted to keep the one path that matters, discovery, uncluttered.The nine components
What each one is for, and the one thing it depends on.
| Service | Port(s) | Job |
|---|---|---|
| variable-extractor | :8001 · OTLP :4317/:4318 | The only ingest path. Allowlist-only extraction against a YAML schema; blocks PII before anything is written. |
| clickhouse | :8123 · :9000 | Columnar store for every extracted variable row and every discovered graph. |
| redis | :6379 | Stream buffer between extraction and storage; live cache for the API. |
| causal-engine | :8002 | Reads ClickHouse only. Ten discovery/estimation algorithms behind one selector; grades every edge before it's trusted. |
| api | :8000 | The only public surface. Orchestrates the other three; nothing external talks to them directly. |
| dashboard | :5173 | React + D3 — the human-facing consumer of the API. |
| hallucination-judge | :8091 | Standalone. Scores a (prompt, completion) pair; only the verdict leaves the container. |
| groundedness-judge | :8092 | Standalone sibling — scores whether an answer is derived from retrieved context. |
| MCP / external agents | — | Not a CausalAgent service — any programmatic client of the API, alongside the dashboard. |