See how users react to code changes, before they ship.

Tensteps sends AI personas through every preview deploy and tells you, on the pull request, where people got stuck.

Join the pilot
$ npx tensteps@beta runPilot access. Setup takes about 15 minutes.
tensteps commented on #42
Tensteps
4 of 6 personas reached their goal on web-git-new-zip-check.vercel.app at 9e6a8ec.
StudyReached the goalMedian steps
checkout4/6 (2 gave up)14
Where people got stuck1. ZIP field rejects ZIP codes that start with 4 (checkout, 2 personas, on /checkout/address)
Full report with replays. 6 sessions.

From pull request to results, without leaving GitHub.

  1. 1

    Open a pull request.

    Vercel builds a preview like it always does. Tensteps starts when the preview is live.

  2. 2

    Personas use your preview.

    Each one is a different person on a different device and connection, with a goal from your tensteps.yml: buy something, sign up, find the pricing.

  3. 3

    Results land on the PR.

    One comment that updates on every push: who reached the goal, where the others got stuck, and the full report with every step they took.

Works with GitHub and Vercel today. Any other CI can run it with one command.

Tested by people your tests never imagined.

End-to-end tests check that the happy path still works for one perfect user. Tensteps sends the people you actually have: patient and impatient, careful and careless, on fast laptops and old phones.

  • #0, general US

    A 20-year-old line cook in the Midwest. Power user who expects fast pages and clear shortcuts. Reads instructions and fine print carefully.

    Example: desktop Chrome, Wi-Fi
  • #1, general US

    A 54-year-old school principal in the West. Comfortable with a few favorite apps but avoids anything unfamiliar. Will retry once or twice, then leave.

    Example: desktop Chrome, slow 3G
  • #1, low tech comfort

    A 62-year-old retired teacher in the Midwest. Uses a phone mostly for calls and texts and gets lost in unfamiliar menus. Keeps trying until it works.

    Example: low-end Android, 4G
  • #0, screen reader

    A 30-year-old software developer in the South. Uses a screen reader, so navigates by headings, links and form labels rather than by sight.

    Example: desktop Chrome, Wi-Fi

Five populations ship today: general US adults, low tech comfort, low patience, screen reader users and non-native English speakers. Same seed, same persona, so runs are repeatable.

Every finding comes with the receipts.

Each persona leaves a step-by-step replay: what they saw, what they thought, what they tried. Findings are grouped by page and element, so you see the problem once, not six times.

Stride Shoes home page with the Ridge Trail Runner at $45
1“Ridge Trail Runner at $45 is under budget, I'll take a look at it.”
Product page with size 10 selected
3“Size 10 is set, so I'll add these to my cart.”
Cart with one pair of shoes at $45
4“Cart shows just the $45 shoes, no surprise fees yet, so I'll head to checkout.”
Payment page: $45 subtotal, $14.99 shipping, $59.99 total
12“Whoa, $14.99 shipping just appeared out of nowhere — nobody mentioned that in the cart. Let me go back and see if there's a cheaper shipping option before I pay almost $60 for $45 shoes.”
“A surprise $14.99 shipping charge on a $45 pair of shoes is a third of the price, and the site hid it until the last step.”
17Step 17, gave up

A real session from a run on our demo shop: a 33-year-old electrician on a low-end Android phone, who gave up at step 17.

One file you own.

Describe the goals that matter; Tensteps handles the people. It lives at the root of your repo, versioned with your code.

# tensteps.yml
version: 1
studies:
  - name: checkout
    objective: "Buy any pair of shoes under $50 and ship it home"
    success:
      url_matches: "/order/confirmation"
    guardrails:
      payment: test_card
triggers:
  pull_request: { sessions: 6 }

Simulated users, not real ones. Treat every finding as a lead, and the replay as the evidence.

Questions

What does a run cost?

A few dollars per pull request in model usage, on your own Anthropic API key during the pilot. The model and the number of personas set the price, and --max-cost puts a hard ceiling on any run.

Is it safe to point at my preview?

Personas really click and submit. Use previews that don't write to production data, keep payments in test mode, and list anything off-limits (deleting, sending, purchasing) in tensteps.yml.

Where does my data go?

Screenshots and page text go to Anthropic's API to drive the personas. Reports stay in your own GitHub Actions run. Tensteps runs no servers of its own during the pilot.

Will it block my merges?

No. During the pilot it reports and never fails your checks.

Do I need Vercel?

GitHub plus Vercel previews is the smoothest setup today. Any CI can run npx tensteps run --url with your preview.

Join the pilot.

We're setting Tensteps up with a small group of teams, one at a time, on a 30-minute call. You bring a preview URL and one flow you care about; we write your tensteps.yml together and watch the first run land on a pull request.