A signed, traversable causal-chain proof artifact for AI agents.
When an agent takes an action — flags a renewal, denies a claim, recommends a treatment, drafts a contract clause — Monora produces the receipt: a tamper-evident document that walks every step that led to the decision (the LLM calls, tool calls, retrievals, and intermediate decisions), with a cryptographic hash chain proving nothing was altered after the fact.
It's a flight data recorder for agents, with a legal chain of custody.
- Insurance underwriters writing AI liability policies. When a claim is filed, the proof shows fault.
- ISO 42001 / SOC 2 auditors. Every AI action is logged, causally linked, and auditable. Certification audits become a report query, not a forensics project.
- Compliance officers and legal. Hand a PDF to opposing counsel and the proof speaks for itself.
- Engineers building agents on regulated systems. Drop in the SDK; get the audit trail for free.
Two layers, one product:
- SDK (Python + Node). Wraps your agent's steps. Each step becomes a signed, immutable, hash-chained event. Auto-captures parent linkage so the causal chain builds itself.
- Hosted platform. Trace inbox, proof viewer with integrity banner (✓ verified / ✗ tampered), one-click PDF download, expiring share links for non-account auditors, RBAC (admin / auditor / viewer), API keys, multi-tenant projects.
The output of a query is a Causal Proof of Record — JSON for machines, PDF for humans.
CAUSAL PROOF OF RECORD
Proof ID: prf_a1b2c3
✓ HASH CHAIN VERIFIED — EVENT LOG UNTAMPERED
Root Cause: classify_intent returned "renewal_at_risk" because
the linked CRM opportunity had no close_date populated across 47 deals.
Step 1 → llm_call:classify_intent (t=0ms, confidence 99%)
Step 2 → tool_call:crm.getOpportunities (t=342ms, confidence 97%)
Step 3 → decision:correlate_signals (t=15ms, confidence 94%)
Step 4 → outcome:flag_renewal_at_risk (t=89ms, confidence 91%)
# Python
pip install monora
# Node
npm install @monora/sdkimport { MonoraAgent } from '@monora/sdk'
const agent = new MonoraAgent({ traceId: 'deal-review-abc123', agentName: 'renewal-watcher' })
const meetings = await agent.step('llm_call', 'classify_intent',
{ prompt }, async () => llm.complete(prompt))
const opps = await agent.step('tool_call', 'crm.getOpportunities',
{ stage: 'Renewal' }, async () => crm.fetch({ stage: 'Renewal' }))
const choice = await agent.step('decision', 'pick_action',
{ candidates }, async () => rank(candidates))
await agent.outcome('renewal_at_risk', { account_id, recommended_action })# JSON proof from local WAL
monora proof <trace_id> <outcome_event_id>
# PDF causal proof of record (via the hosted server)
curl https://<your-monora-host>/api/v1/traces/<trace_id>/proof/<outcome_event_id>.pdf -o proof.pdfcurl -X POST https://<host>/api/v1/share-links \
-d '{"proof_id":"prf_a1b2c3","ttl_hours":72}'
# → returns a signed URL the recipient can open without an account- Each agent step emits an event. The envelope carries
event_id,trace_id,parent_event_id,event_type, inputs, outputs, latency, and a SHA256 hash linking it to the previous event. - Optional Ed25519 / HMAC signing at emit time. Tampering breaks the signature.
- Append-only persistence. Events go to a write-ahead log (local) or the hosted
proof_eventstable (Supabase).UPDATE/DELETEare denied at the row-level. - Proof = walk + verify. Given an outcome event, walk
parent_event_idback to root. Recompute the hash chain. If anything is altered,integrity_verified = falseand the failing step is identified byevent_id. - Render. Same JSON renders as machine-readable proof or as the PDF Causal Proof of Record.
- Not a dashboard with alerts and thresholds.
- Not a CRM/calendar/Salesforce integration.
- Not a RevOps natural-language query tool.
- Not a "renewal use case" demo.
- Not generic LLM observability.
It's one thing: the proof artifact. Everything else got cut.
The pivot is in flight. See the plan for the 6-day execution shape (SDK strip → MonoraAgent → causal-proof builder → PDF generator → Supabase schema + edge function → REST API + RBAC → Vite SPA inbox/viewer).
MIT.