How often do your agents say they finished when they didn’t?
Two ways to find out. Both run on your side — nothing is uploaded unless you explicitly ask, and you see exactly what would go before it does.
Drop a log in your browser
Everything happens client-side. The file never touches a network — that’s a property of the code, not a promise in a privacy policy.
Drop a session log here
from ~/.claude/projects/ — or click to choose
processed in this browser · never uploaded · no account
Or scan all your sessions
npx gitreal
Finds your logs itself, analyses every session, and prints a report. Nothing is uploaded.
npx gitreal local audit, nothing uploaded npx gitreal --json out.json full result to a file npx gitreal --logs <dir> scan a specific directory npx gitreal install turn the gate on (warn mode) npx gitreal install --block let it stop unverified turns npx gitreal watch live dashboard, local only npx gitreal doctor check it is actually working npx gitreal uninstall remove it npx gitreal --share contribute runs with known outcomes npx gitreal --mcp run as an MCP server
One tile per turn, thumb up or thumb down
npx gitreal watch
Opens a small page on 127.0.0.1 that you park next to your editor. Every turn your agent takes lands as a tile: thumb up if it changed something and something checked it afterwards, thumb down if it changed something and nothing did, a dash if it only talked. You can see a run go quiet-but-busy in real time instead of finding out later.

It reads the transcripts already on your disk through the same code path as the gate, so the page and the gate can never disagree. Bound to loopback, no account, nothing uploaded, and it stops when you close the terminal.
Let it notice, before it tells you it's done
One line in an agent’s config, and it can look at its own run before making a claim about it.
{ "mcpServers": {
"gitreal": { "command": "npx", "args": ["gitreal", "--mcp"] }
} }Exposes one tool, check_my_work. It returns observations — changes never read back, a run that ended on a write — and no score. There is no score anywhere in this project; we built one, measured it below chance, and removed it.
An agent checking itself is self-attestation, so the response is stamped attestation: self_attested and satisfies_policy: false. Under the spec that can never clear a requirement — an agent reporting on its own work has produced a second claim, not evidence. The point of the tool is to make an agent notice an unverified change while it can still go and check it for real.
Your next message is the ground truth
There is no oracle in production. But you react — and the reaction is in the log. If an agent said it was done and the next thing you typed was “still broken” or “try again”, that run failed and the agent didn’t know.
The first version matched keywords anywhere in your next message — including inside pasted logs. A hand audit of six judgements found two correct: one run marked failed on the word “error” that appeared in a paste, another marked successful because “awesome” turned up in a list of domain prices. It now reads only what you typed, only the opening of your reply, and returns unknown when unsure — three of three, judging half as many. It will still be wrong sometimes, and it says nothing rather than guessing.
Redaction isn't optional
Agent logs are full of credentials. Redaction runs before anything is displayed and before anything is sent — provider tokens, credentials in URLs, assignment patterns, JWTs, private keys, emails. It is deliberately over-eager: a false positive costs a mangled log line, a false negative costs somebody their keys.
The session that built this tool had two GitHub tokens in its own transcript. Both were caught.