| Camada | Unidade | Artefatos |
|---|---|---|
| Prompt | Uma instrução | Prompts, templates |
| Contexto (aula 3) | Uma chamada ao modelo | AGENTS.md, CLAUDE.md, regras |
| Harness (aulas 2, 4, 6) | Uma execução do agente | Skills, subagentes, hooks, MCP |
| Loop | Execuções recorrentes | Gatilhos, 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.
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.
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
TODO.md: é por ele que a volta seguinte sabe onde continuar[x], ou depois de cinco voltas, o que vier primeiroToda 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.
Um despertador: roda num horário fixo, toda noite ou toda segunda de manhã. Ex.: revisar as issues abertas no dia.
Algo aconteceu no repositório. Alguém abriu uma issue, um teste quebrou, um deploy falhou.
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.
| Opinião | Verificá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 |
SPEC.md da aula 5. Spec sem critério verificável dá loop sem paradaToda vez que o agente diz “terminei”, um porteiro confere antes de deixar ele parar:
Pode parar. O trabalho vai para revisão.
Para e chama um humano, contando o que foi tentado.
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?
O loop para e chama alguém quando:
N voltas, N minutos ou N tokens sem passar no verificador.
Duas voltas seguidas falharam pelo mesmo motivo. A terceira vai falhar também.
Migração de banco, autenticação, .github/workflows/, segredos. O loop propõe, não aplica.
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ê.
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.
loop/PROMPT.md e rodem o agente com ele até três vezes, cada volta numa sessão nova. Depois de cada volta, vocês são o porteiro: rodem os testes e decidam se para, tenta de novo ou escalaAnotem 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.