Generated banner for data-olympus
Generated logo for data-olympus

data-olympus

Memory serverOfficial Knaisoma project

Created by Knaisoma

Published in knaisoma/data-olympus. Publisher page

30 GitHub stars

What it is

Governance-grade, OKF-compatible knowledge-base format with a single-writer MCP server and CLI. Pre-release.
— the description by Knaisoma

Summary from the brain’s metadata

Governance-grade, OKF-compatible knowledge-base format with a single-writer MCP server and CLI. Pre-release. New here? Start with WHY.md. It is the story behind the project: the problem we kept hitting with coding agents, what data-olympus does differently, how it relates to Google's Open Knowledge Format, and where our benchmarks say it is strong and where it is not. The rest of this README is the technical reference.

How it works

Memory model: Markdown vault

AutoGineer overview, from the brain’s own files

Memory model: Markdown vault. Folders: .github (agent config, 20 files); bin (scripts, 7 files); docs (docs, 47 files); scripts (scripts, 29 files); src (source code, 81 files); tests (tests, 286 files). The agent reads .rules/versioning.md, example-bundle.

Folders
FolderRoleFiles
.githubagent-config20
binscripts7
docsdocs47
scriptsscripts29
srcsource-code81
teststests286
.rulesfolder5
benchmarksfolder328
deployfolder19
example-bundlefolder27
releasefolder2

The agent reads

Requirements

Runtimes: Python >=3.13

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Google Antigravity, Kiro, OpenCode, Amp, Roo Code, Cline, JetBrains Junie, Devin (ex-Windsurf)

Set it up

  1. Not scanned by AutoGineerIts dependencies are installed by pip or uv when you run it and were not scanned by AutoGineer (5 declared). https://pypi.org/project/data-olympus/
  2. Not scanned by AutoGineerAutoGineer could not scan everything it runs. https://pypi.org/project/data-olympus/
  3. Created by Knaisoma. Published in knaisoma/data-olympus. Licence: Apache License 2.0.

Usage

From the brain’s own files

  • Requires Python 3.13+ and uv.
  • Run the stable CLI directly from PyPI:
  • Install it persistently when you are ready to create a bundle and run the server:
  • An announced candidate remains opt in through its exact PyPI version.
  • Replace X.Y.ZrcN with the candidate named on the releases page, if any:
  • See release channels for what each channel means, how to verify a candidate before adopting it, and how to roll back.
  • See docs/quickstart.md for bundle initialization, server startup, readiness, agent registration, and the contributor source installation.
  • See docs/adoption.md for the full bundle authoring guide.

Documentation by Knaisoma

data-olympus

Image: knaisoma/data-olympus MCP server Image: MCP Marketplace

<!-- mcp-name: io.github.knaisoma/data-olympus -->

New here? Start with WHY.md. It is the story behind the project: the problem we kept hitting with coding agents, what data-olympus does differently, how it relates to Google's Open Knowledge Format, and where our benchmarks say it is strong and where it is not. The rest of this README is the technical reference.

data-olympus is a governance-grade knowledge-base format and server for agent workforces. It is readable by Open Knowledge Format (OKF) v0.2 consumers: it inherits OKF's directory structure, frontmatter conventions, reserved filenames, and link model, then layers governance extensions on top (stable id, controlled type/status/tier fields, supersedes chains) plus a single-writer MCP server and a CLI. CI proves two concrete directions against official Google OKF v0.2 commit ad30107c31c06aec8a7d5636e0d1058118604e6f: its reference visualization consumer reads every concept in example-bundle, and data-olympus imports, lints, indexes, searches, and retrieves the pinned official Bitcoin sample. This is fixture-scoped interoperability evidence, not a blanket guarantee for every OKF bundle or future upstream revision. The result is a git-native, version-controlled document graph of engineering standards, architectural decisions, and project knowledge that agents and humans can read, search, and extend without any proprietary service.

It governs decisions, not code. When an agent is about to make a choice (a library, a pattern, a migration), data-olympus surfaces the established standard or decision that should govern that choice. It is deliberately not a code-search, reference-finding, or "where is X used" tool: LSP, grep, and Sourcegraph already do that well. The retrieval task it targets is coding-intent to governing-rule, and it helps where current model interaction during vibe-coding is weakest: keeping the model aligned to patterns the team has already established as correct.

