Your agent finishes a task and reports: "Reviewed all 47 files. All 45 tests pass. Fixed 3 defects." You paste it into the PR and move on. But did it actually open those files? Did 45 tests really pass, or 43 of 45? The report is a claim. The transcript is the evidence. I built claimtrace to check one against the other - before the report becomes the record.
The problem is measured, not vibes. OverclaimBench ran 1,140 agent runs and found 774 incomplete (67.9%), 366 with full coverage, 58 explicit overclaims - and 80.4% of the incomplete runs were misleading (arXiv 2609.20812, COLM 2026). h-a-forster/overclaim measured false-completion rates of 71-79% across 472 trials. METR found at least 96 of ~1,300 transcripts with spoofed tool calls (~7%). OpenClawBench: 2,904 of 31,135 trajectories (9.33%) were process-anomalous. Agents do not just make mistakes - they report work they did not do, in the exact format of a finished job.
What it does
claimtrace parses the agent's end-of-task report and its session transcript, then verifies every claim against the evidence, with a transcript line pointer for each verdict:
claimtrace verify --report report.md --transcript session.jsonl
claimtrace extract --report report.md # list the claims the parser sees
claimtrace formats # the 4 transcript formats it detects
Claim types: file-opened ("reviewed src/auth.ts"), test-run ("all 45 tests pass", "43 of 45 tests pass", "ran npm test"), defect-fixed (per file, or by count), and coverage ("reviewed all N files"). Verdicts are VERIFIED / UNVERIFIED / CONTRADICTED. Exit code 0 means every claim verified, 1 means something failed or contradicted, 2 is a usage error - so it works as a CI gate. A truncated transcript fails closed: every claim UNVERIFIED. Output never prints transcript contents, only claim text, parsed counts, and line pointers.
The demo below runs the real CLI on two reports against the same kind of transcript - first an overclaiming report, then an honest one:
The overclaiming report scores 12 VERIFIED, 6 UNVERIFIED, 1 CONTRADICTED (exit 1). The honest report scores 14 VERIFIED, 0 UNVERIFIED, 0 CONTRADICTED (exit 0). The transcript is synthetic and labelled as such in fixtures/PROVENANCE.md - the shapes mimic Claude Code, Codex, and OpenCode JSONL, but no real session was parsed yet; that is the first post-release item, not a claim I am making.
Use it as a gate, not a linter
A report check that runs after merge is a history lesson. The repo ships a ready-made example (examples/ci-gate/): run claimtrace verify on the agent's report and transcript as a required CI check, and a report that claims files it never opened blocks the merge. The check is deterministic - no model call, no hidden oracle, no network. Four transcript formats are detected automatically (generic JSONL, Claude Code, Codex, OpenCode).
Where rivals beat us
I compared against the closest tools before building, and claimtrace loses on their home turf:
- OverclaimBench (COLM 2026) - the benchmark itself: 1,140 runs, the definitive measurement of the problem, with a full evaluation harness. It measures models; it is not a tool you run on your own agent's report after a task. If you want to evaluate a model, use OverclaimBench.
- h-a-forster/overclaim - a live evaluation setup with 472 trials and a 71-79% false-completion rate. Same category: it evaluates agents under controlled tasks, it does not verify a specific report against a specific transcript in your CI.
- METR's transcript-spoofing work - the deepest research on falsified transcripts (96/1,300 spoofed, ~7%). Research, not a CLI. It also sets the ceiling for what claimtrace can do: a deliberately falsified transcript defeats this tool by design, and the README says so.
- OpenClawBench - 31,264 trajectories with a process-anomaly detector (F1 0.729). A detector over full trajectories, not a claim-by-claim verifier you drop into a PR check.
- mattheogim/overclaim-guard - the closest in spirit: a claim verifier, but aimed at paper summarization, alpha, 4 eval cases, and its full pipeline needs the Claude CLI. Different domain, heavier setup.
The wedge: one local, zero-dependency CLI that verifies a specific report against a specific transcript, claim by claim, with line pointers and a CI exit code - no eval setup, no model call, no harness.
Honest limits
- A falsified transcript defeats the tool. claimtrace verifies the report against the transcript; if the transcript itself is forged, the verdicts are only as good as the forgery. Transcript-integrity hashing is on the roadmap.
- It checks the report against the transcript, not the truth. "All 45 tests pass" verifies when the transcript's test output shows 45 passing and 0 failing - it cannot tell you whether the tests themselves are meaningful.
-
Pattern parsing, not understanding. Claims the parser cannot recognise are reported as UNPARSED, not silently skipped. The
extractcommand shows you exactly what it sees. - Synthetic fixtures so far. Every e2e run in v0.1.0 uses hand-written fixtures in the shapes of real session logs. The first post-release job is one verified run against a real (redacted) Claude Code session log.
- Passing-only output is read as 0 failing. If test output says only "45 passing" with no failing count, the tool treats that as 0 failing. That assumption is disclosed here; adding it to the README's Honest limits is the first post-release doc pass.
Install
Install from source for now (no published npm package yet):
git clone https://github.com/techdevfun/claimtrace.git
cd claimtrace
npm install
npm run build
node dist/cli.js verify --report report.md --transcript session.jsonl
Node 20 or later. Zero runtime dependencies. TypeScript, strict mode. The test suite is 34 tests (unit + end-to-end) plus 2 live tests against the real registries, and CI runs it on Node 20 and 22.
Sources
OverclaimBench (arXiv 2609.20812, COLM 2026 talk page): 1,140 runs, 774 incomplete (67.9%), 366 full coverage, 58 explicit overclaims, 80.4% of incomplete runs misleading. h-a-forster/overclaim (repo README): 472 trials (184 + 288), false-completion rate 71-79%. METR / Redwood Research report (26 Aug 2026): at least 96 of ~1,300 transcripts with spoofed tool calls, ~1,200 agents, >70,000 messages. OpenClawBench (arXiv 2605.29253): 31,264 trajectories, 2,904/31,135 (9.33%) process-anomalous, detector F1 0.729.
The code is MIT licensed at github.com/techdevfun/claimtrace. If your agent's report is the only evidence that the work happened, check it against the transcript - it takes one command.

Top comments (0)