← Voltar ao Blog

6 documentos antes do prompt: Claude Code na 5ª

“Faça um login bonito aí” e sai um login bonito que compila: na primeira vez, dá pra se sentir um gênio. O encanto costuma durar até o dia em que você não consegue mais explicar o próprio código. A primeira geração funciona. A segunda correção desvia um pouco. Na terceira começa o espaguete, e na quinta a sensação é de que recomeçar do zero sai mais barato. Essa curva de colapso é familiar pra muita gente, e não é limite do modelo. É falta de estrutura na entrada.

É o problema do que a comunidade chama de Vibe Coding. Você digita “faça um login bonito aí”, recebe algo que compila, pede um ajuste, pede outro, e na terceira iteração o diff começa a brigar com o próprio diff anterior. Na quinta você considera recomeçar do zero.

A solução vem com prompt depois.

Os 6 documentos de definição e 3 arquivos de memória do Document-First Development, com CLAUDE.md no centro conectando PRD, APP_FLOW, TECH_STACK, FRONTEND, BACKEND e IMPLEMENTATION_PLAN

Antes do primeiro prompt: 6 documentos + 3 arquivos de memória

A ideia tem nome: Document-First Development. Em vez de empurrar “o que legal significa” para o modelo adivinhar, você escreve isso antes de abrir a sessão.

São seis documentos de definição:

  • PRD.md — o que construir, e explicitamente o que não construir
  • APP_FLOW.md — transições de tela e fluxos de usuário
  • TECH_STACK.md — stack técnica, com uma linha “não adicionar bibliotecas fora desta lista”
  • FRONTEND_GUIDELINES.md — sistema de design (cor, tipografia, border-radius)
  • BACKEND_STRUCTURE.md — schema do DB + design da API
  • IMPLEMENTATION_PLAN.md — plano em fases, com checkpoint de verificação ao fim de cada fase

E três arquivos de memória, que fazem a sessão não esquecer entre /clear:

  • CLAUDE.md — regras do projeto, carregado automaticamente a cada sessão
  • progress.md — “concluído / em andamento / próximos passos / bloqueios”
  • lessons.md — toda vez que o Claude erra do mesmo jeito, uma linha nova aqui

Nove arquivos no total. Soa pesado. É menos trabalho do que a quinta tentativa de “deixa eu só te explicar de novo o que eu queria”.

Por que a quinta tentativa quebra

Pense no que o Claude Code vê. Ele recebe três coisas: a sua instrução imediata, o diff atual do repo, e qualquer coisa dentro de CLAUDE.md. Se “o que é legal” vive só na sua cabeça, nenhum desses três carrega essa informação. Então ele vai inferir “legal” com base nos padrões do código que já existe — que você veio reescrever justamente porque não estava legal.

Na primeira rodada o Claude chuta certo porque o espaço de possibilidades ainda é pequeno. Na quinta, cada chute anterior virou precedente dentro do mesmo repo. Agora o Claude está mimetizando as decisões ruins que você aceitou nas rodadas 1 a 4. Vibe Coding falha por acúmulo, e nenhum modelo mais capaz corrige esse acúmulo pelo usuário.

O PRD.md inverte isso. Antes de qualquer rodada, você escreveu “o que NÃO construir”. Quando o Claude propõe adicionar “funcionalidade de compartilhamento em time” porque “achou útil”, a sessão tem onde encostar: a seção Out of Scope do PRD. Você não precisa estar presente para o veto acontecer.

O documento 3 muda o jogo

Dos nove arquivos, se eu tivesse que escolher um para começar, não seria o PRD. Seria o TECH_STACK.md com aquela linha final: não adicionar bibliotecas fora desta lista.

A razão é concreta. Claude Code tende a sugerir uma biblioteca nova para resolver um problema que a stack atual já resolve, e sem uma trava isso faz as dependências crescerem sem controle. Com a linha “stack trancada, não adicionar” no TECH_STACK.md, o modelo passa a resolver o mesmo problema com o que a stack já suporta, em vez de trazer mais uma dependência para manter.

A diferença entre o PRD.md e o TECH_STACK.md é a camada onde o veto age. PRD veta features. TECH_STACK veta dependências. Dependências entram muito mais rápido do que features e são muito mais difíceis de remover depois. Comece pelo que apodrece mais rápido.

Rodadas 1 a 5 com e sem Document-First: sem o padrão, a quinta rodada produz espaguete; com o padrão, ela produz diff utilizável

O que os 3 arquivos de memória resolvem

O CLAUDE.md da raiz é o único contexto que sobrevive ao /clear. Toda vez que o Claude repete o mesmo erro, você acrescenta uma linha. Mas se você só acrescenta, o arquivo incha e o modelo começa a ignorar instruções enterradas no meio. É um documento vivo, não um dump de regras.

O progress.md vive à parte justamente para absorver o churn. “Concluído / em andamento / próximos passos / bloqueios” muda toda sessão. CLAUDE.md muda toda semana no máximo.

E o lessons.md é onde você acumula o aprendizado antes de promover ao CLAUDE.md. Toda lição que reaparece 3 vezes ou mais vira regra. Toda regra que não é mais consultada sai. É assim que o CLAUDE.md fica abaixo de 300 linhas sem perder memória.

O custo real

Vou ser honesto: escrever a definição antes é chato. No começo eu também pensava “nos 30 minutos que passo escrevendo definição, já teria escrito o código”. Hoje penso o contrário. Os 30 minutos de definição são o prêmio de seguro que compra as 5 horas do quinto recomeço do zero. Como seguro, é barato demais.

Document-First Development funciona como uma inversão temporal. Você escreve a especificação primeiro porque é o momento em que a cabeça está mais clara sobre o que não quer. Depois do terceiro prompt, você já não lembra.

O que ler em seguida

Se quiser ver o CLAUDE.md pelo outro lado — por que a versão de 2 linhas do criador do Claude Code funciona enquanto a sua de 100 linhas falha — eu escrevi sobre isso em CLAUDE.md: 2 vs 100 linhas, quem erra?.


ken imoto · WebRTC & Voice AI engineer · kenimoto.dev · TabNews

Practical Claude Code Livro relacionado Practical Claude Code Tutorial de Claude Code | padrões de CLAUDE.md, design de Plan Mode e workflows de equipe Ver a página do livro →