Status: pre-1.0 beta. Stable releases are distributed through PyPI and GHCR.

Why

  • Portable, no lock-in. The entire KB is a directory of markdown files in git. No database, no proprietary schema, no vendor.

  • Git-native diffs and review. Every change is a commit. Proposed edits go through a pending queue before commit; history is plain git log.

  • Agent and human readable. Plain markdown with YAML frontmatter. No SDK required to read or author a document.

  • Governed multi-agent writes. The single-writer MCP pipeline (advisory locks, per-session worktrees, durable push queue) prevents concurrent write races without requiring distributed locking infrastructure.

  • Queryable by status, tier, and type. Filter by status: accepted, tier: T1, or type: decision without post-processing. The supersedes chain makes it possible to trace decision history across the graph.

  • Tested with official OKF tooling. CI pins an exact Google OKF revision and proves both consumption directions over committed fixtures. The pin, fixture checksum, and Apache 2.0 license provenance live in tests/okf/reference.json.

Quickstart

Requires Python 3.13+ and uv. Run the stable CLI directly from PyPI:

uvx --from data-olympus data-olympus --help

Install it persistently when you are ready to create a bundle and run the server:

uv tool install data-olympus
data-olympus init my-kb
data-olympus-mcp --help

An announced candidate remains opt in through its exact PyPI version. Replace X.Y.ZrcN with the candidate named on the releases page, if any:

uvx --from 'data-olympus==X.Y.ZrcN' data-olympus --help

See release channels for what each channel means, how to verify a candidate before adopting it, and how to roll back.

See docs/quickstart.md for bundle initialization, server startup, readiness, agent registration, and the contributor source installation.

See docs/adoption.md for the full bundle authoring guide.

Documentation

  • SPEC.md: format specification (bundle layout, frontmatter schema, serving contracts).

  • docs/quickstart.md: verified local-run procedure.

  • docs/adoption.md: bring-your-own-KB guide (author, lint, index, serve, wire an agent).

  • docs/serving.md: single-replica serving model, read-only replicas, git pull loop, health/readiness/liveness split, proxy headers, audit-log rotation.

  • docs/operations.md: production runbook: backup, upgrade, recovery playbooks (degraded/fetch-failed, history rewrite, frozen/demoted push entries, orphaned locks), the health/alerting model, and release channels (stable and candidate, verification, rollback).

  • docs/comparison.md: how data-olympus relates to OKF, enterprise catalogs, markdown KB tools, agent-context conventions, RAG, and ADR tooling.

  • docs/okf-profile.md: field-by-field OKF profile: which governance extensions are stable, which are runtime-only serving fields, and which are experimental candidates.

  • docs/glama.md: Glama registry claim, release, and score-maintenance notes.

  • docs/mcp-registry.md: official MCP Registry notes, what server.json declares, and the checklist for publishing.

  • docs/enforcement.md: turning the KB into a mandatory consultation gate (hooks, kb enforce).

  • benchmarks/README.md: retrieval benchmark methodology and how to reproduce the numbers in docs/comparison.md.

  • SECURITY.md: supported versions and how to report a vulnerability.

License

Apache 2.0. See LICENSE and NOTICE.

WHY.md

Why data-olympus

This is the longer version of the story we could not fit into a launch post: why we built data-olympus, what it actually does differently, how it relates to Google's Open Knowledge Format, and where our own measurements say it is strongest and where it is not. It is written to be read start to finish, but the section headings are there if you want to jump.

The frustration that started it

Anyone who has spent real time building with coding agents has probably felt some version of this. You write down how things should be done. You are careful about it. And then the agent half-remembers it. It combines two instructions that were never meant to go together. It reaches for a rule that does not apply, or picks a reasonable-looking pattern that your team actually decided against months ago. Sometimes it simply drops the one constraint that mattered most. And even when it does surface the right guidance, it tends to treat it as a polite suggestion rather than a decision the team has already made.

For a while we treated each of these as a prompting problem. We wrote longer system prompts, pasted in more context, and kept a growing file of rules near the top of every session. It helped a little, and then it stopped helping. The file got long, the important lines got buried, and the model still had no way to tell a current decision from one we had retired a year ago. They were all just text.

