LLM & agents¶
Summarizes SPEC.md §13.1–13.4; SPEC.md is authoritative.
vouch is built around one rule: at every point where an agent would otherwise guess, make the correct action cheaper than the guess.
| Where an agent would guess | vouch gives it instead |
|---|---|
| "what was the accuracy again?" | .vouch/CATALOG.md, vouch search, vouch cite |
| writing the difference or ratio of two numbers | vouch compare → a derive |
| "A outperforms B" | vouch compare → a claim; \vouchclaim |
| a number that doesn't exist yet | vouch.expect() → [pending: key] |
| converting an existing paper | vouch suggest --apply, with no-source for numbers matching no record |
| knowing whether it slipped | the edit hook (immediate) and check --strict --json (a fix list) |
| a value changed under its prose | vouch changes, with the citing sentences |
The catalog: .vouch/CATALOG.md¶
Written by every build and committed, the catalog lets an agent see everything citable with a single file read and no command. It is kept token-lean: one line per key, empty fields omitted.
# vouch catalog — 38 values · 3 claims · 1 table · 1 pending · 2 changed
Cite: \vouch{key} · \vouch[fmt]{key} · \vouchclaim{key}{text} · \vouchtable{key}
Formats: .1f .2e ,d .1pct x=\times u=unit · Stat → mean \pm std · subfields .mean .std .n .ci95
Find: vouch search "words" · Snippet: vouch cite KEY · Arithmetic/claims: vouch compare A B · Missing: vouch.expect(...)
Never type a number. Never compute with numbers in prose.
## cifar (9)
cifar.resnet.acc · 93.2 ± 0.4% · top-1 test accuracy, mean ± std over seeds · higher↑ · cifar_resnet · fresh · cited 3×
cifar.vit.acc · 72.4 ± 1.1% · top-1 test accuracy, mean ± std over seeds · higher↑ · cifar_vit · CHANGED · cited 2×
…
## claims
cifar.resnet_beats_vit · HOLDS (margin 28.7%) · ResNet top-1 > ViT top-1
## tables
main · 3×3 · Model | CIFAR-10 | ImageNet · cells main.<model>.<column>
## pending (vouch todo)
imagenet.convnext.acc · ConvNeXt-T top-1 on ImageNet · run: python experiments/train.py --dataset imagenet --model convnext
## changed since last ack (vouch changes)
cifar.vit.acc · 91.2% → 72.4% · SUSPICIOUS (large move) · main.tex:118, main.tex:203
Projects with more than 300 keys get an index (prefix, count, one-line summary)
and one file per prefix under .vouch/catalog/. vouch catalog rewrites it on
demand.
Lookup and insertion commands¶
vouch search ranks keys with BM25 over key segments, description, run id,
unit, a tracked call's function/arguments, and table columns — stdlib-only, no
embeddings. Pending (vouch.expect) keys are found too.
vouch cite returns the exact snippet, and enough context to write the
sentence correctly.
vouch compare does the arithmetic and writes the code that makes it
citable, including a Welch t-test for two Stats. --write appends the
definitions to the first values module.
vouch suggest converts numbers already written in the paper, and exposes
invented ones — see the CLI reference.
Placeholders instead of invention¶
When an agent drafting prose needs a number that doesn't exist, the approved move is:
- Write
\vouch{imagenet.convnext.acc}in the prose. - Add
vouch.expect("imagenet.convnext.acc", desc=…, producer="…")tovouch_values.py. - Tell the user the experiment is owed.
vouch todolists it.
The draft compiles with a visible [pending: …]. This is the most important
anti-hallucination feature in vouch: a legitimate move other than inventing a
number.
While writing experiment code¶
- keys follow
<dataset>.<model>.<metric>; one run id per configuration - always a
desc, andbetter=for any metric - multi-seed results use
Stat.of(per_seed)(orrecord_all(..., stats=True)), never a hand-computed mean - prefer one
record_all(metrics, prefix=…)at the end of an experiment over many scatteredrecord()calls - data goes through
run.input(), outputs throughrun.artifact(); figures are saved inside the run - parameters go through
params=, so hyperparameters in the paper are citable
vouch status --json gives an agent the stale runs and their exact re-run
commands. vouch todo --json gives the owed experiments.
See also: Claude Code, MCP server.