Changelog
All notable changes to Mari, the self-hosted product knowledge platform, are documented here. The format follows Keep a Changelog, and the project aims to follow Semantic Versioning.
Unreleased
Added
- Fact scans, on a schedule. Scan facts extracts candidate claims from indexed documents. The configuration picks sources, filters, and how many claims per document, and every model-backed stage carries a hard budget of calls and tokens. A scan can run once or on a cadence from hourly to weekly.
- Staged fact review. Extracted claims land as candidates attached to the run, not in the facts table. Work the queue by hand, let a bounded model pass propose verdicts for you to confirm, or let it apply its high-confidence proposals while uncertain candidates wait for you. Accepted claims publish as needs-review or verified, your choice, and every verdict stays on record.
- Impact before invalidation. A fact row's Impact view shows the embedding-space neighborhood of related facts and evidence, with each relation marked as supporting, contradicting, or sourcing the claim. High-impact facts are flagged in the table, and invalidating one preserves its history.
- Scheduled tasks. Schedule-capable workflows now live on one page: cadence, last run, next run, pause and resume (pausing keeps the cadence), run now, and remove. Connector syncs are listed here too, and Sources keeps its per-source schedule control.
Changed
- Removing a source now asks about documents. The remove dialog offers a choice: delete the indexed documents with the source, or keep them.
- Retrieval reads from versioned chunk embeddings. Rotating the embedding model adds a profile instead of overwriting vectors, so older retrieval artifacts stay reconstructible, and stale profiles are refreshed at startup.
Fixed
- Dismissing a workflow run now sticks. Dismissed runs stay hidden for you across reloads instead of resurfacing.
- A run waiting on review survives a workflow upgrade. When the pipeline gains a stage, the waiting run realigns to it instead of starting over.
- A Slack sync configured with channels the app cannot access now fails and
names them, with the fix spelled out (invite the app, reinstall with
groups:readandgroups:history), instead of reporting a healthy sync with zero documents forever. Channels can also be configured by channel ID, which survives renames. - A new Confluence connection no longer stops at exactly 2,000 pages and waits for the next scheduled run. The per-run budget for Confluence now covers up to 10,000, with anything beyond that picked up by the next run.
2026-08-27
Added
- Remove a source for real. Connector cards have a Remove action that deletes the source, its indexed documents, and its sync schedule after a confirm. Disconnect keeps its meaning: pause syncing, keep everything.
- Multiple connections per provider. Two Confluence sites or two Slack workspaces are two sources. The catalog lists each connection by name and offers Add another, and an optional display name at connect time keeps siblings apart.
- Edit connection. A stored setting, a space key or a rotated token, can be corrected on the card without disconnecting. Blank secrets keep their stored values, and saving starts a full resync.
- A Helm chart with every release.
mari-<version>.tgzis attached to each GitHub release, digest-pinned to that release's public images.
Fixed
- Reconnecting a disconnected source works. It used to fail with "already connected", leaving no way to correct a bad setting.
- Connecting an already-connected source names the source in the way and offers to open it for editing, instead of a dead-end error.
- Failed syncs show the reason the connector reported, on the card.
2026-08-22
Added
- Workflows replaces the Trajectories and Answers pages. Observed is every run the agent harvested out of a chat turn, Approved answers is the library those runs are promoted into, and a run can now be promoted to an answer in place. Old
/trajectoriesand/answerslinks redirect to/workflows. - One chat style across every surface. The console dock, a public knowledge chat, and the Slack bot all write to the same style guide: answer first, cite every claim from the retrieved context, and say so in one sentence when the sources do not cover it.
- GitHub fact-check on demand. The bot fires on a bare
@marimention in a pull request or an issue comment, or on themari:factchecklabel, and replies in the thread.
Changed
- Chat answers render as Markdown, with the documents behind them listed in a Sources block under the answer rather than inline.
- Lineage navigates. Breadcrumbs track where you are, the node cap is stated honestly as "showing N of M" with a control to raise it, groups expand in place instead of replacing the graph, the layout no longer collides and spreads as you zoom in, and search offers a dropdown of matching nodes.
- Jira connector ported to the new search API.
Removed
- The Review and Flows pages. Sync cadence is now a per-source schedule on Sources.
Open source launch
Mari is now open source under Apache 2.0.
Added
- Self-hosted by design. Mari runs on your infrastructure. Postgres with pgvector is the whole data plane for storage and search, and local models run through ollama. Every LLM feature has a deterministic fallback, so the product works with the model off.
- 14 connectors feeding one ingestion pipeline, including GitHub (files, commits, PR descriptions, issues, and comments) and Slack. GitHub webhooks trigger live re-syncs, and unchanged content is never re-embedded.
- Facts with a record. Every fact carries an owner, a verification status, and a freshness date. Answers stream with numbered citations back to the document, commit, or thread they came from.
- Lineage graph tying documents, commits, PRs, and decisions together through structural and semantic links.
- Drift audit. A repo audit scans connected repositories for documentation drift and offers one-click fixes, and the agent can tag drift.
- Publishing. Turn curated, tagged documents into a deployed docs site with the native generator or Docusaurus.