This section walks through standing up a Sannvit Ledger instance end to end — the append-only, hash-chained audit trail that seals every LLM call, tool invocation, and retrieval an agent makes into a per-org, independently re-verifiable chain.
The stack has five moving pieces:
| Service | What it does |
|---|---|
| Postgres | The only database — holds the ledger schema and Keycloak's own schema, no separate pooler or REST layer in front of it |
| Keycloak | Authentication for the dashboard and service-to-service tokens |
| Ledger API | Ingests agent activity, seals it into the per-org hash chain, and runs the alerting/integrity-check loop |
| Dashboard | The browser UI for review, alerting, and evidence export |
| Blob storage | Holds payload content — the ledger itself only stores a pointer + hash — bundled via RustFS, or point it at your own S3-compatible bucket |
More paths (native dev without containers) will land here as this section grows.