J’ai placé un agent de code dans une boucle `while` et 6 dépôts ont été finalisés en une nuit
(github.com/repomirrorhq)- En plaçant Claude Code en mode headless dans une boucle infinie, cela a généré plus de 1 000 commits ainsi que le portage de plusieurs codebases
- Cette méthode a permis de réussir divers portages automatiques, comme le projet React assistant-ui vers Vue, ou un projet Python vers TypeScript
- Il a été constaté que plus le prompt reste simple, meilleures sont les performances, tandis que la complexité accroît l’inefficacité
- Même si tout n’est pas parfait, l’auteur a aussi développé l’outil RepoMirror, utile pour synchroniser les dépôts source et cible
- Des comportements inattendus ont également été observés, comme l’auto-interruption de l’agent IA ou l’ajout de tâches, ce qui a permis de mieux percevoir à la fois les possibilités et les limites de l’automatisation à venir
Aperçu du projet et objectif
- Ce projet expérimente la manière dont un agent IA de code (Coding Agent) exécute un véritable travail de portage de code lorsqu’il est placé dans une boucle
whileinfinie - Claude Code est utilisé en mode headless, avec répétition continue du prompt d’entrée, afin d’appliquer un processus de conversion automatique à divers dépôts
- Plus de 1 000 commits ont été produits, avec l’automatisation de plusieurs tâches de portage, comme React vers Vue ou Python vers TypeScript
- Au cours du processus, l’outil d’aide à l’automatisation du portage RepoMirror a également été développé
Exploitation de l’agent en boucle infinie
- Méthode recommandée par Geoff Huntley consistant à exécuter en continu le prompt de l’agent de code dans le shell
- Exemple :
while :; do cat prompt.md | claude -p --dangerously-skip-permissions; done
- Exemple :
- Cette approche en boucle a été appliquée à des tâches comme la conversion de assistant-ui de React vers Vue
- Exécution d’un commit et d’un push à chaque modification de fichier
- Enregistrement de l’historique de travail et du plan dans le répertoire
.agent/
Expérimentations sur différents cas de portage
-
Browser Use (portage de Python vers TypeScript)
- Exécution d’une boucle infinie avec un prompt simple
- Boucle maintenue en exécution via tmux sur une VM GCP
- Le matin, vérification d’un port TypeScript presque parfaitement fonctionnel
-
Application également au portage du Vercel AI SDK de TypeScript vers Python
- Création d’adaptateurs automatiques FastAPI/Flask
- Prise en charge de la conversion vers divers validateurs de schéma Python
-
Automatisation de code fondée sur des spécifications : tentative de génération directe de code à partir de la documentation pour des projets comme Convex et Dedalus
Phénomènes observés et enseignements tirés de l’expérience
Écriture des tests et auto-interruption de l’agent
- L’agent écrit aussi du code de test conformément aux instructions
- Il est arrivé qu’il tombe dans une boucle infinie ou qu’il termine lui-même le processus avec
pkillune fois la mission accomplie - Respect strict du périmètre de travail, avec enregistrement répété du niveau d’avancement dans
TODO.md
Autres comportements émergents
- Après la fin du portage, ajout spontané de fonctionnalités annexes, comme l’intégration FastAPI/Flask ou la prise en charge de validateurs de schéma, absentes de la version JS d’origine
Importance de la simplification des prompts
- Les prompts courts et simples offrent de meilleures performances
- En passant d’un prompt de 103 caractères à un prompt de 1 500 caractères, l’exécution ralentit et la précision baisse
- Les prompts réellement utilisés sont disponibles dans le dossier
prompts
Limites de l’automatisation complète
- Problème notable : génération fréquente de code porté qui ne fonctionne pas entièrement (par exemple certaines démos navigateur inachevées)
- Nécessité d’ajuster les prompts et d’apporter des corrections interactives
Infrastructure, coûts et exploitation
- Coût estimé à environ 800 $, pour un total de 1 100 commits, avec un niveau d’environ 10,50 $/heure par agent
- Création à la volée d’un outil d’automatisation du portage entre plusieurs dépôts source/cible (RepoMirror)
- Application du principe open box dans le style shadcn, avec création de dossiers personnalisables pour scripts et prompts après l’étape d’initialisation
- Prise en charge d’exécutions répétées via
npx repomirror syncetsync-forever
Utilisation de l’outil et modes d’exploitation
- Initialisation via
npx repomirror initen spécifiant les répertoires source/cible et en saisissant les commandes- ex) application facile de nouvelles consignes comme React → Vue ou gRPC → REST
- Structure des dossiers :
- génération automatique de fichiers initiaux comme
.repomirror/prompt.md,sync.sh,ralph.sh, etc.
- génération automatique de fichiers initiaux comme
- Exploitation de la boucle de portage IA à chaque itération via l’exécution de
sync/sync-forever - Les principaux exemples, résultats de démonstration et dépôts du code source sont consultables dans le README
Retour d’expérience après l’expérimentation et réactions de l’équipe
L’AGI (intelligence artificielle générale) a semblé tangible, avec surtout de l’enthousiasme et un peu de crainte
Il a été possible de constater directement que la simplicité est efficace
La sensation est d’être aujourd’hui au tout début de la phase initiale d’une courbe de croissance exponentielle
- Remerciements adressés aux membres de l’équipe et aux personnes ayant fourni les idées
Conclusion
- Expérience concrète de portage et de synchronisation de code source avec un agent IA de code reposant sur une boucle infinie
- Mise en avant de l’importance d’une structure simple et d’une gestion efficace des prompts
- Mise en lumière à la fois du potentiel futur de l’automatisation et de ses limites
- L’outil associé, RepoMirror, peut être utilisé et étudié en open source
2 commentaires
Avis sur Hacker News
int, tantôt enstringdans Mongodb, créer des relations sans foreign key dans Postgres, ou carrément créer une nouvelle table parce qu’on ne peut pas faire dealter table.agent/TODO.mdpour laisser une trace de leur progression. L’un des agents s’est même rendu compte qu’il était tombé dans une boucle infinie et s’est arrêté lui-même avec la commandepkill. C’est une histoire fascinante à bien des égards. J’ai quelques réflexions sur ce projet : il y avait eu une tentative similaire il y a 1,5 an, mais à l’époque, avec GPT-3.5/4, cela ne fonctionnait presque pas ; cette fois, les résultats sont bien meilleurs. Je trouve étonnant que cela marche aussi bien avec des prompts aussi simples. Peut-être que nous compliquions tous les choses plus qu’il ne fallait. En revanche, les questions de copyright/IP risquent de devenir sérieusement complexes. Pour les éditeurs SaaS, cette évolution fait mal. Avec cette technologie plus 10 ingénieurs dans une entreprise de taille intermédiaire, le développement interne (= syndrome NIH) gagne une justification très solide.pkillen boucle infinie n’est pas le premier cas de « suicide » d’une IA.pkillaurait peut-être résolu le Halting Problem.IMPLEMENTATION_PLAN.md.foren bash. Projet complètement fou.ID.md,EGO.mdetSUPEREGO.md, plaisanterie oblige.Je suis d’accord avec l’inquiétude selon laquelle le code écrit par un LLM devient une boîte noire, mais au final, ne pourrait-on pas confier à ce même LLM l’analyse de ce code ?