Étude de cas : vérifier ce que les agents disent avoir terminé
Une relecture a jugé 11 affirmations fausses dans ce que 39 agents ont écrit en moins de douze heures, et les relecteurs se sont trompés deux fois. Voyez comment, et rejouez les cinq commandes.
Si un agent IA vous a déjà dit « terminé » alors que ce n’était pas vrai, cette page est pour vous. Elle montre ce qui s’est passé quand 39 agents ont refait la landing, la documentation, les exemples et les vidéos de ce site en moins de douze heures, entre le soir du 2026-10-18 et le matin du 2026-10-19 : une relecture a jugé 11 affirmations fausses, les relecteurs se sont trompés deux fois, et une personne a décidé de ce qu’on garde. Vous verrez les cinq étapes, les chiffres avec leurs sources, les erreurs, et les commandes à rejouer sur votre propre projet. Si vous voulez seulement l’exécuter, passez à À rejouer chez vous.
Remarque· Avant les chiffres : les défauts
À lire d’abord. Les agents ont été lancés par Claude Code avec son propre outil d’agents, chaque développeur dans son propre worktree git, et non par la commande bmad-plus swarm : cette commande distribue le travail, écrit les briefs, vérifie les réponses et en fait le décompte, et laisse le lancement à votre assistant. Les relecteurs sont aussi des modèles, et deux de leurs constats étaient faux. C’est une seule exécution, et personne n’a encore mesuré si les lecteurs trouvent le résultat plus clair. Le schéma est celui que livre BMAD+ (demander d’abord avec un intake, répartir sous un budget, relire de façon indépendante, s’arrêter aux portes). Chaque chiffre ci-dessous a été recompté le 2026-10-19 depuis le dépôt, les journaux ou les rapports de relecture ; un chiffre qui n’a pas pu être recompté n’est pas sur cette page.
L’IA a dit « terminé ». Vraiment ?Comment 39 agents ont refait ce site en moins de douze heures, ce que les relecteurs ont repéré, et les cinq étapes et commandes pour le rejouer vous-même.Transcription
L’IA a dit « terminé ». Vraiment ? Trente-neuf agents ont refait un site en moins de douze heures. Des relecteurs y ont trouvé onze affirmations fausses. Ils se sont aussi trompés deux fois. Un « terminé » a déjà dû vous décevoir. Voici comment vérifier : cinq étapes, cinq commandes. Un. Comment éviter les faits inventés ? Écrivez d’abord les règles : de zéro, des faits tirés du code, le simulé est signalé. Deux. Que doit-il demander avant de commencer ? L’intake liste ce qui est connu et ce qui manque. Trois. Comment éviter que les agents se marchent dessus ? Un brief par page, une copie du dépôt chacun. BMAD+ distribue les briefs et plafonne chaque vague. Votre assistant lance les agents. Quatre. Qui vérifie le travail ? Cinq relecteurs qui n’ont rien écrit, qui rejouent des commandes sur un serveur propre. Et la porte dit non tant que chaque fichier n’est pas pris en compte. Une promesse de fichiers conservés. Une commande qui n’existait pas. Un compte faux d’une unité. Cinq. Corrigez, puis prouvez : dix-neuf commits de correction, 1 879 tests, zéro violation d’accessibilité. Un humain a gardé le dernier mot. Personne n’a encore mesuré si les lecteurs trouvent le site plus clair. Vous repartez avec cinq commandes, trois fichiers d’essaim, la porte de relecture et sept erreurs à éviter. Commencez par l’étape un. « Terminé » n’est qu’une affirmation. Rejouez-la.
Écrivez le but en une phrase et les règles qui ne plient jamais. Ici, le but était un site qui couvre toutes les possibilités de BMAD+ en quatre langues, avec des vidéos. Les règles : tout écrit de zéro, des faits tirés uniquement du dépôt, tout ce qui est simulé le dit, et rien ne tourne sur l’ordinateur du propriétaire (les builds et les tests ont tourné sur un serveur de test, dans des conteneurs).
02
Laissez-le demander avant d’agir
Avant qu’un agent démarre, le travail a été listé : ce qui existait et ce qui manquait (les nouvelles commandes n’avaient ni exemple ni page de référence). Le propriétaire a ensuite élargi le périmètre. Dans BMAD+, cette étape est l’intake : il note ce qui est répondu, pris par défaut ou inconnu, et pose six questions au plus par message.
Dans le terminal du projet
npx bmad-plus intake plan --intake .agents/skills/pack-design/intake.yaml --answers _bmad-output/design/intake.json
03
Donnez à chaque agent sa page et sa copie
Un agent a d’abord inventorié tout le produit. Puis la landing, la documentation, les enregistrements d’écran et les vidéos ont été construits en parallèle, chaque agent dans son propre worktree git et sa propre copie du projet sur le serveur de test, avec des périmètres qui ne se recouvrent pas pour que les branches puissent être fusionnées. Dans BMAD+, la même forme est une définition d’essaim avec une unité par page et des périmètres disjoints.
Cinq relecteurs qui n’avaient rien écrit ont lu le résultat à un commit figé : l’un a vérifié les faits des pages packs, agents et concepts, un autre la référence, les guides, la sécurité, la FAQ et la landing, un troisième a rejoué les exemples, un quatrième a lu le français, l’espagnol et l’allemand, un cinquième a piloté un navigateur pour l’accessibilité. Ils ont rejoué les commandes sur un serveur propre au lieu de croire le texte. Dans BMAD+, la couche de preuve est review : elle scelle le périmètre et refuse un verdict tant que chaque fichier n’est pas pris en compte.
Dans le terminal du projet
npx bmad-plus review scope site --workspace --base HEAD
npx bmad-plus review gate site
05
Corrigez, puis prouvez
Sept groupes de correction et quatre passes ont corrigé ce que les relectures avaient trouvé (19 commits de correction sur quatre branches). Un intégrateur a fusionné 14 branches et relancé tous les contrôles : 79 tests du site, 1 879 tests, 91 986 contrôles de recherche, 2 539 contrôles de release et une exécution navigateur de 976 cas de fenêtre et 300 exécutions d’accessibilité sans aucune violation. Rien n’a été déployé avant l’accord du propriétaire.
Ce que les relecteurs ont repéré, et là où ils se sont trompés#
Vous vous attendez peut-être à ce que des agents qui ont lu le code disent des choses exactes. Ce n’était pas toujours le cas. Ces sept affirmations n’ont pas survécu au rejeu de la commande ou à la lecture du code, et chacune a été corrigée.
Sept affirmations qui n’ont pas survécu à un rejeu
Ce que disait le brouillon
Ce qu’a trouvé le relecteur
La correction
L’installateur préserve les fichiers d’instructions que vous avez écrits.
Avec install --yes, un CLAUDE.md que vous avez écrit est copié en CLAUDE.md.bak puis remplacé. La phrase figurait sur quatre pages.
Les pages disent : pas en silence. Les installations interactives et les mises à jour le préservent, --yes le sauvegarde d’abord, --tools none ne touche à aucune configuration d’outil.
Trois commandes de la landing, présentées comme exécutables.
Rejoué : intake plan exige --answers, mem recall avec classement par preuves exige un périmètre de projet, swarm init demandait --context pitch=FICHIER.
Les commandes portent les options manquantes et s’exécutent.
Une consigne qui commençait par /animated.
Aucune commande /animated n’existe dans le produit.
La consigne est la phrase que l’agent écoute : construire un site animé à partir d’une vidéo.
Un exemple Nexus qui affichait verification=passed juste après create.
Rejoué, verify juste après create échoue avec le code de sortie 1 : il lui faut un travail terminé, non accepté et réconcilié.
L’exemple démarre, enregistre et vérifie désormais une vraie tâche, avec une sortie rejouée.
Les commandes lancées après la première installation commencent par npx --no-install.
Dans un projet qui n’a jamais lancé npm install --save-dev bmad-plus, cette commande s’arrête avec « npx canceled due to missing packages ».
Les exemples utilisent npx bmad-plus ; la forme --no-install est expliquée là où elle apparaît, avec son prérequis. Les fichiers d’instructions que génère l’installateur disent encore --no-install : cela demande une release et n’est pas encore corrigé.
Deux clips vidéo de l’installateur montraient Shield avec 26 référentiels.
Le registre en compte 27, et toutes les autres pages disaient 27.
Les deux clips ont été enregistrés de nouveau avec l’installateur actuel.
Sous-titres : une réplique par phrase, et des sous-titres français qui reformulaient la narration.
Des lignes allant jusqu’à 79 caractères, des répliques allant jusqu’à 11 secondes ; les sous-titres français ne correspondaient pas aux mots prononcés.
Les 24 fichiers de sous-titres sont coupés à 2 lignes de 42 caractères et 6 secondes ; les français suivent la voix mot pour mot.
Attention· Les relecteurs se sont aussi trompés
Deux constats ne tenaient pas. Une relecture affirmait que la 0.23.0 n’était pas sur npm ; elle y est, et les commandes de cette page l’installent. Une autre signalait des titres anglais incrustés dans les vidéos françaises ; le réalisateur des vidéos a revérifié les images : les incrustations étaient déjà en français et l’anglais restant est la vraie sortie du terminal, gardée exprès. Un relecteur est un second lecteur, pas un oracle : chaque constat a été vérifié avant d’être corrigé, et un humain a gardé le dernier mot.
De lancer, avec des essaims en parallèle, et d’élargir le périmètre à toutes les possibilités du produit et à des vidéos de présentation avec voix off.
La voix de narration : la première a été refusée, une voix ElevenLabs (Celine) a été approuvée après écoute.
De lancer la documentation, les exemples et la référence CLI en parallèle plutôt que l’un après l’autre.
Qui est crédité pour quoi dans le README et la description npm.
Une sauvegarde complète du site en ligne avant de le remplacer.
La formulation de deux affirmations publiques : Dev Studio est décrit comme original, et la carte du pack SEO s’intitule « SEO / GEO ».
Une pause pendant l’absence du propriétaire, et la reprise la même nuit.
Que rien ne soit déployé avant que le propriétaire le dise.
Cinq commandes portent la méthode : install, intake plan, swarm init, review scope et review gate. Les blocs ci-dessous les exécutent, avec les quelques commandes autour qui les font fonctionner. Vous pouvez vous arrêter après n’importe quel bloc.
Il vous faut Node.js 20 ou plus et un projet Git avec au moins un commit. Les blocs ci-dessous sont de la sortie réelle du paquet publié 0.23.0. Là où des sous-agents écriraient leurs réponses, la partie essaim écrit à la main trois petits fichiers de réponse : aucun modèle ne tourne, donc le décompte compte des réponses de substitution et ne dit rien de vraies pages. La définition, le gabarit de brief et le fichier d’unités sont affichés sur la page de l’essaim.
Installer les packs
$ npx bmad-plus install --yes --lang en --packs core,design,memory --tools claude-code# Sortie réduite à sa dernière ligne.BMAD+ is ready! Talk to Atlas to get started 🚀
npx bmad-plus install --yes --lang en --packs core,design,memory --tools claude-code
Sortie capturée lors d’une exécution réelle. Source: Rejoué le 2026-10-19 avec le paquet publié 0.23.0, lancé par npx, dans un conteneur Node 20 propre, dans un projet Git jetable
Demander d’abord : noter les réponses, puis lister ce qui reste ouvert
$ npx bmad-plus intake record --intake .agents/skills/pack-design/intake.yaml --answers _bmad-output/design/intake.json --set surface_kind=landing --set "audience=Urban professionals who buy coffee most days" --set "job=Get a first-time visitor to open a loyalty card"Recorded surface_kind, audience, job in _bmad-output/design/intake.json.$ npx bmad-plus intake plan --intake .agents/skills/pack-design/intake.yaml --answers _bmad-output/design/intake.jsondesign-read (design): ready — 3 answered, 0 defaulted, 0 unknown, 10 not asked yet.Ask next (at most 6 per message): - brand_assets [choice] Which brand assets exist already? None, a partial set (a logo and a colour or two), or a full kit (logo, palette, type, voice)? (choices: none, partial, full)# Cinq autres questions suivent dans la sortie réelle.
npx bmad-plus intake record --intake .agents/skills/pack-design/intake.yaml --answers _bmad-output/design/intake.json --set surface_kind=landing --set "audience=Urban professionals who buy coffee most days" --set "job=Get a first-time visitor to open a loyalty card"
npx bmad-plus intake plan --intake .agents/skills/pack-design/intake.yaml --answers _bmad-output/design/intake.json
Sortie capturée lors d’une exécution réelle. Source: Rejoué le 2026-10-19 avec le paquet publié 0.23.0, lancé par npx, dans un conteneur Node 20 propre, dans un projet Git jetable
Répartir : un brief par page, puis vérifier et décompter les réponses
$ npx bmad-plus swarm init --definition swarm/page-fanout.json --units swarm/units.jsonsite-pages-20261019-kgoi: fanout of 3 units, budget 26, approval not-needed.Units listed, no seed.Next: bmad-plus swarm briefs site-pages-20261019-kgoi$ npx bmad-plus swarm briefs site-pages-20261019-kgoisite-pages-20261019-kgoi: 3 of 3 units need a sub-agent, in waves of 10.Wave 1: about /work/app/.bmad-plus/swarm/runs/site-pages-20261019-kgoi/briefs/about.md pricing /work/app/.bmad-plus/swarm/runs/site-pages-20261019-kgoi/briefs/pricing.md contact /work/app/.bmad-plus/swarm/runs/site-pages-20261019-kgoi/briefs/contact.mdEach sub-agent: Read the brief and follow it exactly; it is your whole instruction.Disclosure: Each page was written by a separate sub-agent from the same brief; read them together before publishing.# Ici, les trois fichiers de réponse ont été écrits à la main, là où chaque sous-agent écrirait le sien.$ npx bmad-plus swarm check site-pages-20261019-kgoisite-pages-20261019-kgoi: 3 of 3 valid answers.$ npx bmad-plus swarm tally site-pages-20261019-kgoi/work/app/.bmad-plus/swarm/runs/site-pages-20261019-kgoi/tally.md3 of 3 units counted; 0 skipped.Disclosure: Each page was written by a separate sub-agent from the same brief; read them together before publishing.
Sortie capturée lors d’une exécution réelle. Source: Rejoué le 2026-10-19 avec le paquet publié 0.23.0, lancé par npx, dans un conteneur Node 20 propre, dans un projet Git jetable
Relire : sceller le périmètre, puis voir la porte refuser
$ npx bmad-plus review scope site --workspace --base HEAD/work/app/_bmad-output/review/site/scope.json1 file(s) to review, 1 changed lines, 1 unit(s) — scope 1ef2d235ea25checklist: /work/app/_bmad-output/review/site/checklist.mdplan: medium effort, 2 pass(es), refutation passEvery selected file must end in coverage.json as completed, failed or waived (with a reason).$ npx bmad-plus review gate sitesite: incomplete — coverage 0/1 completed (0 waived), 0 open finding(s), 0 refuted - no coverage.json: which files were reviewed is not established - no findings.json: write it even when there is nothing to report - 1 selected file(s) never accounted for: site/contact/index.md# Code de sortie 2 : le verdict reste incomplet tant que le relecteur n’a pas écrit sa couverture et ses constats.
npx bmad-plus review scope site --workspace --base HEAD
npx bmad-plus review gate site
Sortie capturée lors d’une exécution réelle. Source: Rejoué le 2026-10-19 avec le paquet publié 0.23.0, lancé par npx, dans un conteneur Node 20 propre, dans un projet Git jetable
Réécrire plusieurs pages en parallèle, puis les faire attaquer par un tiers#
À utiliser quand plusieurs pages ou sections doivent changer en même temps sans que les agents s’écrasent, et que vous voulez un relecteur qui n’en a écrit aucune. Il faut les trois fichiers d’essaim du rejeu ci-dessus et un projet Git avec un commit.
Dans votre assistant IA
Lance l’essaim site-pages depuis swarm/page-fanout.json et swarm/units.json : un sous-agent par page, chacun limité à son propre dossier, une vague à la fois. Quand les réponses sont là, lance swarm check et swarm tally et rapporte d’abord la mention de transparence. Puis, avec un autre sous-agent qui n’a écrit aucune des pages, lance review scope sur l’arbre de travail contre HEAD, lis chaque fichier modifié et rejoue chaque commande que montrent les pages. N’accepte pas une page dont une commande échoue, et dis-moi quelle affirmation le relecteur n’a pas pu vérifier.
Ce que vous devriez obtenir Les briefs sont écrits, les sous-agents répondent par vagues de 10 au plus, swarm check indique les réponses valides et tally.md s’ouvre par la mention de transparence. Le relecteur scelle un périmètre avec review scope, et review gate reste incomplet, avec le code de sortie 2, tant que chaque fichier modifié n’est pas couvert par un fichier de couverture et de constats écrit. Une commande qui échoue au rejeu est rapportée comme un constat, pas corrigée en silence.
Un projet et une exécution : cela montre que la méthode peut attraper des erreurs, pas à quelle fréquence.
Les relecteurs sont aussi des modèles. Un constat est une piste à vérifier, et deux d’entre eux étaient faux.
Les décomptes montrés à l’écran et dans les exemples sont des démonstrations, et ils sont signalés comme tels.
Personne n’a mesuré si le site est plus facile à comprendre. Les contrôles portent sur les faits, les règles d’accessibilité et la structure, pas sur la compréhension.
Les textes français, espagnol et allemand ont été relus par un agent face à l’anglais et à un glossaire commun, pas par un correcteur natif.
Les vidéos ont été vérifiées par des scripts et par un agent qui regarde des images. Leur son et leur rendu restent un jugement humain.