Your store works. Find out whether it works for an agent.

Write a shopping mission in plain English. Aisle Agent runs it through browser agents and protocol clients, records every step, and tells you exactly where it broke and what to change.

Run a missionUses a sample store

Read-only. Every run stops before payment.

“Add three products and apply the welcome discount.”

browser-agent/headless v4.2
  1. 1Landed on homerunning
thornandfield.example/
M2 · step 1

Four things, and none of them show up in analytics.

01

Hover-only interactions

Discount fields, size pickers and filters that open on mouseover.

A human: Moves the mouse without thinking about it.

02

Client-side rendering with no structured data

Prices, stock and delivery estimates that appear after the agent has already read the page.

A human: Waits half a second and sees it.

03

Inaccessible controls

Size and variant selectors built without labels or keyboard operation.

A human: Taps the box that looks like a box.

04

Bot walls that cannot tell the difference

Protection that challenges a signed agent acting for a real customer.

A human: Never sees the challenge.

Three of these are accessibility problems you already had. The fourth is one you installed on purpose.

Step 7, and the line that caused it.

thornandfield.example/cart
Cart
Merino base layer, crew$64
Stormline shell jacket$142
Fellside rucksack 28L$96
▸ Have a code?hover only
Subtotal$302
agent log
100:28.640 query input name=/discount|promo|code/i
200:28.644 0 visible matches. 1 hidden: input#discount-code
300:28.702 summary 'Have a code?' has no click or keyboard handler
400:29.115 focus summary, press Enter. accordion stays closed
500:29.120 giving up: discount field not reachable
cart-drawer.liquid, offending
1<details class="discount-accordion">
2 <summary onmouseenter="openAccordion(this)">Have a code?</summary>
3 <input id="discount-code" name="discount" hidden>
4</details>
cart-drawer.liquid, fixed
1<details class="discount-accordion" open>
2 <summary>Have a code?</summary>
3 <label for="discount-code">Discount code</label>
4 <input id="discount-code" name="discount">
5</details>

No score, no grade, no percentage. A step number, a selector and a diff.

Ranked by what it costs you.

Sorted by revenue at risk, highest first

MissionStatusStepFailure class
M4Compare two jackets on waterproof rating.
blocked2Bot wall, signed agent challenged
high$6,920/mo
4h
M2Add three products and apply the welcome discount.
failed7Hover-only interactions
high$4,180/mo
2h
M3Can a rucksack arrive in Dublin by Friday?
failed4Client-side rendering, no structured data
medium$1,640/mo
1d
M1Find waterproof boots under $150 in a size 10 and get them to the cart.
passed, note7Inaccessible controls
low$310/mo
3h

Revenue at risk is modelled from the traffic already hitting that path, so a broken filter on a page nobody visits does not jump the queue.

Missions rerun when the store changes.

  1. Theme updated · header.liquid, cart-drawer.js
  2. App installed · Reviews widget
  3. Promotion started · Autumn layers, promo app v3.1
    regressionMission 2 passed yesterday. It fails today. The promotion app moved the discount field.
  4. Catalogue sync · 412 products, 6 changed

You will not find this in a quarterly audit, because by then it will have been broken for eleven weeks.

Per store, per month. Missions included.

A flat monthly fee per store, with a monthly allowance of mission runs and unlimited reruns on change triggers. Agencies get a workspace covering every client store at one rate, because running the same ten missions across forty stores is where this gets useful.

blockedMission 4, blocked at step 2, bot wall challenged a signed agent, revenue at risk high

This one never reached a product page.

Write one mission and run it.

Pick a store, describe what a customer would try to do, and watch where it stops.

Run a mission