|
Google's Open Knowledge Format asks exactly one thing of a document: a type field. Everything else is optional, and a consumer is told never to reject a file for missing it.
Six weeks after launch, version 0.2 added a rule the format had never needed. Inside a new concept type called Attested Computation, the agent may fill in the parameters but must not write or edit the query. The spec's own before-and-after example explains why: in v0.1 the SQL sat in prose that an agent can read, ignore, or rewrite.
Below: what OKF is, what v0.2 changed, what happened when we fed Google's reference checker five fake receipts, and five claims in circulation that the files do not support.
| accession 01 · what okf is |
OKF is a file format for what your company knows. Think of it as a git repo where every table schema, metric definition and runbook gets its own markdown file. Google's Data Cloud team (Sam McVeety and Amir Hormati) published it as an open, Apache 2.0 spec that formalizes Andrej Karpathy's LLM Wiki pattern: instead of re-retrieving raw documents on every query, an agent maintains a curated wiki it reads and updates.
A bundle is a directory. Each markdown file is one concept, and the file path minus .md is its ID. A YAML frontmatter block holds the few fields worth querying. Ordinary markdown links between files turn the folder into a graph an agent can walk.
| the folder | one concept file |
shop/ ├ index.md ← reserved: contents ├ log.md ← reserved: history ├ tables/ │ ├ checkouts.md │ └ customers.md └ metrics/ └ weekly_active_users.md
concept id = tables/checkouts |
--- type: BigQuery Table ← required title: Checkouts description: One row per completed checkout. resource: bigquery URI tags: [shop, revenue] --- # Schema | customer_id | string | key into [customers](/tables/customers.md) |
↑ that link is a graph edge |
fig. 1 · adapted from the example in Google's launch post. title, description, resource and tags are recommended, not required.
Why a format and not another service: Google's post lists where this knowledge lives today (metadata catalogs with their own APIs, wikis and shared drives, docstrings and notebook cells, the heads of a few senior engineers). Every agent builder rebuilds the same context-assembly layer. The post also names the family OKF comes from: Obsidian vaults wired to coding agents and the AGENTS.md / CLAUDE.md convention files, each useful and each bespoke.
One framing that holds up, from an explainer by Suganthan: a sitemap lists your URLs, llms.txt points at the pages that matter, and an OKF bundle hands over the content itself.
| accession 02 · what version 0.2 changed |
The launch post said the full v0.1 spec fits on a single page. We diffed the two versions: v0.1 is 15,046 bytes, v0.2 is 37,748. Almost all of the growth answers one sentence in the new motivation section: a corpus is increasingly written and maintained by agents, so a reader needs to know where each fact came from and whether anyone checked it.
| a consumer needs to know | v0.1 | v0.2 field |
|---|
| where a claim came from | a # Citations list at the bottom | sources: with id, author, usage_count, last_modified | | who wrote it | timestamp, nothing else | generated: { by, at } | | who confirmed it | not recorded | verified: list of {by, at} | | whether it still holds | not recorded | stale_after: an absolute instant | | whether it is current | not recorded | status: draft | stable | deprecated | | whether a number was computed the approved way | SQL written in prose | type: Attested Computation |
| spec size 15,046 → 37,748 bytes · 2 breaking changes (timestamp, # Citations) · everything else additive |
fig. 2 · field names from SPEC.md §5 and §13. v0.2 consumers may still read a legacy timestamp or # Citations list.
Two small design choices show who the spec expects to be editing these files. Actors follow one naming rule: reference_agent/gemini-2.5-pro for agents, human:ahormati for people, process:finance-nightly for jobs. And claims cite sources through footnotes keyed by a stable ID rather than a list position, because agents rewrite these documents constantly and a shuffled list would silently misattribute every citation.
The spec then derives three trust tiers from the verified field. Neither tiers nor source credibility are stored as scores: the spec calls a score subjective and quick to go stale, and stores the facts a reader can compute one from.
| frontmatter says | tier | may a consumer reject it | in Google's samples |
|---|
| no verified key | unverified | no | 45 | | verified by agents or processes | machine-confirmed | no | 0 | | verified by a human: actor | human-reviewed | no | 8 |
fig. 3 · tiers from SPEC.md §5.3, which calls them advisory signals, not access control. sample counts: our parse of all 53 concept files in the four sample bundles, Sept 17.
| accession 03 · the sample bundles |
provenance: frontmatter parsed from every concept file in the repo, Sept 17, 2026
That last column deserves a closer look. Three of Google's four sample bundles were built by the reference agent from public BigQuery datasets (GA4 e-commerce, Stack Overflow, Bitcoin). Together they hold 44 concepts. All 44 carry sources, which is good. None carries a verified entry, so every one sits in the lowest tier.
The eight human-reviewed concepts all live in the fourth bundle, Acme Retail, a fictional company built to demonstrate the v0.2 fields. That is not a flaw in the spec, which says unverified files stay fully consumable. It does mean the demo that shows real data and the demo that shows trust are two different bundles, and your own agent-built corpus will look like the first kind until someone signs off.
| accession 04 · the sql lock |
provenance: SPEC.md §10 · appendix A (income statement, v0.1 to v0.2)
An Attested Computation is a concept that carries a sanctioned way to compute a number, plus a way to prove the number came from it. The analogy is a pharmacy: the agent can pick the dose from a printed range, but it cannot rewrite the prescription.
The frontmatter declares a runtime (bigquery, dbt, python), typed parameters, an executor that runs the query and returns a receipt, and an attester: deterministic code, no LLM, that inspects the receipt and returns a verdict. The spec separates this from the verified field. Verified means a person or process confirmed the definition still matches policy. Attestation means this particular run produced this particular value the approved way, and it is never stored in the bundle.
1. discover consumer | → | 2. load consumer | → | 3. parameterize agent: values alone | → | 4. execute executor: returns receipt | → | 5. attest attester: no LLM | → | 6. gate consumer: refuse on fail, warn when stale |
fig. 4 · the consumer flow in SPEC.md §10.5, which the spec marks as informative, not normative.
| accession 05 · we ran the attester |
Google's Acme Retail bundle ships a working attester for BigQuery. It normalizes whitespace, comments and keyword casing, then checks two things: the SQL in the receipt matches the sanctioned query, and the number about to be shown matches the first cell of the receipt's result. We called it against the bundle's revenue computation with five receipts. The dollar figures below are values we made up for the test.
| receipt we fed it | verdict | reading |
|---|
| honest receipt: sanctioned SQL, result 4,200,000, shown as 4,200,000 | pass | correct | | agent edits the filter from 'delivered' to 'shipped' | fail | caught: SQL mismatch | | agent shows 4,300,000 against a receipt saying 4,200,000 | fail | caught: value mismatch | | sanctioned SQL, but the agent bound the wrong year | pass | missed: bind values never read | | receipt with no job_id at all | pass | missed: no proof a job ran |
fig. 5 · revenue-ytd.md takes one parameter, year. verdicts are the function's own ok field.
The two misses are documented in plain words. The file's docstring says bind values are compared as names and their values are not inspected, because the executor is trusted to bind. It also never makes a network call, so it cannot re-read a BigQuery job; it checks whatever receipt it is handed. The spec describes a stronger check (re-read the result by job ID rather than trust the agent's text) and openly defers the receipt format, the attester interface and sandboxing to a later version.
The practical catch sits in the executor. Google's sample executor is a markdown skill, and the spec says a runner can be an agent or deterministic code. If an agent follows that skill, the same agent assembles the receipt the attester trusts. The check still stops the two failures the v0.1 layout invited, a rewritten query and an improvised number. It does not yet prove the query ran, or that it answered the question the user asked.
| accession 06 · claims the files do not support |
provenance: each checked against the repos on Sept 17, 2026
| you may read | what the files say |
|---|
| OKF defines how documents are chunked for retrieval (MindStudio explainer) | The word chunk appears zero times in v0.1 or v0.2. OKF defines files, fields and links; chunking stays with your retrieval stack. | | Concepts carry a timestamp field and a # Citations section | True in v0.1, and shown in Google's own launch post. v0.2 replaced both, with generated.at and sources. Wikipedia's OKF entry and most explainers we found still describe v0.1. | | okf.md is the spec site | Google's repos never link to it. Its footer reads v0.1 and MIT licensed; Google's spec is v0.2 under Apache 2.0, and its sample index.md carries frontmatter the spec allows for okf_version alone. | | The spec lives in the knowledge-catalog repo | It moved to open-knowledge-format on Aug 14. The old okf/ folder is a frozen snapshot, and its README says to stop using it. | | The Knowledge Catalog connector carries seven frontmatter keys | That is what the connector doc still says. The code was updated the same day the new repo opened (PR #292) to carry verified, status, stale_after and the computation fields. The doc lags the code it describes. |
fig. 6 · a format that adds stale_after has its own freshness problem in the docs around it.
The same connector doc keeps limits worth reading before you push anything: no entry-level access control (anyone with a basic viewer role on the project can bulk-export the entry group), scale untested beyond the 14-file demo, and deletes in git leave entries behind in the catalog.
| accession 07 · the fair reading |
provenance: SPEC.md §11, §12, §13
Google gets real credit here. v0.2 followed its own versioning rule: two breaking changes, each named, each with a fallback so a v0.1 bundle still reads. The spec lists what it deferred instead of implying it shipped. The attester's docstring states its own blind spot in plain words. And the whole thing stays a folder of markdown: any editor, any git host, no SDK.
The open question is adoption on the consuming side. OKF records trust with care, then tells every reader it must not reject a file for lacking it. Whether that metadata changes anything depends entirely on consumers choosing to gate on it.
| accession 08 · what to do with it |
provenance: derived from sections 01 to 07
| 1 | If you keep an Obsidian vault or a docs folder for agents, you are close to conformant. Give every non-reserved file a frontmatter block with a type, keep index.md without frontmatter (except an okf_version key at the root), and date log.md headings as YYYY-MM-DD. That is the whole conformance test. |
| 2 | Decide your trust gate in code, because the spec will not decide it for you. One workable policy: answer from human-reviewed files, cite machine-confirmed ones with a caveat, and flag unverified ones or anything past stale_after or marked deprecated. |
| 3 | For numbers that matter, build the receipt outside the agent. Have your own code take the job ID, fetch the job and its results from BigQuery, and read the executed query and values from there. Then check the bound parameter values against the user's question. That covers both misses in fig. 5. |
OKF v0.1 standardized where agent knowledge lives. v0.2 admits that agents can write that knowledge faster than anyone can check it, and moves the checking into fields a machine can read. The format is ready for a consumer that refuses to show an unattested number; the reference tooling is not there yet.
|