Templates de Prompt para Goals e Loops

Você parou de ser a pessoa que fica apertando "continuar". Agora você escreve o loop, e ele conduz a máquina.

Só que tem um detalhe. A máquina só vai longe sozinha se você souber dizer, com precisão, duas coisas: o que ela tem que alcançar, e como ela vai saber, sem te perguntar, que alcançou.

É isso que separa um agente que entrega de um que roda horas e devolve lixo. Não é o comando bonito. É o critério de pronto.

Estes são 9 prompts prontos pra isso. Você copia, troca os campos pelo seu caso, e cola. Cada um já vem com a parte que quase todo mundo esquece: o jeito de provar que terminou, com evidência, não com um "confia que ficou bom".

São dois tipos, pra duas situações:

  • Goal: você dá um objetivo e uma condição de parada, e o agente trabalha até a condição valer. Um avaliador separado confere a cada rodada.

  • Loop: o agente repete um prompt, num intervalo fixo ou no ritmo que ele mesmo escolhe, até a fila acabar ou você mandar parar.

Onde funcionam: os goals rodam no Claude Code (/goal) e no Codex (modo Goal). Os loops são só do Claude Code (/loop e /goal); o Codex não tem loop, então nele use sempre a Categoria 1.

Todos seguem a mesma estrutura de 4 blocos. Você entende ela em 30 segundos na próxima seção.

Como usar

Copie qualquer template daqui e monte um prompt sob medida pro seu caso. Dois jeitos:

  1. Você preenche: troque cada {campo entre chaves} pelo seu valor. Não deixe nenhum campo genérico. Um prompt que serviria pra dezenas de casos diferentes está vago demais; deixe tão específico que só sirva pro SEU caso.

  2. O agente preenche: cole o template no Claude Code ou no Codex com uma linha antes: "Preencha este template para o meu caso: {descreva o caso em 2-3 frases}. Me devolva o prompt pronto e me pergunte o que estiver faltando." O próprio agente vira o seu montador de prompt.

Os 4 blocos, traduzidos. Eles são as etiquetas que aparecem dentro de cada template:

Bloco

O que é

Exemplo

GOAL

O objetivo: verbo + resultado que dá pra ver

"Adicionar a opção --json ao leitor de argumentos, cobrindo entrada vazia e malformada"

CONTEXT

Onde mexer e o que ler antes

"olhe o fluxo de login em src/auth/"

CONSTRAINTS

O que NÃO fazer

"não mexa na parte pública do código; sem bibliotecas novas"

DONE WHEN

Pronto quando (sempre um comando que dá pra rodar)

"rode pytest tests/auth e ele termina com exit 0, ou seja, sem erro"

A regra de ouro da especificidade. Toda versão boa de um prompt adiciona estes 4 itens sobre a versão vaga:

Adicione

Vai no bloco

Exemplo

(a) Onde fica

CONTEXT

"olhe o fluxo de login em src/auth/"

(b) O cenário, a situação-limite

GOAL

"a falha que acontece depois que a sessão expira"

(c) Um critério de pronto que é sim ou não

DONE WHEN

"rode pytest tests/auth e termina sem erro"

(d) Uma restrição

CONSTRAINTS

"resolva a causa de verdade, não esconda o erro; sem bibliotecas novas"

Onde colocar regra que vale pro projeto inteiro: não vai no prompt. Vai num arquivo de regras do projeto (CLAUDE.md no Claude, AGENTS.md no Codex). Encher o prompt de regra que sempre vale só dilui a instrução do momento.

Um limite importante: o que você cola no /goal do Claude Code precisa caber em 4000 caracteres (acima disso o comando recusa). Estourou? Corte a prosa, aponte para arquivos em vez de colar o conteúdo deles, ou quebre em prompts menores numerados. E guarde essa fila num arquivo, não só no chat.

CATEGORIA 1 — GOALS (a especificação da tarefa)

