The knowledge layer
AI agents can trust.

Code in GitHub. Architecture in Confluence. Customer context in Salesforce. Decisions buried in Slack threads. The only system that synthesizes all of it is human memory — bandwidth-limited, context-switching impaired, gone when people leave. Attest is the persistent layer underneath: every fact sourced, every claim confidence-weighted, nothing lost when someone walks out the door.

$ pip install attestdb
Interactive Demo → View on GitHub →
The Epistemic Layer

Not a search engine. Not a chatbot. Not a long context window with weak reasoning — long context with weak reasoning is actively harmful. Attest is a knowledge database: every claim has a source, a confidence score, and a contradiction detector. It updates when facts change. SaaS tools become data sources — Attest is the system of record for what is actually known and trusted.

1

Structured

Not embeddings. Not documents. Claims with subjects, predicates, objects — queryable, traversable, composable. Knowledge you can reason about.

2

Provenanced

Every fact carries its source. When a source is wrong, everything downstream is automatically flagged. No more “where did we get this number?”

3

Reasoning

Confidence changes as evidence accumulates. Contradictions coexist until resolved. Long context with weak reasoning is actively harmful — this engine reasons.

The Problem

One Database, Not Four

Actionable knowledge is fragmented across a dozen systems that don’t talk to each other. The why behind every decision lives in Slack threads. Architecture lives in Confluence pages no one updates. Customer context is locked in Salesforce. The only system that synthesizes all of it is human memory — and it walks out the door every time someone leaves.

Today’s AI stack
Graph DB
Relationships
No provenance
Vector DB
Semantic search
Stale when facts change
Doc Store
RAG context
No structure
Audit Log
Compliance
Disconnected from data
4 systems to sync. 4 systems that drift.
Attest
One claim write. All four handled.
Graph
Derived from claim triples
Vectors
Structural embeddings from topology
Documents
Evidence text in claim payloads
Audit
Provenance is structural, Merkle chain

One claim write. The graph, vectors, documents, and audit trail all update atomically. The same fact from 10 sources creates one content group with higher confidence — not 10 duplicates across four systems that slowly drift apart.

Get Started

Practicalities

Slack GitHub Confluence Jira Salesforce Meetings Email Databases
Attest
Ingest · Structure · Reason · Synthesize · Discover
MCP Server REST API Dashboard Python SDK NDJSON

Point it at a Slack export, a ChatGPT conversation, or a folder of documents — the built-in extractor (heuristic or LLM-powered, 9 providers supported) pulls out claims with provenance tracing to the exact message.

Want a visual interface? pip install streamlit pyvis and run streamlit run app.py for an interactive explorer with entity search, relationship graphs, and natural-language questions — all backed by a Rust search index.

Batch mode handles millions of claims via the Rust engine. db.at(timestamp) gives you point-in-time queries — what the agents knew last Tuesday, before the new data came in. Event hooks (db.on("claim_ingested", callback)) let you build reactive pipelines that trigger when knowledge changes.

Install pip install attestdb
Storage Single-file, no server
Provenance Required on every write
LLM providers 9 supported, heuristic mode needs no API key
Agent access MCP server built-in
License BSL 1.1 → Apache 2.0 after 4 years
$ pip install attestdb requests streamlit pyvis
$ python examples/quickstart.py

Add your Slack bot token and a Gemini API key (free) to .env. The quickstart connects to Slack, extracts claims, and opens an interactive explorer at localhost:8501.

Full quick start guide →  ·  See the interactive demo →

In Practice

One bad source. Everything downstream, automatically flagged.

The March load test had a bug in the test harness. In a normal system, you’d spend a week asking around to find what depended on it. In Attest, you ask one question.

THE SOURCE
REMOVED “Handles 10K req/s” GitHub PR #847 — bug in test harness
FLAGGED “Use r5.4xlarge instances” Confluence: capacity plan
FLAGGED “Selected Vendor B for CDN” Jira: INFRA-2041
OK “P99 latency < 50ms” Production monitoring — independent source
removed: 1  ·  flagged: 2  ·  unaffected: 1
cascade = db.retract_cascade(
    "github:load-test-march-2024",
    reason="Bug in test harness"
)

# removed: 1
# flagged: 2
# unaffected: 1

One call. The database already tracked the dependency chain — because provenance is structural, not metadata you hope someone filled in.

The Difference

One Fact. Three Databases. Only One Knows Who Said It.

“The East Palestine water is contaminated.” Here's how three different databases store that:

Relational DB
INSERT INTO events
(name, status)
VALUES ('EP Derailment', 'contaminated');
Who said contaminated? The EPA? A Reddit post? A company? No idea.
Graph Database
(Derailment)-[:CAUSED]->(Contamination)
An edge exists. Says nothing about who established it or how certain we are.
Attest
AP News citing Ohio DNR says
Derailment caused Contamination
confidence: 0.90
+ residents corroborate (0.55)
An agent extracted this — you can see exactly what it was looking at, how confident it was, and who else agrees.

When an LLM extracts 500 facts from your Slack channels overnight, you need every write to carry its source. Not as metadata you hope someone fills in — as a hard requirement the engine enforces. If two sources disagree, both claims coexist. When one turns out to be wrong, you retract it and the other survives.

When Things Break
When a source turns out to be wrong:
Row-based approach
The typical response is to UPDATE or DELETE the row. If downstream reports already used that data, there's no automatic way to trace the impact.
Edge-based approach
The typical response is to remove the edge. Unless provenance metadata was manually maintained, tracing what depended on it requires custom logic.
Embedding-based approach
The typical response is to delete and re-embed. Answers already generated from the old embedding are not automatically traceable.
Attest
Retract the source. Corroborated facts survive. Full audit trail. The knowledge base heals itself.
Our Story

Built Because Nothing Else Existed

We were running dozens of agents across thousands of research papers. They extracted findings, made claims, contradicted each other — and we had no way to store what they collectively knew in a form anyone could use.

The vector databases lost provenance. The graph databases couldn’t handle contradictions. The document stores couldn’t be queried structurally. So we built the layer underneath — at Omic, a computational biology company where AI agents ingest thousands of research papers.

The problem isn’t unique to biology. Every organization has actionable knowledge fragmented across a dozen systems, held together only by human memory — bandwidth-limited, context-switching impaired, and gone when someone leaves. Attest is the layer that was missing: structured, sourced, persistent. Knowledge that doesn’t walk out the door.

Who It's For

Built For

Agents

Agent-Heavy Engineering Teams

You’ve deployed 10–50 agents. They summarize, research, extract, classify. But where does that knowledge go? Today it vanishes when the session ends. Attest gives every agent a shared, queryable memory that gets stronger over time — not a context window that forgets. Every session compounds. The database gets smarter with every run.

The MCP server lets Claude and other agents read and write claims directly. Observe sessions, record outcomes, retrieve proven approaches. Every session compounds instead of starting from zero.

Operations

Engineering & Operations

Architecture decisions live in Confluence pages no one updates. Incident context is buried in Slack threads. When a senior engineer quits, years of “why we did it this way” vanish. Attest continuously ingests from all of it and maintains the real dependency map.

Use db.impact() to answer “what breaks if this system goes down?” from 18 months of sourced incident data. Use db.source_reliability() to know which documentation you can actually trust.

Research

Research & Discovery

Agents read every new paper in your domain as it becomes available and extract findings. They spot that your organization has deep knowledge on one drug target and almost nothing on the pathway that might connect to it — a gap no single researcher would see.

Use db.discover() to generate hypotheses from graph structure. Use db.close_gaps() to automatically research and validate them. Use db.blindspots() to find single-source vulnerabilities.