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.

End-to-end architecture

SDK

in-process

Runs inside your application. Intercepts LLM calls at the framework level. No network hop for policy evaluation.

Ingest API

stateless

Receives signed events from the SDK. Validates signatures. Routes to the ledger. Horizontally scalable, stateless.

Ledger

append-only

Immutable event store. Merkle-tree indexed. Anchored to external stores for independent verification.

Dashboard

query & export

Query, search, and export audit records. Generate compliance evidence packages. Role-based access control.

From event to proof

01

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.

02

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).

03

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.

04

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.

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

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.

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