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.
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.
| Folder | Role | Files |
|---|---|---|
| .github | agent-config | 20 |
| bin | scripts | 7 |
| docs | docs | 47 |
| scripts | scripts | 29 |
| src | source-code | 81 |
| tests | tests | 286 |
| .rules | folder | 5 |
| benchmarks | folder | 328 |
| deploy | folder | 19 |
| example-bundle | folder | 27 |
| release | folder | 2 |
The agent reads
- .rules/versioning.md evidence: AGENTS.md
- example-bundle evidence: README.md
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
- 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/
- Not scanned by AutoGineerAutoGineer could not scan everything it runs. https://pypi.org/project/data-olympus/
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, ortype: decisionwithout post-processing. Thesupersedeschain 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 --helpInstall 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 --helpAn 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 --helpSee 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, whatserver.jsondeclares, 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 indocs/comparison.md.SECURITY.md: supported versions and how to report a vulnerability.
License
docs/enforcement.md
Enforcement (mandatory consultation gate)
data-olympus can act as an enforced gate for code and architectural decisions, not only an advisory knowledge base. Enforcement is per-agent: it runs in each agent's hook surface, driven by a shared policy core in the server.
Gate policy: only an explicit consult clears the gate
The gate means "the agent explicitly consulted the governing rules for this work", not merely "an HTTP call to /consult happened recently in this session". Two kinds of consult are recorded:
Explicit consult (
trigger: "explicit", the default): a deliberatekb_consultMCP call (or aPOST /api/v1/consultwith notrigger, since an old client sending a bare consult is always a real agent action). Only an explicit consult that is still fresh (withinKB_CONSULT_TTL_SEC) satisfies the gate for its(session_id, workspace)pair.Prompt-hook consult (
trigger: "prompt_hook"): the auto-consult the per-agent installers fire on every user turn (Claude/CodexUserPromptSubmit, GeminiBeforeAgent) to inject governing rules into the turn's context. It is recorded for audit/compliance and its rules are still injected, but it never clears the gate. Otherwise every user prompt would refresh the ledger and the gate would fire only during autonomous stretches longer than the TTL.
A prompt-hook consult never downgrades a still-fresh explicit consult on the same
(session, workspace): the ledger tracks the last explicit consult separately, so
interleaved prompt-hook consults cannot un-clear a gate an explicit consult
cleared.
kb_gate_check only requires a consult for actions the classifier deems
governed. Which explicit consults clear a governed action depends on
KB_GATE_CLEARANCE, described in the next section.
Clearance is bound to the consulted intent (issue #296)
Under KB_GATE_CLEARANCE=intent, the default, a fresh explicit consult clears
only the governed actions its intent covers. A consult about the database schema
no longer clears a pip install that follows it inside the TTL.
Each explicit consult records a coverage set computed from its intent text:
the keyword signals (
keyword:<kw>) the classifier finds in the intent;a
command:<fragment>signal for each governed command fragment the intent contains, by the same substring rule the gate applies to a Bash command;a
path:<glob>signal for each whitespace or quote delimited token of the intent, computed by the same path matcher the gate applies toaction_path. A quoted span counts as one token, so a path containing spaces can be named.
Coverage accumulates per (session_id, workspace): several fresh consults on
different topics all count, and each signal expires on its own TTL. A
prompt-hook consult never adds coverage. A governed action is allowed when
EVERY one of its signals is covered by a fresh coverage signal, either directly
or through the family mapping below. An action that is both a dependency
manifest edit and an install command needs both covered; one dependency consult
does that through the mapping.
Path signals are compared by family, the glob with one leading */ removed, so
path:*/go.mod (a nested services/api/go.mod) and path:go.mod are the same
family, go.mod.
The family mapping lets a topical consult cover the actions it plainly governs, without the agent reciting file paths:
| Action signal | Covered by any of |
|---|---|
path: dependency manifest families (pyproject.toml, package.json, requirements*.txt, go.mod, Cargo.toml, pom.xml) | keyword:dependency, dependencies, package, library |
command: built-in install fragments | the same four keywords |
path: families migrations/* and migration/* | keyword:migration, migrate, schema |
path: families schema/*, schema.sql and *.sql | keyword:schema, migration, migrate |
path: families Dockerfile and docker-compose*.yml | the same family only |
keyword:<kw> from a Bash action | the same keyword only |
Operator additions (KB_GOVERNED_EXTRA_*) have no mapping and are covered by
the same signal only.
No deadlock. Every governed action stays clearable: an intent that contains
the action's path exactly as the gate saw it, or the command fragment, or the
keyword, reproduces the action's signal through the same function. A basename
also works for a manifest family that has a bare twin (Cargo.toml clears a
nested crates/x/Cargo.toml), but not for pom.xml, which is governed only
when nested, or for a directory family such as migrations/*; name the full
path or use a mapped keyword for those.
Denial. The verdict stays consult_required, so hooks and installers are
unaffected. The reason lists every uncovered signal and ends with one
copy-pasteable kb_consult(...) call whose intent covers all of them
together, leading with the exact path when a path signal is uncovered and
quoting the command fragment when a command signal is. The path or fragment is
wrapped in a quote character it does not contain, and each argument of the call
is written as a Python string literal, so the call still parses when a path
holds a quote character. The gate_block audit
event keeps status: consult_required and adds an uncovered field holding the
signal list, so kb_compliance counts are unchanged and a mismatch is
countable. The pre-tool hook surfaces the server reason after [KB] BLOCKED:,
retains workspace and session details when missing, and caps the message at
1200 characters. An absent or empty reason falls back to generic consultation
guidance.
Audit. Every consult audit event records the consult's coverage set in a
coverage field (an empty list when it covers nothing) next to its trigger;
reason still holds the classifier signals of the intent. kb enforce report
reads this field to judge commits by the same rule as the gate (see "Detection
floor" below).
Not a security boundary. An agent can name every keyword in one intent and cover everything. The gate makes consulting the governing rules the path of least resistance; it does not authenticate intent. A consult still retrieves the rules for the intent it states, so an over-broad intent returns a broad rule set.
Migration. KB_GATE_CLEARANCE=pair restores the earlier rule exactly: any
fresh explicit consult for the (session_id, workspace) pair, governed or not,
clears every governed action. A ledger written before this change has no
recorded coverage, so under intent a session that consulted before the
upgrade needs one new consult before its next governed action.
Retrieval is hard-filtered to the in-force class (issue #109)
The rules kb_consult returns for a governed intent are retrieved with
in_force=true (see docs/serving.md's in_force section for the full
predicate), unconditionally: this is not a caller-facing parameter. So an
unreviewed agent-written memory (status: proposed, stamped automatically by
kb_propose_memory), a superseded/deprecated/rejected decision, an expired or
upcoming document, or a document under the memory-inbox prefix can never be
handed back as "the" governing rule for a decision, no matter what its
frontmatter claims. A document with no status field (or one outside the
in-force class) is likewise never returned here, even though it may still
surface via plain kb_search/kb_get.
Server endpoints
POST /api/v1/consult: record a consultation for(source_session, workspace)and return the governing rules for an intent. Body:workspaceintentsource_sessionagent_identitytrigger(optional;"explicit"default, or"prompt_hook"for an installer auto-consult; see the gate policy above). Omitting it is treated as"explicit"for backward compatibility.
POST /api/v1/gate/check: verdict (allow|consult_required) for a pending code action. Body:workspacesession_idtool_nameaction_pathaction_diff(optional)
The response echoes
session_idandworkspace(the exact gate key) alongside the verdict and reason, so a blocked MCP caller can build the clearingkb_consultcall without guessing the session id. When blocked,reasoncontains a copy-pasteablekb_consult(...)instruction and, under intent clearance, the uncovered signals and an intent that covers them.GET /api/v1/compliance: aggregated enforcement-event counts.
The same three are exposed as the kb_consult, kb_gate_check, and
kb_compliance MCP tools.
Over REST, each body field named above must be a JSON string when present, and
only action_path may also be null, matching the MCP tools' typed parameters.
Any other value is refused with HTTP 400 naming the field, and nothing is
recorded (issue #310). kb_audit and kb_compliance (MCP and REST) skip an
audit line they cannot read, such as one an earlier release accepted with a
numeric field, and report how many in a skipped count instead of failing.
Configuration
KB_CONSULT_TTL_SEC(default 300): how long a consultation stays fresh.KB_GATE_CLEARANCE(defaultintent): what a fresh explicit consult clears.intentclears only the governed actions the consult's intent covers (see above);pairclears every governed action for the(session_id, workspace)pair, the behaviour before issue #296. Case-insensitive; blank means unset; any other value fails startup naming the setting.KB_ENFORCE_FAIL_MODE(defaultopen): hook behaviour when the server is unreachable.openallows the action with a warning;closedblocks it.
Installing the Claude Code gate
kb enforce install --agent claude-code # idempotent; backs up settings first
kb enforce status # show install state, tier, version
kb enforce doctor # verify the wiring reaches the server
kb enforce uninstall --agent claude-code # surgical removal of the managed blockThe installer writes a managed hook block (SessionStart, UserPromptSubmit,
PreToolUse, Stop) into ~/.claude/settings.json, tagged so re-runs never
duplicate entries and uninstall never touches operator-authored settings.
kb enforce doctor verifies more than endpoint reachability. It also checks that
the managed marker at the current shim version is present in the live settings
file, that the hook dispatcher (bin/kb-enforce-hook, or the OpenCode plugin
file) exists and is executable, and it WARNS and fails when the dispatcher path
resolves inside a .worktrees/ or .claude/worktrees/ checkout: an install
performed from a worktree dangles after the worktree is pruned and then silently
fails open. If doctor warns about a worktree install, re-run
kb enforce install from the main checkout.
Per-agent providers
Enforcement is installed per agent. Each agent has its own hook or instructions surface, so the strength of the gate (its "tier") varies. The tiers below are honest about what each surface can and cannot block.
| Agent | Tier | What it does |
|---|---|---|
| Claude Code | hard | PreToolUse hook blocks governed Edit/Write/MultiEdit/NotebookEdit/Bash (exit 2 deny). |
| Codex | hard | PreToolUse hook blocks governed Edit/Write/MultiEdit/Bash (exit 2 deny). See the trust note below. |
| Gemini | hard | BeforeTool hook blocks governed write_file/replace/run_shell_command (JSON-stdout deny). |
| OpenCode | hard (with caveat) | tool.execute.before plugin throws to abort governed edit/write/patch/multiedit/bash. See caveats below. |
| Copilot CLI | soft | Managed instructions block (advisory) plus MCP; compliance is observed via the audit log, not blocked. |
| Copilot IDE | soft | Managed instructions block in .github/copilot-instructions.md (advisory + audit, not blocking). Repo-scoped. |
| Antigravity | deferred (unsupported) | No documented local hook/instructions/MCP surface. See below. |
Install commands
kb enforce install --agent codex # hard, ~/.codex/hooks.json (merges)
kb enforce install --agent gemini # hard, ~/.gemini/settings.json
kb enforce install --agent opencode # hard, ~/.config/opencode/plugin/
kb enforce install --agent copilot-cli # soft, ~/.copilot/copilot-instructions.md
kb enforce install --agent copilot-ide # soft, .github/copilot-instructions.md (current repo)
kb enforce install --all # install every supported provider at once
kb enforce status # fans out across all agents, one line eachkb enforce status with no --agent reports the install state, tier, and
version for every registered provider. kb enforce install --all installs
every supported provider into its default target and skips the unsupported
ones (Antigravity), printing a per-agent tier summary.
Codex trust note
Installing the Codex PreToolUse hook means Codex will prompt you to TRUST the
hook on its first run. Approve that prompt, or start Codex with
--dangerously-bypass-hook-trust for vetted automation. The trust hash
persists under [hooks.state] in ~/.codex/config.toml, so you are only
prompted once per hook version. The installer MERGES the managed block into an
existing ~/.codex/hooks.json, preserving any operator-authored hooks.
Gating-coverage caveats
These caveats are deliberate and documented, not bugs:
Codex gates
Edit,Write,MultiEdit, ANDBash. Bash is gated so a shell-driven write or a dependency-install command run through Bash does not bypass the gate. (Bash carries no file path, so only diff/command signals such as install commands classify it; see the path note below.)Claude Code gates
Edit,Write,MultiEdit,NotebookEdit, andBash. The tool matchers are anchored (^(...)$) so they match exactly those tool names and do not substring-match unrelated tools such asBashOutput.OpenCode gates
edit,write,patch,multiedit, andbash, but batch-tool writes are not gated. The plugin gatesbashspecifically to narrow this gap. Note thatbashandpatchactions carry no file path, so path-governed rules cannot classify them: for those two tools the gate keys off the command/patch content (passed asaction_diff), not a file path. The OpenCode plugin resolves the workspace key to the main git worktree basename (the same worktree-invariant key every other surface uses), so a consult recorded from the main checkout clears the OpenCode gate too; it no longer sends the raw absolute directory path (which could never match a consult keyed by basename).
Copilot IDE is repo-scoped (CWD side effect)
copilot-ide is SOFT (advisory plus audit, not blocking) and repo-scoped: it
writes .github/copilot-instructions.md relative to the CURRENT repo. Because
of this, kb enforce install --all creates or edits
.github/copilot-instructions.md in the CURRENT working directory, a
CWD-dependent side effect, unlike the home-rooted providers (Claude, Codex,
Gemini, OpenCode, Copilot CLI) whose targets live under ~. Run --all from
the repo whose Copilot IDE instructions you intend to manage.
Antigravity (deferred)
Antigravity is unsupported. It exposes no documented local hook, instructions,
or MCP surface, so there is nothing for the installer to wire. kb enforce
reports it as unsupported and --all skips it. Revisit when Google publishes
an extensibility API.
Detection floor (un-hookable agents)
Why it exists
Some agents cannot be hard-gated locally. Closed IDE apps such as Copilot-in-VS-Code and Antigravity expose no local hook, instructions, or MCP surface that the installer can wire, so a PreToolUse-style deny is impossible for them. What every agent does share is git: every governed change eventually becomes a commit. Git is therefore the common chokepoint. The detection floor uses it not to block (the gating tiers above already do that where they can) but to detect governed changes that have no consultation on record and report them, so an un-hookable agent's work is at least observable after the fact.
kb enforce report (alias data-olympus report)
kb enforce report [--workspace W] [--range A..B | --since S] \
[--window-sec N] [--json] [--fail-on-unverified] [--staged]data-olympus report is the same command (the kb enforce report route
delegates straight to it). The report parses governed commits from git log
(reusing the same path classifier the gates use), then correlates them against
consult events fetched from GET /api/v1/audit.
A governed commit is judged by the gate's clearance rule, read from
KB_GATE_CLEARANCE in the environment where the report runs:
Under
intent(the default), the commit is verified only when the explicit consults inside its window together cover every signal of its governed paths, by the same coverage and family rules as the live gate. Consults in the window combine as fresh consults do at the gate, and a prompt-hook consult covers nothing. An unverified commit lists its uncovered signals (uncoveredin--json).A
consultaudit row written before coverage was recorded has nocoveragefield, so what it covered is unknown. When such a row is in the window and the recorded coverage does not settle the commit, the commit is verified by timing alone, as before, and the report says so: aTIMING ONLYline in the text output and the commit's sha intiming_onlyin--json.Under
pair, any consult in the window verifies the commit, the behaviour before coverage was recorded.
The --json output also carries clearance, the rule it applied.
Flags:
--workspace W: workspace label to correlate against (defaults to the main git worktree basename, identical from the main checkout and any linked worktree; falls back to the current directory name outside a git repository).--range A..B: a git revision range to scan (for exampleHEAD~5..HEAD).--since S: a git--sincewindow when no--rangeis given.--window-sec N: the correlation window, in seconds, around each commit.--json: emit machine-readable JSON instead of the text summary.--fail-on-unverified: exit non-zero when an unverified governed change is found (see exit codes).--staged: classify the staged diff instead ofgit log(used by the pre-commit block hook).
Exit codes:
0: normal completion (including the case where unverified changes exist but--fail-on-unverifiedwas not passed).3: returned only with--fail-on-unverified, when at least one unverified governed change is found.2: a git error (for example a bad--range), or aKB_GATE_CLEARANCEvalue other thanintentorpair. The command does not mistake a git failure for a clean repo.
The opt-in git hook
kb enforce install --agent git # post-commit WARN hook (detection only)
kb enforce install --agent git --block # pre-commit hook that fails the commit
kb enforce uninstall --agent git # surgical removal of the managed blockkb enforce install --agent git installs a post-commit hook that WARNs: it
cannot block (post-commit runs after the commit is already made), so it is pure
detection. kb enforce install --agent git --block instead installs a
pre-commit hook that fails the commit when the staged diff contains an
unverified governed change.
The git hooks are repo-scoped: they live in .git/hooks of the current repo,
not under ~. The installer merges its managed block into any existing hook
content (preserving operator-authored lines) and uninstall removes only the
managed block. The git provider is opt-in: it is NOT installed by
kb enforce install --all. You must ask for it explicitly with --agent git.
Requirement: data-olympus must be on PATH
Both kb enforce report and the git hooks call the data-olympus console
script. It must be on PATH at run time (for report) and at commit time (for
the hooks). Install the package, or activate the venv, so the script resolves.
A GUI git client whose environment lacks the venv PATH will see the warn hook
print command not found (harmless: the commit still lands), or, for the
--block pre-commit hook, fail the commit because the gate cannot run.
Honest limits
Correlation is best-effort by workspace plus time window, not a hard session-to-commit link. State the limits plainly:
False positives (a governed change reported as unverified when a consult did happen): a consult recorded in a different session, a consult that fell outside the time window, or a consult recorded under a different workspace label.
False negatives (a governed change that goes unreported): a change whose path the classifier does not consider governed, or a commit judged by timing only against a consult row written before coverage was recorded.
The window is not a session. A consult by another agent in the same workspace and window counts toward a commit's coverage, where the live gate counts only the acting session's consults.
KB_GATE_CLEARANCEis read where the report runs, not from the server. Set it to the server's value, or the report applies a different rule than the gate.
When the audit endpoint is unreachable, the command degrades to warn: it lists
the governed changes it found and marks the consult state as unknown rather
than crashing. A post-commit warn hook never crashes a commit. The
--staged/--block gate requires a consult within the window that covers the
staged governed paths (any consult in the window under pair), so neither a
stale consult (outside the window) nor one about another topic lets a governed
commit through.
Hardening and observability (slice 4)
Slice 4 closes the enforcement follow-ups: it makes the compliance audit capture gate bypass and degradation, feeds the gate a richer classification signal, completes the installer CLI, persists the consultation ledger, and adds a changelog CI gate.
gate_bypass and gate_degraded are now recorded
Two new enforcement events make non-compliant or degraded paths observable:
gate_bypass: recorded once per unverified governed change.data-olympus report --emit-events(and the post-commit git warn hook, which now passes--emit-events) post onegate_bypassper unverified governed change found in the scanned range.gate_degraded: recorded by the pre-tool hook when the gate is REACHABLE but degraded (a non-2xx response or an unparseable body). The hook does NOT recordgate_degradedon a full connection failure: it cannot phone home when the server is down, so a hard outage leaves no degraded event (the action still fails open with a warning, perKB_ENFORCE_FAIL_MODE).
kb_compliance (and GET /api/v1/compliance) now surface both event types in
its aggregated counts. A new auth-guarded POST /api/v1/audit/event endpoint
(and the matching kb_record_event MCP tool) lets clients append these events.
The endpoint accepts ONLY gate_bypass and gate_degraded, so a client cannot
forge consult, gate_allow, or gate_block rows. Body:
event_type(must begate_bypassorgate_degraded)workspaceagent_identitysource_sessionreason
Richer gate signal: action_diff + word-boundary classifier
The pre-tool hook now sends action_diff to the gate: the change content (a
Write's content, an Edit's new string, or a Bash command), capped at 4000
characters so the gate body stays bounded. With this content the classifier can
do two new things:
Word-boundary keyword matching: keywords are matched on word boundaries, so "authored" no longer matches the "auth" keyword and "standardize" no longer matches "standard". This removes a class of substring false positives.
Dependency-install command signals: install commands (
pip install,uv add,npm install,apt install,brew install,go get,cargo add, and similar) inaction_diffare recognized as governed. This lets the classifier handle Bash/shell governed actions, which carry their intent in the command rather than a file path.
To exercise this, Codex and Claude now also gate the Bash tool (added to the
PreToolUse matcher alongside the edit tools).
kb enforce install --mode off|soft|hard
The installer now takes a --mode flag:
hard(default): the full gate, including the blocking pre-tool gate.soft: installs the consult and inject hooks only (SessionStart, UserPromptSubmit), with NO blocking pre-tool gate.off: uninstalls the managed hooks.
soft/hard apply to the hook-file providers Claude, Codex, and Gemini. The
fixed-tier providers (OpenCode, Copilot CLI, Copilot IDE) accept off (to
uninstall) and note that soft/hard have no effect on their fixed tier:
kb enforce install --agent opencode --mode soft prints that note and installs
the hard gate.
Persisted consultation ledger
The consultation ledger now persists to KB_LEDGER_PATH (default
/state/ledger.json), so recorded consultations survive a server restart. It
loads the file on startup and rewrites it atomically on every record. With no
path configured it stays purely in-memory (the original behavior), and a
corrupt or unreadable file degrades to empty (with a logged warning) rather than
crashing.
Friendly PATH hint for kb enforce report
kb enforce report now prints a friendly hint and exits 127 when
data-olympus is not on PATH, instead of leaking a raw command not found. The
message points the operator at installing the package or activating its venv.
Changelog CI gate
CI now guards that a pull request changing functional paths (src/, bin/,
deploy/, or SPEC.md) also updates CHANGELOG.md. The guard is skippable by
adding a no-changelog label to the PR. Docs-only and tests-only changes do not
trip the guard.
512 files · 486 not served here
- .gitattributes (not served here)
- .github/CODEOWNERS (not served here)
- .github/ISSUE_TEMPLATE/bug_report.yml (not served here)
- .github/ISSUE_TEMPLATE/config.yml (not served here)
- .github/ISSUE_TEMPLATE/release-scope.yml (not served here)
- .github/ISSUE_TEMPLATE/spec_proposal.yml (not served here)
- .github/PULL_REQUEST_TEMPLATE.md (not served here)
- .github/copilot-instructions.md
- .github/dependabot.yml (not served here)
- .github/labels.yml (not served here)
- .github/workflows/ci.yaml (not served here)
- .github/workflows/hotfix-cut.yml (not served here)
- .github/workflows/maintenance-inventory.yml (not served here)
- .github/workflows/okf-pin-freshness.yml (not served here)
- .github/workflows/package-dry-run.yml (not served here)
- .github/workflows/pr-title-lint.yml (not served here)
- .github/workflows/promote-release.yml (not served here)
- .github/workflows/publish-python-build.yml (not served here)
- .github/workflows/rc-build.yml (not served here)
- .github/workflows/rc-publish-stage.yml (not served here)
- .github/workflows/recut-release-branch.yml (not served here)
- .gitignore (not served here)
- .prose-lintignore (not served here)
- .rules/changelog-per-release.md (not served here)
- .rules/release-planning.md (not served here)
- .rules/release-rollback.md (not served here)
- .rules/release-routine.md (not served here)
- .rules/versioning.md (not served here)
- AGENTS.md
- ATTRIBUTION.md
- CHANGELOG.md
- CLAUDE.md
- CODE_OF_CONDUCT.md
- CONTRIBUTING.md
- LICENSE
- NOTICE
- README.md
- ROADMAP.md
- SECURITY.md
- SPEC.md
- WHY.md
- benchmarks/README.md (not served here)
- benchmarks/__init__.py (not served here)
- benchmarks/ablate.py (not served here)
- benchmarks/chunking.py (not served here)
- benchmarks/corpus/decisions/BENCH-AUTH-TOKENS-1.md (not served here)
- benchmarks/corpus/decisions/BENCH-AUTH-TOKENS-3.md (not served here)
- benchmarks/corpus/decisions/BENCH-AUTH-TOKENS-5.md (not served here)
- benchmarks/corpus/decisions/BENCH-AUTH-TOKENS-6.md (not served here)
- benchmarks/corpus/decisions/BENCH-AUTH-TOKENS-7.md (not served here)
- benchmarks/corpus/decisions/BENCH-AUTH-TOKENS-8.md (not served here)
- benchmarks/corpus/decisions/BENCH-AUTH-TOKENS.md (not served here)
- benchmarks/corpus/decisions/BENCH-CONFIG-RELOADING-1.md (not served here)
- benchmarks/corpus/decisions/BENCH-CONFIG-RELOADING-2.md (not served here)
- benchmarks/corpus/decisions/BENCH-CONFIG-RELOADING-3.md (not served here)
- benchmarks/corpus/decisions/BENCH-CONFIG-RELOADING-4.md (not served here)
- benchmarks/corpus/decisions/BENCH-CONFIG-RELOADING-5.md (not served here)
- benchmarks/corpus/decisions/BENCH-CONFIG-RELOADING-7.md (not served here)
- benchmarks/corpus/decisions/BENCH-CONFIG-RELOADING.md (not served here)
- benchmarks/corpus/decisions/BENCH-IDEMPOTENCY-1.md (not served here)
- benchmarks/corpus/decisions/BENCH-IDEMPOTENCY-2.md (not served here)
- benchmarks/corpus/decisions/BENCH-IDEMPOTENCY-3.md (not served here)
- benchmarks/corpus/decisions/BENCH-IDEMPOTENCY-4.md (not served here)
- benchmarks/corpus/decisions/BENCH-IDEMPOTENCY-5.md (not served here)
- benchmarks/corpus/decisions/BENCH-IDEMPOTENCY-6.md (not served here)
- benchmarks/corpus/decisions/BENCH-IDEMPOTENCY-7.md (not served here)
- benchmarks/corpus/decisions/BENCH-IDEMPOTENCY-8.md (not served here)
- benchmarks/corpus/decisions/BENCH-IDEMPOTENCY.md (not served here)
- benchmarks/corpus/decisions/BENCH-MESSAGE-ORDERING-1.md (not served here)
- benchmarks/corpus/decisions/BENCH-MESSAGE-ORDERING-2.md (not served here)
- benchmarks/corpus/decisions/BENCH-MESSAGE-ORDERING-3.md (not served here)
- benchmarks/corpus/decisions/BENCH-MESSAGE-ORDERING-4.md (not served here)
- benchmarks/corpus/decisions/BENCH-MESSAGE-ORDERING-5.md (not served here)
- benchmarks/corpus/decisions/BENCH-MESSAGE-ORDERING-6.md (not served here)
- benchmarks/corpus/decisions/BENCH-MESSAGE-ORDERING-7.md (not served here)
- benchmarks/corpus/decisions/BENCH-MESSAGE-ORDERING.md (not served here)
- benchmarks/corpus/decisions/BENCH-NEW-AUTH-TOKENS-2.md (not served here)
- benchmarks/corpus/decisions/BENCH-NEW-AUTH-TOKENS-4.md (not served here)
- benchmarks/corpus/decisions/BENCH-NEW-CONFIG-RELOADING-6.md (not served here)
- benchmarks/corpus/decisions/BENCH-NEW-MESSAGE-ORDERING-8.md (not served here)
- benchmarks/corpus/decisions/BENCH-NEW-SAGA-ORCHESTRATION-1.md (not served here)
- benchmarks/corpus/decisions/BENCH-NEW-SAGA-ORCHESTRATION-4.md (not served here)
- benchmarks/corpus/decisions/BENCH-NEW-SAGA-ORCHESTRATION-6.md (not served here)
- benchmarks/corpus/decisions/BENCH-OLD-AUTH-TOKENS-2.md (not served here)
- benchmarks/corpus/decisions/BENCH-OLD-AUTH-TOKENS-4.md (not served here)
- benchmarks/corpus/decisions/BENCH-OLD-CONFIG-RELOADING-6.md (not served here)
- benchmarks/corpus/decisions/BENCH-OLD-MESSAGE-ORDERING-8.md (not served here)
- benchmarks/corpus/decisions/BENCH-OLD-SAGA-ORCHESTRATION-1.md (not served here)
- benchmarks/corpus/decisions/BENCH-OLD-SAGA-ORCHESTRATION-4.md (not served here)
- benchmarks/corpus/decisions/BENCH-OLD-SAGA-ORCHESTRATION-6.md (not served here)
- benchmarks/corpus/decisions/BENCH-SAGA-ORCHESTRATION-2.md (not served here)
- benchmarks/corpus/decisions/BENCH-SAGA-ORCHESTRATION-3.md (not served here)
- benchmarks/corpus/decisions/BENCH-SAGA-ORCHESTRATION-5.md (not served here)
- benchmarks/corpus/decisions/BENCH-SAGA-ORCHESTRATION-7.md (not served here)
- benchmarks/corpus/decisions/BENCH-SAGA-ORCHESTRATION.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-BLUE-GREEN-DEPLOYS-1.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-BLUE-GREEN-DEPLOYS-3.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-BLUE-GREEN-DEPLOYS-4.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-BLUE-GREEN-DEPLOYS-5.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-BLUE-GREEN-DEPLOYS-6.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-BLUE-GREEN-DEPLOYS-7.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-BLUE-GREEN-DEPLOYS.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-FEATURE-FLAGS-1.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-FEATURE-FLAGS-3.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-FEATURE-FLAGS-4.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-FEATURE-FLAGS-5.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-FEATURE-FLAGS-7.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-FEATURE-FLAGS-8.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-FEATURE-FLAGS.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-GRACEFUL-SHUTDOWN-1.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-GRACEFUL-SHUTDOWN-2.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-GRACEFUL-SHUTDOWN-3.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-GRACEFUL-SHUTDOWN-4.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-GRACEFUL-SHUTDOWN-6.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-GRACEFUL-SHUTDOWN-7.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-GRACEFUL-SHUTDOWN.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-NEW-BLUE-GREEN-DEPLOYS-2.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-NEW-FEATURE-FLAGS-2.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-NEW-FEATURE-FLAGS-6.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-NEW-GRACEFUL-SHUTDOWN-5.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-OLD-BLUE-GREEN-DEPLOYS-2.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-OLD-FEATURE-FLAGS-2.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-OLD-FEATURE-FLAGS-6.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-OLD-GRACEFUL-SHUTDOWN-5.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-PAGINATION-1.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-PAGINATION-2.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-PAGINATION-3.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-PAGINATION-4.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-PAGINATION-5.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-PAGINATION-6.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-PAGINATION-7.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-PAGINATION-8.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-PAGINATION.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-SECRETS-HANDLING-1.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-SECRETS-HANDLING-2.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-SECRETS-HANDLING-3.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-SECRETS-HANDLING-4.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-SECRETS-HANDLING-5.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-SECRETS-HANDLING-6.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-SECRETS-HANDLING-7.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-SECRETS-HANDLING-8.md (not served here)
- benchmarks/corpus/projects/example-project/BENCH-SECRETS-HANDLING.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-CIRCUIT-BREAKERS-1.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-CIRCUIT-BREAKERS-2.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-CIRCUIT-BREAKERS-3.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-CIRCUIT-BREAKERS-4.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-CIRCUIT-BREAKERS-5.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-CIRCUIT-BREAKERS-7.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-CIRCUIT-BREAKERS-8.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-CIRCUIT-BREAKERS.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-DEAD-LETTER-QUEUES-1.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-DEAD-LETTER-QUEUES-2.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-DEAD-LETTER-QUEUES-4.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-DEAD-LETTER-QUEUES-5.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-DEAD-LETTER-QUEUES.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-HEALTH-CHECKS-1.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-HEALTH-CHECKS-2.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-HEALTH-CHECKS-3.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-HEALTH-CHECKS-4.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-HEALTH-CHECKS-5.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-HEALTH-CHECKS-6.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-HEALTH-CHECKS.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-INPUT-VALIDATION-1.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-INPUT-VALIDATION-2.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-INPUT-VALIDATION-3.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-INPUT-VALIDATION-4.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-INPUT-VALIDATION-7.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-INPUT-VALIDATION-8.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-INPUT-VALIDATION.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-NEW-CIRCUIT-BREAKERS-6.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-NEW-DEAD-LETTER-QUEUES-3.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-NEW-DEAD-LETTER-QUEUES-6.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-NEW-DEAD-LETTER-QUEUES-7.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-NEW-HEALTH-CHECKS-7.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-NEW-INPUT-VALIDATION-5.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-NEW-INPUT-VALIDATION-6.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-NEW-RATE-LIMITING.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-OLD-CIRCUIT-BREAKERS-6.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-OLD-DEAD-LETTER-QUEUES-3.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-OLD-DEAD-LETTER-QUEUES-6.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-OLD-DEAD-LETTER-QUEUES-7.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-OLD-HEALTH-CHECKS-7.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-OLD-INPUT-VALIDATION-5.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-OLD-INPUT-VALIDATION-6.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-OLD-RATE-LIMITING.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-RATE-LIMITING-1.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-RATE-LIMITING-2.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-RATE-LIMITING-3.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-RATE-LIMITING-4.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-RATE-LIMITING-5.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-RATE-LIMITING-6.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-RATE-LIMITING-7.md (not served here)
- benchmarks/corpus/projects/example-project/components/api/BENCH-RATE-LIMITING-8.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-BACKPRESSURE-1.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-BACKPRESSURE-2.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-BACKPRESSURE-3.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-BACKPRESSURE-4.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-BACKPRESSURE-5.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-BACKPRESSURE-6.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-BACKPRESSURE-7.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-BACKPRESSURE-8.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-BACKPRESSURE.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CANARY-ROLLOUTS-1.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CANARY-ROLLOUTS-2.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CANARY-ROLLOUTS-3.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CANARY-ROLLOUTS-4.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CANARY-ROLLOUTS-5.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CANARY-ROLLOUTS-6.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CANARY-ROLLOUTS-7.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CANARY-ROLLOUTS.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CONNECTION-POOLING-2.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CONNECTION-POOLING-4.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CONNECTION-POOLING-5.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CONNECTION-POOLING-6.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CONNECTION-POOLING-8.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-CONNECTION-POOLING.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-NEW-CONNECTION-POOLING-1.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-NEW-CONNECTION-POOLING-3.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-NEW-CONNECTION-POOLING-7.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-NEW-RETRIES-7.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-NEW-TRACING-5.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-NEW-TRACING.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-OLD-CONNECTION-POOLING-1.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-OLD-CONNECTION-POOLING-3.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-OLD-CONNECTION-POOLING-7.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-OLD-RETRIES-7.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-OLD-TRACING-5.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-OLD-TRACING.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-RETRIES-1.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-RETRIES-2.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-RETRIES-3.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-RETRIES-4.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-RETRIES-5.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-RETRIES-6.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-RETRIES-8.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-RETRIES.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-TRACING-1.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-TRACING-2.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-TRACING-3.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-TRACING-4.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-TRACING-6.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-TRACING-7.md (not served here)
- benchmarks/corpus/tech-stacks/backend-nestjs/BENCH-TRACING-8.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-CACHING-1.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-CACHING-2.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-CACHING-3.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-CACHING-4.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-CACHING-5.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-CACHING-6.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-CACHING-7.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-CACHING-8.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-CACHING.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-DATABASE-MIGRATIONS-2.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-DATABASE-MIGRATIONS-3.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-DATABASE-MIGRATIONS-4.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-DATABASE-MIGRATIONS-5.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-DATABASE-MIGRATIONS-8.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-DATABASE-MIGRATIONS.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-ERROR-BUDGETS-1.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-ERROR-BUDGETS-2.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-ERROR-BUDGETS-5.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-ERROR-BUDGETS-6.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-ERROR-BUDGETS-7.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-ERROR-BUDGETS.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-LOGGING-1.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-LOGGING-2.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-LOGGING-3.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-LOGGING-4.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-LOGGING-6.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-LOGGING-7.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-LOGGING-8.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-LOGGING.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-NEW-DATABASE-MIGRATIONS-1.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-NEW-DATABASE-MIGRATIONS-6.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-NEW-DATABASE-MIGRATIONS-7.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-NEW-ERROR-BUDGETS-3.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-NEW-ERROR-BUDGETS-4.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-NEW-LOGGING-5.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-NEW-SCHEMA-EVOLUTION-3.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-NEW-SCHEMA-EVOLUTION-8.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-OLD-DATABASE-MIGRATIONS-1.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-OLD-DATABASE-MIGRATIONS-6.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-OLD-DATABASE-MIGRATIONS-7.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-OLD-ERROR-BUDGETS-3.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-OLD-ERROR-BUDGETS-4.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-OLD-LOGGING-5.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-OLD-SCHEMA-EVOLUTION-3.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-OLD-SCHEMA-EVOLUTION-8.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-SCHEMA-EVOLUTION-1.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-SCHEMA-EVOLUTION-2.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-SCHEMA-EVOLUTION-4.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-SCHEMA-EVOLUTION-5.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-SCHEMA-EVOLUTION-6.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-SCHEMA-EVOLUTION-7.md (not served here)
- benchmarks/corpus/universal/foundation/BENCH-SCHEMA-EVOLUTION.md (not served here)
- benchmarks/corpus_gen.py (not served here)
- benchmarks/corpus_model.py (not served here)
- benchmarks/docs_tables.py (not served here)
- benchmarks/generate_artifacts.py (not served here)
- benchmarks/generate_embeddings_ablation.py (not served here)
- benchmarks/generate_governance_artifacts.py (not served here)
- benchmarks/governance/projects/example-project/GOV_BLUE_GREEN_DEPLOYS.md (not served here)
- benchmarks/governance/projects/example-project/GOV_CIRCUIT_BREAKERS.md (not served here)
- benchmarks/governance/projects/example-project/GOV_DEAD_LETTER_QUEUES.md (not served here)
- benchmarks/governance/projects/example-project/GOV_IDEMPOTENCY.md (not served here)
- benchmarks/governance/projects/example-project/GOV_MODULE_STRUCTURE.md (not served here)
- benchmarks/governance/projects/example-project/GOV_NEW_AUTH_TOKENS.md (not served here)
- benchmarks/governance/projects/example-project/GOV_NEW_PAGINATION.md (not served here)
- benchmarks/governance/projects/example-project/GOV_OLD_AUTH_TOKENS.md (not served here)
- benchmarks/governance/projects/example-project/GOV_OLD_PAGINATION.md (not served here)
- benchmarks/governance/projects/example-project/components/api/GOV_CACHING_STRATEGY.md (not served here)
- benchmarks/governance/projects/example-project/components/api/GOV_LOGGING.md (not served here)
- benchmarks/governance/projects/example-project/components/api/GOV_MESSAGE_ORDERING.md (not served here)
- benchmarks/governance/projects/example-project/components/api/GOV_NEW_RATE_LIMITING.md (not served here)
- benchmarks/governance/projects/example-project/components/api/GOV_NEW_SAGA_ORCHESTRATION.md (not served here)
- benchmarks/governance/projects/example-project/components/api/GOV_NEW_SECRETS_HANDLING.md (not served here)
- benchmarks/governance/projects/example-project/components/api/GOV_OLD_RATE_LIMITING.md (not served here)
- benchmarks/governance/projects/example-project/components/api/GOV_OLD_SAGA_ORCHESTRATION.md (not served here)
- benchmarks/governance/projects/example-project/components/api/GOV_OLD_SECRETS_HANDLING.md (not served here)
- benchmarks/governance/projects/example-project/components/api/GOV_TRACING.md (not served here)
- benchmarks/governance/tech-stacks/backend/GOV_AUDIT_LOGGING.md (not served here)
- benchmarks/governance/tech-stacks/backend/GOV_BACKPRESSURE.md (not served here)
- benchmarks/governance/tech-stacks/backend/GOV_FEATURE_FLAGS.md (not served here)
- benchmarks/governance/tech-stacks/backend/GOV_FORCE_PUSH.md (not served here)
- benchmarks/governance/tech-stacks/backend/GOV_HEALTH_CHECKS.md (not served here)
- benchmarks/governance/tech-stacks/backend/GOV_INPUT_VALIDATION.md (not served here)
- benchmarks/governance/tech-stacks/backend/GOV_NEW_CANARY_ROLLOUTS.md (not served here)
- benchmarks/governance/tech-stacks/backend/GOV_NEW_SCHEMA_EVOLUTION.md (not served here)
- benchmarks/governance/tech-stacks/backend/GOV_OLD_CANARY_ROLLOUTS.md (not served here)
- benchmarks/governance/tech-stacks/backend/GOV_OLD_SCHEMA_EVOLUTION.md (not served here)
- benchmarks/governance/universal/foundation/GOV_API_VERSIONING.md (not served here)
- benchmarks/governance/universal/foundation/GOV_CONNECTION_POOLING.md (not served here)
- benchmarks/governance/universal/foundation/GOV_DATABASE_MIGRATIONS.md (not served here)
- benchmarks/governance/universal/foundation/GOV_ERROR_BUDGETS.md (not served here)
- benchmarks/governance/universal/foundation/GOV_NEW_CONFIG_MANAGEMENT.md (not served here)
- benchmarks/governance/universal/foundation/GOV_NEW_EXCEL_EXPORT.md (not served here)
- benchmarks/governance/universal/foundation/GOV_NEW_GRACEFUL_SHUTDOWN.md (not served here)
- benchmarks/governance/universal/foundation/GOV_OLD_CONFIG_MANAGEMENT.md (not served here)
- benchmarks/governance/universal/foundation/GOV_OLD_EXCEL_EXPORT.md (not served here)
- benchmarks/governance/universal/foundation/GOV_OLD_GRACEFUL_SHUTDOWN.md (not served here)
- benchmarks/governance/universal/foundation/GOV_RETRY_POLICY.md (not served here)
- benchmarks/governance_corpus.py (not served here)
- benchmarks/governance_queries.py (not served here)
- benchmarks/governance_queries.yaml (not served here)
- benchmarks/governance_results/ablation.json (not served here)
- benchmarks/governance_results/ablation.md (not served here)
- benchmarks/governance_results/embeddings/ablation.json (not served here)
- benchmarks/governance_results/embeddings/ablation.md (not served here)
- benchmarks/methods/__init__.py (not served here)
- benchmarks/methods/base.py (not served here)
- benchmarks/methods/bm25.py (not served here)
- benchmarks/methods/data_olympus.py (not served here)
- benchmarks/methods/grep_read.py (not served here)
- benchmarks/methods/vector_rag.py (not served here)
- benchmarks/methods/whole_dump.py (not served here)
- benchmarks/metrics.py (not served here)
- benchmarks/queries.yaml (not served here)
- benchmarks/query_gen.py (not served here)
- benchmarks/real_corpus/example_bundle_queries.json (not served here)
- benchmarks/real_corpus/example_bundle_result.json (not served here)
- benchmarks/real_corpus_eval.md (not served here)
- benchmarks/real_corpus_eval.py (not served here)
- benchmarks/receipt.py (not served here)
- benchmarks/results/receipt.json (not served here)
- benchmarks/results/report.md (not served here)
- benchmarks/results/results.json (not served here)
- benchmarks/run.py (not served here)
- benchmarks/token_compact.py (not served here)
- benchmarks/tokenizer.py (not served here)
- bin/_kb_detect_workspace.sh (not served here)
- bin/_kb_enforce.py (not served here)
- bin/_kb_fallback.py (not served here)
- bin/kb (not served here)
- bin/kb-enforce-hook (not served here)
- bin/kb-session-recap-hook (not served here)
- bin/opencode/data-olympus-gate.ts (not served here)
- deploy/docker/Dockerfile (not served here)
- deploy/docker/compose.yaml (not served here)
- deploy/docker/entrypoint.sh (not served here)
- deploy/k8s/README.md (not served here)
- deploy/k8s/configmap.yaml (not served here)
- deploy/k8s/ingress.yaml (not served here)
- deploy/k8s/kustomization.yaml (not served here)
- deploy/k8s/namespace.yaml (not served here)
- deploy/k8s/networkpolicy.yaml (not served here)
- deploy/k8s/read-replica/README.md (not served here)
- deploy/k8s/read-replica/configmap.yaml (not served here)
- deploy/k8s/read-replica/deployment.yaml (not served here)
- deploy/k8s/read-replica/kustomization.yaml (not served here)
- deploy/k8s/read-replica/networkpolicy.yaml (not served here)
- deploy/k8s/read-replica/secret.template.yaml (not served here)
- deploy/k8s/read-replica/service.yaml (not served here)
- deploy/k8s/secret.template.yaml (not served here)
- deploy/k8s/service.yaml (not served here)
- deploy/k8s/statefulset.yaml (not served here)
- docs/adoption.md
- docs/comparison.md
- docs/enforcement.md
- docs/glama.md
- docs/maintenance.md
- docs/mcp-registry.md
- docs/okf-profile.md
- docs/operations.md
- docs/quickstart.md
- docs/releases/README.md (not served here)
- docs/releases/adoption-cut-runbook.md (not served here)
- docs/releases/branch-recut.md (not served here)
- docs/releases/placeholder-version.md (not served here)
- docs/releases/pypi-trusted-publishing.md (not served here)
- docs/releases/rc-build.md (not served here)
- docs/releases/rc-publication-stage.md (not served here)
- docs/releases/release-scope.md (not served here)
- docs/releases/repository-settings.md (not served here)
- docs/releases/reviewed-promotion.md (not served here)
- docs/releases/sbom.md (not served here)
- docs/releases/std-u-821-amendment-1.3.md (not served here)
- docs/releases/std-u-821-amendment-1.5.md (not served here)
- docs/releases/v0.10.0.md (not served here)
- docs/releases/v0.11.0.md (not served here)
- docs/releases/v0.2.0.md (not served here)
- docs/releases/v0.3.0.md (not served here)
- docs/releases/v0.3.1.md (not served here)
- docs/releases/v0.3.2.md (not served here)
- docs/releases/v0.3.3.md (not served here)
- docs/releases/v0.3.4.md (not served here)
- docs/releases/v0.3.5.md (not served here)
- docs/releases/v0.4.0.md (not served here)
- docs/releases/v0.4.1.md (not served here)
- docs/releases/v0.4.2.md (not served here)
- docs/releases/v0.5.0.md (not served here)
- docs/releases/v0.6.0-expanded-release-design.md (not served here)
- docs/releases/v0.6.0.md (not served here)
- docs/releases/v0.7.0.md (not served here)
- docs/releases/v0.7.1.md (not served here)
- docs/releases/v0.7.2.md (not served here)
- docs/releases/v0.7.3.md (not served here)
- docs/releases/v0.8.0.md (not served here)
- docs/releases/v0.8.1.md (not served here)
- docs/releases/v0.8.2.md (not served here)
- docs/releases/v0.9.0.md (not served here)
- docs/releases/vulnerability-gate.md (not served here)
- docs/serving.md
- example-bundle/decisions/ADR-001-use-data-olympus.md (not served here)
- example-bundle/decisions/ADR-002-single-writer-serving.md (not served here)
- example-bundle/decisions/index.md (not served here)
- example-bundle/index.md (not served here)
- example-bundle/log.md (not served here)
- example-bundle/memory/accepted/2026-06-20-nestjs-module-naming-collision.md (not served here)
- example-bundle/memory/accepted/index.md (not served here)
- example-bundle/memory/index.md (not served here)
- example-bundle/projects/acme-app/README.md (not served here)
- example-bundle/projects/acme-app/components/api/README.md (not served here)
- example-bundle/projects/acme-app/components/api/index.md (not served here)
- example-bundle/projects/acme-app/index.md (not served here)
- example-bundle/reference/index.md (not served here)
- example-bundle/reference/rest-api-endpoints.md (not served here)
- example-bundle/tech-stacks/backend-nestjs/STD-BN-001-module-structure.md (not served here)
- example-bundle/tech-stacks/backend-nestjs/index.md (not served here)
- example-bundle/universal/foundation/STD-U-001-writing-style.md (not served here)
- example-bundle/universal/foundation/STD-U-002-code-review.md (not served here)
- example-bundle/universal/foundation/STD-U-003-commit-message-format.md (not served here)
- example-bundle/universal/foundation/STD-U-004-commit-message-format.md (not served here)
- example-bundle/universal/foundation/STD-U-702-telegram-cron-routing.md (not served here)
- example-bundle/universal/foundation/index.md (not served here)
- example-bundle/universal/security/STD-U-601-secrets.md (not served here)
- example-bundle/universal/security/index.md (not served here)
- example-bundle/viz.html (not served here)
- example-bundle/workflows/WF-001-review-flow.md (not served here)
- example-bundle/workflows/index.md (not served here)
- glama.json (not served here)
- pyproject.toml (not served here)
- release/adoption-lines.json (not served here)
- release/exceptions.json (not served here)
- scripts/__init__.py (not served here)
- scripts/adoption_ratification.py (not served here)
- scripts/check_benchmark_docs.py (not served here)
- scripts/check_changelog.py (not served here)
- scripts/check_doc_consistency.py (not served here)
- scripts/check_version_free.py (not served here)
- scripts/ci_status.py (not served here)
- scripts/compute-version.sh (not served here)
- scripts/compute_release.py (not served here)
- scripts/deployed_digest.py (not served here)
- scripts/lint_pr_title.py (not served here)
- scripts/maintenance_inventory.py (not served here)
- scripts/okf_conformance.py (not served here)
- scripts/placeholder_version.py (not served here)
- scripts/prose_lint.py (not served here)
- scripts/rc_decide.py (not served here)
- scripts/rc_verify_and_publish.py (not served here)
- scripts/release_artifacts.py (not served here)
- scripts/release_readiness.py (not served here)
- scripts/release_record.py (not served here)
- scripts/run-local.sh (not served here)
- scripts/sbom_evidence.py (not served here)
- scripts/sdlc_recut.py (not served here)
- scripts/sdlc_version.py (not served here)
- scripts/security_alerts.py (not served here)
- scripts/should_tag.py (not served here)
- scripts/smoke_installed_wheel.py (not served here)
- scripts/version_free.py (not served here)
- scripts/vulnerability_gate.py (not served here)
- server.json
- src/data_olympus/__init__.py (not served here)
- src/data_olympus/_vendor/__init__.py (not served here)
- src/data_olympus/_vendor/prose_lint.py (not served here)
- src/data_olympus/audit_log.py (not served here)
- src/data_olympus/audit_trailers.py (not served here)
- src/data_olympus/auth.py (not served here)
- src/data_olympus/capture.py (not served here)
- src/data_olympus/cli/__init__.py (not served here)
- tests/okf/LICENSE.upstream.md
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