Parcourir la documentation

É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.

Sur cette page
  1. Ce que ça a demandé, en chiffres
  2. Cinq étapes à copier
  3. Ce que les relecteurs ont repéré, et là où ils se sont trompés
  4. Là où une personne a décidé
  5. À rejouer chez vous
  6. Ce que cela ne prouve pas, pour que vous jugiez

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.

Transcription avec description visuelle

Ce que ça a demandé, en chiffres

Ce qu’a produit la refonte, et d’où vient chaque chiffre
MesureValeurD’où elle vient
Agents, jusqu’à la branche intégrée39Le journal enregistré des sous-agents de la session
Commits sur la branche d’intégration133 (118 ordinaires, 15 fusions)git log depuis master
Fichiers modifiés328 (72 665 lignes ajoutées, 650 retirées)git diff --shortstat
Pages du site8 avant, 244 après, chacune avec son miroir MarkdownLe sitemap en ligne du 2026-10-18, puis la sortie du build
Pages de documentation52 par langue, en quatre languesLe registre des pages
Exemples et transcriptions de terminal160 exemples ; 70 transcriptions, dont 19 simulées et signalées comme tellesLe registre des pages
Vidéos6, narrées en anglais et en français, 24 fichiers de sous-titresLe manifeste des médias
Relecteurs indépendants5, avec un rapport écrit chacunLes rapports de relecture du 2026-10-19
Commits de correction après les relectures19, sur quatre branchesgit log des quatre branches de correction
Tests et contrôles à la fin79 tests du site, 1 879 tests de la suite principale, 91 986 contrôles de recherche, 2 539 contrôles de releaseLes exécutions des contrôles
Exécution navigateur976 cas de fenêtre, 300 exécutions d’accessibilité, 0 violationLe journal du contrôle navigateur
Durée11 h 52 min de la demande à la branche intégrée, dont 3 h 21 min de pauseLes horodatages des commits et de la session
Crédits médiaEnviron 709 crédits pour 15 clips générés et la narrationLe registre des crédits

Cinq étapes à copier

  1. Écrivez d’abord les règles

    É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).

  2. 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

  3. 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.

    Dans le terminal du projet
    npx bmad-plus swarm init --definition swarm/page-fanout.json --units swarm/units.json

  4. Faites-le attaquer par quelqu’un d’autre

    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

  5. 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 brouillonCe qu’a trouvé le relecteurLa 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.

Là où une personne a décidé

  • 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.

À rejouer chez vous

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 🚀

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.json
design-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.

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.json
site-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-kgoi
site-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.md
Each 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-kgoi
site-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.md
3 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.json
1 file(s) to review, 1 changed lines, 1 unit(s) — scope 1ef2d235ea25
checklist: /work/app/_bmad-output/review/site/checklist.md
plan: medium effort, 2 pass(es), refutation pass
Every selected file must end in coverage.json as completed, failed or waived (with a reason).
npx bmad-plus review gate site
site: 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.

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.

Ce que cela ne prouve pas, pour que vous jugiez

  • 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.

Voir aussi