Skip to the content

A demo on synthetic data, built for the Junction 2026 Valio Aimo challenge. Not the wholesaler's own shop.

Let AI do the buying. Keep the last word.

Any company's purchasing agent orders from the wholesaler under a mandate it signed; anything beyond it waits for a named person's passkey.

Built for Valio Aimo's Trusted Trade Agents challenge, Junction 2026. Watch it live

Over the 500 € the agent may spend alone: the dark slab, needs your OK, with OK with Face ID.
  1. The buyer's request typed into the agent's composer on a phone, not yet sent.
  2. Sent: the buyer's words in the thread and the agent's first step line turning.
  3. The agent at work: step lines ticking off as the thread's line draws down.
  4. The reply: the usual 10 l boxes can't arrive in time, so it would come as one-litre cartons; which one?
  5. The same reply with its steps opened: request read, history, the assortment searched, live price for a few, the rest left out and why.
  6. The three options in one-litre cartons, each with its fixed total, price per litre and Monday delivery.
  7. "the first one" sent; the agent takes the order to the gate.
  8. Over the 500 € the agent may spend alone: the dark slab, needs your OK, with OK with Face ID.
  9. OK with Face ID tapped and signed with this phone's passkey: the card turns to OK given, OK'd by the kitchen manager.
  10. Back in the thread: OK'd by the kitchen manager, the order placed at the quoted price for Monday.
  • 97 % right first.

    Standard hybrid search: 58 %. On 189 real-style requests over 17,546 products. How we measured

  • 7 attacks on the gate. 7 held.

    Ten times too much, a forged mandate, a replayed fixed price, the agent approves its own order: each stopped by plain code, with the rule's name. See the gate

  • Beyond the mandate, a person signs.

    A named person's passkey on their own phone, bound to that exact order. No agent, tool or link can sign. Who holds which key

  • One record, read from both sides.

    Every order is one hash-chained ledger: the kitchen reads all of it, the wholesaler reads it without the kitchen's private memory. The audit trail

Watch the agent work

One request, the partner's own example. Scroll, and the agent says what it does while the phone shows it.

  1. The chef asks

    I need 1,000 litres of lactose-free milk by Monday

    The buyer's request typed into the agent's composer on a phone, not yet sent.
  2. Reads

    Read your request

    1 000 L, lactose-free milk, Mon 16 Nov

    Sent: the buyer's words in the thread and the agent's first step line turning.
  3. Remembers the kitchen

    Looked at your history

    Always lactose-free: many breakfast guests ask for it, as always (Kitchen manager, Tue 27.10.) Semi-skimmed 1.5 %, as usual

    The agent at work: step lines ticking off as the thread's line draws down.
  4. Searches 17,546 products by meaning

    Searched the assortment

    Valio Hyvä suomalainen Arki® Eila® semi skimmed milk drink 1 l lactose free · Valio semi skimmed milk 1 l lactose free UHT · Arla Semi skimmed milkdrink + Valio Arki Eila semi

    Left out 17 products. The order cut-off for that day has passed (6); a different kind of product (coffee) than asked (4); a different kind of product (sour or fermented milk) than asked (4); other reasons (3)

    The same reply with its steps opened: request read, history, the assortment searched, live price for a few, the rest left out and why.
  5. Asks the live price for only those

    Checked live price and delivery for 3

    All can arrive Mon 16 Nov. The cheapest is 1 010,00 €.

    The same reply with its steps opened: request read, history, the assortment searched, live price for a few, the rest left out and why.
  6. Says the exception first

    I can't get your usual 10 l boxes by Monday 16 Nov: the order deadline has passed.

    The reply: the usual 10 l boxes can't arrive in time, so it would come as one-litre cartons; which one?
  7. Three ways, priced live

    Instead it can come as 1 000 one-litre cartons: Valio Eila 1 010,00 €, Valio UHT 1 560,00 €, or part Arla, part Valio Eila 1 574,48 € (before 13.5 % VAT).

    Lactose-free milk: Valio Hyvä suomalainen Arki® Eila® semi skimmed milk drink 1 l lactose free in its place. Which one?

    The three options in one-litre cartons, each with its fixed total, price per litre and Monday delivery.
  8. The buyer picks

    the first one

    Price held until 21.13. Signed by the wholesaler: anyone can check it against their published key.

    "the first one" sent; the agent takes the order to the gate.
  9. Plain code checks

    Checked your rules

    1000 × Valio Hyvä suomalainen Arki for 1 010,00 € is over the 500,00 € I may spend alone, so it needs the kitchen manager's OK.

    Over the 500 € the agent may spend alone: the dark slab, needs your OK, with OK with Face ID.
  10. A named person signs

    OK'd by Kitchen manager

    With a passkey on their own phone, bound to this exact order.

    OK with Face ID tapped and signed with this phone's passkey: the card turns to OK given, OK'd by the kitchen manager.
  11. Placed, receipt signed

    Sent the order

    The Kitchen manager OK'd it, and the order is placed: 1 000 one-litre cartons of Valio Eila lactose-free milk for 1 010,00 €, arriving Monday 16 Nov. You can still cancel it until 17.00 on Sunday 15 Nov.

    Back in the thread: OK'd by the kitchen manager, the order placed at the quoted price for Monday.

Never trust the model

