CLAIMS NEED RECEIPTS · CLAUDE CODE AND CODEX

My agents said "done" 385 times in 30 days.
The logs could confirm 53.

RECEIPT                         no. 0001
period      2026-09-17 .. 2026-10-17
agents      claude code, codex
sessions                             326
"done" claims                        385
----------------------------------------
CONFIRMED                             53
CONTRADICTED                          24
UNVERIFIED                           308
silent stalls                         16
----------------------------------------
top contradiction   pushed, no push
  said   "Identity fix committed and …"
  found  no git push in session
----------------------------------------
verified by    two readers, 2026-10-18
My own logs, anonymised. The collector found 1,355 sentences that looked like "done"; two readers kept the 385 that really were. A contradiction counts only when the logs make it obvious. Unverified means the logs couldn't settle it; we never round those up.

A small script reads your agent's logs on your machine and writes one hashed file: no prompts, no code, nothing you haven't read. Send it, and in 48 hours you get a one-page receipt: every time your agent said "done", whether it held, the evidence, and the three hooks that would have caught the ones that didn't.

The sample receipt

This is the product.

Below is the hand-audited receipt from my own coding agent, three months of logs, done before this service existed. The one you get is the same page, produced from your hashed export.

Open it full size ↗
RECEIPTS · NUETON

A receipt for the work.

Holder: Nikhil Sood, founder · Agent: Codex CLI, run unattended with full access · Period: 2026-07-14 to 2026-10-12 · Prepared: 2026-10-12 · Prepared by: hand from the transcripts

Ten claims were sampled and checked against the registry, HTTP responses, Git trees and transcripts. This hand-built prototype precedes the product: the product does the same from a hashed export in 48 hours. Configuration at the time: approval policy "never", sandbox "full access", 60 plugins, 19 MCP servers. Uncached input is total input minus cache reads and may include cache writes, which were not recorded separately.

1. Claims examined

Sessions
2,536
Claims
10
Confirmed
5
Contradicted
3
Unverified
2
Silent stalls
1

2. Confirmed

Confirmed

Two packages published to npm on 31 August.

Both present in the registry, version 0.1.0-beta.

Confirmed

Marketing site and design-partner page live; a client website deployed and bound to DNS on 8 October.

Marketing and design-partner pages: HTTP 200. Client website: root and www both 200.

Confirmed

A console UI restored after an over-scoped redesign on 3 September.

The over-scope was admitted when asked, the rollback reported honestly.

Confirmed

"Website deployed and verified" (26 September).

The site was live. The uncommitted source is recorded under Also found.

3. Contradicted

Contradicted

"Setup installed, briefing read" (12 October), presented as the requested full context transfer.

A file index. The actual archive of conversations and memory was built only after the founder pushed twice.

Completed a narrower task

Contradicted

"58/58", "95/95", "111 passing".

Eight database test files silently ran zero tests because an environment variable was unset, so "all passing" never covered the database path. Current full run: 562 pass, 3 fail, 36 skipped.

Tests that prove nothing

Contradicted

"23 durable employees across 8 departments" running as a company runtime (17 September).

23 records exist. All idle or blocked. Last successful provider call 18 September. The first loop produced 0 accepted outputs from 438k tokens.

Artefact exists, does nothing

4. Unverified

Unverified

Five LinkedIn invitations sent (24 September).

No local evidence either way.

Unverified

One customer email in the Sent folder (16 September).

Not checkable from the logs.

5. Silent stalls

Azure billing dispute ticket. Directive given 7 September with a seven-day deprovisioning deadline. Session run 10 September: the agent installed the support extension, ran help commands, saved the directive text to an evidence folder, and the session ended. No ticket, no report, no handoff entry. The founder learned of it on 12 October from this audit.

Also found

The deploy claims held. On 12 October the main project had 367 modified or untracked files and no commit since 31 August; the remote matched that last commit. Six weeks of work, including the deployed site, existed on one laptop.

6. The bill (free section)

MonthUncached inputCache readsCache writesOutput
July from 14th16M192MUnknown1.1M
August979M43,022MUnknown143.8M
September193M3,928MUnknown22.5M
October to 12th5M108MUnknown0.9M

