Índice
5 min de leitura

Crie três arquivos de especificação antes de usar Claude Code e Codex

Passei um ano tendo resultados erráticos com Claude Code e Codex. Três arquivos de especificação, cada um com um papel distinto, resolveram o problema.

Depois de quase um ano usando agentes de codificação com IA todo dia, o que mais me incomodava não era código alucinado nem APIs erradas. Era a inconsistência. A mesma tarefa, formulada de forma ligeiramente diferente, produzia um resultado limpo em um dia e uma bagunça no seguinte. Sessões longas pioravam tudo: o agente esquecia acordos feitos vinte mensagens antes.

A causa era estrutural. Eu não tinha nenhum framework para comunicar intenção ao agente entre sessões. Cada conversa começava do zero e derivava em direções imprevisíveis.

Três camadas que mudaram o resultado

Dividir as instruções em três arquivos, cada um com um papel distinto, resolveu o problema de inconsistência quase que imediatamente.

Camada 1, CLAUDE.md carrega automaticamente a cada sessão. Contém as constantes do projeto: comandos de build, versões do stack, estrutura de pastas, convenções de código e limites comportamentais (sempre fazer X, perguntar antes de Y, nunca fazer Z).

Camada 2, SPEC.md captura o quê e o porquê de uma funcionalidade específica. Propósito, requisitos, critérios de sucesso, restrições técnicas e limites de escopo. Nada sobre detalhes de implementação.

Camada 3, plan.md decompõe uma spec em tarefas executáveis de dois a cinco minutos, com caminhos de arquivo explícitos, ordem TDD e pontos de commit.

Por que colocar tudo em um único arquivo não funciona

A pesquisa sobre seguimento de instruções em LLMs chama isso de “Maldição das Instruções”. À medida que o número de diretivas em um único contexto cresce, a conformidade com cada diretiva individual cai drasticamente. Verifiquei isso diretamente: um arquivo único com regras do projeto, specs de funcionalidades e listas de tarefas fazia o agente ignorar cerca de metade das instruções perto do final do documento.

Separar por papel resolveu. O agente lê regras universais da camada 1, intenção da funcionalidade da camada 2, e passos de execução da camada 3. Cada arquivo fica curto o suficiente para o modelo dedicar atenção completa a ele.

CLAUDE.md funciona melhor quando mantido enxuto

Como esse arquivo carrega a cada sessão, ele precisa conter apenas o que se aplica universalmente. Comandos de build, versões do stack, organização de pastas, convenções de nomenclatura. Adicione um limite em três níveis: coisas para sempre fazer, coisas sobre as quais perguntar primeiro, coisas para nunca fazer.

A abordagem que funcionou melhor foi começar com o mínimo e adicionar regras de forma incremental sempre que eu percebia o agente repetindo um erro. Tentar escrever um CLAUDE.md completo de uma vez levava a um arquivo inchado que disparava a mesma queda de conformidade que eu estava tentando evitar.

Algumas armadilhas específicas: não coloque chaves de API nem trechos de código aqui porque ficam obsoletos rápido. Não duplique regras que o seu linter já aplica. E mova qualquer coisa específica de uma única funcionalidade para a camada 2.

Arquivos de spec se concentram no quê e no porquê, deixando o como para o agente

A diferença em relação a um PRD tradicional é que essas specs são estruturadas para consumo pelo agente. Cinco seções são suficientes: propósito, requisitos, critérios de sucesso, restrições técnicas e limites de escopo.

Deixe as decisões de implementação para o agente. Ele consegue analisar o código existente e escolher a abordagem certa. Quando tentei ditar o como, o agente ou seguia às cegas entrando em conflito com os padrões existentes, ou ignorava completamente.

Uma alternativa a escrever specs manualmente: peça para o agente te entrevistar. Defina duas regras: uma pergunta por vez e múltipla escolha sempre que possível. As specs resultantes tinham menos lacunas do que as que eu escrevia do zero.

Salve specs concluídas em docs/specs/YYYY-MM-DD-topico.md e faça commit no Git. Isso dá ao agente acesso ao histórico de specs via git diff, e fornece aos revisores um registro da intenção por trás das mudanças de código.

Separação de sessões é a prática mais ignorada

Brainstorming e perguntas e respostas durante a escrita de uma spec consomem uma parte significativa da janela de contexto. Pular direto para a implementação na mesma sessão faz o agente ir perdendo acesso ao contexto anterior gradualmente.

Reestruturei em três sessões: a sessão 1 produz SPEC.md, a sessão 2 cria plan.md, a sessão 3 em diante executa tarefas uma a uma. A melhora em precisão foi perceptível dentro da primeira semana.

Três hábitos que fizeram isso funcionar: escrever caminhos de arquivo explícitos em cada tarefa para o agente parar de adivinhar, fixar a ordem TDD (teste primeiro, implementação, verificação, commit) no plan.md, e iniciar uma nova sessão sempre que o uso do contexto chegar em torno de 50%.

O modelo de maturidade aponta para a spec como fonte de verdade

O time de Martin Fowler definiu recentemente um modelo de maturidade para desenvolvimento de software baseado em agentes com três níveis. Nível 1: escrever uma spec, implementar, descartar a spec. Nível 2: manter a spec como documento vivo junto ao código. Nível 3: a spec se torna a única fonte de verdade, e o código é um artefato gerado.

A maioria dos times e indivíduos que conheço ainda não chegou ao nível 1. Eles mandam prompts avulsos na esperança de que dê certo, e quando falha não há como diagnosticar o motivo.

Passar do nível 1 para o nível 2 exige um único hábito: fazer commit dos arquivos de spec no Git. Passar do nível 2 para o nível 3 significa atualizar a spec antes de modificar o código. O menor passo que você pode dar hoje é criar um CLAUDE.md para seu projeto e escrever um SPEC.md antes da sua próxima funcionalidade.

Assine a newsletter

Receba atualizações sobre meus projetos mais recentes, artigos e experimentos com IA e desenvolvimento web.