RUN OF SHOW · 42a
Decathlon × 42a: demo run-of-show
The script for the person driving the demo. Every scenario here runs on a tool that really exists (src/core/tools/shop-tools.ts, src/core/storefront/live-tools.ts) and on real products from www.decathlon.com, Decathlon's US store: 550 products, read from the store on September 27, 2026.
The sentences to type are the blockquotes. Everything else is for you, not for the shopper.
Before you start
| Surface | URL |
|---|---|
| MCP connector | https://decathlon-agent.demos.42a.ai/mcp?token=jordan |
| Hosted advisor, no install | https://decathlon-agent.demos.42a.ai/preview |
| Operator console | https://decathlon-agent.demos.42a.ai/dashboard |
| Flow editor | https://decathlon-agent.demos.42a.ai/dashboard/flows-app |
| Customer journeys | https://decathlon-agent.demos.42a.ai/journeys |
| This page | https://decathlon-agent.demos.42a.ai/scenarios |
| Chrome extension | load unpacked from decathlon/decathlon-extension/ |
Identities: ?token=jordan is Jordan Reyes of Boulder, CO, planning a first fall backpacking trip in the Rockies. Their bag already holds the Quechua NH500 Escape 23 L Hiking Backpack in Dark Blue ($69.99, a store best seller, 4.8 stars from 6,548 reviews), and they have one delivered order: a Forclaz Men's MT100 Hooded Synthetic Jacket in size M. With no token you are a guest with every tool and temporary state, which is worth showing too.
What is real and what is sandbox:
- Real: the catalog, names, prices in dollars, struck (sale) prices, photos, every size and color with its stock, Decathlon customers' ratings and review counts, the best-sellers list. All read from www.decathlon.com. The checkout link is real too: it builds this exact bag, in these sizes, in Decathlon's own Shopify checkout.
- Sandbox: the bag, the order record and the persona. They belong to 42a, and every screen says so.
Three facts to know before you walk in:
- Free shipping over $49 has a catch, and the demo tells it. Decathlon's own policy: sale and clearance items do not qualify, and one of them in the bag makes the whole order ineligible. The bag says so instead of drawing a progress bar toward $49.
- No promo codes, no loyalty club, no welcome gift, no member prices. The assistant says "there isn't one". Sales exist, but only as struck prices on the product.
- Sizes are never guessed. The bag refuses to pick a size for the shopper and answers with the sizes actually in stock.
Before every demo: say "reset the demo" (the reset_demo tool).
Running order
| # | Scenario | Persona | Time | What it proves |
|---|---|---|---|---|
| 1 | First overnight in the Rockies | jordan | 3 min | It shops by the trip, not by product name |
| 2 | Your size, not a guess | jordan | 2 min | Real stock per size; it asks instead of guessing |
| 3 | Free shipping, honestly | jordan | 1 min | It knows the store's own fine print |
| 4 | Sold out, said out loud | guest | 1 min | "We have it, it's sold out", not silence |
| 5 | "What's on sale for skiing?" | guest | 1 min | Real markdowns, and the shipping catch that comes with |
| 6 | The bag goes home | jordan | 2 min | It hands off to Decathlon's own checkout, exact sizes |
| - | The console (/journeys, /dashboard) | - | 3 min | The half that is not a chatbot |
Short run (5 minutes): 1 → 2 → 6. A real trip, a real size problem, and a bag that ends in Decathlon's real checkout.
1 · First overnight in the Rockies
Persona: jordan
Real: the catalog, prices, ratings and stock.
Sandbox: nothing written yet. Read-only.
Nobody types "Simond MT100 Easyfit 50 L". They type the trip. The layer turns a trip into the handful of catalog searches it actually needs, and answers like a store associate who has done that trip.
What to type
I'm planning my first overnight backpacking trip in the Colorado Rockies in October. What do I need?
What would keep me warm at camp at night?
What runs
| Step | Tool | What happens |
|---|---|---|
| 1 | search_products (several) | The router splits the trip into catalog searches (a backpacking pack, a warm layer, a tent), each merged live with the index |
| 2 | search_products or get_product | "down jacket" or a question about the jacket on screen |
What you see
A products widget with real cards. Typical picks, all real and in stock on September 27:
- Simond Men's MT100 Easyfit 50 L Backpacking Pack, $109, store best seller, 4.8 stars from 1,384 reviews.
- Simond Men's MT100 Hooded Down Puffer Jacket, $80, down from $119, store best seller, 4.6 stars from 2,427 reviews.
- Quechua 2 Second Fresh & Black Waterproof Pop Up Camping Tent 2 Person, $149, store best seller.
Every card: photo from Decathlon's CDN, price, struck price where there is one, Decathlon's own stars with the review count, and the house brand (Simond, Quechua) under the name. Tap a card: the drawer shows the colors and sizes, with sold-out sizes greyed out.
What to say
"Nothing in that sentence is a product name. The layer read the trip, and the stars are Decathlon's own customers, with the count next to them."
2 · Your size, not a guess
Persona: jordan
Real: stock per size and color, right now.
Sandbox: the bag.
What to type
Add the Simond MT100 down puffer, men's medium.
OK, XL in Smoked Black then.
And the Kiprun Kipsummit trail shoes in a 10.5.
What runs
| Step | Tool | What happens |
|---|---|---|
| 1 | add_to_cart | Refused: sold out in M in every color. The answer lists what is in stock (S, XL, 2XL, 3XL by color) |
| 2 | add_to_cart | Adds Smoked Black · XL at $80 |
| 3 | add_to_cart | Asks which color: the 10.5 comes in Black Orange, Dark Green and Yellow |
What you see
The bag widget with each line's size and color, and the header chip counting the bag. In the product drawer, M is greyed out on every color.
What to say
"It did not quietly put a size S in the bag because S happened to be first. On a sports store that is the difference between a sale and a return."
What not to say
Don't say "it's out of stock" for the whole product. It is out of stock in M. XL and others are available, and that is what the assistant says.
3 · Free shipping, honestly
Persona: jordan (continue from scenario 2)
Real: Decathlon's published shipping policy.
Sandbox: the bag.
What to type
What's in my bag, and do I get free shipping?
What runs
| Step | Tool | What happens |
|---|---|---|
| 1 | view_cart | The bag, its subtotal, and the shipping line computed from the real policy |
What you see
The NH500 day pack plus the marked-down puffer, subtotal well over $49, and instead of "Free shipping ✓": "Sale items do not qualify for free shipping", shipping "Calculated at checkout". Remove the puffer and the bag goes back to "Free shipping ✓".
What to say
"That is Decathlon's own policy, the line most chatbots would get wrong: one sale item makes the whole order ineligible. And there is no invented $5.99: Decathlon doesn't publish a flat fee, so neither do we."
4 · Sold out, said out loud
Persona: guest (no token)
Real: live availability from the storefront.
What to type
I need a sleeping bag for 30-degree nights.
What runs
| Step | Tool | What happens |
|---|---|---|
| 1 | search_products | The live search and the full index agree: the sleeping bags exist, and are sold out |
What you see
Simond MT500 32°F Polyester Sleeping Bag ($80) and its 23°F and 41°F siblings, each marked Sold out with a disabled button, and the assistant saying so plainly, then offering what is in stock (a down jacket for camp, a sleeping pad) rather than pretending.
What not to say
Don't promise when it's back. The store publishes no restock date, and the demo doesn't invent one. It can offer to watch the product and check daily.
5 · "What's on sale for skiing?"
Persona: guest
Real: Decathlon's struck prices.
What to type
Anything on sale for skiing?
What runs
| Step | Tool | What happens |
|---|---|---|
| 1 | list_deals | The Snow & Ski shelf's real markdowns, deepest first, with the original price |
What you see
Real markdowns such as the Wedze Women's BL900 Merino Wool Ski Base Layer Top at $60 (was $99.99) and the Wedze Men's Warm Ski Jacket 500 at $90 (was $149), each with its percentage badge. The assistant adds the catch: sale items don't count toward free shipping.
What to say
"Every one of those is the store's own struck price. No code, no 'members only'. Decathlon doesn't run those, and the assistant says so if asked."
6 · The bag goes home
Persona: jordan
Real: the checkout link.
Sandbox: the order record.
What to type
Great, let's check out.
- Click "Check out on decathlon.com →".
What runs
| Step | Tool | What happens |
|---|---|---|
| 1 | checkout | A sandbox order record, plus a real cart permalink: www.decathlon.com/cart/<variant>:<qty>,… |
What you see
The order widget and the handoff button. The link opens Decathlon's own Shopify checkout with exactly this bag: the Dark Blue day pack, the Smoked Black XL puffer, the shoes in the color and size picked. One Shopify variant per line.
What to say
"This link is completely real. It builds this bag in Decathlon's checkout. What the demo never does is pay: payment stays with the customer, on the site."
What not to say
Don't say "the agent placed the order". It built a bag and handed it over. Nothing was charged.
The console: the half that is not a chatbot
After two or three scenarios:
/journeys: every tool call, grouped into one customer story per conversation, because every call carries arequest_intentin the shopper's own words./dashboard: the funnel (search → product viewed → added to bag → checkout), the conversations behind it, and searches that came back empty: a merchandising report Decathlon's analytics doesn't produce today. "How many people asked for the puffer in a men's M this week" is a question the journeys answer and the store's own analytics can't./dashboard/flows-app: one flow per tool. Change a ranking, save, ask again, no deploy./dashboard/search: ranking weights, a push list and hidden items. Move a slider, search again.- The extension: the same advisor on www.decathlon.com itself, a launcher in the header, a question about any product in one click, and add to the real cart, because there, in the shopper's own browser, the Shopify cart really is theirs.
What not to say, and what the demo does not do
Read this before you walk in.
| Don't say | The truth |
|---|---|
| "The agent placed the order" | It built a bag and handed it to Decathlon's Shopify checkout with a real cart link. Nothing is ever charged. |
| "The bag is the customer's real cart" | Not from the server: a Shopify cart belongs to whoever calls it. In the extension, yes: that is their browser. |
| "It's connected to your inventory system" | Availability is read live from the storefront, which is real. An ERP connection is a later step. |
| "Use code WELCOME10" / "as a member you get…" | There are no codes, no club and no member prices on decathlon.com. The demo says so out loud. |
| "Free shipping on everything over $49" | Not with a sale item in the bag. That is Decathlon's own policy, and the bag shows it. |
| "Shipping is $5.99" | Decathlon publishes no flat fee below $49. It is calculated at checkout, and the demo never quotes a number. |
| "We connected Shopify's UCP/MCP" | Not yet. The endpoint exists and answers, but needs a published agent profile. See LIVE-SHOPIFY-RESEARCH.md. |
| "These are your customers' questions" | /journeys shows what was asked in this demo, in memory, and it resets. |
Things the demo simply does not do (on purpose):
- Write anything to Decathlon's systems: no orders, no customers, no inventory.
- Show a product that is not in the real catalog.
- Invent a spec, a temperature rating, a rating or a sale that was not published.
- Pick a size for the shopper.
- Complete a payment. Ever.
Things worth showing break gracefully:
- A search with no match: the assistant says what there is and invents nothing.
- A sold-out size: named, with the sizes that are in stock (scenario 2).
- A sold-out product: flagged, with an in-stock alternative (scenario 4).
- A question about codes or a loyalty club: "there isn't one", with the real markdowns instead.
- No model key: tools and widgets keep working; only the free-text wording falls back to Decathlon's own copy.
This page is served from the demo’s SCENARIOS.md, the one source of truth for the run of show. To update it, edit the file, run bun run gen-scenarios and deploy.