OKF: turn your repo's tribal knowledge into a bundle your agent reads first
Write one markdown concept per thing worth knowing, cross-linked, as a conformant OKF bundle in version control that any agent can read with no SDK.
Run this workflow
CI-verified, 3/3 fixtures passing.
Build this with your agent
One copy-paste hands Claude Code, Codex, or Cursor the full recipe, steps included, nothing to fetch.
Intended Use
Teams who want agent context as checkable files. CI runs the OKF v0.1 conformance rule (SPEC.md §9): every non-reserved .md parses as YAML frontmatter plus a body, and every frontmatter has a non-empty `type`. No key, no model call. OKF is a format, not a runtime, so the agent only benefits if you actually wire it to read the bundle; that reading is the fenced model step.
Not for
- Expecting the bundle to be read automatically, nothing reads it for you; point your agent at it (an AGENTS.md instruction, a retrieval step, a tool)
- Expecting CI to judge whether the knowledge is correct, it checks conformance only
The Stack
Tested Against
okf@0.1knowledge-catalog okf/SPEC.md (2026-06)ruby@3.x (YAML stdlib)Side effects & data flow
- Network
- none, local only
- Writes
- ./<bundle>/ (markdown files)
- Credentials
- none required
Prerequisites
- An agent you can point at a folder of markdown
Steps
- 1
Hand-author a small bundle and check it conforms
Write one concept file per thing worth knowing (a gnarly table, a metric, an incident runbook), give each a non-empty `type`, and cross-link them with normal markdown links. CI runs the v0.1 conformance check over the bundle: frontmatter parses and every concept carries a `type`.
mkdir -p bundle/tables bundle/playbooks cat > bundle/tables/orders.md <<'MD' --- type: BigQuery Table title: Orders description: One row per completed customer order. tags: [sales, orders] timestamp: 2026-05-28T00:00:00Z --- # Schema One row per completed order. See the [sales dataset](/datasets/sales.md). MD cat > bundle/playbooks/freshness.md <<'MD' --- type: Playbook title: Incident response, data freshness alert description: Steps to triage a freshness alert on the orders pipeline. tags: [oncall, incident] --- # Trigger A freshness alert fires when the [orders table](/tables/orders.md) lags its SLA. # Steps 1. Check the ingestion job dashboard. MD cat > bundle/index.md <<'MD' # Tables * [Orders](tables/orders.md) - One row per completed customer order. # Playbooks * [Freshness alert](playbooks/freshness.md) - Triage a data freshness alert. MD ruby -ryaml -e ' require "date" RESERVED = ["index.md", "log.md"] concepts = 0; errors = [] Dir.glob("bundle/**/*.md").sort.each do |path| next if RESERVED.include?(File.basename(path)) lines = File.read(path).lines unless lines.first && lines.first.strip == "---" errors << (path + ": no frontmatter"); next end rest = lines[1..] idx = rest.index { |l| l.strip == "---" } unless idx; errors << (path + ": unterminated frontmatter"); next; end fm = (begin; YAML.safe_load(rest[0...idx].join, permitted_classes: [Date, Time]); rescue; nil; end) unless fm.is_a?(Hash) && !fm["type"].to_s.empty? errors << (path + ": missing or empty type"); next end concepts += 1 end if errors.empty? puts "OKF bundle conformant: " + concepts.to_s + " concepts, every frontmatter parses with a non-empty type" else puts "NONCONFORMANT: " + errors.join("; "); exit 1 end ' - 2
Wire your agent to read the bundle (the model step, not checked by CI)
OKF is a format, not a runtime. Tell your agent to consult the bundle before it acts (an instruction in AGENTS.md to read /knowledge first, a retrieval step, or a tool). The agent using the knowledge is fenced.
Eval, 3 fixtures
Last passed: verified todayconformantcontainstimeout 30s · max $0Expected:
OKF bundle conformant:has-typecontainstimeout 30s · max $0Expected:
every frontmatter parses with a non-empty typeclean-exitexit_codetimeout 30s · max $0Expected:
0
Results
The portable version of the AGENTS.md trick: knowledge as files, in version control. Same value and limits as a well-kept docs folder, but the shape is now standard and portable across tools.
Did this work for you?
Our CI checks the setup runs. You tell us if the whole thing worked. Tell us straight.
Liked this workflow?
Get new verified workflows in WebAfterAI, three issues a week (Tue, Thu, Sat).