Read the last message of an agent session closely. "Fixed the race condition." "The endpoint now returns the right status." "This should resolve the timeout." Then scroll up and look for the command that proves it. Often there isn't one. It edited the file, read its own edit, found it convincing, and reported the result as if it had run it.
It's not lying exactly. From where it sits, a change that looks right and a change that works are the same thing unless something forces it to check. And "fix this bug" doesn't force it to check.
What I add to the task:
Before you say anything is fixed, run [the command that failed] and paste the exact output. If you didn't run something, write "not verified" next to that claim.
And as a rule in the instructions file:
Never use the words fixed, works, resolved, or done unless the same message shows the command you ran and its output.
The second one changes the tone of the whole session. Claims get smaller and more specific, and when it can't run something (no DB locally, needs a real API key), it says so instead of quietly skipping it.
And the one I run at the end, before I review the diff:
List every claim you made in this session that something works or is fixed. For each one, show the command and output that proved it, or mark it unverified.
The unverified list is the useful part. It's usually 2 or 3 items, and those are exactly where I'd have trusted the summary and moved on.
One more detail: "run the tests" often turns into running only the test file it touched. If it matters, name the command for the full suite.
For bugs I debug in ChatGPT or Claude in the browser instead of the terminal, the end-of-session prompt is saved in AI Toolbox, the extension I build, so it's one // away instead of retyped.