Du prompt itératif à l’équipe d’agents : sites web, un an et demi plus tard

En mars 2025, j’avais raconté ici comment j’ai redéveloppé mon site avec React et CodeIgniter grâce à Grok 3, sans presque aucune expérience en React. La méthode tenait en quelques étapes : une poignée de prompts, puis des allers-retours quand quelque chose coinçait. Le résultat arrivait en quelques heures, même si « tout ne marchait pas du premier coup ».

Aujourd’hui, je travaille un autre site de domaine viticole (PHP, CodeIgniter, MariaDB), et la façon de travailler avec l’IA n’a plus grand-chose à voir. On n’enchaîne plus les prompts dans une fenêtre de chat. J’utilise Claude Code avec une configuration qui organise une petite équipe virtuelle : des rôles, des documents et des points de contrôle. Ce billet se veut une suite logique du premier : ce qui a changé, et pourquoi.

Mars 2025 contre aujourd’hui :

Mars 2025Aujourd’hui
OutilGrok 3 dans un chat, comparé à GPT-4o, Claude 3.5 et CopilotClaude Code dans l’éditeur, avec accès direct au code
MéthodePrompts itératifs : je demande, j’essaie, je relanceUn circuit : besoins, conception, plan, implémentation, revue
Qui piloteMoi, à chaque échangeUn agent chef d’orchestre, et moi aux points de validation
Contexte fourni à l’IACe que je colle dans le promptLe code, la configuration et des règles projet écrites une fois pour toutes
VérificationSurtout à l’œil, au fil des essaisTests automatiques, relecture du code et de la sécurité
Quand ça casseUn nouveau prompt avec l’erreurUne enquête, une contre-expertise, puis seulement une correction

La différence de fond : en 2025, la qualité dépendait surtout de la réponse du modèle. Aujourd’hui, elle dépend surtout du cadre dans lequel il travaille.

Un chef d’orchestre et des spécialistes

L’idée centrale : la session Claude principale ne code pas. Elle joue le chef de projet et confie chaque étape à un sous-agent spécialisé. Chaque sous-agent a un seul rôle, ses propres outils et un format de réponse imposé.

RôleCe qu’il fait
Analyste des besoinsMesure ce que la demande touche dans le code et ce qu’elle va coûter
Concepteur techniqueRédige le document de conception
PlanificateurDécoupe la conception en tâches
ExécutantImplémente une tâche, rien de plus
Contrôleur qualitéLance les tests et les vérifications, corrige ce qui casse
RelecteursRelisent le code et la sécurité à la fin

Le chef d’orchestre dit quoi faire et où, jamais comment. Il donne à l’exécutant un fichier de tâche, pas une liste de lignes à modifier. Chaque spécialiste repart d’un contexte propre, ce qui évite qu’une longue conversation finisse par tout mélanger.

Toutes les demandes ne méritent pas ce circuit complet. Le chef d’orchestre classe d’abord la demande : petite, moyenne ou grande. Une petite correction passe directement à l’implémentation ; une grosse fonctionnalité traverse toutes les étapes. Il existe aussi un mode « Lite », celui que j’utilise, qui réduit le nombre d’agents appelés sans supprimer les validations humaines.

Des documents comme garde-fous

Pour une demande moyenne ou grande, rien ne se code avant que trois documents soient écrits et validés par un humain :

  1. Le cahier des charges : ce que l’utilisateur doit pouvoir faire, et ce qui est explicitement exclu.
  2. Le document de conception : comment on s’y prend, avec des critères d’acceptation vérifiables.
  3. Le plan de travail : la liste ordonnée des tâches.

Chaque document est relu par un agent relecteur, puis confronté au code réel par un agent vérificateur. Celui-ci attrape les affirmations du type « la fonction X existe déjà » quand elle n’existe pas.

L’intérêt n’est pas la paperasse. C’est d’avoir des points d’arrêt où je peux dire « non, pas comme ça » avant que cinquante fichiers soient modifiés. Le deuxième bénéfice de cette approche, c’est la reprise du développement avec des mini-étapes, par exemple le lendemain ou après une attente sur un quota de token expiré.

Pour diagnostiquer un bug : l’avocat du diable

Le piège classique avec une IA qui débogue, c’est qu’elle trouve une cause plausible, s’y accroche et corrige le symptôme. Le framework Claude Code sépare donc le diagnostic en trois rôles :

  1. L’enquêteur suit le chemin que prend l’exécution et liste tous les endroits où ça peut casser, preuves à l’appui.
  2. Le vérificateur essaie de démonter ce travail.
  3. Le solveur propose des corrections seulement une fois les causes confirmées.

Sur mon projet, il a d’ailleurs démonté une hypothèse qui me paraissait évidente : je pensais que le problème venait du contrôleur alors que la cause était finalement dans la configuration d’un composant tiers.
Pour chaque cause supposée, il joue l’avocat du diable :

  • Et si ce comportement était en fait normal ?
  • Quelle preuve contraire a-t-on oubliée ?
  • Quelle hypothèse implicite est peut-être fausse ?