Funciona igual no Claude Code e no Codex. Estrutura fixa: GOAL / CONTEXT / CONSTRAINTS / DONE WHEN.

Prompt 1 — Tarefa padrão (a estrutura de 4 blocos)

Para qualquer tarefa de escopo claro: uma funcionalidade pequena, um ajuste, uma reorganização pontual de código.

GOAL: {verbo + resultado observável + cenário que importa}.
      (ex.: "Adicionar flag --json ao parser, cobrindo input vazio e input malformado"
       — nunca "melhorar o parser")

CONTEXT: Trabalhe em {arquivo(s)/diretório exatos}.
         Leia ANTES de editar: {arquivo-exemplo} — siga esse padrão.
         {se houver: erro/log/spec relevante, colado ou referenciado}

CONSTRAINTS:
- Não altere {API pública / schema / arquivos fora do escopo}.
- Não adicione dependências além das já usadas no projeto.
- Trate a causa raiz — não suprima erro, não desative teste para passar.
- {constraint específica do seu domínio}

DONE WHEN:
- {comando exato: npm test / pytest tests/x -v / npm run build} sai com exit 0.
- Rode o check e ME MOSTRE A SAÍDA — saída colada, não "feito".

Por que funciona: cada bloco corta um jeito de dar errado. O objetivo com verbo + resultado mata o adjetivo vago; o contexto mandando "leia antes de editar" garante que o padrão é seguido, não inventado; as restrições barram o escopo inflando sem controle e o costume de esconder o erro; o "pronto quando" com comando e código de saída fecha o ciclo sem você precisar ser o revisor.

Prompt 2 — Correção de bug (atacar a causa, não esconder o sintoma)

GOAL: Corrigir o bug: {sintoma específico — o que acontece, quando, para quem}.

CONTEXT: Erro exato (não resuma, use isto):
{cole o erro/stack trace completo}
Onde olhar primeiro: {diretório/módulo}, especialmente {função/fluxo}.
Como reproduzir: {passos ou comando}.

CONSTRAINTS:
- Corrija a CAUSA RAIZ. Proibido: suprimir o erro, capturar exceção genérica,
  ajustar o teste para passar, adicionar retry que mascara o problema.
- Mudança mínima: não refatore nada além do necessário para o fix.

DONE WHEN:
1. Existe um teste novo que FALHAVA antes do fix (mostre-o falhando).
2. O teste passa após o fix.
3. {suite completa: comando exato} sai com exit 0 — nenhum outro teste quebrou.
Cole o output dos 3 passos como evidência.

Por que funciona: o teste que falha primeiro torna o bug reproduzível e o conserto verificável; a lista de táticas proibidas bloqueia as 4 formas mais comuns de a IA trapacear o teste em vez de resolver o problema; os 3 passos numerados do "pronto quando" são sim ou não: ou tem evidência, ou não terminou.

Prompt 3 — Funcionalidade grande (entrevista primeiro, depois a especificação)

Use ANTES de implementar qualquer coisa com mais de ~1h de trabalho. Duas sessões obrigatórias.

SESSÃO 1 (spec — só conversa, nenhum código):
Quero construir {descrição breve}. Me entreviste em detalhe.
Pergunte sobre implementação técnica, UX, edge cases, riscos e tradeoffs.
Não pergunte o óbvio — cave nas partes difíceis que eu posso não ter considerado.
Continue até cobrirmos tudo, depois escreva a spec completa em SPEC.md contendo:
- Objetivos E não-objetivos (o que está explicitamente FORA de escopo)
- Requisitos funcionais + constraints (libs proibidas, padrões a manter)
- Arquivos e interfaces envolvidos (a spec deve ser autocontida:
  quem ler SÓ a spec consegue implementar)
- Exemplos concretos de input/output
- Critérios de aceite: 1 por linha, cada um verificável por teste ou comando
- Verificação end-to-end final que PROVA que a feature funciona

