UXSense
Free for 3 seatsStart free
UXSense Drift

Your agents can't see your users.

Drift maps what your users actually do, then checks every pull request against it. When a change breaks a path real users depend on, it says so, before it's merged.

Free for up to 3 seatsOne line to install

All your tests pass, you ship, and a week later checkout conversion is down and nobody can say which change did it.

That's behavioral drift. Drift catches it before it's merged.

Know what your users depend on

Drift builds a Behavioral Load Map from real sessions. Every element is scored by the traffic and completions it carries, and by how ritualized returning users are about reaching for it.

Behavioral Load Map overlay on a checkout page — the Complete order button carries 41% of completions, stereotypy 0.78 (sample data)

Catch drift before merge

Every pull request is checked against the map. Results land on the PR in ~20 seconds.

UXSense Drift check on a pull request — amber, one warning, behavioral drift detected (sample data)

Your users wrote these tests

Real recorded paths, replayed against your preview deploy. It's a pass or fail, no judgment calls.

A spec that can't go stale

One command writes BEHAVIOR.md from real sessions, the loaded elements, the muscle-memory surface, the paths that must keep working. Your agents read it before every edit.

npx uxsense pull-behavior

Agents fix it before you see it

The check output is machine-readable. Your agent reads it, corrects the change, and pushes, often before a human even opens the PR.

Agent terminal reading the machine-readable Drift verdict beside the pull request — the same comment edited in place and resolved to green (sample data)

Quiet by default

A clean PR is a green check and nothing else. If there’s something to say, it’s one comment, edited in place every push.

Pairs with your reviewer

CodeRabbit, and other code review agents, asks whether the code is good. UXSense asks whether users can still use it.

Nothing here is guessed

Every figure is computed from recorded sessions. The model reads your PR description to work out what you claimed; it never writes a number.

A PR check has five parts. Most have two.

Every automated PR check runs on the same skeleton: something starts it, it does something, and then, in the ones that work, it finds out whether it was right, remembers the answer, and knows when to say nothing. Here's where the parts come from in UXSense.

Triggerwhat starts the check
PR opened or updated
PR opened or updated
Actionwhat it evaluates the diff against
A spec or style guide someone wrote down
A behavioral load map built from your recorded sessions: which elements carry real interaction weight, which paths returning users run without thinking
Proofhow it finds out whether the check was right
Nothing. The comment is the end of the process
Every prediction is joined by commit SHA to the Release Impact Report for the deploy that ships it, and scored against the behavior change actually measured
Memorywhere the learning is kept
A config file a human has to maintain
The load map, regenerated from sessions on a rolling window, plus BEHAVIOR.md committed to your repo
Stop conditionwhen it stays quiet
None. It comments on every PR
A clean PR gets a green check and no comment. At warn or block, one comment, edited in place on every push

Signals earn their place

Every prediction is graded against the release that ships it. Signals that don't predict real behavior change are removed automatically.

Getting started

Start from the sessions you already have.

If you're already recording sessions, Drift has everything it needs today. If you're not, it takes about 30 recordings. Here's exactly what happens either way.

Step 1

Install the snippet

One line in your app. Drift starts recording sessions immediately. Inputs are masked by default.

Step 2 · ~30 sessions

Your first load map

Enough traffic to know which elements carry completions and which are decoration. You'll get a load map and a BEHAVIOR.md you can commit.

Step 3

Connect GitHub

Drift starts checking pull requests against the map. Connect Vercel or Render too and it replays real user paths against your preview deploys.

Optional

Install the build plugin

Stamps components at build time so Drift tracks elements through refactors instead of guessing. Not required, but precision improves.

Pricing

Priced for the way code gets written now.

Free

Free for up to 3 seats. Unmetered checks, unlimited repos. Not a trial.

$0forever
3 seats · no card
  • Unmetered PR checks
  • Behavioral Load Map + BEHAVIOR.md
  • Load, stereotypy, and unclaimed-surface signals
  • 30-day session retention
  • Sampled above 5,000 sessions/mo
Start free

Enterprise

SSO, security review, DPA, SLA, custom retention.

Custom
  • Security review + DPA
  • Custom retention
  • Account management
Contact us
Unmetered checks on every tier.
Only seats whose PRs are checked get billed. Bots are never billed.
Hitting a limit never breaks anything, checks keep running.
Cancel anytime in the billing portal

Both products, one price.

Combine Drift Team + Releases Growth for one flat fee, includes up to 6, 20, or 50 checked seats. At 20 seats ($449/mo) Release reports are practically free.

Drift checks pull requests before merge. Releases tells you what actually happened after you shipped.

$279/mo · up to 6 seats
$449/mo · up to 20 seats
$999/mo · up to 50 seats

Annual: 10× monthly — 2 months free

FAQ

What is behavioral drift?

Users learn your product — which button, which order, which step comes next. Behavioral drift is what happens when a change breaks that learned behavior rather than the code: the path still technically works, but people hesitate, retry, backtrack, or abandon. Nothing in CI catches it, because nothing in CI knows what your users do. Drift catches it by checking every pull request against recorded behavior — before merge.

Does this replace my code reviewer?

No, and it doesn't overlap with one. CodeRabbit-style review asks whether the code is good. Drift asks whether the change breaks something users have learned to do. Teams run both.

What if the check is wrong?

Blocking failures are overridable — a recorded path breaking is sometimes exactly the point of the PR. Everything below that tier is advisory. And every prediction is graded against what actually happened after the release shipped, so a signal type that doesn't predict reality gets demoted or removed rather than sitting there being wrong.

Won't this be another bot commenting on everything?

Clean PRs get a green check and no comment. Drift comments only at warn or block, and edits that one comment rather than stacking new ones. It stays quiet because there's usually nothing to say — most pull requests don't touch loaded surface at all.

Do I need the build plugin?

No. Without it Drift identifies elements semantically — role, accessible name, position in the flow. The plugin makes identity survive refactors, which improves precision on codebases that move fast.

What about single-page apps / iframes / canvas?

Single-page apps work: client-side route transitions are treated as distinct pages, and dynamic URLs collapse into one route — /order/123 and /order/456 are the same page as far as the load map is concerned. Same-origin iframes are captured; cross-origin frames (a Stripe checkout, an embedded video) can't be read by any browser and are excluded — by browser security, not by us. Canvas is the honest limit: Drift sees that users click a canvas, not what happens inside it, so canvas-heavy apps read lower coverage — and every check discloses its coverage figure. Low coverage makes Drift quieter, never wrong.

How is this different from session replay tools?

Replay tools show you what happened — and lately, AI summaries of what happened. Either way, that's an account, after the fact. Drift computes what all your sessions have in common, checks every pull request against it before merge, and grades its predictions against the release that ships. An observer tells you what it saw; a measurement knows when it was wrong.

Every pull request, tested against what real people actually do.

Install the recorder this afternoon and the load map starts building from your real sessions. A few days later, every merge gets checked against it. The clock starts when the snippet does.

Free for 3 seats · No credit card required

Read the docs →