AI user tests
Write the task in plain English, point it at staging with a test account, and it opens a browser and works out its own way there. You get the recording, every step it took, and the friction it hit. Each finding you keep lands in the Usero inbox, where the AI can draft the fix as a pull request.
Nobody notices the plan picker lost its back button until a user emails about it three weeks later. Your tests all passed. Nothing in the diff looked wrong.
Structural friction is the category that leaks. A button that only appears after email verification, a dialog whose close X sits under a sticky header, a link pointing at an app slug that was renamed last quarter. Unit tests do not catch it because every file is individually correct. End-to-end tests do not catch it because they follow the path you already knew about, and they assert on selectors rather than on whether a person could find them. Code review does not catch it because two correct files can still collide at runtime. So it sits there until someone hits it, and for a team of four with no research function, "someone" means a paying customer. The gap is that nothing attempts your product the way a stranger would, on a schedule, without a script.
How it works
Disclosure: I build Usero, so weigh that. A run takes two inputs, a task written as a goal and a staging URL with a test account you control. Claude drives a real browser against it, reading page structure each step, deciding its own next click, and logging what it expected against what happened. When it finishes it hands back three things: an rrweb recording you scrub in the same player as your session replays, the full step trace with timestamps, and a findings list sorted into what it was sure about and what it was not. Findings are typed against a fixed taxonomy, dead end, ambiguous label, broken flow, missing affordance, unrecoverable error, copy confusion. No usability score, because a number invites the claim this replaces research. You skim the list, dismiss what is noise, and send the real ones to the inbox. From there the existing pipeline applies: cluster it, open a pull request against the repo, review the diff yourself. Nothing merges on its own.
Running this against our own preview deploy turned up a sticky dialog header painting over the close button, from two components that are each fine on their own. It also found a Connect GitHub button pointing at a GitHub App slug that no longer exists, because the value came from a CI variable that was never renamed. That one lives outside the repository. Grep cannot see it, typecheck cannot see it, and a reviewer reading the diff cannot see it.
A regression test walks the path its author wrote down. A run gets a goal and picks its own route, so it can wander into the flow you forgot existed. Two runs of the same task took different paths on our own product, one through the dashboard and one through Forms. The test passing and the agent trying three other things before finding the button are different pieces of information.
Every finding carries the step it came from and a timestamp into the recording, so you can watch the moment rather than take the write-up on faith. The trace shows each action, what it expected, and what it got. When a finding is wrong, and some will be, thirty seconds of playback tells you.
A friction report on its own is one more tab to check. Send a finding to the inbox and it joins the rest of your feedback, gets deduped against earlier runs, and can go straight to an AI-authored pull request you review and merge. That is the difference between knowing about the broken back button and having the fix waiting when you wake up.




The limits
The name says user testing and the software is not a user. It is worth being blunt about that before you run one, because the first run is where people decide whether to trust this. Here is what it misses and how often it is wrong.
Screenshots go to the pass that writes up severity. The per-step loop works from page structure alone, which is a cost call rather than a law: a screenshot in that loop measured 10.7x slower per step, so contrast, visual hierarchy, clutter and "I did not notice the button" go unremarked, and a control that is technically present and visually buried reads to a run as present. A per-step visual pass is an option we have not taken, and vision models can already assess contrast and clutter to a degree. What that would still not give you is taste, or a sense of what a hurried person fails to notice, so the perceptual judgement stays a job for a person.
It does not get bored, it does not get annoyed and leave, and it will happily find the aria-label your customer never would. That makes it underreport friction. When a run completes a task cleanly, that is weaker evidence than a person completing it cleanly.
Published measurements of agreement between agent-identified and human-identified usability problems come out worse than chance. That is the strongest argument against this whole category and we think it is correct. Complementary coverage is the claim. Substitution is not, and anyone selling you substitution is selling you something.
Measured on products we did not build, 5 of 8 findings were real, and 4 of 8 cleared the harsher bar of something a founder would actually fix. Expect to bin some of every run. The findings list is sorted by how sure it was for exactly that reason, and low-confidence items are phrased as questions rather than verdicts.
This works on authenticated in-product flows, which is where we measured 62.5% of findings as real against 12.5% on public marketing pages. It needs a scoped account on staging that you create. It does not sign itself up, partly because that is the honest surface and partly because bot walls stop an agent at signup on most modern SaaS.
The honest objection
You could, and if you only want to do it once you should. We built the first version of this by hand in an afternoon. What took the rest of the week was the part that makes it useful on the tenth night rather than the first: an observation layer that only shows the agent what a person could actually see, because ours quietly manufactured false findings twice before we caught it; dedup that fingerprints the friction rather than the step number, because the same task takes a different route on different runs; the recording captured and played back; and the pipe from a finding to a reviewed pull request. If you want to build that, the honest answer is that it is a week of your time and then it is yours.
FAQ
No. The per-step loop runs on page structure rather than pixels, because a screenshot there measured 10.7x slower per step, so anything perceptual goes unremarked. That much is a cost call we could revisit. Published research also puts agreement between agent-found and human-found usability problems at worse than chance, and no amount of pixels gives an agent taste. It finds a different category of problem: dead ends, broken flows, labels pointing at the wrong thing. Keep running sessions with real people for everything perceptual, and for hearing someone hesitate.
QA verifies a flow you scripted and tells you whether it still passes. A run gets a goal instead of a script and picks its own path, then reports where the path confused it even when nothing is technically broken. "The test passed but it tried three other things before finding the button" is a finding a passing test cannot produce.
A staging URL, a scoped test account on it, and a task written as a goal. Payments, deletes and off-origin navigation are blocked, and runs stay on the origin you configure. If your staging has a captcha in front of signup, expect to turn it off there or hand the run an account that is already past it.
The setup flow argues with you when the host does not look like staging, and you should listen to it. This clicks, types and submits on its own. Staging plus a throwaway account is the supported path.
It arrives as a feedback item with the category, the severity the run assigned, what it tried, where it got stuck, and a deep link into the recording at that moment. From there it behaves like any other feedback: it clusters with related reports and can go to an AI-authored pull request you review.
Nightly against staging on the two or three flows that matter, which for most teams means signup, the first real action, and whatever you shipped this week. Most nights come back clean. The value is the night one does not.
Free tier. No credit card. Two-minute install. The AI opens the PR, you merge it.
Keep reading