SESSÃO 2 (execução — sessão NOVA, contexto limpo):
Leia SPEC.md POR INTEIRO antes de qualquer edição.
Implemente exatamente o que está na spec — nada além (não-objetivos são vetos).
DONE WHEN: todos os critérios de aceite passam + a verificação end-to-end
da spec executa com sucesso. Rode e cole o output de cada critério.

No prompt acima, "spec" é a especificação: um documento (o arquivo SPEC.md) que descreve o que vai ser construído. "Edge cases" são os casos extremos (entrada vazia, valor gigante, sessão expirada). "Não-objetivos" é o que você decide deixar de fora de propósito.

Por que funciona: a entrevista passa a tarefa de extrair os requisitos pro agente (ele pergunta o que você não pensou); a especificação que se basta, com os não-objetivos, vira um contrato, e os não-objetivos funcionam como vetos contra o escopo inflar; rodar numa sessão limpa evita que a conversa contamine a implementação.

Prompt 4 — Goal mensurável (Claude /goal e Codex modo Goal)

A fórmula: ação + estado final que um avaliador de fora consegue checar sem te perguntar nada.

/goal {ação no codebase}. {Condição de término: comando exato + exit code ou threshold}.

Exemplos preenchidos (repare: sempre comando + critério, nunca adjetivo):

/goal Migrar src/ de JavaScript para TypeScript. `npx tsc --noEmit --strict` sai com exit 0 e o diff não contém nenhum `any` explícito.
/goal Eliminar os warnings de lint. `npm run lint` sai com exit 0.
/goal Subir a cobertura de payments/ para >= 80%. `npm run coverage` reporta >= 80% no módulo e todos os testes passam.

Regras do bloco:

  • Teto duro de 4000 caracteres no /goal do Claude Code. Não chute, conte: node -e "console.log(require('fs').readFileSync('goal.txt','utf8').length)".

  • Condição com 2 pernas quando der: o comando passa E não há gambiarra na mudança de código. Uma perna só é fácil de burlar.

  • Regra que sempre vale NÃO entra aqui. Aponte pro arquivo de regras ("respeite as restrições do CLAUDE.md" já é automático; não repita).

Por que funciona: nos dois programas, um avaliador separado re-confere a condição a cada rodada. Se a condição não der pra medir por comando, o avaliador não tem o que checar e o goal vira "opinião do modelo". A segunda perna ("sem any na mudança") fecha o atalho óbvio.

Prompt 5 — Revisão crítica (quem faz não é quem audita)

Rode num agente separado, ou numa sessão nova, diferente de quem implementou. Coisa importante ou entregável criativo: este prompt é obrigatório, não opcional.

Use um subagente (ou sessão nova) para revisar o diff de {feature} contra {SPEC.md / plano / critérios}.
O revisor deve verificar:
- todo requisito listado está implementado (cite requisito → arquivo:linha que o cumpre)
- os edge cases listados têm teste correspondente
- nada FORA do escopo declarado mudou (liste qualquer arquivo tocado que a spec não prevê)
Reporte GAPS DE CORREÇÃO, não preferências de estilo.
Sinalize apenas o que afeta correção ou os requisitos declarados — gap apontado
sem requisito correspondente será descartado.
Formato do veredito: APROVADO ou lista numerada de gaps com requisito + evidência.

Por que funciona: um contexto novo não herda os vícios de quem escreveu (um "pronto, terminei" auto-relatado já passou com alegação inventada dentro, caso real). Exigir que cada apontamento cite requisito e o arquivo:linha que o cumpre torna o veredito auditável; a regra "apontamento sem requisito é descartado" evita que o revisor invente problema só pra parecer útil.

CATEGORIA 2 — LOOPS (comandos nativos /goal e /loop do Claude Code)

Só os comandos nativos. /goal = continue até a condição valer (um avaliador separado confere a cada rodada). /loop = repita um prompt num intervalo fixo, ou no ritmo que o próprio agente escolhe. O Codex não tem nada equivalente; nele, use o Prompt 4.