At some point it became clear the problem was not the wording of any single prompt. It was structural. The agent had no durable memory of the team's decisions. It only had whatever fragments happened to fit in the context window that day, ranked by nothing in particular, with no notion of which rule was still in force. So we stopped trying to win the prompt and built a small system to hold that memory properly. We used its first version internally for several months, it earned its place, and we eventually pulled it out of our own setup, generalized it, and turned it into the standalone component we are sharing now.

What it is, and what it is deliberately not

data-olympus governs decisions, not code. When an agent is about to choose a library, settle on a pattern, or take a migration path, it surfaces the standard or the earlier decision that should govern that choice, and it does so with enough structure that the agent can treat the answer as authoritative rather than optional.

A small example of what that looks like. An agent is wiring up a new service and reaches for the first HTTP client it knows. Before it writes the import, it checks data-olympus, which returns the standard your team accepted last quarter naming a different client, along with the older decision it superseded that explains why. The agent uses the right one, and nobody had to remember to put it in the prompt.

It is not a code-search or reference-finding tool, and it does not try to be. Tools like LSP, grep, and Sourcegraph already answer "where is this used" and "show me this symbol" very well, and we are happy to leave that to them. The retrieval task we care about is a different one: going from coding intent to the governing rule. That is the part of working with agents that current tools support the least, and it is where a wrong or missing answer costs the most, because the agent will confidently do the wrong thing and make it look reasonable.

You capture, query, and grow rules at three levels of scope:

  • Universal: the widest scope you work at, a company, a team, or a guild.

  • Project: a product, an area, or a section of work.

  • Component: a single microservice, a library, or a part of one.

The whole knowledge base is a directory of markdown files with YAML frontmatter, kept in git. There is no database, no proprietary schema, and nothing to lock you in. A human can read and author a document with no SDK, and so can an agent. Every change is an ordinary commit, so review is review and history is git log.

What you actually get

data-olympus is three pieces that work together.

  • The format. A bundle of markdown files with YAML frontmatter, kept in git. This is the source of truth, readable and authorable with no special tooling.

  • An MCP server. It serves the bundle to your coding agents. You can run it locally just for yourself, or deploy it once and point your whole team's agents at the same endpoint. Every write goes through a single-writer pipeline that gives each agent session its own git worktree, so several people's agents can read and propose changes at the same time without colliding.

  • A CLI. A small kb client over the same API for the shell and for scripts, plus the data-olympus commands to lint, index, and visualize a bundle.

Wiring it into an agent is mostly a matter of registering the MCP endpoint, a few lines in a coding agent's config, so the knowledge base shows up as something the agent can query and propose to while it works.

The differentiators, and why they matter

A few properties are the reason we kept using it rather than going back to a long prompt file.

It knows the lifecycle of a decision. Every entry carries an explicit status, and decisions that replace older ones are linked through a supersedes chain. That sounds like bookkeeping until you watch a plain keyword search hand an agent a rule you retired six months ago because the old document happens to match the words in the query. Because data-olympus understands which rule is current, a default search downranks the superseded document below the one that replaced it (it is still returned, useful when tracing history), and a caller that asks for only in-force guidance can exclude it from the result set entirely.

It is queryable in the ways governance actually needs. You can filter by status, by tier, or by type without any post-processing, and ask things like "show me the accepted universal standards" or "what superseded this decision" and get a direct answer rather than a pile of files to read.

Several agents can write to it safely. Contributions go through a single-writer pipeline with advisory locks, per-session worktrees, and a durable push queue. Agents capture findings as they work and propose them back, low-confidence proposals wait for a human to approve, edit, or reject, and concurrent writers do not clobber each other. The knowledge base grows from real use without turning into a free-for-all.

Nothing arrives by surprise. We deliberately did not build a background ingestor that pulls in outside sources on its own. The knowledge base holds only what someone on your team decided to add and reviewed. The tradeoff is that we do not get automatic breadth, and we think that is the right trade for governing rules: when an agent treats an entry as authoritative, you want to know a human put it there on purpose. The payoff is content with no background-ingestion drift, provenance you can read straight from the git history, and retrieval you can reproduce and audit.

