cd /news/developer-tools/the-tomevault-instruction-corpus-202… · home topics developer-tools article
[ARTICLE · art-82165] src=dev.to ↗ pub= topic=developer-tools verified=true sentiment=· neutral

The TomeVault Instruction Corpus (2026-07)

A developer released the TomeVault Instruction Corpus, a de-identified dataset of 229,375 AI instruction files (CLAUDE.md, AGENTS.md, SKILL.md, .cursorrules) with structural measurements. The dataset, licensed CC BY 4.0, includes columns for format, size, token count, and loadability, but excludes file contents and repository names to preserve privacy.

read7 min views11 publishedJul 31, 2026

De-identified structural measurements of AI instruction files (CLAUDE.md, AGENTS.md, SKILL.md, .cursorrules and related conventions).

Edition 2026-07. 229,375 files. Schema version 1.0.0. Licensed CC BY 4.0.

Teams increasingly commit instructions for AI coding agents directly into their

repositories. CLAUDE.md

, AGENTS.md

, SKILL.md

, .cursorrules

and a dozen

sibling conventions are now ordinary source-controlled artefacts, and almost

nothing is measured about them.

This dataset is one row per instruction file that our pipeline has fetched and

parsed, carrying that file's structural properties. Size, format, licence,

whether it names a model that no longer exists, and whether a deterministic

ruleset thinks an agent asked to load it would get what the author intended.

It contains no file contents, no owner names, no repository names and no URLs.

Every measurement in it is reproducible from the method described below.

One row per instruction FILE INSTANCE that the pipeline has fetched, converted, and RETAINED THE BODY OF. A row is a file, NOT a repository and NOT an owner: one repository commonly contributes many rows, and a widely-forked file appears once per fork. Any count derived from this table is a count of files unless it explicitly de-duplicates. Two exclusions narrow it further: rows whose deterministic security grade is 'fail', and rows the pipeline tracks without a stored body, which cannot be measured and are therefore absent rather than counted as passing. The retained-body requirement is the largest of the three filters, so this is a measurable subset of what we track and not a census of it.

Three limits are worth stating before anyone builds on this.

A row is a file, not a project and not a team. A popular instruction file that

has been forked four hundred times contributes four hundred rows. Any count

here is a count of file instances unless you de-duplicate it yourself, and the

difference between the two is large.

The observation window is ours, not the ecosystem's. The ingested_week

column

records when our crawler first saw a file, which is not when it was written.

Growth curves drawn from that column describe our crawl, not adoption.

Structural checks are not quality judgements. A file can pass every check here

and still give an agent bad instructions. What the loadability columns measure

is whether the instruction reaches the agent intact, which is a narrower and

more testable question than whether it is any good.

Column Type Meaning
format
string The instruction-file convention this file follows, as detected by the pipeline (claude_md, agents_md, skill_md, cursorrules, cursor_mdc, gemini_md, copilot_instructions, windsurf_rules, other).
format_family
string The format grouped to its tool family (claude, agents, cursor, gemini, copilot, windsurf, skill, other). Formats that a single tool reads under more than one filename collapse to one family here.
role
string Whether the file is an always-on config, an on-demand skill, or a tome.
source_platform
string The platform the file was discovered on.
account_type
string Whether the owning account is an Organization or an individual User, as reported by the source platform. Null where the platform did not say.
bytes
int64 Size of the file body in bytes.
lines
int32 Number of newline-separated lines in the file body.
token_count
int32 Approximate token count of the body, as computed by the pipeline at ingestion. Null where it was never computed.
licence_spdx
string SPDX identifier of the REPOSITORY's licence as reported by the source platform. Null means the platform reported none, which is not the same as the work being public domain. This population is licence-filtered, so the distribution here is not the ecosystem's: see the licence note in the biases section before deriving any rate from it.
names_a_model
bool True when the body names at least one model identifier from the curated tracking list, at any lifecycle status.
model_is_retired
bool True when the body names at least one model identifier whose curated status is deprecated, superseded or retired. False when the file names only live models AND when it names no model at all. Read this column together with names_a_model: the share of the whole corpus and the share of model-naming files are very different numbers, and only the first is a statement about the corpus.
retired_model_count
int32 How many DISTINCT retired identifiers the body names.
loadability_tier
string The verdict of the deterministic loadability ruleset over this file: whether an agent asked to load it would get what the author intended.
loadability_findings
int32 Number of distinct loadability checks that fired at least once on this file. Zero means the file passed every applicable check.
has_broken_reference
bool True when at least one loadability finding is a reference the file makes to something that will not travel with it, or that is already gone.
security_grade
string Grade from the deterministic pattern scanner. Rows graded 'fail' are not in this dataset at all; this column distinguishes the rest.
quality_grade
string Grade from the deterministic quality ruleset. Null where never graded.
ingested_week
string ISO week (YYYY-Www) in which the pipeline first observed the file. See the ingestion-window caveat in the dataset card.

