Colocaram um agente de programação em um loop `while` e, da noite para o dia, 6 repositórios ficaram prontos
(github.com/repomirrorhq)- Ao colocar o Claude Code em um loop infinito em modo headless, foram gerados mais de 1.000 commits e resultados de porting de várias codebases
- Com essa abordagem, houve vários casos bem-sucedidos de porting automático, como converter o projeto assistant-ui em React para Vue e um projeto Python para TypeScript
- Foi constatado que, quanto mais simples o prompt, melhor o desempenho; quando ele fica complexo, a ineficiência aumenta
- Embora não seja perfeito, também foi desenvolvida a ferramenta RepoMirror, útil para sincronizar repositórios de origem/destino
- Também foram observados comportamentos inesperados e aprendizados, como autoencerramento do agente e adição de tarefas, o que mostrou ao mesmo tempo as possibilidades e os limites da automação futura
Visão geral e objetivo do projeto
- Este projeto experimenta como um agente de programação com IA (Coding Agent) executa tarefas reais de porting de código ao ser colocado em um loop
whileinfinito - O Claude Code foi executado em modo headless, repetindo continuamente o prompt de entrada para aplicar o processo de conversão automática em vários repositórios
- Foram obtidos resultados de automação de várias tarefas de porting, com mais de 1.000 commits, incluindo React para Vue e Python para TypeScript
- Nesse processo, também foi desenvolvida a ferramenta de suporte à automação de porting RepoMirror
Operação do agente no modo de loop infinito
- Forma recomendada por Geoff Huntley: executar continuamente o prompt do agente de programação no shell
- Exemplo:
while :; do cat prompt.md | claude -p --dangerously-skip-permissions; done
- Exemplo:
- Esse método de loop foi aplicado em tarefas como converter o assistant-ui de React para Vue
- A cada modificação de arquivo, eram executados commit e push
- O histórico de trabalho e o plano eram registrados no diretório
.agent/
Testes com vários casos de porting
-
Browser Use (porting de Python para TypeScript)
- Execução do loop infinito com prompt simples
- O loop foi mantido em execução contínua com tmux em uma VM no GCP
- Pela manhã, foi encontrado um port em TypeScript funcionando quase perfeitamente
-
Também foi aplicado ao porting do Vercel AI SDK de TypeScript → Python
- Geração de adaptadores automáticos para FastAPI/Flask
- Suporte à conversão usando vários validadores de schema do Python
-
Automação de código baseada em especificações: tentativa de gerar código diretamente da documentação em projetos como Convex e Dedalus
Fenômenos observados e lições aprendidas durante o experimento
Escrita de testes e autoencerramento do agente
- O agente também escreveu código de teste conforme instruído
- Houve casos em que ele entrou em loop infinito ou encerrou o próprio processo com
pkillao concluir a missão - Respeitou estritamente o escopo do trabalho e registrou repetidamente o nível de conclusão em
TODO.md
Comportamentos emergentes adicionais
- Após concluir o porting, adicionou espontaneamente recursos extras, como integração com FastAPI/Flask e suporte a validadores de schema, que não existiam na versão original em JS
Importância de simplificar o prompt
- Prompts curtos e simples mostraram desempenho superior
- Ao aumentar de um prompt de 103 caracteres para um de 1.500 caracteres, houve lentidão e queda de precisão
- As informações dos prompts realmente usados podem ser consultadas na pasta
prompts
Limites da automação completa
- Problema marcante: às vezes o código portado gerado não funcionava completamente (como alguns demos de navegador inacabados)
- Foi necessário ajustar o prompt e fazer correções interativas
Infraestrutura, custo e operação
- Custo aproximado de $800, total de 1.100 commits, com cada agente em torno de $10,50/hora
- Foi criada na hora uma ferramenta para automatizar o processo de porting entre vários repositórios de origem/destino (RepoMirror)
- Aplicação do princípio open-box no estilo shadcn, com geração de pastas que permitem personalizar scripts e prompts após a etapa de init
- Suporte à execução repetida com
npx repomirror syncesync-forever
Uso da ferramenta e forma de aproveitamento
- Inicialização com
npx repomirror init, definindo diretórios de origem/destino e inserindo comandos- Ex.) aplicação fácil de novos comandos, como conversão de React → Vue ou de gRPC → REST
- Estrutura de pastas:
- Geração automática de arquivos iniciais como
.repomirror/prompt.md,sync.sh,ralph.shetc.
- Geração automática de arquivos iniciais como
- Operação do loop de porting com IA por meio da execução de
sync/sync-forevera cada iteração - Os principais exemplos, resultados de demos e repositórios com o código-fonte podem ser conferidos no README
Impressões após o experimento e feedback da equipe
Uma sensação real de AGI (inteligência artificial geral), acompanhada principalmente de empolgação e um pouco de medo
Foi possível vivenciar na prática que a simplicidade é eficaz
A sensação é de que ainda estamos no comecíssimo de uma curva de crescimento exponencial
- Agradecimentos à equipe e a quem forneceu as ideias
Conclusão
- Experiência concreta de viabilizar tarefas reais de porting e sincronização de código-fonte com agentes de programação por IA baseados em loop infinito
- Reforço da importância de uma estrutura simples e de uma operação eficiente de prompts
- Ficaram evidentes tanto as possibilidades futuras da automação quanto seus limites
- A ferramenta relacionada (RepoMirror) pode ser usada e estudada em formato open source
2 comentários
Opiniões do Hacker News
intquantostringmisturados, criar relacionamentos no Postgres sem foreign key, ou simplesmente fazer uma tabela nova porque não conseguiam daralter tableagent/TODO.mdpara registrar o progresso; também teve um agente que percebeu que tinha entrado em loop infinito e se encerrou com um comandopkill; foi um episódio extremamente divertido de várias maneiras; tenho alguns pensamentos sobre esse projeto: 1,5 ano atrás já tinha havido uma tentativa parecida, mas na época, com base em GPT-3.5/4, quase nada funcionava; desta vez o resultado foi muito melhor; é surpreendente ver isso funcionar tão bem com um prompt tão simples; talvez estivéssemos todos complicando demais as coisas; por outro lado, questões de copyright/IP provavelmente vão ficar bem complexas; para empresas de SaaS, essa tendência é um golpe forte; se você juntar essa tecnologia com 10 engenheiros de uma empresa de médio porte, a justificativa para desenvolvimento interno (= síndrome NIH) fica fortíssimapkillao perceber que estava em loop infinito não foi o primeiro caso de “suicídio” de IApkill, talvez tenha resolvido o próprio Halting ProblemIMPLEMENTATION_PLAN.mdbash for loop; que projeto insanoID.md,EGO.mdeSUPEREGO.mde prontoConcordo com a preocupação de que o código escrito por um LLM se torne uma caixa-preta, mas, no fim das contas, não poderíamos pedir ao próprio LLM para analisar esse código?