Skip to content
habitat

The census tools

In short. Six small command-line tools that run Record’s rules over every Claude Code log you keep, on your own machine. You sign the result as a report. Anyone can verify it offline. You can choose to record the report's fingerprint in a public log.

Not public

The tools are not a public repository. Write to hello@thecommons.ooo if you'd like to run them.

The tools

tool what it does needs what leaves your machine
census reads every log by Repeat, Scope and Fingerprint (its report also still lists Boundary, a check withdrawn on 19 October 2026); splits your own sessions from the subagents they ran; counts by month; lists every write outside the folder given Python 3 nothing
sign report turns the census into a report signed with your own key Python 3.9+, cryptography nothing
verify report checks a report's signature and digest, offline Python 3.9+, cryptography nothing
anchor report posts the report's fingerprint to Sigstore's Rekor (no report has been anchored so far); --dry-run posts nothing cryptography when anchoring: the report's digest, its period, your DID, a note, the signature and public key. Not the report, not the logs.
stream reads a month of records in the order they arrived, against your own floor, with 100 random orders beside numpy, and the floor module nothing
tamper demo copies a report, changes one count, verifies both: the original passes, the copy is refused nothing

A month, end to end

python3 -I census.py --logs ~/.claude/projects --out ./census
python3 sign_report.py --census ./census/census_session-logs.json --period 2026-10 --out report-2026-10.json
python3 verify_report.py report-2026-10.json --census ./census/census_session-logs.json
python3 anchor_report.py report-2026-10.json --key ~/.habitat-keys/report-ed25519.key --dry-run

Two more, when you want them:

python3 stream_logs.py --logs ~/.claude/projects --since 2026-10-01 --until 2026-11-01 --out ./stream --orders 100
python3 tamper_demo.py report-2026-10.json

sign_report.py also takes --key (where your key lives), --who and --note (written into the signed report). To check an anchor later, with no key and no network:

python3 anchor_report.py --verify report-2026-10.anchor.json report-2026-10.json

The first time you sign, a key is made and kept at ~/.habitat-keys/report-ed25519.key, readable only by you. It is never printed.

What to share, and what not to

  • The signed report carries totals, counts by month, the rules as text, and the census file's name, size and fingerprint. It does not list paths.
  • The census file itself lists the paths of your logs and of every write outside the folder. Keep it to yourself unless you mean to share those.
  • A Rekor entry is public and permanent. Anchor only what you are happy to have on record.

What a signed report does not prove

That the census ran on all of your logs, or on the right ones. That the counts are true of anything but the files read. That the signer is a particular person.

Time

The census and signing take moments. The stream grows with the square of the number of records: about 16 seconds for 25,818 records on a laptop, and about 26 minutes for 100 random orders of that. Choose the window to fit.