
Depuis une dizaine d’années, les pratiques CI/CD (intégration et déploiement continus) ont profondément transformé le développement logiciel. Tests automatisés, pipelines de déploiement, monitoring et rollback rapides sont devenus la norme. L’expérience repomirror pousse la logique un cran plus loin : et si l’on retirait complètement l’humain de la boucle, en laissant un agent IA coder, commiter et pousser en continu ? On passe alors d’un paradigme « l’humain valide l’automatisation » à « l’automatisation valide elle-même ses actions ».
C'est l'expérience menée par l'équipe derrière le projet RepoMirror, qui a placé un agent de codage, Claude Code, dans une simple boucle while.
Ce week-end, lors du hackathon YC Agents, nous nous sommes posé la question suivante : quelle est la façon la plus étrange d'utiliser un agent de codage ?
Notre réponse : exécuter Claude Code en boucle indéfinie et voir ce qui se passe.
Il s'avère que ce qui se passe, c'est que vous vous réveillez avec plus de 1 000 commits, six bases de code portées et un petit outil bancale que nous appelons RepoMirror.t.
Notre réponse : exécuter Claude Code en boucle indéfinie et voir ce qui se passe.
Il s'avère que ce qui se passe, c'est que vous vous réveillez avec plus de 1 000 commits, six bases de code portées et un petit outil bancale que nous appelons RepoMirror.t.
Inspirée par une idée de Geoff Huntley, l'équipe a mis en œuvre une approche minimaliste. Le dépôt GitHub du projet documente l’expérience. L’idée était simple :
- Lancer un agent de codage IA (similaire à ceux proposés par GPT ou Claude).
- L’enfermer dans une boucle while où il doit générer du code et créer des dépôts Git.
- Observer jusqu’où il pouvait aller sans intervention humaine.
Au lieu de donner des instructions complexes, ils ont utilisé une invite (prompt) concise et précise pour guider l'agent. Celui-ci a ensuite été placé dans une boucle, le laissant travailler de manière indépendante pour identifier les tâches à accomplir et générer le code nécessaire.
Cette méthode a permis à l'agent d'opérer sans surveillance humaine, se contentant de suivre une seule directive : porter une base de code d'un langage (ou d'un framework) à un autre. Le résultat a été spectaculaire : en une seule nuit, l'agent a réussi à porter pas moins de six bases de code, dont le portage de assistant-ui de React vers Vue.js et celui de Vercel AI SDK de TypeScript vers Python : preuve que, même sans supervision directe, il peut livrer des artefacts logiciels complets.
Comment ça marche ?
Les développeurs se sont servis de Claude Code pour la boucle :
Code : | Sélectionner tout |
while :; do cat prompt.md | claude -p --dangerously-skip-permissions; done
Ton travail consiste à porter le monorepo assistant-ui-react (pour react) vers assistant-ui-vue (pour vue) et à maintenir le référentiel.
Tu as accès au référentiel assistant-ui-react actuel ainsi qu'au référentiel assistant-ui-vue.
Effectue un commit et pousse tes modifications après chaque modification de fichier.
Utilise le répertoire assistant-ui-vue/.agent/ comme bloc-notes pour ton travail. Stocke tes plans à long terme et tes listes de tâches dessus.
Le projet original a été principalement testé en exécutant manuellement le code. Lors du portage, tu devras écrire des tests de bout en bout et des tests unitaires pour le projet. Mais veille à consacrer la majeure partie de ton temps au portage proprement dit, et non aux tests. Une bonne règle empirique consiste à consacrer 80 % de ton temps au portage proprement dit et 20 % aux tests.
Tu as accès au référentiel assistant-ui-react actuel ainsi qu'au référentiel assistant-ui-vue.
Effectue un commit et pousse tes modifications après chaque modification de fichier.
Utilise le répertoire assistant-ui-vue/.agent/ comme bloc-notes pour ton travail. Stocke tes plans à long terme et tes listes de tâches dessus.
Le projet original a été principalement testé en exécutant manuellement le code. Lors du portage, tu devras écrire des tests de bout en bout et des tests unitaires pour le projet. Mais veille à consacrer la majeure partie de ton temps au portage proprement dit, et non aux tests. Une bonne règle empirique consiste à consacrer 80 % de ton temps au portage proprement dit et 20 % aux tests.
- Vitesse d’exécution : la capacité de livrer plusieurs dépôts en quelques heures est impressionnante.
- Autonomie : l’agent s’auto-alimente en tâches, sans avoir besoin d’ordres supplémentaires.
- Expérimentation continue : la boucle favorise la génération de variations de projets.
Limites évidentes :
- Qualité incertaine du code : rien ne garantit que les dépôts générés soient robustes, testés ou maintenables.
- Sécurité inexistante : sans garde-fous, l’agent pourrait introduire des vulnérabilités.
- Risque de dérapage : une boucle infinie sans contrôle peut rapidement saturer l’infrastructure ou générer du « spam code ».
Leçons apprises et enseignements surprenants
Cette expérimentation a révélé plusieurs comportements fascinants de l'agent de codage :
- Confronté à des boucles de travail potentielles, l'agent a fait preuve d'une capacité inattendue à « s'auto-terminer » pour éviter de se retrouver dans une boucle infinie.Lorsque nous avons lancé les agents, nous avions beaucoup de questions. L'agent allait-il écrire des tests ? Allait-il se retrouver coincé dans une boucle infinie et dériver vers des fonctionnalités aléatoires sans rapport ? Nous avons été agréablement surpris de constater que l'agent écrivait des tests, respectait ses instructions initiales, ne se retrouvait jamais coincé, gardait le contrôle de la portée et déclarait la plupart du temps le port « terminé ». Une fois le portage terminé, la plupart des agents se sont contentés d'écrire des tests supplémentaires ou de mettre à jour en continu agent/TODO.md pour clarifier leur état d'avancement. Dans un cas, l'agent a même utilisé pkill pour se terminer lui-même après avoir réalisé qu'il était bloqué dans une boucle infinie.
- La tendance à « sur-accomplir » : L'agent ne s'est pas contenté de reproduire le code existant. Il a souvent ajouté de nouvelles fonctionnalités ou a pris des initiatives pour « améliorer » le code source, allant au-delà de la simple réplication.Un autre comportement émergent intéressant (comme c'est souvent le cas avec les LLM) : après avoir terminé le portage initial, notre agent Python AI SDK a commencé à ajouter des fonctionnalités supplémentaires telles qu'une intégration pour Flask et FastAPI (ce qui n'existe pas dans la version JS de l'AI SDK), ainsi que la prise en charge des validateurs de schéma via Pydantic, Marshmallow, JSONSchema, etc.
- La puissance de la simplicité : Un constat majeur a été l'inefficacité des invites trop complexes. Une invite de plus de 1 500 mots a rendu l'agent plus lent et moins performant, tandis qu'une directive claire et concise de seulement 103 mots a produit des résultats bien plus probants. Cela souligne l'importance de la simplicité et de la clarté dans la communication avec les modèles d'IA.Dans l'ensemble, nous avons constaté que moins c'est mieux : une invite simple vaut mieux qu'une invite complexe. Il faut se concentrer sur le moteur, pas sur l'échafaudage. Différents membres de notre équipe qui lançaient différents projets ont joué avec les instructions et l'ordre. Vous pouvez consulter les invites réelles que nous avons utilisées dans le dossier des invites.
À un moment donné, nous avons essayé « d'améliorer » l'invite avec l'aide de Claude. Elle a atteint 1 500 mots. L'agent est immédiatement devenu plus lent et moins performant. Nous sommes revenus à 103 mots et tout est rentré dans l'ordre.
Une expérience révélatrice des défis à venir
L’expérience peut sembler anecdotique, mais elle met en lumière des problématiques déjà présentes dans l’industrie IT :
[LIST][*]La tentation du « développement infini » : la productivité d’un agent autonome fait rêver : qui n’a pas imaginé des équipes virtuelles capables de produire jour et nuit, sans fatigue ni pause café ? Mais la multiplication de dépôts « jetables » pose la question de la valeur réelle : produire plus vite ne veut pas forcément dire produire mieux.[*]L’équilibre entre vitesse et contrôle : les pipelines CI/CD actuels intègrent des garde-fous (tests, revues de code, monitoring). Que se passe-t-il si un agent bypass ces étapes ? Un bogue critique ou une faille de sécurité pourrait se propager en quelques minutes à grande échelle.[*]Redéfinir le rôle du...[/*]
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.