- Um LLM é uma função sem estado, então o
CLAUDE.md funciona como o documento central que apresenta a base de código ao Claude em cada sessão
- O arquivo deve resumir de forma concisa o WHAT (estrutura), o WHY (objetivo) e o HOW (modo de funcionamento) do projeto, e excesso de comandos desnecessários leva à queda de desempenho
- O Claude pode ignorar o conteúdo de
CLAUDE.md se considerar que ele tem baixa relevância, de acordo com as instruções da mensagem de sistema
- Um arquivo eficaz inclui apenas informações curtas e universalmente aplicáveis, e diretrizes detalhadas devem ser separadas em documentos distintos para serem gerenciadas com Progressive Disclosure
- O
CLAUDE.md é o ponto de maior impacto no harness do agente, portanto deve ser escrito manualmente com cuidado, em vez de ser gerado automaticamente
A ausência de estado dos LLMs e o papel do CLAUDE.md
- LLMs usam pesos fixos no momento da inferência e não mantêm aprendizado nem memória entre sessões
- Portanto, para o modelo entender a base de código, todas as informações precisam ser fornecidas como tokens de entrada
- Agentes de programação como o Claude Code precisam gerenciar memória de forma explícita, e o
CLAUDE.md é o único arquivo incluído automaticamente em todas as conversas
- Por isso, os três pontos a seguir são essenciais
- No início de uma sessão, o Claude não sabe nada sobre a base de código
- As informações necessárias precisam ser reapresentadas em toda sessão
- O meio padrão para isso é o
CLAUDE.md
Onboarding da base de código: WHAT, WHY, HOW
- O
CLAUDE.md funciona como um documento de onboarding para ajudar o Claude a entender o projeto
- WHAT: fornece um mapa do código, como stack técnica, estrutura do projeto e organização do monorepo
- WHY: explica o propósito e a função de cada componente
- HOW: descreve como executar tarefas reais, como build, testes e typecheck
- Ainda assim, listar todos os comandos é ineficiente, e o ideal é incluir apenas o mínimo necessário de informação
Por que o Claude ignora o CLAUDE.md
Princípios para escrever um bom CLAUDE.md
Less (instructions) is more
- Um LLM consegue seguir de forma estável cerca de 150 a 200 instruções
- Quanto menor o modelo, mais abrupta é a queda de desempenho, e menos adequado ele é para tarefas em múltiplas etapas
- O prompt de sistema do Claude Code já inclui cerca de 50 instruções
- Portanto, o
CLAUDE.md deve conter apenas o mínimo de instruções universais e essenciais
- À medida que o número de instruções aumenta, a qualidade de execução de todas elas se degrada de forma uniforme
Tamanho do arquivo e escopo de aplicação
- LLMs funcionam melhor com contexto focado e altamente relevante
- Como o
CLAUDE.md é incluído em todas as sessões, ele deve manter somente informações universalmente aplicáveis
- Em geral, recomenda-se mantê-lo com menos de 300 linhas, e de preferência ainda menor
- O arquivo de exemplo da HumanLayer tem menos de 60 linhas
Progressive Disclosure
- Em projetos grandes, é difícil colocar tudo em um único arquivo, então recomenda-se a abordagem de Progressive Disclosure
- Diretrizes detalhadas devem ser separadas em arquivos Markdown dentro da pasta
agent_docs/
- Ex.:
building_the_project.md, running_tests.md, code_conventions.md etc.
- O
CLAUDE.md deve conter apenas a lista desses arquivos, uma breve descrição e a instrução para que o Claude os leia quando necessário
- Em vez de snippets de código, use referências
file:line para manter a atualidade
- Isso é semelhante ao conceito de Claude Skills, mas com foco em gerenciamento de instruções, e não em uso de ferramentas
Claude não é um linter
- Incluir diretrizes de estilo de código no
CLAUDE.md é ineficiente
- LLMs têm custo alto, são lentos e são menos determinísticos do que um linter
- Regras de estilo são aprendidas naturalmente a partir dos padrões do código existente, então instruções separadas são desnecessárias
- Para formatação, use linters com correção automática (como Biome) e passe ao Claude apenas o resultado das correções
- Se necessário, use Stop Hook ou Slash Command para automatizar formatação e validação
Não gere automaticamente
- Não se recomenda um
CLAUDE.md criado com o comando /init ou recursos de geração automática
- Isso porque o arquivo é um ponto de alta alavancagem que afeta todas as sessões e resultados
- Uma única linha de instrução errada pode causar efeitos em cadeia negativos em toda a qualidade do código
- Por isso, cada frase deve ser revisada com cuidado e escrita manualmente
Conclusão
- O
CLAUDE.md é um documento para fazer o onboarding do Claude na base de código, e deve definir com clareza WHY, WHAT e HOW
- As instruções devem ser minimizadas, contendo apenas conteúdo universal e conciso
- Com Progressive Disclosure, apenas as informações necessárias são fornecidas gradualmente
- Não use o Claude como linter; em vez disso, combine ferramentas dedicadas, hooks e comandos
- Em vez de geração automática, é preciso redação manual cuidadosa para maximizar a qualidade de todo o harness
1 comentários
Comentários do Hacker News
O Claude às vezes tende a ignorar as instruções em CLAUDE.md
Quanto mais informação sem relação com a tarefa específica houver no arquivo, menos o Claude segue essas instruções
Um amigo pediu ao Claude para chamá-lo de “Mr Tinkleberry”, e toda vez que o Claude esquecia isso dava para perceber que ele estava ignorando o arquivo
Eu já uso há algum tempo a abordagem de índice
Separo as instruções por tarefa em arquivos markdown diferentes, e no CLAUDE.md deixo só a lista e uma breve descrição
Isso ajuda a manter a janela de contexto limpa
Meu arquivo de exemplo pode ser visto aqui
O Claude quase nunca realmente lia os outros arquivos de documentação
Sinto que, quando dou contexto demais ao Claude, a qualidade acaba piorando
Por isso sempre mantenho duas versões do código
Para o LLM, só entrego a primeira versão
Acho que a relação entre compute e informação é o ponto principal. A capacidade de processamento é limitada
Não precisa colocar tudo, mas incluir a informação essencial teve um ROI alto
O Claude funciona bem em projetos comuns, mas frequentemente se confunde com frameworks ou ferramentas novas
Queria perguntar se usa algum script para remover comentários e espaços em branco depois das alterações
Na verdade, existe uma solução mesmo sem toda essa configuração complexa
É simplesmente documentar o código com clareza
Se cada arquivo explicar de forma concisa o que faz, isso por si só já funciona como prompt
Basta usar README.md de forma ativa
Como o LLM já foi treinado com informação pública, não há necessidade de inventar algo novo
O conselho genérico de “documente bem o código” não se encaixa nesse contexto
README é ótimo, mas CLAUDE.md tem outro propósito
Por exemplo, Claude/agents.md tem a função de ser inserido automaticamente no contexto ao acessar certos diretórios
Em codebases complexas, o gerenciamento de contexto é muito mais importante
Por isso, o conselho “escreva o prompt adequadamente” erra o ponto central
Se colocar no README, ele acaba assumindo o mesmo papel do CLAUDE.md
O objetivo do CLAUDE.md é fornecer antecipadamente a informação essencial para que o Claude não precise reler toda a documentação a cada vez
Humanos lembram, mas o Claude esquece a cada tarefa, então é preciso uma estrutura que reduza esse reonboarding
Sinceramente, se eu tiver que montar toda essa infraestrutura de IA nesse nível, sinto que é melhor eu mesmo programar
Eu separo e gerencio regras comuns e regras específicas de cada projeto
Não usar IA é simplesmente uma perda de produtividade
Se a configuração só precisa ser feita uma vez, vale perfeitamente o investimento
Dizer “configurar é chato” parece a desculpa de quem evita configurar um depurador
Eu simplesmente copio o código necessário e colo na janela de conversa, usando de forma conversacional
Hoje em dia os modelos melhoraram bastante, então mesmo sem arquivos .md eles já dão resultados bem bons
Esses arquivos talvez tragam alguma melhora, mas não acho que sejam uma mágica de produtividade 100x
O que está sendo discutido aqui é quando o Claude executa a implementação completa de uma funcionalidade ou a correção de um bug por conta própria
Só dar o contexto necessário já funciona bem o suficiente. Parece um pouco bikeshedding
Eu faço o Claude escrever o próprio CLAUDE.md
Se você disser “README.md é para os usuários, CLAUDE.md é para você”,
ele também atualiza automaticamente instruções como “sempre verifique a documentação da API”
Não preciso conhecer nenhum prompt mágico, desde que o resultado final saia bem
Não parece haver motivo para achar que a IA sabe se promptar melhor do que qualquer outra pessoa