Desenvolvimento de Software Apoiado por IA — 2026.4

Aula 7
Loop engineering: o agente que ninguém chamou

👨‍🏫 Prof. Gustavo Pinto 🏛️ UFPA 📅 13 de outubro de 2026 🕐 20h

Quatro camadas

CamadaUnidadeArtefatos
PromptUma instruçãoPrompts, templates
Contexto (aula 3)Uma chamada ao modeloAGENTS.md, CLAUDE.md, regras
Harness (aulas 2, 4, 6)Uma execução do agenteSkills, subagentes, hooks, MCP
LoopExecuções recorrentesGatilhos, condições de parada, arquivo de estado, orçamento, verificador

Em vez de dar o próximo prompt, o desenvolvedor projeta o sistema que dá o próximo prompt: dispara o agente por agenda ou evento, e para quando uma condição verificável por máquina é atendida.

O loop mais simples que existe

while :; do cat PROMPT.md | claude -p ; done

A técnica “Ralph Wiggum”, publicada por Geoffrey Huntley em julho de 2025. Em português: entregue o conteúdo de PROMPT.md ao Claude, espere ele terminar e entregue de novo. Para sempre.

Um loop para copiar e colar

Na pasta da aplicação de vocês, crie um TODO.md com tarefas pequenas:

- [ ] Validar o formato do e-mail no cadastro
- [ ] Escrever um teste para a função de login
- [ ] Traduzir as mensagens de erro para português

E rode no terminal:

for i in 1 2 3 4 5; do
  grep -q -- "- \[ \]" TODO.md || break   # acabaram as tarefas? para
  claude -p "Leia TODO.md. Faça só o primeiro item sem [x] e marque-o com [x]." \
    --permission-mode acceptEdits
done

Anatomia de um loop

Gatilho issue, teste quebrado, horário Agente uma volta, contexto limpo Verificador testes, outro agente falhou, ainda há orçamento: nova volta passou Parou abre PR para revisão esgotou ou zona proibida Escalou rótulo precisa-humano loop/ESTADO.md o que já foi tentado, quantas voltas, quanto custou

Toda volta termina de um de três jeitos: passou, tenta de novo ou escalou. Um loop sem a terceira saída roda até o dinheiro acabar.

1. O gatilho: agenda ou evento

Agenda

Um despertador: roda num horário fixo, toda noite ou toda segunda de manhã. Ex.: revisar as issues abertas no dia.

Evento

Algo aconteceu no repositório. Alguém abriu uma issue, um teste quebrou, um deploy falhou.

Discussão: que gatilho usar?

Que tarefa da aplicação de vocês poderia rodar sozinha, sem ninguém pedir? E o que dispararia ela: um horário ou um evento?

Em qualquer caso, o prompt fica num arquivo do repositório (loop/PROMPT.md). Mudar o comportamento do loop é editar esse arquivo, e a mudança passa por revisão como qualquer código.

2. O critério de parada

OpiniãoVerificável por máquina
“Corrija o bug da issue”Existe um teste novo que falha no commit anterior e passa neste
“Deixe o código limpo”O lint roda sem apontar nenhum erro
“Não quebre nada”Todos os testes passam, e nenhum teste foi apagado ou desligado

Quem decide que terminou?

Toda vez que o agente diz “terminei”, um porteiro confere antes de deixar ele parar:

Os testes passam?

Pode parar. O trabalho vai para revisão.

Já foram três tentativas?

Para e chama um humano, contando o que foi tentado.

Nenhum dos dois?

Não pode parar. O porteiro devolve o erro e o agente tenta de novo.

Por que não basta perguntar ao próprio agente se ele terminou?

3. O ponto de escalação

O loop para e chama alguém quando:

Esgotou o orçamento

N voltas, N minutos ou N tokens sem passar no verificador.

Não houve progresso

Duas voltas seguidas falharam pelo mesmo motivo. A terceira vai falhar também.

Tocou zona proibida

Migração de banco, autenticação, .github/workflows/, segredos. O loop propõe, não aplica.

A entrada é ambígua

A issue admite duas leituras. Escolher uma é decisão de produto, não de código.

Escalar bem é deixar o caso pronto para o humano: o que foi tentado, por que falhou, onde parou. Escalar a cada volta é só notificação, e notificação demais ninguém lê.

O que dá errado

Exercício: um loop na aplicação da AP1

Projetem um loop para a aplicação de vocês e rodem uma versão manual dele, fazendo o papel do gatilho e do porteiro.

Anotem cada volta em loop/ESTADO.md: o que o agente fez, se passou e por quê. Registrem em diario/2026-10-13.md onde o loop parou e o que vocês automatizariam primeiro. Commit no dia.