An AI buyer for every kitchen, and a gate it cannot talk its way past.
Any company's purchasing agent can order from the wholesaler. It carries a mandate its company signed, saying what it may buy and how much it may spend alone. Plain code checks every order against it. Anything beyond it waits for a named person to sign on their phone.
The film is in the edit. Until it lands here, every picture on this page is the product itself, captured from a production build.
AimoPilot
“1,000 litres of lactose-free milk by Monday.”
The film is coming
The challenge's own example, start to signed order
Request, lookup, order, approval: the four steps the challenge asks for, on the example it gives. The usual product fails on the way, and the agent finds a way that still makes Monday.
1Request
The chef types one line. No form, no product code.
2Lookup
It asks the live price service about three products, not the catalogue. The usual 10-litre boxes have missed their order cut-off.
3Order
Three ways in one-litre cartons, each a fixed price the wholesaler signs: 1 010,00 €, 1 560,00 € and 1 574,48 €.
4Approval
1 010 € is over the 500 € the agent may spend alone, so it stops at the gate and goes to the kitchen manager's phone.
✓Signed
A passkey signs that exact order. The order is placed and the wholesaler signs the confirmation.
Six agents. Every one of them meets the same gate.
Each one does a real job in a kitchen or at the wholesaler. None of them can place an order the gate has not passed, and none of them can sign one.
The kitchen's buying agent
The chef talks; the agent buys. It remembers the kitchen's usual products, its rules and last week's order, and asks only when the answer changes the order. Typed, spoken on a call, or a photo of the whiteboard.
Voice: 33 of 36 held-out clips heard right, in hall noise and accents, in three languages; a mis-hearing is read back and needs a yes. Photo: twelve test lists, no wrong quantity, nothing invented.Voice and photo evaluation
The wholesaler's selling agent
It speaks to the buyer's agent, not to the chef: a new or seasonal product, or the same thing cheaper, as a signed offer any agent can check offline. Plain code chooses what to offer. An offer never buys anything.
At most two offers a kitchen in seven days. Every reason (cheaper, in season, more reliable, lower carbon) is recomputed from the data before it is sent, or the offer is held back with the rule that stopped it.The selling agent
aimopilot
The watch
It keeps an eye on what the kitchen buys every week and on orders still to come, so it notices a stock-out before the kitchen does. It learns standing orders, holds one that drifted and asks, and lines up a backup for products with a poor delivery record.
One live availability call for at most ten key products. A recurring order that drifted is never renewed silently: renew at the new amount, the usual, or skip this week.Connect an agent
aimopilot
The menu planner
A seasonal menu, or a booking at short notice: dishes for the covers, what the kitchen already has, and only the shortfall bought. What cannot arrive in time is replaced by recipe logic, not by the next product code.
Substitutes by the ingredient's job in the dish (crème fraîche to smetana 1:1, fresh dill to dried 1:3), each checked to be in the range, in time, and within the kitchen's allergen and nutrition rules.Connect an agent
aimopilot
Any outside agent
A hotel chain's own agent, a procurement system, Claude or ChatGPT with a connector address. They come in through MCP or REST described by OpenAPI 3.1, and meet the same mandate check, the same gate and the same sign-off as the agent in the store.
Seven agent frameworks we did not write (Pydantic AI, OpenAI Agents SDK, Google ADK, Claude Agent SDK, Vercel AI SDK, LangGraph, Semantic Kernel over OpenAPI) took the milk order to a person's sign-off with nothing but the address and a signed mandate.Runtime results
aimopilot
The operations copilot, and an agent on Aiven
Staff ask the platform in words: is anything unhealthy, which agents are failing, what is waiting for sign-off. Answers are computed from rows and service state, never written by a model, and a question the data cannot answer gets "The data does not say."
A purchasing agent running on Aiven Managed Agents, with its own model in Aiven's environment, orders through the MCP door. At 1,400 € it is over the 1,000 € it may spend alone, so it waits for a named person.The Platform page (operations)
Ask the platform
Is anything unhealthy?
Which agents are failing?
What is waiting for sign-off?
How many orders were refused in the last hour, and by which rule?
delete from telemetry.events
Refused before it is sent: the copilot reads one view, as a user that can only select.
In the operations portal, on the Platform page.
The six situations the challenge names, each handled
Type the words into the agent, or open the page named.
Need, recipe, order
A menu around what is in season: the anchor with its source, the dishes, what is on hand, and only the shortfall bought in the smallest pack that covers it.
The model reads, searches and explains. It never decides whether an order is allowed. That is a pure function of 20 rules: the same mandate and the same order give the same answer, with no model and no clock inside.
Signed by the buyer's companyMandateWhat the agent may buy, how much it may spend alone, and who signs above that.JWS, Ed25519
Signed by the wholesalerQuoteA fixed price for exact lines, for this buyer and this request, until a stated time.JWS, Ed25519
Plain codeGateEvery rule reports pass, needs a person, or refused, and why.No model inside
A named personSign-offA passkey on their own phone, bound to the digest of that exact order.WebAuthn passkey
Anyone can checkLedgerHash-chained entries and a signed receipt that verifies offline against the published keys.SHA-256 chain, JWK Set
The gate's 20 rules, by name
mandate_agent
mandate_window
quote_binding
quote_expiry
quote_replay
order_matches_quote
category_allowed
required_attributes
forbidden_allergens
nutrition_rules
required_certificates
recall_hold
delivery_deadline
substitution_rule
substitute_price
weekly_budget
per_order_limit
order_splitting
human_confirmation
approver_authority
Refuses, and says why
Every refusal carries the rule that fired and a sentence a person can read. Pay less than the signed quote and the answer is order_matches_quote, not a shrug.
A mistake check that shows its working
"1,000 L is 2.5 times your usual 400 L (median of your last 8 milk orders)." Both figures, on the sign-off itself, so the person signing knows what they are signing.
Allergens and nutrition by declared evidence
No allergen data is not safe. A nutrition rule holds only by the maker's declared figure; a missing figure is not compliant.
A relayed yes is not a person
"The chef said yes", passed on by a model, is recorded as relayed. Where it matters, the order goes to a named person's passkey.
Suspend an agent
The wholesaler's staff can suspend any agent at the door. Its next call is refused, in every door, until they lift it.
Licences from the crash test
An agent earns a licence on the crash test. When the wholesaler enforces it, the gate applies the stricter of the mandate and the licence, never the looser.
aimopilot / present / now try to break it
Open standards, all the way down
MCPStreamable HTTP, protocol 2026-07-28 and the 2025-era handshake
OpenAPI 3.1The same operations over REST
W3C Verifiable CredentialsSigned stock, price and origin claims, and the offers
JWS with Ed25519Mandates, quotes and receipts; keys published as a JWK Set
WebAuthn passkeysA person's sign-off, bound to one order
RFC 9727 API catalogSo an agent that knows only the address can find the rest
You can see it think
Under every reply sits one quiet line: "5 steps". Open it and the agent shows what it read, which history it used, what it searched, which live prices it asked for, and what it left out and why. The wholesaler sees the same request as a replay, station by station, each with its ledger entry.
The buyer's view: the steps behind one reply.
aimopilot / ops / trace
The wholesaler's view: the same request, replayable.
Search that understands a kitchen
A kitchen asks for "laktositon maito", "something to whip" or "utan nötter". Ordinary search matches the words. Ours reads the requirement, keeps it in plain code, and lets a decision model judge only what the rules allow.
Right product first, on 189 real-style requests over 17,546 products
Right first In the top 3
Right first and in the top 3, per approach
Approach
Right first
In the top 3
Keyword searchIDF-weighted word match
40 %top 3: 44 %
44 %
BM25OpenSearch's default ranking
31 %top 3: 43 %
43 %
Semantic searchk-NN over embeddings
72 %top 3: 85 %
85 %
Standard hybridBM25 + k-NN, reciprocal rank fusion
58 %top 3: 71 %
71 %
AimoPilothybrid recall, hard rules in code, a decision model as judge
97 %top 3: 97 %
97 %
0255075100
What a kitchen would notice
Approach
Requirement broken
Stand-in shown as the thing
"We do not sell that", right
BM25
22
0
4 of 11
Semantic search
18
5
0 of 11
Standard hybrid
21
3
0 of 11
Standard hybrid + our rules
0
3
0 of 11
AimoPilot
0
0
11 of 11
Requirement broken:
A top-3 product that misses a stated requirement or carries a forbidden allergen: ordinary milk for a lactose-free request.
Stand-in shown as the thing:
Something that can do the job, shown as if it were the product asked for.
"We do not sell that", right:
Requests for things the range does not have, answered as such.
Standard hybrid search, what most teams ship, put the right product first for 58 % of these requests, and 21 of its top-three results broke a requirement the kitchen stated.
Our requirements in plain code take that to 0, before any model sees a product.
The judge on top takes right-first to 97 %. Only a judge says "we do not sell that" when the range does not have it: ours did, 11 of 11.
The same 189 requests in English, Finnish and Swedish, the same 17,546 products, the same scoring code for every row. These are standard set-ups we built and ran on our own catalogue and evaluation set, not other companies' products. And the same 97 % whether recall runs in the server's memory or on Aiven OpenSearch. How we measured
Tested like it matters
The crash test puts a buying agent through 13 hard purchasing situations, three times each: litres to cases, a missed cut-off, partial stock, lactose-free that is not low-lactose, a school's allergen data, a price that expires, a standing order that drifted, an impossible deadline. Every model ran through the same harness and the same gate; the licence is judged on its worst run.
Crash-test ratings and the licence each agent earned
Agent
Worst run
Rating
Licence
Unsafe attempts
Reference buyerscripted baseline
100.0
100.0
L3 Autonomous
0
Claude Fable 5.2Anthropic
96.5
96.9
L3 Autonomous
0
Claude Opus 5.5the model our agent runs on
95.2
95.7
L3 Autonomous
0
Claude Sonnet 5.5Anthropic
85.7
90.8
L1 Supervised
0
GPT-6 AstraOpenAI
79.9
80.4
L1 Supervised
0
Claude Haiku 5.5Anthropic
68.9
78.3
L1 Supervised
0
GPT-6 LunaOpenAI
59.7
64.8
L0 Learner
0
Reckless buyerscripted baseline
13.2
13.2
L0 Learner
9
Nemotron-3-Nano-30B-A3B-BF16Featherless
8.8
13.5
L0 Learner
0
Qwen3-14BFeatherless
7.7
14.9
L0 Learner
1
Qwen3-8BFeatherless
6.6
10.4
L0 Learner
2
Qwen3-4BFeatherless
0.0
7.9
L0 Learner
2
Does nothingscripted baseline
0.0
0.0
L0 Learner
0
Stops earlyscripted baseline
0.0
0.0
L0 Learner
0
Licences: L0 Learner, every order to a person; L1 Supervised, up to 250 € alone; L2 Trusted, up to 1,000 €; L3 Autonomous, up to 2,500 € and like-for-like substitutes. The crash-test leaderboard
1,500+
automated tests over the gate, the core, the server and the documents' own claims.
61
conversation scenarios scored against the expected end state, counting every correction the buyer had to make.
13
everyday tasks done by a scripted first-timer in a phone-sized browser, counting taps, typed messages and questions.
66
probes against a running server: who may do what, hostile and malformed calls, boundaries, floods.
380+ browser tests across Chromium, WebKit and Firefox at phone and desktop size, including the sign-off with a passkey, accessibility, reduced motion and a crowded room.
Run it like a business
The wholesaler's staff see every agent at the door, how each is doing and why, and what is waiting for a person. Everything an agent does is a record they can search in words and replay.
aimopilot / ops / agents
Agent scorecard
Each agent performing, escalating or failing, with the reason in words and a proposed action that a named person carries out.
Waiting for a person
Every order waiting for sign-off, oldest first, why it needed one, and how long sign-offs take.
Safeguards
Each rule of the gate and how often it fired: alone, a named person, refused.
Observe and alerts
Orders, sign-offs, refusals by rule, model spend and search quality as panels, each showing its SQL; six thresholds checked by the app itself.
The audit trail, in words
"Refusals for allergens by outside agents today" searches the trail; codes, counts and times only, no buyer text.
The stream
Every agent action and gate decision on Kafka, keyed by order, so a request can be replayed in order.
aimopilot / ops / safeguards
On Aiven, every service has one job
Aiven Runtime
Hosts AimoPilot: the gate, its MCP door, REST, the portals.
PostgreSQL
Orders, approvals, the hash-chained ledger, kitchen memory, telemetry; the scorecard is SQL over it.
Kafka
Every agent action and gate decision, ordered and replayable.
Valkey
The live-price cache and each agent's lookup budget.
OpenSearch
Search over 17,546 products in three languages, the recall index and the audit trail.
A chef on the line has a phone; the purchasing manager has a desk. Every moment works on both, the same moment, the same data.
The conversation
aimopilot
The sign-off
aimopilot
The store
aimopilot
Operations
aimopilot
Emails that look like a business sent them
A receipt the moment an order is placed, and a plain-spoken mail when something changes: a delay, a shortage, a substitute. Built for mail clients, in the kitchen's language, never sent twice.
From AimoPilotOrder placed: 20,94 €, delivery Sun 15.11.2026
From AimoPilotA product on your order cannot come on Mon 16.11.2026