Did your AI agent do what it said it did?
Paste the agent's final report and its tool-call log. In one second you see what it claimed but never did, what it did but never mentioned, and which calls were out of scope.
Run the audit
Matching is by argument values (order numbers, amounts, ids) and by tool name, so rewording a claim does not hide it. It checks the report against the log, not whether the log is complete or the actions were right. Remove secrets before pasting.
What it flags
Reported but not done
A claim with no matching call in the log, or a call that failed while the report says it worked. High when the claim is a write.
Done but not reported
A call the report never mentions. Medium for writes, low for reads.
Out of scope
A call to a tool outside your allowed list. High, always.
FAQ
Why not ask the model to check its own report?
The report is generated text written to sound complete. A model grading its own text shares the same blind spots. The tool log is a record of what actually ran, so comparing the two is a mechanical check.
Does my log leave my browser?
No. This page has no server. The rules are plain JavaScript you can read with View Source, and nothing is sent when you press Audit.
What if the agent paraphrases its claims?
Claims are matched on values, not wording. "Refunded $42.10 on order 8841" matches a refund call whose arguments contain 42.10 and 8841, however the sentence is phrased. Claims with no numbers or ids fall back to matching the tool name.
What does this not catch?
A call that ran but changed nothing in the real system, a log that dropped a call, and actions that were in scope but wrong. Pair it with effect checks on the systems themselves.
Is there a packaged version?
Yes. The TruthLedger kit adds a CLI, an honesty runbook, a scope-policy template and a leadership report. This page is the free core of it.
Run it on every agent run, with a report for leadership
TruthLedger is a stdlib-only CLI, a scope-policy template, a severity rubric and a one-page report for non-engineers. $49, one-time.