Files are discovered by crawling public repositories, fetched, and classified by

format. Every measurement in this release comes from deterministic rulesets, not

from a language model, so the same input always produces the same row.

Loadability findings come from the same ruleset our product runs, version

loadability-v1.1

. The has_broken_reference

column is

true when a file fires either the stale-path check or the reference-portability

check, meaning it points at something that has gone or that will not travel with

the file when it moves.

Retired-model flags come from a hand-curated list of model identifiers and their

lifecycle status, last updated 2026-06-23

. Only

identifiers marked deprecated, superseded or retired are flagged. Matching is

whole-token, so gpt-4

does not match inside gpt-4o

.

Licence classification reuses the same policy module that gates our own

ingestion, so the compliance figures here and our enforcement are definitionally

the same thing.

aggregate.json

in this release carries the corresponding month's headline

metrics computed over the same snapshot.

Read model_is_retired together with names_a_model. Most files name no

The curated model list carries more dead identifiers than live ones. That

shape inflates any conditional staleness rate independently of how careless

anyone has been.

Discovery is not uniform. Coverage reflects what a crawler over public

repositories reaches. Private repositories, self-hosted platforms and files

inside archives are absent, and there is no reason to assume the absent

population resembles this one.

Security-failing files are excluded. Rows whose deterministic security grade

is fail

were removed before export. The remaining population is therefore

slightly cleaner than the raw corpus.

The licence distribution is filtered, and it is not the ecosystem's. Files

whose repository licence fails our ingestion policy do not reach this population

at all, so permissive licences are heavily over-represented here by construction.

A small share of rows additionally carry no SPDX identifier, because the source

platform reported none. Neither the shape of this column nor the size of its null

slice supports any claim about how much of the wider ecosystem is unlicensed or

copyleft. Do not read a compliance rate out of this dataset.

ingested_week

is the ISO week in which OUR PIPELINE first observed the file, not the week the file was authored upstream. The series describes the pipeline's observation window and must never be presented as ecosystem growth. Deriving an adoption curve from this column is a misuse of it.

This release excludes every file belonging to an owner who has asked to be

removed. Owners are excluded at the OWNER level. The exporter first collects every owner having at least one row with opted_out = 1, then drops all rows belonging to those owners. Row-level filtering would leak the untouched rows of an owner who has already asked to be removed.

Edition 2026-07 excludes 275 files across

16 owners on that basis.

To be removed from future editions, contact oli@tomevault.io. Because the

dataset carries no owner names or repository names, removal takes effect by

dropping the underlying rows, and subsequent editions simply do not contain

them.

Plain text:

TomeVault (2026). The TomeVault Instruction Corpus, edition

2026-07.[https://tomevault.io/standards/state-reports]

BibTeX:

@dataset{tomevault_instruction_corpus_2026_07,
  title  = {The TomeVault Instruction Corpus},
  author = {TomeVault},
  year   = {2026},
  note   = {Edition 2026-07, schema 1.0.0},
  url    = {https://tomevault.io/standards/state-reports}
}

Corrections ship as new dated editions. A published edition is never edited in

place, so a figure you quote does not change underneath you.

The full dataset, method and column definitions live at https://tomevault.io/standards/state-reports.

── more in #developer-tools 4 stories · sorted by recency
── more on @tomevault 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/the-tomevault-instru…] indexed:0 read:7min 2026-07-31 ·