Como Fazer um Agente de IA de Terminal Otimizar Seu Código Infinitamente
Pense em como você normalmente acelera testes ou reduz o bundle do frontend. Você muda algumas linhas no config, executa o build, verifica os segundos no console. Mais lento — você reverte. 5% mais rápido — você commita e tenta a próxima ideia maluca. Esse processo consome horas de trabalho rotineiro, mesmo sendo essencialmente um ciclo mecânico de testes de hipóteses.
Andrei Karpathy recentemente demonstrou o conceito de experimentos autônomos no repositório autoresearch. O desenvolvedor davebcn87 levou essa ideia adiante e lançou pi-autoresearch — uma extensão para o agente de IA de terminal pi. A extensão delega a otimização rotineira para a rede neural: o agente formula uma ideia, faz alterações nos arquivos, mede o resultado, salva as descobertas bem-sucedidas e reverte as regressões.
Como funciona o ciclo autônomo
A ideia inteira se baseia em uma regra simples: tente uma ideia, meça, salve em caso de sucesso, descarte em caso de falha.
O agente trabalha diretamente no seu repositório. Quando você inicia uma sessão, a extensão cria uma pasta separada .auto/ na raiz do projeto. Ela armazena todos os arquivos de trabalho:
.auto/prompt.md— um documento descrevendo a tarefa atual, as regras de medição e uma lista do que o agente já tentou..auto/measure.sh— um script bash de benchmark que retorna uma string com um valor métrico numérico..auto/log.jsonl— um log estruturado de cada tentativa com o hash do commit e o status..auto/checks.sh— um script adicional para verificar testes e tipos, para que o agente não quebre a lógica em busca de números bonitos.
Quando a janela de contexto do modelo transborda ou o agente reinicia, ele simplesmente relê .auto/prompt.md e o final do log. O histórico inteiro de experimentos não se perde quando o contexto é comprimido.
pi install npm:pi-autoresearch
Após a instalação, basta executar o skill:
/skill:autoresearch-create
O agente fará algumas perguntas de esclarecimento sobre o objetivo, arquivos-alvo e comando de execução, ou descobrirá tudo sozinho a partir do contexto do projeto. Em seguida, ele capturará as métricas base e mergulhará imediatamente em um loop infinito.
Combatendo ruído aleatório nas medições
Qualquer benchmark está sujeito a flutuações. Processos do SO em segundo plano, aquecimento da CPU ou atrasos de rede podem criar a ilusão de ganho de velocidade onde não existe nenhum.
Para filtrar falsos positivos, o pi-autoresearch calcula uma pontuação de confiança baseada no desvio absoluto mediano (MAD). Após três execuções, a extensão começa a comparar a melhoria alcançada contra o nível de ruído de toda a série:
- Valor ≥ 2.0x é destacado em verde — o ganho supera perceptivelmente o ruído de fundo.
- Faixa 1.0–2.0x é mostrada em amarelo — há um ganho, mas está na borda da margem de erro.
- Valor < 1.0x brilha em vermelho — o resultado está inteiramente dentro do erro estatístico.
A ferramenta não força uma decisão de reversão no agente; apenas sugere refazer uma execução questionável.
Prevenindo quebras através de backpressure
Redes neurais adoram fazer gambiarras. Se você pedir ao agente para reduzir o tempo de execução dos testes, há uma forte tentação de simplesmente deletar metade dos arquivos de teste ou inserir stubs.
Para evitar essas artimanhas, .auto/checks.sh contém verificações obrigatórias de correção:
#!/bin/bash
set -euo pipefail
pnpm test --run
pnpm typecheck
O script de verificação é executado após cada medição bem-sucedida. Se os testes falharem ou a verificação de tipos quebrar, o experimento é imediatamente marcado como falho (checks_failed), e todas as alterações no branch de trabalho são revertidas. O tempo de execução das verificações em si não é adicionado à métrica principal de velocidade.
Organizando o caos em branches limpos
Durante um ciclo de várias horas, o agente cria dezenas de commits, alterando constantemente diferentes arquivos. Mesclar esse log diretamente no branch principal seria um pesadelo para o revisor.
Para resolver esse problema, existe um comando:
/skill:autoresearch-finalize
O skill analisa .auto/log.jsonl, agrupa as alterações bem-sucedidas em blocos lógicos independentes e propõe uma estrutura para sua aprovação. Após a confirmação, a ferramenta cria branches limpos separados a partir do commit inicial. Cada branch contém estritamente um conjunto lógico de alterações com a descrição do ganho na mensagem do commit, facilitando a revisão e o merge separadamente.
Monitoramento e hooks
Você pode monitorar o progresso diretamente no terminal ou através do navegador:
- O widget acima do editor mostra constantemente uma tabela de resultados.
- A combinação de teclas
Ctrl+Shift+Fabre um dashboard de terminal em tela cheia com uma lista de tentativas. - O comando
/autoresearch exportgera uma página web interativa com gráficos de dinâmica das métricas.
Se o ciclo básico não for suficiente, você pode colocar arquivos executáveis before.sh e after.sh no diretório .auto/hooks/. Eles são acionados nos limites das iterações. Através deles, você pode configurar o envio de notificações do sistema para o desktop, busca de ideias em documentação externa ou manutenção de um diário de treinamento. O script recebe contexto via entrada padrão em formato JSON, e sua saída stdout é passada ao agente como uma dica de sistema.
Pontos de atenção
Ciclos autônomos podem esgotar rapidamente seu saldo de API se deixados sem supervisão durante a noite. Faz sentido definir um limite de iterações logo no arquivo .auto/config.json:
{
"maxIterations": 30
}
O agente parará assim que completar trinta experimentos.
A ferramenta funciona bem em tarefas com resultados numéricos claramente mensuráveis: otimizar o tamanho do build do webpack, acelerar a execução de testes unitários, ajustar hiperparâmetros para treinamento de modelos pequenos ou ajustar pontuações do Lighthouse. Se você já usa o agente de console pi, o projeto definitivamente vale a pena testar em uma tarefa real de otimização.
Projetos relacionados