Sanari
sanari.ai

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.

Overlay in their DC

Query left. Execute only after APPROVE. 8B never writes.

  • HITL
  • Sanari UI
  • Collector
  • Query
  • Execute
HUMAN CONTROLCAB · SupportTypes APPROVE · owns allow-listAPPROVECONTROL PLANE · SANARI UIInbox · Blast · Allow-list · AuditHybrid: this box may sit in our VPC. On-prem: same DC.ON-PREM COLLECTOR · NO INBOUND WEBHOOKAdaptersPoll Jira DC · SnowQuery Prom / DT / ELK sliceGit at deploy SHAConfluence / OpenAPI indexREADRuntime + 8B clerkCase state machineConstrained JSON RCACode-hint (parser + prose)HITL interrupt lives hereNEVER EXECUTESWorkersPaused until APPROVEVault checkout (ephemeral)Allow-listed runbook onlyComment back to ticketWRITEONE POSTGRES · PILOTCases + HITLpgvector RAGGraph cachequeryexecute8B recommends. Graph names blast. Allow-list decides. Human types APPROVE.Demo today is the control-plane row. Collector and Postgres are the pilot build.
System architecture

Where it runs. Bajaj: skip the cloud strip. Hybrid: UI may sit above the perimeter.

  • Operator
  • Hybrid UI
  • Customer DC
  • Query
  • Execute
OPERATORS · CORP NETWORKBrowser · HITLSSO · Entra / AD FSCAB types APPROVENo Sanari agent on laptopsSANARI CLOUD · HYBRID ONLY · SKIP FOR BAJAJ ON-PREMsanari-ui (optional)License / heartbeatTLS out from DC. No inbound punch.DC PERIMETER · INBOUND WEBHOOK DENIED · OUTBOUND 443 OPTIONALSANARI RACK · COLLECTOR HOSTsanari-uiCase · blast · APPROVEsanari-collectorPoll · index · orchestratesanari-workerExecute after APPROVE8B runtimellama.cpp / vLLM · GPU optionalPostgreSQL 16 + pgvectorCases · RAG · graph cacheCompose on 1 VM (pilot) or k8s ns (20+)Vault path for runbook creds · SSO group for APPROVEENTERPRISE SYSTEMS OF RECORDJira Data CenterServiceNowPrometheus / DynatraceELK / OpenSearchGitLab / BitbucketConfluenceVaultAnsible / K8sQuery: Jira · Snow · Prom · ELK · GitExecute: Vault checkout → Ansible / SQLWe do not ingest the log lake or mirror Git.Git read at deploy SHA for API-failure hints.queryexecute

Stack, top to bottom

  1. 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
  2. 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
  3. 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)
  4. 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)
  5. 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)
  6. 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. 1. Collector polls Jira DC / Snow (10s). Dedupes.
  2. 2. Classifies with 8B JSON (or unknown). Graph names blast.
  3. 3. Queries a metric/log/git slice — does not ingest the lake.
  4. 4. Writes RCA + optional code-hint. Case checkpoints.
  5. 5. HITL: human types APPROVE. Worker runs allow-listed command via Vault.
  6. 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.