ARCHITECTURE
Designed for zero-trust AI infrastructure
A technical deep dive into how obsvr intercepts, enforces, signs, and stores every AI decision - without ever touching your data.
SYSTEM OVERVIEW
End-to-end architecture
SDK
in-processRuns inside your application. Intercepts LLM calls at the framework level. No network hop for policy evaluation.
Ingest API
statelessReceives signed events from the SDK. Validates signatures. Routes to the ledger. Horizontally scalable, stateless.
Ledger
append-onlyImmutable event store. Merkle-tree indexed. Anchored to external stores for independent verification.
Dashboard
query & exportQuery, search, and export audit records. Generate compliance evidence packages. Role-based access control.
CRYPTOGRAPHIC CHAIN
From event to proof
HMAC-SHA256 Signing
Every event is signed with your tenant key. The signature covers: prompt hash, response hash, policy result, timestamp, model, token count. Any modification invalidates the signature.
Merkle Tree Indexing
Signed events are inserted into a Merkle tree. Each leaf is a signed event hash. The root hash represents the integrity of the entire audit trail. Verification is O(log n).
WORM Storage
Merkle roots are periodically written to immutable WORM storage - currently S3 Object Lock. Even cloud administrators cannot modify or delete these anchors during the retention period.
GitHub Anchor
For maximum transparency, Merkle roots can be committed to a public or private GitHub repository. This creates an independent, timestamped witness of your audit trail.
DATA FLOW
What stays local vs. what reaches obsvr
Stays in your infrastructure
- Raw prompts and responses
- API keys and credentials
- User session data
- PII and sensitive content
- Application state
Reaches obsvr
- Signed event metadata
- Content hashes (SHA-256)
- Policy evaluation results
- Token counts and model identifiers
- Merkle tree positions
RESILIENCE
What happens when obsvr is unreachable
obsvr is designed with a fail-open architecture. If the obsvr service is unreachable, your application continues to function normally.
SDK disables interception
The SDK detects connectivity loss and disables the interception proxy. LLM calls proceed directly to the provider with zero latency impact.
Events buffered locally
Undelivered events are buffered in local storage (configurable: memory, disk, or Redis). No data loss.
Automatic recovery
When connectivity is restored, buffered events are replayed in order. The Merkle chain is reconstructed seamlessly. No manual intervention required.
ISOLATION
Multi-tenant by design
Every tenant is cryptographically and logically isolated. Namespaces enforce strict boundaries across the entire stack.
- Separate signing keys per tenant
- Isolated Merkle trees per namespace
- Tenant-scoped RBAC for dashboard access
- Data residency controls (region pinning)
- No cross-tenant data leakage - enforced at the storage layer