Why we built Mari
Eric Disque · 2026-08-03
Every team we've been on had the same ritual.
Someone asks a question in Slack. Someone else posts a link to a doc. The doc turns out to be a year old and wrong in two places. Then the one person who actually knows types the real answer into the thread, everyone says thanks, and the correction sinks below the scroll line by lunch. The doc stays wrong.
We ran that loop for years, across startups and big companies. The knowledge was never missing. It was in the repo, in the thread, in a ticket comment, in someone's head. What was missing was any way to hold a sentence accountable: who said this, based on what, and is it still true?
Docs don't fail loudly
Code that breaks tells you. Tests go red, alerts fire, someone gets paged at 2 a.m. and writes an incident report.
A wrong doc does none of that. It sits there looking exactly like a right doc. The failure happens later, off the page. A new hire configures the wrong thing. A support engineer repeats a policy the team retired in March. A teammate loses an afternoon to a runbook step that no longer exists. Nobody files a bug against a paragraph.
So docs rot at the speed of the product, and the rot is invisible until someone trips over it. Every wiki we've used treats that as normal. Search finds the page. Nothing tells you whether to believe it.
Then the readers doubled
Two things changed at once, and they're why we finally built the thing instead of complaining about it.
First, AI agents started reading your docs. Nearly half of documentation traffic now comes from AI tools, which retrieve a chunk, trust it completely, and hand it to a developer with confidence. A human reader might smell that a page is stale. A retrieval pipeline won't. A wrong sentence used to mislead one reader at a time. Now it gets embedded, retrieved, and repeated.
Second, AI started writing more of the docs. That sounds like the fix until you notice that generated prose has the same problem at higher volume: fluent, plausible, and unaccountable. More words, same missing answer to "says who?"
And the documents your agents run on, the CLAUDE.md files and skills and subagent prompts, rot the same way every other doc rots. The stakes went up on both sides of the page.
What a sentence needs
We kept arriving at the same short list. For a piece of team knowledge to be worth trusting, 4 things have to be true:
- It has a source. A document, a commit, a thread. Something you can open.
- It has an owner. A person who signed it, not "the wiki."
- It has a freshness state. Verified, aging, stale. Visible, not vibes.
- It gets checked against reality. When the code moves, something notices.
That list is Mari.
Mari connects the places knowledge already lives (a dozen connectors: GitHub, Slack, Google Drive, Confluence, Notion, Jira, Linear, and so on) and pulls everything into one searchable knowledge base. GitHub ingestion goes past files: commit messages, PR descriptions, issues, and comments become knowledge documents too, because that's where half the real decisions are.
On top of that base:
- Facts have owners, verification status, and freshness. A fact in Mari is a sentence someone signed.
- Answers cite. Ask a question and the answer streams with numbered citations back to the document, commit, or thread it came from. No citation, no trust.
- A lineage graph ties documents, commits, PRs, and decisions together, so "what changed, and what did that break?" is a question you can ask of a graph instead of a person.
- A repo audit scans your connected repos for documentation drift and offers one-click fixes.
- Answering is the last step, not a new place to read. Once knowledge is curated, Mari hands it back where people already ask: a knowledge chat, MCP servers for agents, a Slack bot on @mention, and a GitHub bot that checks a pull request against the record.
The boring decisions were on purpose
- It runs on your infrastructure. Postgres with pgvector is the whole data plane: documents, embeddings, lineage, and workflow runs. No extra queue, vector database, or cache to babysit.
- The LLM is optional. Models run locally through ollama, and every LLM feature has a deterministic fallback. Turn ollama off and search falls back to keyword ranking. Degraded, never broken.
- No fake anything. Metrics count real events from the day counting started. Connector errors surface verbatim. We wrote "honest by construction" into the design principles because a knowledge product that shades the truth about itself has picked a strange hill to build on.
The bet
We built Mari because "is this still true?" deserves a better answer than one person's memory, and because the cost of a wrong sentence went up. Agents read your docs now. They write them too. The teams that win won't be the ones with the most documentation. They'll be the ones whose documentation stays true, with a trail to prove it, while everything underneath it moves.
Mari is Apache 2.0 and self-hosted. Want to see it live? Book a demo, or open an issue on GitHub and pull on the thread.
— Eric