How this relates to OKF

By the time Google published the Open Knowledge Format, we had been running our own format internally for months. Reading the OKF spec was a slightly strange experience, because it was close to what we had independently landed on: the same instinct to keep engineering decisions as plain markdown in git and serve them to agents. That convergence is what made the decision to open up easy. Rather than keep maintaining a private format that happened to resemble OKF, or build something positioned against it, we made data-olympus a profile designed to be readable by OKF consumers and put our governance work on top of the standard instead of beside it. If OKF becomes a common way to structure knowledge bases, and we think it is a sensible one, we would rather build on it than around it.

In practice that design intent means a data-olympus bundle inherits OKF's directory structure, frontmatter conventions, reserved filenames, and link model, so an OKF consumer that tolerates unknown keys (as the OKF spec requires) can read it. We test that claim against official Google OKF v0.2 commit ad30107c31c06aec8a7d5636e0d1058118604e6f: its reference visualization consumer reads every concept in our example bundle, and our importer converts the pinned official sample into lint-clean, searchable, retrievable governed drafts. This is exact-revision, fixture-scoped evidence, not a promise about every OKF bundle or a future upstream change.

The natural question is then why use data-olympus rather than OKF directly. OKF requires only a nonempty type on a concept document and leaves governance fields open. What we add sits on top of that baseline:

  • A stable id that is decoupled from the file path, so reorganizing the tree does not change a concept's identity.

  • A controlled type vocabulary, plus explicit status and tier fields, each with a fixed set of allowed values.

  • A supersedes and superseded_by chain for decisions, so you can trace how guidance changed over time.

  • A serving and write model: an MCP server and the single-writer pipeline described above. OKF specifies neither, by design.

There is one thing OKF does that we deliberately do not. Its reference implementation ships an automatic producer that can pull structured data from a warehouse and enrich it from the web to populate a bundle with very little human authoring. That is a genuine strength if your goal is broad coverage quickly. Our goal is the opposite end of the same spectrum: curated, reviewed knowledge where accuracy and governance matter more than breadth. The two approaches compose well: a bundle the OKF producer fills can be imported and normalized into our profile, and then governed. See docs/okf-profile.md for the field-by-field breakdown of exactly which governance extensions this profile adds and how each maps to OKF baseline compatibility.

What the benchmark says

Before sharing this we built a reproducible retrieval benchmark, mostly to check our own assumptions rather than to win an argument. The honest caveats first: the corpus is synthetic (250 concepts, deterministically generated), the committed run uses a dependency-free tokenizer so token ratios across methods are meaningful but absolute counts are specific to that tokenizer, and dense vector retrieval is opt-in rather than the default. The full methodology and the numbers are in docs/comparison.md and benchmarks/README.md, and you can regenerate them. The table below is generated from the committed results and CI-checked for drift, so it cannot quietly go stale.

Maintainer-produced; not independently reproduced.

With that said, here is where we are strongest, measured against a plain BM25 keyword baseline and a status-aware BM25 baseline (BM25 that also reads the governance status field) over the same 500 queries:

<!-- BENCH:headline START -->

What we measureddata-olympusBM25Status-aware BM25
Tokens sent to the model per query (as-shipped)309430424
Tokens under normalized payload policy908585
Overall recall@k0.5820.5720.572
Serves-stale rate (retired rule reached the agent)0.0000.7500.000

<!-- BENCH:headline END -->

Three things stand out, and we are careful about attributing each one honestly. First, data-olympus answers at competitive (here slightly higher) recall while sending fewer tokens per query as shipped, and that gap widens as the knowledge base grows because its payload is an outline plus a few snippets plus one full document, independent of corpus size. But when we normalize every method to the same payload policy (charge each the cost of one full document), the token gap mostly closes, so we say plainly: the as-shipped token win is largely a lighter payload convention, not a retrieval miracle. Second, and this is the result we care about most, data-olympus never served a superseded rule across the whole run (serves-stale 0.000), while plain BM25 served the retired document 75% of the time it touched a supersession topic. Third, and this is the honest attribution, the status-aware BM25 baseline also scores 0.000 there, which tells us the staleness win comes from having the status metadata, not from our engine being a cleverer ranker. That is the point of adding the baseline: to show which advantage is real and where it comes from.

