Audit · Open Source
fasten
The substrate. Records what happened, correlated across every transport, hash-chained so it can't be quietly rewritten.
Verify before · govern during · prove after
Others observe the execution. We govern it before and during, then preserve verifiable evidence after.
membrane governs before and during. fasten proves what happened after: an open-source substrate, typed, correlated by one request_id, hash-chained. fasten fleet carries both across a fleet.
Audit · Syslog · API in one view.
A debugging workflow for system events and AI agents alike.
One Substrate · Three Products
Audit · Open Source
The substrate. Records what happened, correlated across every transport, hash-chained so it can't be quietly rewritten.
Belief · Commercial
Built on fasten, for AI agents. mbnl normalizes any model's output, then membrane computes what the agent believes: which source won, what drifted, what's stale. The control tier enforces policy before a bad action lands.
Explore membrane →Data Plane · Commercial
Aggregate the whole fleet into one queryable plane. Compliance reports, tamper-evident archive, tiered retention. Hosted or air-gapped.
Explore fleet →membrane and fleet are built on the fasten substrate: one typed, correlated, tamper-evident event model. A layer below agent-orchestration frameworks (LangGraph · CrewAI · AutoGen) and above per-call tracing, where every framework leaves state to you.
How it works
Every stream across agents, services, and transports threads into one typed substrate. On top sit two lenses and a control tier. The model is Audit → Belief → Correction:
fasten
Records what happened. Typed, correlated by one id, tamper-evident across every transport.
membrane
Compute what the agent believes and reconcile it against your systems of record. Catch drift.
membrane · control tier
Decides and enforces. Blocks the action on stale or contradicted state before the side-effect lands.
↳ mbnl sits in front of all three, normalizing any model or vendor's output to one typed event before it enters the substrate. control is membrane's enforcement tier, not a separate product.
Why fasten
A software system is more than AI agents. Logs, metrics, and traces tell you what is happening. fasten is the connective tissue across AI and non-AI components. It is the fourth pillar, joining all three with the tamper-evident record of what happened, who changed it, who can prove it.
One request_id correlates typed audit events, structured logs, HTTP access, and system events into a unified 3-pane view.
Why the fourth pillar and not another log stream: the time axis. Observability is signal (sampled logs, aggregated metrics, point-in-time spans). fasten records the evolution of state: who held what belief at what moment, how the chain looked an hour ago, how an operation unfolded across audit, Syslog, and API.
The same primitive serves any system that does anything consequential: banks, hospitals, industrial control, mobile apps, SaaS backends, regulated manufacturing, and AI agents.
Most teams already run a great observability platform and a great compliance platform. They still carry a gap that fills with a homegrown audit table, glue code, and quarterly log scraping. fasten fills that gap natively.
Typed at the source
Every audit event is a value in a finite catalogue you ship with the code (fasten.codes.register(...)). The reader, the agent, and the auditor share one closed vocabulary. Hallucinated field names are structurally impossible.
Correlation at the type level
request_idEvery audit row carries who, what, when, where, why, how, and the correlation id. Joins across the three streams (Audit Trails · Syslog · API (HTTP) Access logs) and across the fleet are not inferred. The schema does them. One request_id threads everything.
Independently verifiable
Each audit row carries prev_hash and hash. Tampering surfaces at first_break_at with a reason string. The chain is verifiable without the LLM in the loop. The row either matches or it doesn't.
One substrate, two reasoning lenses on top. fasten fleet's /investigate reasons over audit history and returns cited rows. Membrane reasons over agent beliefs and blocks bad state at write time. Same hash-chained rows, different surfaces. The evidence is the same row both lenses cite.
membrane · Drift Reconciliation
An agent holds plan = Growth, active. Billing cancelled them three days ago (a missed webhook, or a value cached at session start). membrane reconciles the belief against the source of record and flags the divergence before the refund goes out.
fasten fleet · The 2 a.m. Incident
Two hundred instances; one misbehaves; the request crossed MQTT → scheduler → microservice → an external API. Jaeger sees HTTP spans, Loki has unstructured logs, the audit table is local and homegrown. fasten threads one id end to end; fleet aggregates every node into one queryable plane.
Provable audit and shipping fast stop being a tradeoff.
Open source, six languages, your first hash-chained event in five minutes. Add membrane and fleet when you need belief and the fleet view.
The audit substrate for distributed systems. The belief layer for the AI agents on top of them.