01 · Define
Your agent said “done.” Was it?
ThruLine checks your agent’s claims against what actually ran, before you merge.
Apple silicon Mac, macOS 12 or later. The first time you open ThruLine, macOS checks it, which can take up to a minute. After that it opens straight away.
Install · Mac (Apple silicon)
Download ThruLine for Mac- Open the .dmg and drag ThruLine to Applications.
- Open ThruLine. It walks you through setup and opens HQ.
macOS on Apple silicon · signed and notarized by Apple · updates itself, after asking
The chain · example project
Follow the claim.
One sentence the agent wrote, and six plain questions asked of it. Each answer is a line from the record — the session log your agent already writes on your machine — with the step it came from.
Claude Code said “Checkout total fixed.” “Tests pass.” · step 52 · example project
-
① Said
What did the agent claim?
"Tests pass." Claude Code · 16:03 step 52 -
② Rests on
What is that claim based on?
4 passed, 0 failed step 46 cited by the agent -
③ Ran on
Which version did that actually run on?
version 9f2ad3e 1 version older -
④ Since
Did anything it depends on change after it?
checkout/api.py changed · step 56 after the run -
⑤ Re-checked
Has anything checked it since?
nothing on e71c5b0 with checkout/api.py in scope -
⑥ So
Not checked · version e71c5b0So what do we actually know?
the claim may be entirely true.
What counts as done · accepted
The re-check tests these three statements on e71c5b0. Each says what counts as done. None of them is a verdict.
Proof stops here
Nothing on e71c5b0 has run with checkout/api.py in scope.
Looked at: 2 finished runs (step 26 on 4b19a0c, step 46 on 9f2ad3e) and step 60, which has no result yet.
pytest -q tests/test_totals.py checkout/on e71c5b0 · asks once for this project
This page replays the example project. Nothing runs in your browser.
Inside HQ
Every claim, its proof, and where it stops.
The video shows v0.2.0. ThruLine 0.3.0 is the Mac app.
They review the diff.
ThruLine reviews the agent’s claim against the record.
A diff shows which lines changed. The record shows what the agent actually ran, in what order, on which version — and so whether its “done” still holds.
How it compares, with sourcesOne Change · six stages
Define, prepare, build, verify, review, approve.
A Change is one feature, fix or refactor you are asked to accept. It can span several sessions. Each stage answers one plain question. Under each is the screen that answers it, rebuilt in the product’s own words.
02 · Prepare
What exactly will be examined?
03 · Build
What changed?
04 · Verify
What happened when we checked it?
05 · Review
What did review find, and was it addressed?
06 · Approve
What exactly am I accepting?
Specimens
Where the proof stopped.
Each specimen is one claim, its six questions, and the exact point where the record stops backing it.
Recorded on ThruLine’s checkout-web example project. No customer data.
proof stops at ② rests on
Ran, checked nothing
“Ran, checked nothing. This is not a pass.” A run that exits 0 — the code for success — having checked nothing.
proof stops at ③ ran on
The run was one version older
The tests passed — on 9f2ad3e, one version (one commit) before the one you are approving.
proof stops at ④ since
A file changed after the run
checkout/api.py changed at step 56 (16:04), after the run and after the claim.
From the blog
The receipt
Deterministic. Tamper-evident. Local. Unmetered.
A check ThruLine runs can end in a receipt — a signed record of exactly what ran. Four things hold for all of it.
- Deterministic
- The same record gives the same answer, every time. No model decides a verdict.
- Tamper-evident
- Any change to the record shows. It is hash-chained: each entry carries a fingerprint of the one before, so a changed byte breaks the chain.
- Local
- The record, the runs and the receipts stay on your disk. The core engine makes no network calls.
- Unmetered
- No meter: you are not charged per review or per run. Checks run on your machine, and no model call sits behind a verdict.
Here is a real one. The outside is a DSSE envelope — a standard wrapper that carries a signature. Inside is an in-toto statement — a standard format for an attestation, a signed statement of what was done to which code.
Check it yourself, offline
thruline verify-receipt receipt.json --key signing.pub --offline --json
Pricing
5 free checks a month. Pro: unlimited checks and approving a version.
Seeing what your agent’s runs prove is always free: recording, every read, every check of your agent’s own runs, withdrawing an approval, exporting your own records.
Pro
$15 a month
or $150 a year · one developer
Does ThruLine use an LLM (a large language model) to decide whether my code is correct?
No. The verdict path is deterministic — the same record always gives the same answer, from recorded runs you can re-run. No model decides. A local model can narrate findings in plain English after the verdict, and that is off by default.
How a verdict is reachedWhat leaves my machine?
Never your code or sessions. ThruLine is local-first: the record, the runs and the receipts stay on your disk. The optional narrator talks only to a model on this machine. Once a day, ThruLine asks GitHub whether a new version exists; you can turn that off in Settings. Two more things can leave, and only when you start them: a licence request when you fetch one, and, if you run thruline reexec, Docker downloading the container image it needs.
How is this different from CodeRabbit, Greptile or Cursor Bugbot?
They review the diff — the lines that changed. ThruLine reviews the agent’s claim against the record of what actually ran, on the version you are approving.
The full comparisonWhat does “Not checked” mean — is my code broken?
No. It means nothing in the record establishes the claim on this version. The claim may be entirely true.
A specimen: a file changed after the runCan I use it on a team?
Pro covers one developer. Write to us about licences for multiple developers.
PricingBuilt by one engineer
Check the next “done” before you approve it.
Every email is answered by the person who built ThruLine, within one business day. (Not a bot, not a queue.)



