Appearance
index-ai / Benchmark
The published §13.4 run — 250 synthetic sites (50 per level), 1,250 queries across five query types. It measures what each conformance level costs an agent in tokens and whether the payload it reads contains the correct citation.
L0 reference L1 scoped contract full coverage ·SPEC §9.3 heuristic, lower is cheaper
| Level | Mean | Median | Min | Max | p90 | Coverage |
|---|---|---|---|---|---|---|
| L0HTML | 955 | 952 | 908 | 1021 | 989 | 100 % |
| L1Manifest | 145 | 147 | 137 | 153 | 150 | 40 % |
| L2aIndex | 147 | 162 | 92 | 202 | 188 | 100 % |
| L2bGraph | 147 | 162 | 92 | 207 | 187 | 100 % |
| L3Query | 210 | 190 | 137 | 302 | 292 | 100 % |
Coverage dots, in order: identity · freshness · specific-fact · listing · cross-reference — filled when the payload that level serves contains the correct citation.
The benchmark quantifies what each conformance level of the index-ai ladder (SPEC §13.1) buys an agent: token consumption per query and correct citation rate, across five benchmark query types. For every site, the harness consumes exactly the payloads the protocol requires an agent to read at that level — the full HTML at L0, the AI Manifest at L1, the Agent Index plus a targeted fetch at L2a/L2b, the query response at L3 — then measures the token cost (SPEC §9.3 heuristic — NFC characters ÷ 4) and whether the payload contains the ground-truth answer (a deterministic citation check).
Every number above is a fact from the published run: 250 synthetic sites, 1,250 queries, regenerated deterministically and locked by integrity tests.
The shape of the result is stable across levels: reading the manifest instead of the HTML cuts token consumption ~6.6×, Levels 2a/2b reach 100 % citation at ~15 % of the L0 cost, and Level 3 keeps 100 % citation at 22 %. Level 1 remains a scoped contract — it answers who publishes a site and when it changed (100 %), and by design carries no content, which is why it cites 40 % and not more. That is the ladder working as specified.
The corpus is synthetic and deterministic (benchmark/corpus.mjs): generateCorpus({ seed }) always produces the same sites, and the seed is recorded in every results file — anyone can regenerate the exact dataset. Synthetic sites are used because external implementations of index-ai are still "none yet" (SPEC §13.5): the benchmark measures the mechanism of each level on identical, realistic content (hotels, blogs, docs, e-commerce, news verticals), not real-world adoption.
| Level | Artifacts served |
|---|---|
L0 | index.html only (realistic HTML with nav/sidebar/footer/scripts) |
L1 | + .well-known/index-ai.json (+ index-ai.json alias) |
L2a | + agent-index.json (flat, no relations) + clean-text content/*.md |
L2b | + agent-index.json with parent/children/related relations |
L3 | + the compact query service — a deterministic projection of the §8 MCP tool contract |
For each (site, query) pair the harness (benchmark/run.mjs) consumes exactly the payload the protocol requires, then measures it:
| Level | Payload consumed | Model |
|---|---|---|
L0 | the site's full HTML payload | one fetch, whole page |
L1 | the AI Manifest | identity/publisher/freshness only |
L2a/L2b | the Agent Index + the selected node's llm_url content | two-phase model of §7: read ≤200 chars of each node's llm_summary to decide relevance, then fetch the selected node's clean text only when phase 1 did not already contain the answer |
L3 | the query + the compact records returned by the query service | records projected to id/label/facts/summary |
L2a and L2b consume the same payloads on this corpus (single-page graphs — the difference appears on paginated graphs, tracked as RFC-006). Full protocol, metrics, and governance: benchmark/README.md.
# reproduce the published dataset exactly
pnpm benchmark # = node benchmark/run.mjs --sites-per-level 50 --seed 20260813 --status Published
# verify integrity (meta, aggregates, token order, citation matrix, identical regeneration)
pnpm vitest run tests/benchmark-full.spec.tsThe seed, the token rule, the status, and the level count are recorded in the meta block of every results file. A change of methodology or seed is a new results series, never an edit to a published one (immutability policy §17.2).
chars ÷ 4 is calibrated for English; per-language rules are not exercised.These numbers validate the ladder's efficiency in mechanism — they do not estimate implementation effort, real tokenizer values, or non-English content.
Specification
The normative home of the benchmark is SPEC §13.4 (public benchmark) and §13.5 (maturity matrix). Feedback via GitHub issues, label rfc, referencing §13.4.