Sanari · technology
Architecture
Two views. Overlay (what talks to what). System (where it runs). Collector in their DC. 8B is a clerk. HITL is the write path. The clickable demo is the control-plane surface only.
Query left. Execute only after APPROVE. 8B never writes.
- HITL
- Sanari UI
- Collector
- Query
- Execute
Where it runs. Bajaj: skip the cloud strip. Hybrid: UI may sit above the perimeter.
- Operator
- Hybrid UI
- Customer DC
- Query
- Execute
Stack, top to bottom
01
Human control
CAB and support. Typed APPROVE is the interrupt. Code hints are advisory only.
- Change Advisory Board
- Support / DBA / API owner
- Allow-list admin
02
Sanari control plane
What this demo is. Case, blast map, HITL modal, audit. No secrets, no bulk logs.
- Inbox & case
- Blast graph
- APPROVE modal
- Allow-list
- Audit
03
Durable runtime
Ops-grade case. Checkpoint before every write. LangGraph-shaped graph, Temporal-style durability.
- Case state machine
- HITL interrupt
- Streak / auto gate
- Prompt pack (versioned)
04
Collector (their DC)
Hands and eyes on prod. Polls. No inbound webhook required. 8B clerk, not the SRE.
- Ticket adapters (Jira DC, Snow)
- Evidence query (Prom / DT / ELK slice)
- Git read at deploy SHA
- Wiki / OpenAPI indexer
- Local 8B (classify, RCA prose, comment, possible-fix)
- Execute workers (Vault checkout → allow-listed runbook)
05
Sanari data (Postgres)
One database on the collector for the pilot. Not a second Datadog.
- Cases + HITL + streak
- pgvector chunks (Confluence, OpenAPI)
- Graph cache (nodes / edges from CMDB)
- Case memory (closed RCA JSON)
- Evidence snapshots (slice only)
06
Customer systems of record
We query. We do not replace. Bulk data stays here.
- Jira Data Center, ServiceNow
- Prometheus / Grafana / Dynatrace / ELK
- GitLab / Bitbucket (read deploy key)
- Confluence / support docs
- CMDB
- Vault, Ansible / K8s
Data stores
Pilot: one Postgres. Three jobs, not three clusters.
Cases
PostgreSQL 16
Incidents, APPROVE, audit, streak, code-hint objects
RAG
pgvector (same Postgres)
Confluence / OpenAPI chunks + embeddings. Qdrant only at 100-app scale.
Graph
node / edge tables (same Postgres)
App → API → DB → Kafka. Neo4j only if multi-hop blast is actually slow.
Request path
- 1. Collector polls Jira DC / Snow (10s). Dedupes.
- 2. Classifies with 8B JSON (or unknown). Graph names blast.
- 3. Queries a metric/log/git slice — does not ingest the lake.
- 4. Writes RCA + optional code-hint. Case checkpoints.
- 5. HITL: human types APPROVE. Worker runs allow-listed command via Vault.
- 6. Comment back to the ticket. Streak updates. Case memory stores the JSON.
Not in Sanari
- Full log lake (ELK stays ELK)
- Full Git mirror
- OneAgent / host instrumentation
- Merge to main / code deploy from the case
- Frontier API key on the Bajaj path
Install shape, sizing, and readiness: deployment package.