varve
A varve is one annual sediment layer in a glacial lake, and reading a sequence of them reconstructs a chronology. varve is that instrument pointed at an agent estate: a local lake that accumulates readable layers of everything the harness does. It normalizes on-disk session records from Claude Code, pi, and opencode into Parquet partitions and queries them with DuckDB. Zero resident processes, no listeners, zero egress.
The design is deliberately plain: no server, no daemon, no vector database, just files and a binary. Adapters are per-runtime and close to pure SQL, and they are the only writers; analysis opens the lake read-only. A full backfill of years of sessions takes a few seconds. Lake data never lives in the repository, landing instead at ~/.local/share/varve/lake/ as Parquet partitions with a rebuildable DuckDB file beside it.
Highlights
- Reconciling its cost numbers against an independent accounting tool agreed within 0.2%, which is most of the reason to trust the rest of what it reports.
- The versioned SQL query library is the real analytics artifact; the engine underneath it is treated as disposable.
- Goal ladder from the PRD: efficiency wins from history, then harness-tuning adequacy (do corrections land once and hold, or is the same decision being re-litigated), then whether context engineering has saturated.
- Correction mining and cost analytics are live; adapters are validated to differing depths and each documents its own status, with the pi adapter the least exercised.
- CI backfills against a synthetic three-runtime corpus in
tests/fixtures/, so the gate runs on fixtures rather than on anyone’s real sessions. - Architecture decisions are dated and carry their evidence in
docs/adr/, with open designs kept separately indocs/rfc/. mise installprovisions the pinned DuckDB and just; every recipe assumes both on PATH.- MIT licensed.
Why this exists, what the first question put to the lake actually answered, and the two-layer argument it came out of are in The Other Half of the Corpus.