This repository is primarily about the Open Knowledge Format (OKF).
OKF is a universal, vendor-neutral format for representing knowledge as plain markdown files with YAML frontmatter. It is not tied to any particular agent, framework, model provider, or serving system. The goal is simple:
- Anyone can produce OKF β humans authoring by hand, agents built on any framework (Google ADK, LangChain, custom), export pipelines from existing catalogs (Dataplex, Unity Catalog, Collibra, β¦), or scripts walking a database.
- Anyone can serve and consume OKF β a static file server, a knowledge-management UI (Obsidian, Notion, MkDocs), an LLM loading files into context, a search index, or a graph viewer like the one bundled in this repo.
The agent below is a proof of concept demonstrating one way to produce OKF bundles automatically. The format itself is the contribution; this agent and the visualizer exist to make the format tangible at both ends β production and consumption.
See OKF in practice β three ready-to-browse bundles produced by this agent, checked into
bundles/:
bundles/ga4/β GA4 e-commerce dataset (viz.html)bundles/stackoverflow/β Stack Overflow public dataset (viz.html)bundles/crypto_bitcoin/β Bitcoin blocks/transactions (viz.html)
OKF represents catalog knowledge as plain markdown files with YAML frontmatter, organized in a directory hierarchy. That choice unlocks a few properties that are hard to get from a service-owned metadata store:
- Human- and agent-readable. No SDK or query language stands between a
reader and the content. An engineer can
cata concept; an LLM can ingest it verbatim into context. - Version-controllable out of the box. Bundles live in git. Pull requests, line-by-line diffs, blame, and review workflows just work β knowledge curation becomes a normal software-engineering activity.
- Portable and lock-in free. A bundle is a directory. Ship it as a tarball, host it in any repo, mount it from any filesystem, or sync it to any system that speaks files. No proprietary API stands between you and your metadata.
- Mixes structured and unstructured data deliberately. Use frontmatter
for the few fields you want to query, filter, or index on (
type,resource,tags,timestamp); use the markdown body for the prose, schemas, and example queries that LLMs and humans actually read. - Minimally opinionated, freely extensible. A small set of required keys ensures interoperability, but bundles can carry arbitrary extra frontmatter keys and arbitrary body sections without breaking consumers.
- Composes with existing tooling. Many knowledge tools β Notion, Obsidian, MkDocs, Hugo, Jekyll β already speak markdown plus YAML frontmatter, so bundles can be browsed, edited, or rendered without custom UI.
- Progressive disclosure built in. Auto-generated
index.mdfiles let an agent or human navigate the hierarchy one level at a time instead of loading the entire bundle into context. - Graph-shaped, not just tree-shaped. Concepts link to each other via normal markdown links, expressing relationships richer than the parent/child implied by the directory layout.
The net effect is that reference agents, consumption agents, and humans collaborate on the same artifacts in the same way they already collaborate on source code.
python3.13 -m venv .venv
.venv/bin/pip install --index-url https://pypi.org/simple/ -e .[dev]
- BigQuery:
gcloud auth application-default loginplus a project for billing (gcloud config set project <id>). Public datasets are readable, but the caller's project is billed for query bytes. - Gemini: set
GEMINI_API_KEY(AI Studio) or use Vertex AI by settingGOOGLE_GENAI_USE_VERTEXAI=true,GOOGLE_CLOUD_PROJECT=<id>, andGOOGLE_CLOUD_LOCATION=<region>.
The reference agent runs in two passes. The BQ pass writes one OKF
doc per concept the source advertises, using BigQuery metadata alone.
The web pass then runs the LLM as its own crawler: it receives a
list of seed URLs (provided via --web-seed or --web-seed-file),
fetches the seeds via the fetch_url tool, and decides which outbound
links are worth following based on whether they look like authoritative
documentation for the existing concepts. For each page it fetches, the
agent chooses to (a) enrich one or more existing concept docs, (b) mint
a standalone references/<slug> doc, or (c) skip. A hard
--web-max-pages cap and a same-domain allowed-hosts filter
(configurable via --web-allowed-host) are enforced inside the tool,
so the agent cannot overrun. Use --no-web to skip the web pass.
Minimum invocation β point at a BigQuery dataset and a bundle output
directory. Seeds for the web pass are explicit; omit them (or pass
--no-web) to run BQ-only:
.venv/bin/python -m reference_agent enrich \
--source bq \
--dataset <project>.<dataset> \
--web-seed-file <path/to/seeds.txt> \
--out ./bundles/<name>
Iterate on a single concept by adding --concept <type>/<name> (e.g.
--concept tables/events_); repeatable.
Each sample pairs a recipe (samples/<name>/, with the seed URLs and
exact enrich command) with the produced bundle (bundles/<name>/)
that the recipe generated. Open the recipe to reproduce; open the bundle
to browse the result directly.
- GA4 Google Merchandise Store β public e-commerce dataset, seeded with canonical GA4 BigQuery Export documentation URLs. Β· recipe Β· bundle Β· viz.html
- Stack Overflow β public dataset (mirror of the Stack Exchange Data Dump), seeded with the community's canonical schema references. Exercises multi-concept enrichment from cross-cutting docs pages. Β· recipe Β· bundle Β· viz.html
- Bitcoin (crypto) β public dataset (blocks, transactions, inputs,
outputs) from the
bitcoin-etlpipeline. Exercises cross-table foreign-key relationships in prose. Β· recipe Β· bundle Β· viz.html
The visualize subcommand renders any OKF bundle as a self-contained
interactive HTML file β one file, no backend, no install on the
viewing side. Open it in any modern browser, share it as an artifact,
host it on a static file server, or commit it next to the bundle (as
this repo does).
The viewer is itself a proof-of-concept consumer of OKF, mirroring the way the reference agent is a proof-of-concept producer. OKF bundles can be consumed by anything that reads markdown; this is just one shape.
- A force-directed graph of every concept in the bundle, with colored nodes by type (datasets, tables, references, β¦) and directed edges drawn from each cross-link in the markdown bodies.
- A detail panel for the selected concept showing its frontmatter
(description, resource link, tags) and its rendered markdown body β
with internal
[β¦](/path/to/concept.md)links rewired to navigate within the viewer instead of following the path. - A "Cited by" backlinks list under each concept (computed from the reverse of the link graph).
- A search box (matches title, concept id, and tags), a type filter, and switchable graph layouts (cose / concentric / breadth-first / circle / grid).
.venv/bin/python -m reference_agent visualize --bundle ./bundles/<name>
That writes bundles/<name>/viz.html. Flags:
| Flag | Default | Description |
|---|---|---|
--bundle |
(required) | Bundle root directory. |
--out |
<bundle>/viz.html |
Output HTML path. |
--name |
bundle directory name | Display name shown in the viewer header. |
Example, writing the output somewhere else and overriding the header:
.venv/bin/python -m reference_agent visualize \
--bundle ./bundles/crypto_bitcoin \
--out /tmp/btc.html \
--name "Bitcoin OKF"
The HTML embeds the bundle as a JSON blob and uses Cytoscape.js for the graph and marked for in-browser markdown rendering, both loaded from a CDN. No data leaves the page; the bundle is parsed once at generation time and serialized into the file.
.venv/bin/pytest