Prompt 6 — /goal contínuo ("não pare até terminar")

Para trabalho longo, de condição única, dentro da sessão, sem supervisão. O texto vai INTEIRO no /goal (teto de 4000 caracteres).

/goal {condição binária verificável: comando + exit/threshold}. Trabalhe item a item em {fonte dos itens: lista/diretório/arquivo}: conclua e verifique UM item antes de começar o próximo. Constraints: {o que não tocar}; causa raiz sempre, nunca suprimir erro. Se travar num item: registre o bloqueio em {progress.txt} com o motivo, PULE para o próximo e liste os bloqueios no final — não invente solução, não declare concluído com bloqueio aberto.

Exemplo preenchido:

/goal `npm test` sai com exit 0 em todos os arquivos de tests/legacy/ e nenhum teste está marcado como skip. Trabalhe arquivo por arquivo: corrija, rode o teste do arquivo, só então avance. Constraints: não altere o código de produção em src/core/; causa raiz sempre. Se um teste depender de serviço externo indisponível: registre em progress.txt, pule, e liste no final — não marque skip para passar.

Por que funciona: a condição é re-conferida por um avaliador separado a cada rodada, então o agente não consegue "se dar alta" sozinho. "Um item por vez" mantém cada passo verificável. O combinado de registrar o bloqueio num arquivo fecha os dois erros clássicos: inventar progresso pra satisfazer a condição, ou esconder o bloqueio (marcar como pulado) só pro comando passar.

Prompt 7 — /loop com intervalo fixo (repetir de tempos em tempos)

Para vigiar ou repetir algo num ritmo conhecido: a esteira de testes do projeto, uma fila, um deploy, uma rotina de manutenção. O prompt roda DO ZERO a cada disparo.

/loop {intervalo: 5m / 30m / 1h} {prompt idempotente e autossuficiente, com os 3 ramos: estado-bom / estado-ruim / não-sei}

Exemplos preenchidos:

/loop 10m Verifique o status do CI no branch {branch} via `gh run list --branch {branch} -L 1`. Se o último run FALHOU: leia o log com `gh run view --log-failed`, corrija a causa raiz, commite e push. Se PASSOU: responda só "verde" e nada mais. Se o comando falhar ou o estado for ambíguo: reporte o que viu e NÃO aja.
/loop 1h Rode {validador: comando exato}. Se exit != 0: corrija as violações apontadas e commite com mensagem "fix: {escopo}". Se exit 0: não faça NADA (nenhum commit, nenhuma melhoria espontânea).

Regras do bloco: cada disparo nasce sem lembrar do anterior, então todo o contexto vai NA frase. O prompt precisa ser idempotente (rodar 2x seguidas no mesmo estado não pode causar dano). Os 3 ramos são obrigatórios: o ramo "não-sei, então não aja" evita estrago em cima de um estado ambíguo; o ramo "está bom, então não faça nada" evita que ele fique inventando melhoria não pedida a cada hora.

Prompt 8 — /loop no próprio ritmo (esvaziar a fila até acabar)

Para varrer uma lista de trabalho até o fim, deixando o agente decidir o ritmo. Omita o intervalo.

/loop Processe o PRÓXIMO item pendente de {arquivo de backlog: tasks.yaml / prd.json}.
UNIDADE: 1 item = {defina exatamente o que conta como 1 item — ex.: "1 story do prd.json com passes:false"}.
Por ciclo: implemente o item, rode {checks: comando exato}, e SÓ com exit 0 commite ({formato: feat: [ID] - título}) e marque o item como concluído no arquivo.
Item grande demais para 1 ciclo: quebre-o em sub-itens NO PRÓPRIO arquivo de backlog e conclua só o primeiro.
Item bloqueado: marque "blocked: {motivo}" no arquivo e siga para o próximo.
Encerre o loop quando não houver itens pendentes nem desbloqueáveis — diga quantos ficaram blocked.

