Screenshots or it didn’t happen

Checked 22 Sep 2026 · By Luke Czak

ArticleHow to Use AIFree to read

An agent claiming a UI change works and a screenshot of it working are different kinds of evidence. I stopped accepting the first without the second, in both light and dark mode.

An agent tells me a UI change works. That sentence and a screenshot showing the change working are not the same kind of evidence, and I have stopped treating them as interchangeable. The sentence is a claim the agent believes, generated from reading its own diff and reasoning about what the diff probably does. The screenshot is an observation of what the rendered page actually looks like, at a point in time, with a real browser or simulator behind it. The capture gives me evidence of one rendered state, which I can inspect independently; I still have to check that it came from the right build, route and viewport before treating it as evidence for this change.

The gap between the two shows up constantly in small ways. A CSS change that looks correct in the diff can still collide with a media query nobody remembered, or apply to the wrong breakpoint, or get overridden by a more specific selector three files away. None of that is visible by reading code. All of it is visible in a screenshot, immediately, to anyone looking at it — including an agent looking at its own output, which is the part that makes this a workflow change rather than just a QA nicety.

So the rule is that a visual claim needs a screenshot path sitting next to it, every time, in both light and dark mode, or the claim does not get accepted. Not "should render correctly," not "looks right based on the diff" — an actual image, saved to disk, referenced by path. If an agent writes "the button now aligns properly" with no image attached, that sentence gets treated the same as an unverified guess, because that is what it is. Language on its own is worthless as evidence here, and agents will produce confident-sounding language regardless of whether they checked.

This is not about distrusting agents specifically. A human engineer who says "I tested it" without having actually run the app is making the same category of unverifiable claim, and I would not accept that from a person either. What has changed is that agents produce fluent, confident prose by default, whether or not they have done anything to earn the confidence, so the gap between sounding verified and being verified is wider and harder to spot by ear than it is with a person, who usually hedges when they have not actually checked.

The habit that fixes this is cheap once it is a habit: run the app, take the screenshot, save it to a real path in the project rather than a temp directory that gets wiped, and only then write the sentence describing what changed. The screenshot comes first, the claim second, never the other way round. When I read a report where the claim comes before any image path, I read it as unverified regardless of how it is phrased, because phrasing is not evidence and I have been burned by phrasing that sounded exactly like evidence. The fix is not asking for more careful wording, it is removing wording from the decision entirely: no image path attached, no acceptance, whatever the sentence claims.

None of this catches everything — a screenshot at one viewport size says nothing about another, and a static image says nothing about interaction state. But it catches the failure mode that actually costs time, which is shipping a visual regression that a five-second look would have caught, because nobody actually looked. "It didn’t happen" is the right default for any visual claim with no image behind it, and I would rather an agent tell me it could not verify something than tell me it looks correct and be wrong.

Comments (0)

Sign in to comment.