Há um padrão em que quase todo mundo cai com agentes de programação, e ele mina em silêncio o sentido inteiro de usar um. O agente produz uma mudança e você faz a pergunta óbvia: "Isso funciona?". O agente diz que sim. Você acredita, porque soa confiante e em geral está certo. E de vez em quando ele está confiante e completamente errado — e você descobre em produção.
O problema não é o agente mentir. O problema é a pergunta.
Por que "isso funciona?" é a pergunta errada
Quando você pergunta a um agente se a própria mudança dele funciona, você está pedindo que ele avalie a saída dele com exatamente o mesmo raciocínio que a produziu. Ele corrige a própria prova com a mesma caneta. Se ele deixou passar um caso extremo ao escrever o código, vai deixar passar o mesmo caso extremo ao julgá-lo, porque nada de novo entrou em cena: é o mesmo modelo, o mesmo contexto, os mesmos pontos cegos.
Pior ainda, modelos de linguagem tendem a concordar. Formule a pergunta como "isso trata e-mails nulos corretamente, né?" e você não pediu uma avaliação: você ofereceu uma conclusão e convidou o agente a confirmá-la. Ele geralmente vai. O que você recebe de volta não é verificação. É um eco muito fluente da sua própria esperança.
Peça provas em vez disso
A correção é pequena e muda tudo: pare de pedir que o agente afirme que a mudança funciona e comece a pedir que ele mostre. Uma prova é um artefato que você mesmo pode conferir, produzido pelo sistema e não pela opinião que o agente tem do sistema. Nem toda prova vale o mesmo; há uma hierarquia aproximada:
- A prova de execução é a mais forte: o agente de fato rodou o código e te mostra a saída real — o teste que passou, o comando que retornou o que deveria.
- A prova de antes e depois é quase tão boa: uma mudança concreta no estado observável. A contagem de consultas foi de 47 para 2; a requisição que falhava agora retorna 200.
- Um teste que o agente escreveu é mais fraco, porque o mesmo ponto cego que deixou passar o bug pode deixá-lo passar no teste — mas um teste que você pode ler e rodar ainda é muito melhor que uma afirmação.
- Uma explicação verbal é a mais fraca. Às vezes é tudo o que dá para conseguir, mas "este é o meu raciocínio" não é evidência; é aquilo que a evidência deveria conferir.
A jogada, em todos os casos, é a mesma: transformar a pergunta de sim ou não num pedido de algo observável.
Como isso se parece
Em vez de "essa migração vai tratar e-mails nulos?", peça para ele inserir uma linha com e-mail nulo, rodar a migração e te mostrar a saída. Em vez de "isso corrigiu a consulta N+1?", peça para ele adicionar log de consultas, bater no endpoint e te mostrar a contagem de antes e depois. Em vez de "o rate limiter reinicia?", peça para ele atingir o limite, esperar, tentar de novo e te mostrar a requisição tendo sucesso. Em cada caso você trocou uma afirmação que teria de acreditar por um resultado que pode ler.
Por isso nosso agente vive num sandbox
Provas só funcionam se o agente puder de fato executar coisas, e isso é uma decisão de projeto, não um detalhe tardio. Cada execução do TaskGoblin acontece num sandbox com o repositório clonado e o toolchain disponível, então o agente não raciocina sobre o que o código faria: ele pode rodar os testes, executar os comandos e observar o resultado real. Quando ele revisa um merge request, os apontamentos apontam para comportamento concreto, e quando você responde @taskgoblin fix, a mudança é uma que ele pode exercitar em vez de apenas defender.
Por isso também um bom ambiente de desenvolvimento rende mais do que nunca. Um agente que consegue subir os seus serviços, carregar dados de teste e rodar a sua suíte produz provas reais; um agente que só consegue ler o código só consegue te dar uma opinião. Quanto mais executável for o seu projeto, mais da saída do agente você poderá verificar em vez de acreditar.
A versão de uma frase
Não pergunte a um agente se o trabalho dele está correto. Peça para ele te mostrar que está — e prefira as formas de mostrar que você mesmo consegue conferir. O agente que executa o código e te entrega a saída faz a única coisa que o agente que dá fé do código nunca poderá: te dar algo em que acreditar que não seja a própria confiança dele.