Por que funciona: o progresso vive no arquivo da fila, então qualquer pessoa ou script confere com uma busca de texto, sem depender do relato do modelo. Travar o que conta como "1 item" evita um caso real: um lote de ~100 itens virou só 12 porque ninguém tinha definido o que era 1 item. E a condição de parada ("sem itens pendentes") é um dado no arquivo, não uma opinião.

Prompt 9 — Trava de conclusão (bloco que serve pra tudo)

Cole no FIM de qualquer goal ou loop pra endurecer o critério de término. Use o comando LITERAL do seu validador: uma trava parafraseada ("rode o validador") sem o código de saída não bloqueia nada.

## Gate de conclusão (obrigatório)
Antes de declarar conclusão:
1. Rode: {comando literal do validador — ex.: node scripts/validate-x.cjs --file out.yaml}
2. Critério: {exit 0 / score >= N / 0 erros — o número exato}.
3. Se o critério falhar: corrija e repita. Você NÃO está autorizado a concluir
   com o gate falhando, nem a relaxar o critério, nem a editar o validador.
4. Somente com o gate passando: cole o OUTPUT COMPLETO do comando e então declare concluído.
A sua avaliação de "parece pronto" não substitui o gate. Evidência, não asserção.

Por que funciona: a trava não liga pro que o modelo ACHA que terminou: ela liga pra se o comando passa. As duas proibições extras (relaxar o critério, editar o próprio validador) fecham as saídas que uma trava ingênua deixa abertas. Exigir o resultado completo colado torna o encerramento auditável depois.

Checklist antes de despachar

  • [ ] O objetivo tem verbo + resultado observável (não um adjetivo vago)?

  • [ ] Passa no teste das "dezenas de cenários" (só serve pro SEU caso)?

  • [ ] O contexto aponta arquivos específicos E manda ler ("leia antes de editar"), não só lista caminhos?

  • [ ] As restrições dizem o que NÃO fazer (incluindo não esconder o erro)?

  • [ ] O "pronto quando" é comando + código de saída/número, com "me mostre a saída"?

  • [ ] Para /goal: cabe em 4000 caracteres, contados por comando (não estimados)?

  • [ ] As regras que sempre valem foram pro arquivo de regras do projeto (não repetidas no prompt)?

  • [ ] Pedido grande demais? Quebre em prompts numerados e guarde a fila num arquivo.

  • [ ] Coisa importante ou entregável criativo? Some o Prompt 5 (revisão crítica) ao fluxo.

  • [ ] Vários arquivos ou caminho incerto? No Claude, peça o plano antes; no Codex, peça o plano antes.

Calibração por programa

  • Codex tem viés de ação: quando falta um detalhe, ele assume e entrega. Reforce as restrições e o "pronto quando" pra ele não assumir errado.

  • Claude Code prefere explorar, planejar e só então codar. Em caminho incerto ou com vários arquivos, mande planejar antes ("apresente o plano, espere meu ok").

Guia rápido: qual usar

Situação

Template

Claude Code

Codex

Tarefa pontual com escopo claro

Prompt 1

sim

sim

Bug reportado

Prompt 2

sim

sim

Funcionalidade com mais de 1h de trabalho

Prompt 3

sim

sim

Objetivo longo, condição única

Prompt 4

sim, /goal

sim, modo Goal

Revisão de qualquer entrega

Prompt 5

sim, subagente

sim, sessão nova

"Não pare até terminar", com supervisão

Prompt 6

sim, /goal

não (use o Prompt 4)

Vigiar/repetir em ritmo fixo

Prompt 7

sim, /loop Nm

não

Esvaziar a fila item a item

Prompt 8

sim, /loop no próprio ritmo

em parte (modo Goal por item)

Endurecer qualquer goal/loop

Prompt 9

sim

sim