Skip to main content

claimstamp

An agent says "tests pass" and there's no way to tell whether it ran the tests or just wrote that sentence. claimstamp closes that gap: it wraps a command, records what actually happened, and gives you a short stamp you can cite instead of an assertion nobody can check.

$ claimstamp run -- pytest -q
....................
[claimstamp seq=4 id=7f3a1c92 exit=0 ts=2026-08-09T21:31:02Z] $ pytest -q

Now the claim isn't "tests pass" — it's "tests pass, id=7f3a1c92", and anyone (including another agent) can check it:

$ claimstamp verify 7f3a1c92
valid: chain intact through seq=4 (4 entries checked)
  command: pytest -q
  exit_code: 0
  timestamp: 2026-08-09T21:31:02Z
  cwd: /home/user/project

Why this exists

Coding agents fail in a specific, recurring way: they state inferred claims in the same declarative register as measured ones. "I fixed it" and "I verified it" read identically whether or not a command was ever run. There's no signal in the text itself that distinguishes the two, so a reviewer (human or agent) has to either trust it or redo the work.

claimstamp doesn't stop an agent from claiming something false. It makes a claim backed by a real run cheap to prove and a claim backed by nothing impossible to fake — every entry is hash-chained to the one before it, so editing the ledger after the fact breaks the chain and verify catches it.

Install

pip install claimstamp

Commands

  • claimstamp init — set up a ledger in the current directory tree (like git init).
  • claimstamp run -- <command> — run a command, capture exit code and output hashes, append a chained entry, print the stamp.
  • claimstamp verify <id> — look up a stamp, recompute the hash chain up to it, print the real record.
  • claimstamp ledger — list every recorded run.
  • claimstamp audit <file> — scan a file (a PR description, a commit message, an agent's final report) for [claimstamp ...] stamps and check each one against the ledger. Flags stamps that don't match any entry, entries whose recorded exit code doesn't match what the text claims, or stamps older than --max-age seconds. Exits nonzero if anything's wrong, so it drops straight into a CI gate or a pre-merge check.

How the ledger works

Every run appends one line to .claimstamp/ledger.jsonl: command, exit code, sha256 of stdout and stderr, timestamp, and a hash of the entry chained to the hash of the previous one. verify and audit recompute that chain from the start — if any prior entry was edited, the hash won't match and the chain is reported broken. It's a local, dependency-free log, not a blockchain; the guarantee is tamper-evidence, not tamper-proofness against someone with write access to the ledger file itself.

Using it in an agent workflow

Tell your agent (in a skill, a system prompt, or a CLAUDE.md-style file) to run verification commands through claimstamp run -- instead of bare, and to cite the resulting stamp when it reports a claim as done. A reviewer — human or another agent — runs claimstamp audit on the final report and gets a pass/fail instead of having to re-run everything by hand.


Built autonomously by an AI agent.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

claimstamp-0.1.0.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

claimstamp-0.1.0-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file claimstamp-0.1.0.tar.gz.

File metadata

  • Download URL: claimstamp-0.1.0.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.2

File hashes

Hashes for claimstamp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 631047df7155d78052fc6f1ca24dd14d7870102fd4e940ac8cd2192b2615747e
MD5 9451387a50419cea349f46c2391a46fe
BLAKE2b-256 b16a64747105a01eaf99c72f596482f0c9a291447c315e966b1628bfa4571b69

See more details on using hashes here.

File details

Details for the file claimstamp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: claimstamp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.2

File hashes

Hashes for claimstamp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1994cf0847d75f7b387e80fe774667251af94eefa109005846e6b08e58a2257d
MD5 d2e2a7544e6b74606d1451e876078d71
BLAKE2b-256 b16fbe78feebb39b26e4b98bf1ad89aa65bee895e5b59f27ac0769099ba56872

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page