Cache reads: 97.5 percent of all input (uncached + cache reads + cache writes = Unknown). Uncached input: 1,193M; cache reads: 47,250M; cache writes: Unknown; output: 168.3M.

1,600 of 2,536 sessions hit compaction. Total compactions: Unknown. Largest session: 23,378 tool calls across 172 compactions.

7. Three changes that would have caught this

  1. A stop hook that refuses "done" without evidence.

    If no test, build or check command ran after the last edit, the agent may not finish; it must run one or report BLOCKED. Catches the test-count claim and the uncommitted work.

  2. A four-exit rule.

    A session may end only as done-with-command, BLOCKED-with-named-blocker, budget exhausted, or needs-a-human. Any other ending posts a report to the founder. Catches the billing ticket.

  3. Acceptance criteria written before the task, checkable by the agent.

    "Full context transfer" would have named the archive, its record count and the query that proves it. Catches the narrowed task.

Current collector run · 2026-09-17 to 2026-10-17

collector v0.4 over the founder's Claude Code and Codex logs, --repo-check on; 1,355 keyword matches read by two readers, 385 real completion claims kept; a contradiction counts only when the logs make it obvious

Top contradiction: pushed. Said: “Identity fix committed and pushed.” Found: no git push in session.

Verified by two readers, 2026-10-18. Receipts delivered: 1 (including my own).

How it works

Three steps. Two are yours.

  1. Run the collector. One Python file, standard library only, open source.

    curl -fsSL https://receipts.nueton.ai/receipts_collect.py -o receipts_collect.py
    python3 receipts_collect.py --summary

    It reads ~/.claude/projects (including subagent transcripts) and ~/.codex/sessions and writes ~/.nueton-receipts/export.json. It prints counts only.

  2. Read it, then send it. Open the file. You'll see hashed session and project ids, timestamps, tool names, command families like "test" or "git", token counts, and claim sentences with paths, URLs, emails and long numbers masked. Recognized credential patterns are replaced with <secret> before the file is written. Masks cannot recognize every confidential name or secret: read every retained sentence locally, or use --no-sentences to omit claim text. Then email the file to receipts@nueton.ai from the address you paid with.

  3. Get the receipt in 48 hours. One page, HTML and PDF, prints to a single sheet.

What leaves your machine. All of it.
"claim_id": "604a8d16a8df31ac",
"edits_after_last_check": 0,
"kind": "done",
"last_check_family": "test",
"last_check_ok": true,
"last_check_ts": "2026-10-01T10:00:03Z",
"last_edit_ts": "2026-10-01T10:00:01Z",
"repo_check": "not_checked",
"sentence": "Done: <path> <url> <email>, <hash>, <num>.",
"status": "confirmed",
"status_reason": "check_ok_after_edit",
"ts": "2026-10-01T10:00:05Z"

An excerpt from synthetic test fixtures. Read the complete synthetic export.

--no-sentences sends no claim text at all. --repo-check (off by default) checks claimed commits and pushes against your local git and sends only "found" or "absent".

Collector SHA-256 · checksum file

9026d4172aa108f6083d4d45f069bd59102f0fb2e413eb2ea48ef45ae66bba34

Download the collector · MIT license

Method and limits

It isn't lying. It's doing one of these.

Seven shapes come from the 2026 survey of how coding agents report "done". Three are from my own logs.

What happenedWhat it said
Never ran the tests, or ran a slice"All tests pass"
Stale results: tests passed, then it edited again"Done, tests green"
Ran correctly, narrated wrong"Completed successfully"
Tests pass but prove nothing"Added tests, all passing"
Shared misunderstanding across implementation and tests"Implemented as specified"
Pass alone, fail together"Both changes verified"
Only the real environment shows it"Deployed and working"
A subagent failed and the parent never heard (ours)"Done"
Finished a smaller task than the one asked (ours)"Done" on the big one
Did the work, never committed it (ours)"Deployed and verified": true, and one restore command from gone

Confirmed a check ran after the last edit and passed, or your git shows the commit.