A pure function of 20 rules decides every order: no model, no clock, the same answer every time.

  1. Mandatesigned by the buyer
  2. Quotesigned by the wholesaler
  3. Gateplain code
  4. Sign-offa named person's passkey
  5. Ledgerhash-chained, verifiable
7 attacks thrown at the gate, 7 held
  • Ten times too much stopped before any price: human_input
  • A forged mandate refused: mandate_signature
  • A replayed fixed price refused: quote_replay
  • The agent approves its own order refused: approver_identity
  • One need, split to dodge the limit sent to a named person: order_splitting
  • "The chef said yes" sent to a named person: human_confirmation
  • Suspended by the wholesaler refused: operator_suspension
The 20 rules
  • 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

MCP · OpenAPI 3.1 · W3C Verifiable Credentials · JWS with Ed25519 · WebAuthn passkeys

Six agents, one gate

The cheftypes, speaks or sends a photoThe kitchen's buying agentreads, remembers, asks only what mattersMenu plannerdishes to order linesSmart search17,546 productsThe watchstock-outs and drift;places renewals, backupsOutside agentsMCP, REST, the Aiven Managed AgentThe gateplain code, no modelMandateSigned fixed priceRules, in plain codeA person's passkey, beyond the mandateThe ledgerhash-chained, every stepEmailsto the kitchenRecordstimelines, scorecard,Time machineThe wholesaler's selling agentsigned offers, never an orderThe approver's phonea named person's passkeyThe operations copilotreads the recordsThe cheftypes, speaks or sends a photoThe kitchen's buying agentreads, remembers, asksMenu plannerdishes to linesSmart search17,546 productsThe watchstock-outs and drift;places renewals, backupsOutside agentsMCP, REST, the Aiven Managed AgentThe gateplain code, no modelMandateSigned fixed priceRules, in plain codeA person's passkey, beyond the mandateThe ledgerevery step, chainedEmailsto the kitchenRecordstimelines, scorecard,Time machineSelling agentthe wholesaler's;signed offersApprover's phonea person's passkeyOps copilotreads the records

The two sides never talk directly: they exchange signed things each can verify.

Every order, from any agent, goes through the same gate.

One ledger records every step.

Each one, at work

Each does a real job. None can place an order the gate has not passed.

  1. Voice mode on a phone: the agent speaking, a large Hold to talk button and End call.

    The kitchen's buying agent

    Heard right in 33 of 36 held-out voice clips, in hall noise and three languages.

    Where this comes from
  2. The kitchen's agent showing the wholesaler's offer: the same milk 0,37 € less per litre, the price held until a stated time.

    The wholesaler's selling agent

    At most two signed offers a kitchen in seven days. An offer never buys.

    Where this comes from
  3. The agent on a phone: Monday's milk cannot come, here is the substitute, it needs a sign-off. Staged for the demo, and marked so.

    The watch

    Notices a stock-out before the kitchen does, and asks before it switches.

    Where this comes from
  4. The agent after planning a lunch for ten: nothing arrives Monday so Tuesday, a salmon soup lunch at 31,43 €, about 3,14 € a cover.

    The menu planner

    Swaps by the ingredient's job in the dish, each checked against the kitchen's rules.

    Where this comes from
  5. The page for outside agents: one address for your assistant, or one command; MCP and the OpenAPI document.

    Any outside agent

    Seven agent frameworks reached a person's sign-off with only the address and a signed mandate.

    Where this comes from
  6. The operations agents page: the scorecard with each agent performing or failing, and the orders waiting for a person.

    The operations copilot

    Answers from rows, never written by a model; a write is refused before it is sent.

    Where this comes from

One product, every screen

The same moment on a phone and on a desk.

The conversation
The conversation at the moment the order needs the kitchen manager's OK, on a phone and then on a desktop.
The sign-off
The sign-off page, stopped at the gate at 1 010,00 €, on a phone and then in a desktop browser.
The store
The catalogue's dairy department, on a phone with the tab bar, then on a desktop with the agent docked beside it.
Operations
The operations portal's Live page: three doors, one gate, on a phone and then on a desktop.

Run it like a business

Every agent at the door, how each is doing and why, and what waits for a person.

The safeguards page: what the agent decided alone, what a named person signed, what was refused, and how often each rule fired.
  • Agent scorecard with a proposed action
  • Orders waiting for a person, oldest first
  • Every rule and how often it fired
  • The audit trail, searchable in words
  • Every decision on Kafka, replayable
On Aiven, one job per service
Runtime
the gate, MCP, REST, the portals
PostgreSQL
orders, the hash-chained ledger, memory, telemetry
Kafka
every action and decision, in order
Valkey
live-price cache, lookup budgets
OpenSearch
17,546 products in three languages, the audit trail
Grafana
the dashboard, read-only
Managed Agents
an outside buyer we do not run
MCP server
the copilot's read-only view

Mail a business would send

A receipt when an order is placed, and a plain mail when something changes.

The receipt: order placed, the line, VAT and total, a link to check the signed receipt.
A product cannot come: what happened, what was done, best, better and good substitutes. Staged for the demo, and marked so.

The two-minute film

Honest about what it is

The partner's synthetic data, real gate decisions and signatures; orders never reach a real order system.

Talk to the agent

Open a test kitchen in one click and ask for 1,000 litres of lactose-free milk by Monday.