- The same person, more than once. Someone who abandons a flow and never returns is normal. Someone who comes back, lands on the same step, and leaves again is stuck.
- No completion event between the visits. They aren't finishing it later somewhere else.
- What they did before giving up. Rage clicks on a button that won't advance, the same field retyped three times, clicks on nav links that bounce straight back, a reload, then nothing. This is the part only a recording has – the events say they left, the replay says what they tried.
The page people can't leave
Some failures throw an exception. Someone gets paged, a ticket gets filed, and the fix is obvious.
Others don't. People land on a page, try a few things, and leave because they're stuck. No exceptions, no explosions, just bad business logic or poorly designed UX.
This scout watches for pages that quietly become dead ends.
What the scout looks at
This scout looks at results from a Replay Vision scanner. Replay Vision scanner answers a question you configure by watching every session you capture, forever and on repeat. The output becomes a queryable signal that this scout uses to identify dead ends.
Dead endsMonitor“Did the user appear stuck on a page?”Every session comes back yes or no ·scanner_output_verdictTo support this verdict, the scout looks for the shape a single session can't show:
The report in your inbox
When people keep getting sent back to a page they can't get past, a scout opens a report Fig. 1. Click Review and it opens Fig. 2 with the repeat visits, the recordings, and what the app was doing instead.
Sessions reaching /onboarding/step-1 now end there 41% of the time, up from 9% across the trailing two weeks. Signup volume is unchanged and nothing threw.
These are returning accounts, not new ones. Onboarding creates the workspace at step two and writes onboarding_complete at step four. Anyone who leaves between the two has a workspace but an incomplete account, so the route guard sends every later visit back to step one.
Step two then tries to create the workspace again and gets a 409 – the name is taken by the workspace they created last time. The form renders it as a validation message under the name field, so it reads as their mistake. There's no resume, no skip, and nothing in onboarding that can see or delete the workspace already sitting on the account.
The recordings are people trying variations of their own company name against the same wall. Median four attempts before the tab closes. Twenty-three accounts have now done this on three or more separate days.
~180 accounts stuck, ~40 more each day
Suggested fix: Have step two adopt the existing workspace instead of creating a second one, and let the guard resume at the first unfinished step. The 409 is correct – treating it as user error is what makes it a trap.
The recordings carry more weight here than in most reports. The numbers tell you people leave. The sessions tell you what they tried first, which is usually what names the cause.
The pull request you merge
When you're ready, PostHog dispatches an agent with the report and its evidence as context. You review and merge like any other PR – nothing merges without you.
Reports are free. Pull requests are $15 each, with your first three a month free. See self-driving Pricing.
The scout itself
Scouts are instructions an agent follows on a schedule – Fig. 3 is the skill file for this one.
It reads several signal sources. Error Tracking is the odd one out: the scout checks it to decide when to stay quiet.
Scanners can answer a lot more than this. Replay Vision covers what else you can ask them.
The schedule it runs on
This scout runs daily by default. Dead ends build over days rather than minutes, so a shorter interval mostly adds noise. It only writes when something is wrong, so most days it's silent.
Add this to your scout troop
You'll need these to run this scout.
- RequiredSession Replay enabled, since the recordings are the evidence rather than the colour
- RequiredA Replay Vision dead-end monitor or session-outcome classifier, which turns "people leave here" into a verdict per session rather than an inference from where clicking stopped
- RecommendedError Tracking instrumented, so a page that's throwing gets left to your error signals instead of reported twice
- RecommendedYour codebase connected via GitHub, to match a new dead end against the deploy that made it
- OptionalConversion or navigation events on the pages you care about, if you have them – they're what separates leaving from finishing
Not set up yet? One command installs PostHog, connects GitHub, and turns on a default troop of scouts. That troop doesn't include this one – add it above once you're set up.
npx @posthog/wizard self-driving