---
title: Ce qui casse quand un agent IA gère un vrai commerce
description: Prosus a confié six vrais distributeurs automatiques d’Amsterdam à un agent Claude Agent SDK pendant quatre mois, et il a perdu de l’argent. L’architecture, les ratés et ce que je réutiliserais, d’après le talk de Floris Fok.
date: 2026-09-27
tags: agents IA, Claude Agent SDK, Cloudflare, agents longue durée
---

Prosus a confié six vrais distributeurs automatiques d’Amsterdam à un agent construit avec le Claude Agent SDK, et l’a laissé les gérer pendant quatre mois. Le commerce a perdu de l’argent. L’agent a distribué 30 boissons en testant une API en production, acheté des nouilles en gobelet qui ne rentraient pas dans les emplacements, et baissé les prix tout l’été : le chiffre d’affaires a augmenté, le bénéfice a disparu.

Le talk, c’est [Everything wrong with AI agents running your business](https://www.youtube.com/watch?v=LJ2MTGvVHm8) de Floris Fok, staff AI engineer chez Prosus, à l’AGNTCon + MCPCon. C’est le regard le plus honnête que j’aie vu sur un agent qui travaille dans le monde physique plutôt que dans un dépôt.

## Un distributeur avant un restaurant

Prosus possède des places de marché, et la plupart de ses vendeurs sont de petites entreprises. La vraie question, c’est de savoir si un agent peut gérer un restaurant. Floris a poussé pour commencer par le plus simple des vrais commerces, un distributeur automatique, en affirmant qu’il pouvait le monter en une journée.

Ça n’a pas pris une journée. Et ils sont passés directement à six machines, snacks et boissons, au lieu d’une.

<figure class="fd-fig wb-start" aria-labelledby="wb1-cap" data-desc="Le point de départ. Prosus possède des places de marché dont les vendeurs sont surtout de petites entreprises, donc la vraie question est de savoir si un agent peut gérer un restaurant. Floris a poussé pour commencer plutôt par le plus simple des vrais commerces : un distributeur automatique. L’argument : il pouvait le monter en une journée. Ça n’a pas pris une journée, et ils sont passés directement à six machines, snacks et boissons, au lieu d’une.">
<div class="mp-two-row">
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">Point de départ</p>
<p class="mp-two-name">Un distributeur</p>
<svg class="mp-two-art" viewBox="0 0 300 110" aria-hidden="true"><rect class="hx-drw" x="112" y="4" width="76" height="102"/><rect class="wb-glass" x="119" y="11" width="44" height="66"/>
<rect class="mp-tile" x="123" y="15" width="10" height="11"/><rect class="mp-tile mp-tile-1" x="136" y="15" width="10" height="11"/><rect class="mp-tile mp-tile-2" x="149" y="15" width="10" height="11"/>
<rect class="mp-tile mp-tile-3" x="123" y="31" width="10" height="11"/><rect class="mp-tile mp-tile-4" x="136" y="31" width="10" height="11"/><rect class="mp-tile mp-tile-5" x="149" y="31" width="10" height="11"/>
<rect class="mp-tile mp-tile-2" x="123" y="47" width="10" height="11"/><rect class="mp-tile mp-tile-4" x="136" y="47" width="10" height="11"/><rect class="mp-tile mp-tile-1" x="149" y="47" width="10" height="11"/>
<rect class="mp-tile mp-tile-5" x="123" y="63" width="10" height="11"/><rect class="mp-tile" x="136" y="63" width="10" height="11"/><rect class="mp-tile mp-tile-3" x="149" y="63" width="10" height="11"/>
<rect class="hx-drw" x="169" y="11" width="12" height="26"/><rect class="wb-tray" x="172" y="44" width="6" height="3"/><rect class="wb-tray" x="119" y="86" width="44" height="12"/></svg>
<p class="mp-two-line">Le plus simple des vrais commerces</p>
<p class="mp-two-line">Snacks et boissons</p>
</div>
<p class="mp-two-vs">puis</p>
<div class="mp-two-card wb-later">
<p class="mp-two-who">La vraie question</p>
<p class="mp-two-name">Un restaurant</p>
<svg class="mp-two-art" viewBox="0 0 300 110" aria-hidden="true"><rect class="hx-drw" x="120" y="6" width="60" height="14"/><rect class="hx-drw" x="80" y="40" width="140" height="66"/>
<rect class="hx-drw" x="72" y="24" width="156" height="16"/><rect class="wb-awn" x="72" y="24" width="13" height="16"/><rect class="wb-awn" x="98" y="24" width="13" height="16"/><rect class="wb-awn" x="124" y="24" width="13" height="16"/><rect class="wb-awn" x="150" y="24" width="13" height="16"/><rect class="wb-awn" x="176" y="24" width="13" height="16"/><rect class="wb-awn" x="202" y="24" width="13" height="16"/>
<rect class="wb-glass" x="92" y="54" width="34" height="26"/><rect class="wb-glass" x="174" y="54" width="34" height="26"/><rect class="wb-glass" x="136" y="70" width="28" height="36"/></svg>
<p class="mp-two-line">Vendeurs Prosus : surtout des PME</p>
<p class="mp-two-line">Un agent peut-il en gérer une ?</p>
</div>
</div>
<div class="wb-plan">
<p><span class="wb-k">L’idée</span><s>Monté en un jour</s></p>
<p><span class="wb-k">En vrai</span><b>Pas un jour, et six machines au lieu d’une</b><span class="wb-minis" aria-hidden="true"><i></i><i></i><i></i><i></i><i></i><i></i></span></p>
</div>
<figcaption id="wb1-cap">Le point de départ, raconté par Floris : d’abord le plus simple des vrais commerces, le restaurant plus tard.</figcaption>
</figure>

## D’un tableau de bord humain à des outils

Les machines qu’ils pouvaient obtenir rapidement aux Pays-Bas venaient avec un tableau de bord d’exploitation à distance et un point de vente (POS) qui tourne sur un téléphone. Les deux étaient conçus pour des humains.

- Tableau de bord : ils ont récupéré le jeton de session et rétro-ingénié ses appels d’API pour en faire des appels d’outil. Moins d’une journée.
- POS : celui du fournisseur ne permettait de choisir les noms et les images que dans une liste prédéfinie. Ils l’ont reconstruit de zéro, ce qui a ajouté deux jours.

Ils ont testé les outils en les branchant sur un simple chatbot Claude SDK et en pilotant les machines par prompt pendant quelques minutes. Au final, toute l’exploitation (ouvrir la porte, distribuer, changer un produit, un nom ou un prix) tenait dans deux skills, chacun avec sa propre CLI à l’intérieur.

<figure class="fd-fig wb-tools" aria-labelledby="wb2-cap" data-desc="Transformer deux outils conçus pour des humains en outils pour l’agent. Le tableau de bord d’exploitation à distance : ils ont récupéré le jeton de session et rétro-ingénié ses appels d’API pour en faire des appels d’outil, en moins d’une journée. Le point de vente sur téléphone n’acceptait que des noms et des images tirés d’une liste prédéfinie, donc ils l’ont reconstruit de zéro, ce qui a ajouté deux jours. Ils ont testé les outils en les branchant sur un simple chatbot Claude SDK et en pilotant les machines par prompt pendant quelques minutes. Au final, toute l’exploitation tenait dans deux skills, chacun avec sa propre CLI à l’intérieur : ouvrir la porte, distribuer, changer un produit, changer un nom, changer un prix.">
<div class="wb-tools-in">
<ol class="wb-conv">
<li><p class="wb-from"><span class="wb-k">Conçu pour des humains</span>Tableau de bord opérateur</p><p class="wb-how">Jeton de session, appels d’API rétro-ingéniés en appels d’outil</p><p class="wb-time">moins d’un jour</p></li>
<li><p class="wb-from"><span class="wb-k">Conçu pour des humains</span>POS sur téléphone</p><p class="wb-how">Noms et images d’une liste fixe uniquement, donc refait de zéro</p><p class="wb-time">+2 jours</p></li>
</ol>
<p class="wb-test"><span class="wb-k">Test</span>Un simple chatbot Claude SDK avec les outils, qui pilote les machines par prompt quelques minutes</p>
<div class="wb-skills">
<p class="wb-skill"><b>Skill</b><span>CLI maison dedans</span></p>
<p class="wb-skill"><b>Skill</b><span>CLI maison dedans</span></p>
<ul class="wb-ops" aria-label="Toute l’exploitation">
<li>ouvrir la porte</li>
<li>distribuer</li>
<li>changer un produit</li>
<li>changer un nom</li>
<li>changer un prix</li>
</ul>
</div>
</div>
<figcaption id="wb2-cap">Les deux outils étaient faits pour des gens. Le temps à droite, c’est ce qu’il a fallu à chacun pour devenir quelque chose que l’agent peut appeler.</figcaption>
</figure>

## L’architecture que je réutiliserais

Cette diapo, c’est la partie que j’ai préférée. C’est un modèle propre pour faire tourner un agent Agent SDK en production :

<div class="flow" role="group" aria-label="Architecture de l’agent : un frontend Cloudflare Worker, le Claude Agent SDK dans une VM Cloudflare avec les skills et les docs montés depuis R2, et des services connectés">
  <div class="flow-node">
    <p class="flow-label">Porte d’entrée</p>
    <h3>Cloudflare Worker</h3>
    <ul>
      <li>Frontend</li>
      <li>Sessions partagées</li>
    </ul>
  </div>
  <div class="flow-link" aria-hidden="true"><span>→</span></div>
  <div class="flow-node flow-node--core">
    <p class="flow-label">Runtime · VM Cloudflare</p>
    <h3>Claude Agent SDK</h3>
    <ul>
      <li>Boucle d’agent + exécution des outils</li>
      <li>Skills · montage de fichiers R2</li>
      <li>Docs · montage de fichiers R2</li>
    </ul>
  </div>
  <div class="flow-link" aria-hidden="true"><span>⇄</span></div>
  <div class="flow-node">
    <p class="flow-label">Connectés</p>
    <h3>Services</h3>
    <ul>
      <li>API Claude · traces dans D1</li>
      <li>Navigateur Browserbase</li>
      <li>Secrets · base chiffrée + CLI</li>
      <li>Twilio · e-mail · Slack</li>
    </ul>
  </div>
</div>

Les choix derrière, c’est la partie utile :

- Pourquoi l’Agent SDK : sous-agents, skills et outil bash sont fournis d’origine. Ils voulaient un harnais (harness) nu, pour ne pas encore orienter l’agent.
- Les secrets n’atteignent jamais le modèle. Un skill maison avec une CLI écrit des placeholders dans le code et injecte lui-même les vraies valeurs, si bien qu’aucun fournisseur ne voit une clé. Floris l’a trouvé « peut-être un peu usine à gaz », et l’a gardé.
- Les skills et les docs sont des buckets R2 montés comme des fichiers dans la VM. Le dossier docs, c’est la connaissance de l’entreprise, écrite par l’agent et par des humains. Floris l’a enrichi à mesure qu’il apprenait comment fonctionne vraiment un commerce de distributeurs automatiques.
- Il tourne selon un planning, pas en continu. Ils ont repris ça du Project Vend d’Anthropic : un planning réveille l’agent, il agit, puis une vérification séparée examine le résultat. Au début, chaque tâche revenait au vert alors que rien ne s’était passé. Dès qu’un agent touche le monde réel, une session terminée ne veut pas dire que le travail est fait.
- L’agent appartient à une équipe. Plusieurs personnes se connectent à la même session et voient le même état, donc un agent bloqué qui demande de l’aide n’attend pas une semaine qu’une seule personne rentre de vacances.
- La compaction garde l’histoire du commerce. La compaction par défaut résume la conversation. La leur garde le cap sur de longues séries d’appels d’outil, écrit ce qui compte dans les docs et y renvoie par des liens.

<figure class="fd-fig mp-loop wb-loop" aria-labelledby="wb3-cap" data-desc="Le planning d’exécution, repris du Project Vend d’Anthropic. L’agent ne tourne pas en continu : un planning le réveille. Il agit sur ses tâches. Puis une vérification séparée examine le résultat. Au début, chaque tâche revenait au vert alors que rien ne s’était passé : dès qu’un agent touche le monde réel, une session terminée ne veut pas dire que le travail est fait. Puis le planning réveille l’agent à nouveau.">
<div class="mp-loop-in">
<div class="flow" role="group" aria-label="Le planning : il réveille l’agent, l’agent agit, une vérification séparée examine le résultat, et le planning le réveille à nouveau">
  <div class="flow-node">
    <p class="flow-label">Réveil</p>
    <h3>Planning</h3>
    <ul>
      <li>Pas en continu</li>
      <li>Repris de Project Vend</li>
    </ul>
  </div>
  <div class="flow-link" aria-hidden="true"><span>→</span></div>
  <div class="flow-node">
    <p class="flow-label">Action</p>
    <h3>Agent</h3>
    <ul>
      <li>Traite ses tâches</li>
      <li>La session finit au vert</li>
    </ul>
  </div>
  <div class="flow-link" aria-hidden="true"><span>→</span></div>
  <div class="flow-node flow-node--core">
    <p class="flow-label">Vérification, à part</p>
    <h3>Contrôle du résultat</h3>
    <ul>
      <li>Examine le résultat</li>
      <li>Le vert ne prouve rien</li>
    </ul>
  </div>
  <div class="mp-back" aria-hidden="true"><span class="mp-back-t">prochain réveil</span><i class="mp-back-tok"></i></div>
</div>
</div>
<p class="mp-strip"><b>Au début</b><span>Chaque tâche revenait au vert, et rien ne s’était passé.</span></p>
<figcaption id="wb3-cap">Le planning de la diapo d’architecture. La vérification, c’est la case pleine : dès qu’un agent touche le monde réel, une session terminée ne veut pas dire que le travail est fait.</figcaption>
</figure>

Floris a plaisanté : Cloudflare avait sorti une version packagée de tout ça quelques semaines avant le talk. La brique officielle la plus proche que j’ai trouvée, c’est [Claude Managed Agents on Cloudflare](https://blog.cloudflare.com/claude-managed-agents/). Le hic : là, la boucle d’agent tourne côté Anthropic, et Cloudflare fournit la sandbox, le navigateur, l’e-mail et les outils. Sur la diapo de Prosus, la boucle tourne dans la VM.

## Là où les ennuis ont commencé

L’agent tournait sur Opus 4.8. Le construire, c’était la partie amusante. Ensuite :

- Un test est une vraie vente. Il a « testé » l’API de la machine et distribué une trentaine de boissons, apparemment pour calibrer la taille des emplacements. Il faut lui dire quelles API sont en production.
- Il rend compte comme un agent de code. Quand on lui a demandé un point, il a envoyé un changelog. Floris voulait des KPI et du chiffre d’affaires.
- Les nouilles en gobelet. Quelqu’un sur Slack a suggéré des nouilles, l’agent en a commandé, et elles ne rentraient pas dans la machine. Floris les a données.
- 1 100 bonnes affaires. Avec une tâche « trouver des bonnes affaires », il en a trouvé 1 100, dont du savon, des produits ménagers et un mix à cocktail Sex on the Beach. Il était très fier d’une savonnette. Il a aussi accumulé une grosse facture de navigateur.
- Du marketing par message Slack. Chargé de faire sa promo, il a posté du texte brut, puis généré une seule image avec Gemini. C’est là que Floris a compris pourquoi les équipes confient le marketing à un agent dédié : un agent écrit comme si son lecteur était un autre agent.

La plupart des correctifs, c’était du contexte qui semble trop évident pour être écrit : tu es un distributeur automatique, les gens veulent manger ce qu’il y a dedans, voici la taille des emplacements.

<figure class="fd-fig mp-story wb-pain" aria-labelledby="wb4-cap" data-desc="Là où les ennuis ont commencé, en six cases. Un : il a testé l’API de la machine et distribué une trentaine de boissons, parce qu’un test est une vraie vente. Deux : quand on lui a demandé un point, il a envoyé un changelog, alors que Floris voulait des KPI et du chiffre d’affaires. Trois : quelqu’un sur Slack a suggéré des nouilles en gobelet, l’agent en a commandé, et elles ne rentraient pas dans la machine. Quatre : chargé de trouver des bonnes affaires, il en a trouvé 1 100, savon compris, et il était très fier d’une savonnette. Cinq : chargé de faire sa promo, il a posté du texte brut, puis généré une seule image avec Gemini. Six : la plupart des correctifs, c’était du contexte qui semble trop évident pour être écrit : tu es un distributeur automatique, les gens veulent manger ce qu’il y a dedans, voici la taille des emplacements.">
<ol class="mp-story-strip" tabindex="0" aria-label="Là où les ennuis ont commencé, six cases">
<li class="mp-panel">
<p class="mp-panel-when"><b>1</b>Un test est une vente</p>
<svg class="mp-panel-art" viewBox="0 0 200 110" aria-hidden="true"><rect class="hx-drw" x="20" y="8" width="56" height="94"/><rect class="wb-glass" x="26" y="14" width="34" height="58"/><rect class="wb-tray" x="26" y="80" width="34" height="12"/>
<rect class="wb-can" x="92" y="84" width="10" height="16"/><rect class="wb-can wb-can-1" x="104" y="84" width="10" height="16"/><rect class="wb-can wb-can-2" x="116" y="84" width="10" height="16"/>
<rect class="wb-can wb-can-1" x="98" y="66" width="10" height="16"/><rect class="wb-can wb-can-2" x="110" y="66" width="10" height="16"/><rect class="wb-can wb-can-3" x="104" y="48" width="10" height="16"/>
<text class="wb-big" x="164" y="64" text-anchor="middle">≈30</text></svg>
<p class="mp-panel-say">Il a « testé » l’API de la machine et distribué une trentaine de boissons.</p>
</li>
<li class="mp-panel">
<p class="mp-panel-when"><b>2</b>Le point</p>
<svg class="mp-panel-art" viewBox="0 0 200 110" aria-hidden="true"><g class="mp-prbox"><rect x="12" y="10" width="82" height="80"/><rect class="mp-prbox-h" x="12" y="10" width="82" height="16"/></g>
<text class="mp-art-t mp-art-t-inv" x="18" y="22">changelog</text><rect class="mp-ln" x="20" y="36" width="60" height="4"/><rect class="mp-ln" x="20" y="46" width="46" height="4"/><rect class="mp-ln" x="20" y="56" width="56" height="4"/><rect class="mp-ln" x="20" y="66" width="40" height="4"/><rect class="mp-ln" x="20" y="76" width="52" height="4"/>
<g class="mp-prbox"><rect x="106" y="10" width="82" height="80"/><rect class="mp-prbox-h" x="106" y="10" width="82" height="16"/></g>
<text class="mp-art-t mp-art-t-inv" x="112" y="22">KPI</text><rect class="wb-kpi" x="118" y="62" width="10" height="20"/><rect class="wb-kpi" x="134" y="52" width="10" height="30"/><rect class="wb-kpi" x="150" y="44" width="10" height="38"/><rect class="wb-kpi" x="166" y="34" width="10" height="48"/>
<text class="mp-art-t" x="53" y="105" text-anchor="middle">envoyé</text><text class="mp-art-t" x="147" y="105" text-anchor="middle">attendu</text></svg>
<p class="mp-panel-say">Quand on lui a demandé un point, il a envoyé un changelog. Floris voulait des KPI et du chiffre d’affaires.</p>
</li>
<li class="mp-panel">
<p class="mp-panel-when"><b>3</b>Nouilles en gobelet</p>
<svg class="mp-panel-art" viewBox="0 0 200 110" aria-hidden="true"><path class="wb-slot" d="M74,58 V88 H126 V58"/><path class="wb-cup" d="M42,12 H158 V22 H42 Z"/><path class="wb-cup" d="M48,22 H152 L140,56 H60 Z"/><path class="wb-noodle" d="M64,36 q6,-6 12,0 t12,0 t12,0 t12,0 t12,0 t12,0"/>
<path class="wb-x" d="M90,64 L110,82 M110,64 L90,82"/><text class="mp-art-t" x="100" y="106" text-anchor="middle">trop gros pour l’emplacement</text></svg>
<p class="mp-panel-say">Quelqu’un sur Slack a suggéré des nouilles en gobelet. Elles ne rentraient pas dans la machine.</p>
</li>
<li class="mp-panel">
<p class="mp-panel-when"><b>4</b>Trouver des affaires</p>
<svg class="mp-panel-art" viewBox="0 0 200 110" aria-hidden="true"><text class="wb-big" x="100" y="44" text-anchor="middle">1 100</text><rect class="wb-soap" x="62" y="58" width="76" height="28"/><text class="mp-art-t" x="100" y="76" text-anchor="middle">savon</text>
<path class="wb-star" d="M156,50 L159,59 L168,62 L159,65 L156,74 L153,65 L144,62 L153,59 Z"/><text class="mp-art-t" x="100" y="105" text-anchor="middle">affaires trouvées</text></svg>
<p class="mp-panel-say">Chargé de trouver des bonnes affaires, il en a trouvé 1 100. Il était très fier d’une savonnette.</p>
</li>
<li class="mp-panel">
<p class="mp-panel-when"><b>5</b>Fais ta promo</p>
<svg class="mp-panel-art" viewBox="0 0 200 110" aria-hidden="true"><g class="mp-av"><rect x="16" y="12" width="14" height="14"/><text x="23" y="22.5" text-anchor="middle">IA</text></g>
<rect class="mp-ln" x="38" y="14" width="120" height="4"/><rect class="mp-ln" x="38" y="24" width="140" height="4"/><rect class="mp-ln" x="38" y="34" width="96" height="4"/>
<rect class="wb-img" x="38" y="50" width="54" height="40"/><path class="wb-img-art" d="M42,86 L58,66 L68,76 L76,68 L88,86 Z"/><text class="mp-art-t" x="100" y="66">une image,</text><text class="mp-art-t" x="100" y="80">par Gemini</text></svg>
<p class="mp-panel-say">Chargé de faire sa promo, il a posté du texte brut, puis généré une seule image.</p>
</li>
<li class="mp-panel">
<p class="mp-panel-when"><b>6</b>Le correctif</p>
<svg class="mp-panel-art" viewBox="0 0 200 110" aria-hidden="true"><g class="mp-prbox"><rect x="8" y="10" width="184" height="86"/><rect class="mp-prbox-h" x="8" y="10" width="184" height="16"/></g>
<text class="mp-art-t mp-art-t-inv" x="14" y="22">contexte</text><text class="mp-art-t wb-line" x="16" y="45">tu es un distributeur</text><text class="mp-art-t wb-line wb-line-1" x="16" y="63">on mange ce qu’il contient</text><text class="mp-art-t wb-line wb-line-2" x="16" y="81">la taille des emplacements</text></svg>
<p class="mp-panel-say">La plupart des correctifs, c’était du contexte qui semble trop évident pour être écrit.</p>
</li>
</ol>
<figcaption id="wb4-cap">Les ratés du talk, une case chacun. La dernière montre le genre de contexte qui a réglé la plupart d’entre eux.<span class="mp-swipe" aria-hidden="true">Glissez pour la case suivante →</span></figcaption>
</figure>

## Des objectifs plutôt qu’une liste de tâches

Une liste de tâches figée ne change pas à mesure que le commerce apprend. Ils sont donc passés à des objectifs permanents. Quand l’agent vérifie un objectif, il regarde les tâches qui y sont liées, en crée s’il n’y en a pas, et les modifie si elles ne suffisent pas.

« Devenir la machine la plus célèbre du monde » a transformé une tâche de promo hebdomadaire en d’autres tâches de promo, une étude de marché et une recherche de distributeurs autonomes concurrents. Il n’en a trouvé aucun.

<figure class="fd-fig wb-goals" aria-labelledby="wb5-cap" data-desc="Des objectifs plutôt qu’une liste de tâches. Avant, l’agent travaillait à partir d’une liste de tâches figée, qui ne change pas à mesure que le commerce apprend. Après, il a des objectifs permanents : quand il vérifie un objectif, il regarde les tâches qui y sont liées, en crée s’il n’y en a pas, et les modifie si elles ne suffisent pas. L’exemple du talk : l’objectif Devenir la machine la plus célèbre du monde a transformé une tâche de promo hebdomadaire en d’autres tâches de promo, une étude de marché et une recherche de distributeurs autonomes concurrents. Il n’en a trouvé aucun.">
<div class="mp-two-row">
<div class="mp-two-card wb-later">
<p class="mp-two-who">Avant</p>
<p class="mp-two-name">Une liste de tâches</p>
<div class="mp-rows wb-list" aria-hidden="true"><p><b></b><i></i></p><p><b></b><i></i></p><p><b></b><i></i></p><p><b></b><i></i></p></div>
<p class="mp-two-line">Figée. Elle ne bouge pas quand le commerce apprend.</p>
</div>
<p class="mp-two-vs">puis</p>
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">Après</p>
<p class="mp-two-name">Des objectifs permanents</p>
<ol class="wb-steps">
<li><b>1</b>Vérifier l’objectif</li>
<li><b>2</b>Voir ses tâches liées</li>
<li><b>3</b>Aucune ? En créer</li>
<li><b>4</b>Insuffisantes ? Les modifier</li>
</ol>
</div>
</div>
<div class="wb-tree">
<p class="wb-goal"><span class="wb-k">Objectif</span>Devenir la machine la plus célèbre du monde</p>
<p class="wb-seed">Une tâche de promo hebdo est devenue</p>
<ul class="wb-kids">
<li>D’autres tâches de promo</li>
<li>Une étude de marché</li>
<li>Une recherche de distributeurs autonomes concurrents <span class="wb-none">aucun trouvé</span></li>
</ul>
</div>
<figcaption id="wb5-cap">Le passage des tâches aux objectifs, avec l’exemple du talk.</figcaption>
</figure>

## Le dernier kilomètre de l’IA

« L’IA gère la machine », ça voulait quand même dire que Floris portait le stock et devinait ce que l’agent entendait par « ajoute ça dans la machine ». Ils ont donc ajouté un chat opérateur : un bouton sur le POS qui ouvre un chat sur la tâche en cours, pour que la personne qui réassortit puisse poser ses questions en travaillant.

D’après lui, ça a multiplié sa productivité par 10, comparé à une heure à jongler entre les e-mails et le tableau de bord. Il pense qu’aider les petites entreprises sur ce dernier kilomètre pourrait devenir un marché à part entière.

<figure class="fd-fig wb-mile" aria-labelledby="wb6-cap" data-desc="Le dernier kilomètre de l’IA. Avant : l’IA gérait la machine, mais Floris portait encore le stock et devinait ce que l’agent entendait par ajoute ça dans la machine, avec une heure à jongler entre les e-mails et le tableau de bord. Après : un chat opérateur, un bouton sur le point de vente qui ouvre un chat sur la tâche en cours, pour que la personne qui réassortit puisse poser ses questions en travaillant. D’après lui, ça l’a rendu dix fois plus productif.">
<div class="mp-two-row">
<div class="mp-two-card wb-later">
<p class="mp-two-who">Avant</p>
<p class="mp-two-name">À la main</p>
<p class="mp-two-line">Floris porte le stock</p>
<p class="mp-two-line">Il devine ce que veut dire « ajoute ça dans la machine »</p>
<p class="mp-two-line">Une heure à jongler entre e-mails et tableau de bord</p>
</div>
<p class="mp-two-vs">puis</p>
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">Après</p>
<p class="mp-two-name">Chat opérateur</p>
<div class="wb-pos" aria-hidden="true">
<p class="wb-pos-h">POS</p>
<p class="wb-pos-task"><span>Tâche en cours</span><i></i><i></i></p>
<p class="wb-pos-btn">Discuter de cette tâche</p>
<p class="wb-pos-chat"><i></i><i></i><i></i></p>
</div>
<p class="mp-two-line">Un bouton du POS l’ouvre</p>
<p class="mp-two-line">Qui réassortit pose ses questions en travaillant</p>
</div>
</div>
<p class="mp-strip"><b>10×</b><span>Sa productivité, selon lui, face à une heure à jongler entre e-mails et tableau de bord.</span></p>
<figcaption id="wb6-cap">Le chat opérateur du talk. Le 10×, c’est sa formule sur scène, pas une mesure.</figcaption>
</figure>

## Les chiffres

- Mise en route : des articles gratuits d’abord, pour apprendre ce que les gens aimaient.
- Premiers prix : bien trop élevés.
- L’été : l’agent n’a pas arrêté de baisser fortement les prix. Un shake protéiné y coûtait moins cher que chez Albert Heijn, si bien que le chiffre d’affaires a augmenté pendant que le bénéfice s’effondrait.
- Tokens : environ 300 par mois pendant quatre mois. Le commerce a perdu de l’argent.
- Concurrence : les machines affrontaient les fruits, les barres et les boissons offerts au bureau. La machine de l’AI House était de loin la plus rentable.

<figure class="fd-fig wb-numbers" aria-labelledby="wb7-cap" data-desc="Quatre mois de prix en phases, dessinés en schéma, sans vraies données de prix. Mise en route : des articles gratuits d’abord, pour apprendre ce que les gens aimaient. Premiers prix : bien trop élevés. L’été : l’agent n’a pas arrêté de baisser fortement les prix, jusqu’à ce qu’un shake protéiné y coûte moins cher que chez Albert Heijn ; le chiffre d’affaires a augmenté pendant que le bénéfice s’effondrait. Sur les quatre mois, les tokens ont coûté environ 300 par mois, et le commerce a perdu de l’argent. Les machines affrontaient les fruits, les barres et les boissons offerts au bureau, et la machine de l’AI House était de loin la plus rentable.">
<ol class="wb-phases">
<li><p class="wb-ph-n"><b>1</b>Mise en route</p><p class="wb-gauge wb-g-free" aria-hidden="true"><i></i><span>gratuit</span></p><p class="wb-ph-t">Articles gratuits</p><p class="wb-ph-s">Pour voir ce qui plaît</p></li>
<li><p class="wb-ph-n"><b>2</b>Premiers prix</p><p class="wb-gauge wb-g-hi" aria-hidden="true"><i></i></p><p class="wb-ph-t">Bien trop élevés</p></li>
<li><p class="wb-ph-n"><b>3</b>L’été</p><p class="wb-gauge wb-g-lo" aria-hidden="true"><i></i></p><p class="wb-ph-t">Forte baisse</p><p class="wb-ph-s">Un shake protéiné moins cher que chez Albert Heijn</p><p class="wb-moves"><span class="wb-up">CA ↑</span><span class="wb-down">bénéfice ↓</span></p></li>
<li><p class="wb-ph-n"><b>4</b>Après quatre mois</p><p class="wb-gauge wb-g-end" aria-hidden="true"><span>perte</span></p><p class="wb-ph-t">Argent perdu</p><p class="wb-ph-s">Tokens : environ 300 par mois</p></li>
</ol>
<p class="mp-strip"><b>Concurrence</b><span>Fruits, barres et boissons offerts au bureau. La machine de l’AI House était de loin la plus rentable.</span></p>
<figcaption id="wb7-cap">Les quatre mois en phases. Les barres schématisent le niveau de prix, ce ne sont pas de vrais prix.</figcaption>
</figure>

## À vous d’essayer

Prosus a publié en open source une version simulée, [Prosus Vending Bench](https://github.com/ProsusAI/vending-bench), sous licence Apache 2.0. Elle compte six machines, trois sites et 22 outils MCP. L’agent reçoit 1 500 € et 30 jours simulés, et le tout est livré sous forme de tâche Harbor. [L’annonce](https://aaif.io/blog/introducing-the-first-open-source-vending-machine-benchmark) indique qu’Opus 5 a terminé avec environ 61 % de trésorerie simulée de plus que GPT-5.6 Sol lors de leurs premiers essais. Selon Floris, les modèles se comportent comme sur les vraies machines.

<figure class="fd-fig wb-bench" aria-labelledby="wb8-cap" data-desc="Prosus Vending Bench, la version simulée en open source, sous licence Apache 2.0 et livrée sous forme de tâche Harbor. Elle compte six machines, trois sites et 22 outils MCP. L’agent démarre avec 1 500 euros et dispose de 30 jours simulés. Lors des premiers essais de l’annonce, Opus 5 a terminé avec environ 61 pour cent de trésorerie simulée de plus que GPT-5.6 Sol. Selon Floris, les modèles se comportent comme sur les vraies machines.">
<div class="mp-stats wb-spec">
<p><b>6</b><span>machines</span></p>
<p><b>3</b><span>sites</span></p>
<p><b>22</b><span>outils MCP</span></p>
<p><b>1 500 €</b><span>au départ</span></p>
<p><b>30</b><span>jours simulés</span></p>
<p><b>Apache 2.0</b><span>livré en tâche Harbor</span></p>
</div>
<div class="wb-race">
<p class="wb-race-h">Trésorerie simulée à la fin, premiers essais</p>
<p class="wb-bar"><span>GPT-5.6 Sol</span><i></i><b>la référence</b></p>
<p class="wb-bar wb-bar-win"><span>Opus 5</span><i></i><b>environ 61 % de plus</b></p>
</div>
<p class="mp-strip"><b>Floris</b><span>Les modèles se comportent comme sur les vraies machines.</span></p>
<figcaption id="wb8-cap">Le bench, d’après son dépôt et l’annonce. Les barres ne montrent que l’écart donné par l’annonce, pas les montants.</figcaption>
</figure>

Pour aller plus loin, voici les travaux sur lesquels le talk s’appuie :

- Le Project Vend d’Anthropic, [phase 1](https://www.anthropic.com/research/project-vend-1) et [phase 2](https://www.anthropic.com/research/project-vend-2), où Claude tenait une boutique de bureau et vendait des cubes de tungstène à perte
- [Vending-Bench](https://arxiv.org/abs/2502.15840), l’article d’Andon Labs sur la cohérence des agents sur plusieurs mois
- [Monter des buckets R2 dans une sandbox Cloudflare](https://developers.cloudflare.com/sandbox/guides/mount-buckets/), le modèle skills et docs de la diapo

Regardez [le talk](https://www.youtube.com/watch?v=LJ2MTGvVHm8), puis essayez votre harnais sur le bench. Floris dit qu’il l’ajoutera s’il bat le sien.