We also measured whether the curated applies_when trigger metadata earns its keep. It does: on intents whose phrasing is covered by a trigger, it lifts recall from 0.667 to 1.000, at roughly half the token cost of the BM25 baseline. And because plain keyword search will always return something, even for a question that has no governing rule at all, we added an optional abstention mode that drops the false-positive rate on those out-of-scope queries from 1.000 to 0.097 (a few distractors still share a real word with a rule; we report that residual rather than round it away). For a governance tool, abstaining beats confidently handing back a rule that does not apply.

We are equally clear about where it loses. On loosely phrased, semantic queries that share almost no words with the authored rule, every keyword method does poorly, and ours is no exception (recall 0.037). That is the territory where dense or vector retrieval has a real advantage; our optional local-embedding hybrid (off by default) closes much of it: it lifts held-out paraphrase recall from about 0.31 to about 0.53 in the governance ablation, but the default full-text stack cannot follow a phrasing nobody wrote down, and we say so plainly rather than hiding it.

A note on honesty: some of these numbers moved since the previous release. Fixing a benchmark filter bug raised data-olympus exact recall from 0.858 to 1.000, and de-leaking the synthetic corpus (it used to write the answer's lifecycle words into the document the query searched for) removed a string-echo advantage that had inflated the old staleness comparison. Where a number got better, it was a fixed measurement; where the honest methodology made a claim smaller, we changed the claim.

Where it is going, and an invitation

This is the first version we have made public, and it is our first open source project, so we are sharing it earlier than the comfortable instinct would suggest. There is plenty still on our list. But we have learned that waiting for "ready" is how things never ship, and the foundation is solid enough to build on in the open.

If any of the frustration at the top of this page sounded familiar, we would love for you to try it, tell us where it falls short, and, if you are so inclined, contribute. The quickstart in docs/quickstart.md is the fastest way in, SPEC.md is the format in full, and the issues and discussions on the repository are open. It is Apache-2.0, and the whole knowledge base is just your own git repository, so there is nothing to lock you in and nothing to walk back if you try it and move on.

Thank you for reading this far. We hope it helps your team and its agents stay on the same page. Happy vibe coding.

512 files · 486 not served here

Advantages

  • Local-first: the memory stays in files or a database on your own machine (a rule-derived fact from the brain’s files, evidence: README.md)
  • Works with 14 MCP clients (a rule-derived fact from the brain’s files, evidence: README.md)
  • Plain markdown memory that you can read and edit yourself (a rule-derived fact from the brain’s files, evidence: README.md)
  • No API key is named in its files (a rule-derived fact from the brain’s files, evidence: README.md)
  • Open licence (Apache-2.0) (a rule-derived fact from the brain’s files)

Limitations

  • No ZIP download: install it from its source (a rule-derived fact from the brain’s files)

Security

Risk level: Low risk

This brain runs

Agent instructions that run or fetch something (5)

  • AGENTS.md: `uv run pytest` on its own is not equivalent.
  • AGENTS.md: `tests/test_server_cli.py` and `tests/test_smoke.py` spawn a subprocess with `sys.executable` and read installed distribution metadata, so without the editable install they fail with `No module named data_olympus.server` and a stale version assertion.
  • AGENTS.md: Anything that gates on `uv run pytest` without the editable install (a release routine, a scheduled job) will block on a false failure.
  • AGENTS.md: Run the linter before the tests.
  • tests/importer-fixtures/.cursorrules: Run the type checker in CI and treat type errors as build failures rather than warnings.
  • Low risk: network-instructions (AGENTS.md:75)
  • Low risk: scripts-present (scripts/check_benchmark_docs.py)
  • Low risk: scripts-present (scripts/okf_conformance.py)

Attribution and licence

Created by
Knaisoma
Declared authors
  • knaisoma (declared in pyproject.toml)
Publisher
Knaisoma (Official Knaisoma project)
Source
knaisoma/data-olympus · commit 6d46033
Licence
Apache License 2.0 (files served here)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Knaisoma.

Install from source

486 of its files are not served here, so there is no ZIP. knaisoma/data-olympus at 6d46033