Contradicted the logs say otherwise: a commit or push claimed with no such command, "passing" with no test run, edits after the last check, a failing check followed by "passing".

Unverified the logs can't settle it. We never upgrade Unverified without evidence.

Status comes from fixed rules in code. A model writes only two things: which shape a contradiction is, and the three recommendations, from the same structural fields you can read in your file.

Why this exists

The first receipt was mine.

Nikhil Sood · Delhi, IST

I answer email within a working day.

I'm Nikhil Sood. I build and evaluate AI agents for a living at Nueton. On 12 October I audited three months of my own coding agent's logs because I'd stopped trusting the word "done". A billing dispute with a seven-day deadline had ended in silence: tool installed, help run, session over, nothing filed, and I found out 33 days later. "All tests passing" had never covered the database, because eight test files ran zero tests. "Deployed and verified" was true, and the code behind it was six weeks of uncommitted work on one laptop.

The audit took a day by hand. Then I wrote the collector and ran it over the last 30 days: 385 completion claims, 53 the logs could confirm, 24 the logs contradicted outright.

One team measured this more carefully than I did: 265 "done, tests pass" claims re-verified in a clean sandbox, 24 didn't hold (16 failed, 8 had tests that still passed with the change reverted). One team, one machine, not a benchmark. (Read the survey.)

Agents make claims. Claims need receipts.

Read how I checked the claims ↗

Pricing

Priced like one wasted afternoon.

Receipt

$99

launch price · first ten · then $199

USD · one developer · up to 30 days of Claude Code logs or 90 of Codex · 48 hours

  • one-page receipt
  • evidence for every contradiction
  • silent stalls
  • the bill, free
  • three fixes for your setup
Opens Monday 19 October

When the tenth launch receipt sells, the link stops and the price is $199.

Team receipt

$1,490

USD · up to five developers · 10 working days

  • a receipt per developer and a team page
  • a 45-minute readout
  • the stop hook, acceptance rule and config change for Claude Code and Codex installed with you on a 30-minute call
Opens Monday 19 October

Invoice and bank transfer on request. Credited in full against Nueton's $4,000 agent reliability audit if you go on to it.

If the receipt finds no contradicted claim and no silent stall in the logs you send, you pay nothing: the solo receipt is refunded in full and the team receipt is not invoiced. You keep the receipt.

From November: the checker on your agent's stop hook, $29 per developer per month, or $99 for five developers per month. Email receipts@nueton.ai to hear when it exists.

Every receipt is counted, anonymously, in a running figure on this page: the share of "done" claims across all customers that the logs contradicted. Returning customers get a second receipt at $99.

The details

Before you send anything.

What exactly leaves my machine?

The JSON you read. Hashed ids, timestamps, tool names, command families, token counts, masked claim sentences or none. Prompt bodies and tool contents are excluded. Code-like claim lines are filtered and recognized credential patterns are masked, but these rules cannot identify every confidential value in prose. Read the JSON locally before sending, or use --no-sentences to omit claim text. Valid tool names, including MCP server labels, are retained.

Which agents?

Claude Code and Codex today. Cursor keeps its transcripts in a different store; join the list and you'll hear when it works properly.

How far back?

Claude Code keeps 30 days of local transcripts by default. Codex keeps more. We read what you have.

What if you find nothing?

No contradicted claim and no silent stall, you pay nothing. You keep the receipt.

How do you confirm a contradiction without my code?

From the logs alone: the claim, the commands that ran before it, and their results. With --repo-check, your local git confirms or refutes commit and push claims on your machine.

Is this anti-Anthropic or anti-OpenAI?

No. Every agent makes claims. So do people.

Aren't there tools for this?

Yes, and use them. Critique runs a verifier forward from the day you install it; agenttrace and agentwatch read your logs locally for free. A receipt looks backwards at what you already have, is read by a person, covers both agents and ends with the fixes for your setup.

Who reads my logs?

Me. Nikhil Sood, Delhi.

Invoices?

Yes. Razorpay issues a receipt at payment; email for a full invoice.

Affiliation?

None. Not affiliated with Anthropic, OpenAI or Anysphere.