Il va aussi chercher dans une source que l’enquêteur n’a pas consultée : l’historique Git, la configuration ou la documentation officielle. Si la doc officielle contredit une hypothèse, celle-ci est automatiquement affaiblie. Enfin, il ne désigne pas un coupable unique : chaque cause est jugée séparément, car un bug en a souvent plusieurs.

Choisir comment implémenter : le plus petit design possible

Avant d’écrire du code, le concepteur suit une méthode en sept étapes. Le cœur tient en une question : quel est le design le plus simple qui atteint le résultat, et qu’est-ce qui oblige à en faire plus ?

Concrètement :

  1. Partir de l’existant. On trace le chemin le plus court qui livre le résultat avec ce que le code sait déjà faire.
  2. Chercher ce qui manque. On ne garde que les besoins que ce chemin ne couvre pas.
  3. Combler au moindre coût. Pour chaque manque, on essaie d’abord de réutiliser, de déduire d’une donnée existante ou de calculer à la volée. On n’ajoute une table, une option ou une classe qu’en dernier recours.
  4. Le test de soustraction. On retire chaque ajout, un par un, et on regarde si le résultat tient encore. Si oui, l’ajout disparaît.

Ce dernier test est redoutable contre la tendance des IA à « bien faire » : un service, une interface et un fichier de config pour afficher trois lignes. Chaque élément qui reste dans le design doit pouvoir dire quelle exigence casserait sans lui.

Les étapes suivantes sont plus classiques : comparer au moins deux stratégies, lister les risques avec une parade pour chacun, vérifier les contraintes (version de PHP, hébergeur, délais), puis consigner le choix et ses raisons dans le document de conception.

Par tranches ou par couches ?

Une fois le design fixé, il reste à décider dans quel ordre le construire. Il y a trois options :

ApprochePrincipeQuand la choisir
VerticaleUne fonctionnalité complète à la fois, de la base de données à l’écranFonctionnalités peu dépendantes entre elles, utilisables dès qu’elles sont finies
HorizontaleUne couche à la fois : d’abord les données, puis la logique, puis l’affichagePlusieurs fonctionnalités reposent sur un socle commun qui doit être solide
HybrideUn mélange, phase par phaseBesoins encore flous, ou passage d’un prototype à la version finale

Le critère de choix n’est pas l’effort. C’est le risque le plus faible et la vérification la plus rapide.

Chaque tâche vise aussi un niveau de preuve, du plus fort au plus faible :

  • L1, ça marche pour de vrai : un visiteur peut utiliser la fonctionnalité.
  • L2, les tests passent : de nouveaux tests couvrent le comportement.
  • L3, ça compile : le code est valide, sans rien encore d’exécutable.

On vise toujours le niveau le plus haut possible. Une tâche validée seulement par « ça compile » doit avoir une bonne raison de l’être.

Ce que j’en retiens sur un petit site

Le site sur lequel j’ai travaillé est simple : des pages rendues côté serveur, un formulaire de contact et de commande, pas d’application front séparée. Dans ce contexte, la méthode aboutit presque toujours au même choix : une approche verticale, une page à la fois, vérifiée en L1 par un test qui charge la vraie page.

Le circuit complet peut sembler lourd pour un site vitrine, d’où le mode Lite et le classement par taille. Mais trois idées valent la peine même sans le framework Claude Code:

  • Séparer les rôles. Celui qui code n’est pas celui qui vérifie.
  • Jouer l’avocat du diable sur chaque diagnostic avant de corriger.
  • Faire le test de soustraction sur chaque ajout proposé par l’IA.

En 2025, l’IA m’avait permis d’aller vite sur une technologie que je ne maîtrisais pas. Un an et demi plus tard, elle n’est pas seulement plus intelligente : elle travaille dans un cadre qui la rend disciplinée. C’est exactement ce qui manquait à mes prompts itératifs.

Et au-delà du code ?

L’ingénierie logicielle est un terrain idéal pour ces méthodes agentiques. Le cadre y est déjà très carré : un langage strict, des tests automatisés, des standards partagés. Un agent peut y vérifier lui-même son travail, et un autre agent peut le contredire preuves à l’appui.

Quand on voit ce qu’on obtient dans ce cadre, on imagine sans peine le potentiel encore inexploité ailleurs. Je ne sais pas encore jusqu’où cette approche ira hors du développement logiciel, mais le parallèle me semble évident: dès qu’un métier dispose de règles explicites et de critères de validation clairs, on peut imaginer des agents spécialisés s’y répartir le travail.

Deux freins restent pourtant d’actualité :

  • La souveraineté et la protection des données. Confier des documents clients, des dossiers médicaux ou des données internes à un modèle hébergé ailleurs pose toujours la question de savoir où vont ces données et qui y a accès.
  • La perméabilité du domaine à l’IA. Un domaine sans règles écrites, sans moyen automatique de dire si un résultat est juste, ou peu disposé à changer ses pratiques, laisse peu de prise à ces méthodes.

Le code a eu de l’avance parce qu’il avait déjà fait ce travail de formalisation. Les autres domaines devront sans doute le faire à leur tour avant d’en tirer autant.

About Ludovic

Ingénieur en informatique dipl. EPFL
Cette entrée a été postée dans la catégorie IA, Uncategorized et taggée , , . Ajouter le permalink aux favoris.

Comments are closed.