Inspiration
Every session with a coding agent ends with a confident final message: "Done. All tests pass." "Fixed the race condition." "No other changes needed." Those sentences are the agent grading its own homework — and nothing forces them to be true. I kept hitting the same failure modes: a suite reported green that was run before the last edit; a red suite turned green because the agent quietly deleted the failing test; a "touched three files" claim that actually touched eleven. Catching any of it meant re-reading the diff and re-running the suite myself — re-deriving the exact evidence the agent already claimed to have. RECEIPTS removes that tax.
What it does
RECEIPTS is a post-hoc, evidence-required auditor for completed AI-coding-agent sessions. Point it at a finished session (Codex, Claude Code, OpenHands, OpenCode, Gemini CLI, Copilot CLI, Cline, Amazon Q) and it:
- Normalizes the transcript into one provider-agnostic Session Package.
- Extracts every claim the agent made — explicit and implied — with a strict schema.
- Plans a deterministic verifier per claim and runs it in a locked-down, no-network Docker sandbox.
- Builds an Evidence Graph where every verdict traces to the node that produced it.
- Adjudicates each claim VERIFIED / REFUTED / UNVERIFIABLE — and marks REFUTED only when a freshly executed command, diff, or file observation contradicts it.
- Computes a reproducible Trust Score — one refuted claim caps the score; you can't average away a lie.
It never edits your code, never blocks a merge, and never refutes on a guess. It answers one load-bearing question: did the agent's claims survive a fresh check of reality?
How I built it
RECEIPTS was built with Codex + GPT-5.6 during Build Week, module-by-module from a frozen engineering spec: the verification core, eight session adapters, the sandbox + verifier catalog (pytest execution, an AST-based test-tamper detector, file-stat, scope-check, build/lint), the SQLite Evidence Graph (adjacency tables + recursive CTE traversal + FTS5), the versioned Trust Score, the subsystems (Prompt Studio, Ask RECEIPTS, provider management, dashboard, exports), the plugin SDK, and the React frontend. Architecture decisions are logged as ADRs in DECISIONS.md — the LiteLLM gateway, the SQLite graph, the digest-pinned Docker boundary, and the evidence-required adjudication policy.
GPT-5.6 is load-bearing, not decorative. Whole-session claim extraction runs on gpt-5.6-sol at high reasoning effort — a single long-context pass over the entire transcript, which is what makes cross-timeline stale-success contradictions (a claim asserted early, invalidated by an edit 40k tokens later) catchable at all. Per-claim planning, Ask RECEIPTS, and Prompt Studio run on gpt-5.6-terra, escalating only when the deterministic layer flags complexity.
Codex built it — and Codex is its first audit subject. The first Tier-1 adapter parses Codex CLI rollout-*.jsonl, and the golden fixture corpus is built from Codex-format sessions. The tool Codex built is the tool that checks Codex's homework.
Challenges I ran into
- Refuting honestly. A false accusation kills an auditor's credibility instantly, so the core invariant is: REFUTED requires attached executed evidence — never a model opinion. The one verifier that could produce a false refutation (a behavior-probe) ships intentionally disabled; its claim class is reported UNVERIFIABLE rather than risk a wrong REFUTED.
- Transcripts as hostile input. Text inside a transcript that reads like a command ("ignore previous instructions…") is cataloged as a claim, never executed. Verifier commands render only from an allow-listed template catalog; no transcript or repo string is ever interpolated into a shell.
- Making "why?" one click. Provenance is enforced: if a conclusion can't be traced through the Evidence Graph, RECEIPTS refuses to display it.
Accomplishments I'm proud of
- REFUTED-precision = 1.000 on the golden fixtures — a single false refutation fails CI.
- A real, digest-pinned, no-network sandbox — not a mock.
- Eight working session adapters behind one normalized schema.
- 114/114 backend tests green; deterministic, reproducible Trust Score.
What I learned
The bottleneck in agentic coding has moved from writing code to trusting it. The valuable primitive isn't another agent — it's an independent checker that re-derives evidence and stays honest about what it can't check. "UNVERIFIABLE" turned out to be a feature, not a weakness.
What's next
Tier-2 adapters (Cursor, Roo Code, Copilot-in-IDE, Aider); enabling the behavior-probe once an eval proves zero false refutations; WASM-isolated third-party plugins; a GitHub Action that attaches a RECEIPTS report to agent PRs. Each is specified at the interface level and recorded in DECISIONS.md — deferred on purpose, not missed.
Built With
- codex
- datasketch
- docker
- fastapi
- gpt-5.6
- litellm
- openai
- opentelemetry
- pluggy
- pytest
- python
- react
- server-sent-events
- sqlite
- tailwindcss
- tanstack-query
- tiktoken
- typescript
- vite
- zustand
Log in or sign up for Devpost to join the conversation.