Voltar para Guias
Builders

CLAUDE.md explicado: ensine o seu projeto ao Claude Code uma vez só

13 min de leitura


Toda sessão nova do Claude Code começa com a cabeça vazia. Você diz que é para usar pnpm, não npm. Diz onde ficam os testes. Diz para não mexer na pasta gerada. Amanhã você diz tudo isso de novo.

O CLAUDE.md é o lugar onde você escreve o que, de outro modo, teria de explicar outra vez.

É um arquivo de texto simples, em Markdown. O Claude Code o lê no início de cada sessão, então tudo o que está nele já é conhecido antes do seu primeiro prompt. Este guia mostra onde o arquivo fica, como escrever um que o Claude siga e o que deixar de fora.

O que o CLAUDE.md é, e o que ele não é

Cada sessão do Claude Code começa com uma janela de contexto nova. Dois mecanismos levam conhecimento de uma sessão para a seguinte:

CLAUDE.mdMemória automática
Quem escreveVocêO Claude
O que entraInstruções e regrasAprendizados e padrões que ele percebe
CarregamentoToda sessãoToda sessão (primeiras 200 linhas ou 25 KB)
Melhor paraPadrões de código, fluxos de trabalho, estruturaSuas correções e preferências

Os dois são carregados como contexto. Essa palavra importa: o Claude lê o CLAUDE.md e tenta segui-lo, mas ele não é uma configuração imposta. Uma linha vaga ou contraditória pode ser ignorada. Voltamos a isso na parte de solução de problemas, porque é isso que define como o arquivo deve ser escrito.

Já tem um AGENTS.md?

Se o seu repositório tem um AGENTS.md escrito para outros agentes de código, o Claude Code pode lê-lo no lugar de um CLAUDE.md, desde que não haja CLAUDE.md nem CLAUDE.local.md no seu diretório de trabalho ou acima dele. Se os dois existirem, o Claude lê só os arquivos CLAUDE.md. Para usar os dois, importe o AGENTS.md a partir do seu CLAUDE.md. Ler o AGENTS.md diretamente exige o Claude Code 2.1.277 ou posterior.

Onde o arquivo fica

São quatro lugares, e eles se somam. O Claude os carrega do escopo mais amplo ao mais específico, então o que está mais perto do seu projeto é lido por último.

OrganizaçãoSó você, neste projeto

  1. Política gerenciadaDefinida pelo TI para todos da organização
  2. Usuário~/.claude/CLAUDE.md, suas preferências em todo projeto
  3. Projeto./CLAUDE.md ou ./.claude/CLAUDE.md, compartilhado com a equipe pelo git
  4. Local./CLAUDE.local.md, pessoal deste projeto, fora do git
Os arquivos são somados, não trocados. Nada sobrescreve nada, então contradições entre camadas confundem o Claude.

Os dois que você vai usar são o arquivo do projeto e o do usuário.

  • Arquivo do projeto. Coloque o CLAUDE.md na raiz do projeto, ou numa pasta .claude na raiz. Faça o commit, para que todos que trabalham no projeto recebam as mesmas instruções. Escreva o que vale para qualquer pessoa: comandos de build, convenções, estrutura do projeto.
  • Arquivo do usuário. O ~/.claude/CLAUDE.md acompanha você em todos os projetos. Use-o para hábitos pessoais, como o jeito que você prefere que as explicações sejam escritas.
  • Arquivo local. O CLAUDE.local.md serve para anotações suas e específicas de um projeto, como a URL de um ambiente de testes. Adicione-o ao .gitignore para que não entre no commit.

O Claude também procura na pasta em que você o abriu e em todas as pastas acima dela. Se você começa em foo/bar/, ele carrega foo/bar/CLAUDE.md e foo/CLAUDE.md. Os arquivos de pastas abaixo de você são carregados depois, sob demanda, na primeira vez que o Claude lê ou edita um arquivo naquela subpasta.

Comece com o /init

Você não precisa escrever a primeira versão à mão. Dentro de uma sessão, rode:

my-website
> /initAnalisando seu código...CLAUDE.md criado com os comandos de build, as instruções de teste e as convenções encontradas.
Ilustração do fluxo. A saída exata depende da sua versão e do seu projeto.

O Claude Code lê o seu projeto e escreve um CLAUDE.md com os comandos de build e de teste e as convenções que descobre. Se já existir um CLAUDE.md, o /init sugere melhorias em vez de sobrescrevê-lo. Trate o resultado como um primeiro rascunho. Seu trabalho é acrescentar o que o Claude não teria como descobrir sozinho.

Para confirmar que o arquivo foi carregado, rode /context numa sessão e olhe em Memory files.

O que deve entrar no arquivo

Um bom teste, antes de escrever qualquer linha, tem duas perguntas:

  1. 1

    O Claude acharia isso lendo o código?

    Estrutura de pastas, o framework de testes, o jeito como os componentes existentes são feitos: o Claude lê isso em segundos. Escrever só acrescenta peso e nenhum valor.

  2. 2

    Ele realmente iria procurar?

    Alguns fatos estão no repositório, mas levam minutos para ser encontrados, e o Claude os procuraria de novo a cada sessão. Esses merecem uma linha.

Se as duas respostas forem sim, deixe a linha de fora. O que sobra é informação que nunca esteve no código, ou que custa tempo de verdade para ser redescoberta:

  • Os comandos exatos para build, teste e lint, com as flags que você usa

  • Uma decisão que sua equipe tomou numa reunião e que o código não mostra

  • A variável de ambiente ou o serviço local de que seus testes precisam

  • Uma convenção diferente do padrão da ferramenta, e por quê

  • Coisas em que nunca mexer, como uma pasta gerada

Acrescente uma linha quando o Claude errar a mesma coisa pela segunda vez, quando uma revisão de código pegar algo que ele deveria saber, ou quando você digitar a mesma correção da sessão passada. Esse é o sinal de que o fato pertence ao arquivo.

Um exemplo que vale copiar

Aqui está um arquivo de projeto curto. Repare que cada linha é algo que dá para verificar e que pouca coisa descreve a arquitetura.

# Project notes

## Commands
- Install: pnpm install (never npm or yarn)
- Dev server: pnpm dev (port 3000)
- Tests: pnpm test -- --run, run before every commit
- Typecheck: pnpm typecheck, must pass before a pull request

## Conventions
- 2-space indentation, double quotes
- API handlers live in src/api/handlers/
- Do not edit anything in src/gen/, it is generated by pnpm codegen

## Gotchas
- Integration tests need a local Redis: docker compose up redis
- Dates are stored in UTC, formatted only in the UI layer

São 15 linhas, e cada uma merece estar ali.

Como escrever linhas que o Claude segue

Como o CLAUDE.md é contexto e não configuração, o jeito de redigir cada linha decide se ela será seguida. Escreva instruções concretas o bastante para serem conferidas.

VagoConcreto
Formate o código direitoUse indentação de 2 espaços
Teste suas mudançasRode npm test antes de fazer o commit
Mantenha os arquivos em ordemOs handlers da API ficam em src/api/handlers/
Cuidado com o banco de dadosNunca rode migrações em produção, use a URL de staging em .env.staging

Depois, mantenha o arquivo em boa forma:

  • Curto. Mire em menos de 200 linhas por arquivo. Arquivos mais longos usam mais contexto e o Claude os segue com menos confiabilidade.
  • Organizado. Agrupe linhas relacionadas sob títulos e tópicos em Markdown. O Claude segue melhor a estrutura do que parágrafos densos.
  • Coerente. Se duas linhas discordam, o Claude pode escolher uma ao acaso. Releia seus arquivos de vez em quando, inclusive os das subpastas, e apague o que estiver desatualizado.

Gritar não ajuda

Acrescentar IMPORTANT ou CAIXA ALTA a uma linha que o Claude vive deixando passar tende a fazê-lo aplicar a regra em excesso. Se uma linha realmente não pode ser flexibilizada, ela nem pertence ao CLAUDE.md. Ela pertence a um hook ou a uma regra de negação (deny), que o Claude Code aplica sempre, não importa o que o modelo decida.

Para o Claude auditar seus arquivos de instruções atrás de linhas desatualizadas ou conflitantes, rode /doctor prompt-audit. Ele relata o que achou e propõe edições, sem mudar nada até você pedir. Exige o Claude Code 2.1.283 ou posterior.

Importando outros arquivos

O CLAUDE.md pode puxar outros arquivos com um @ antes do caminho. O arquivo importado é carregado junto com o CLAUDE.md que o menciona.

See @README for the project overview and @package.json for the npm commands.

# Additional instructions
- git workflow: @docs/git-instructions.md

Caminhos relativos são resolvidos a partir do arquivo que contém a importação. Importações podem importar outros arquivos, até quatro níveis de profundidade. O @ só é lido fora de trechos de código, então coloque o caminho entre crases se quiser mencioná-lo sem importá-lo.

Importações servem para organizar, mas não diminuem o contexto: os arquivos importados continuam sendo carregados por inteiro. Para instruções pessoais que você quer em várias cópias do mesmo repositório, importe um arquivo da sua pasta pessoal, como @~/.claude/my-project-instructions.md. Na primeira vez que um projeto importa um arquivo de fora do diretório de trabalho, o Claude Code pede sua aprovação.

Quando um arquivo fica longo demais

Em algum momento o arquivo passa do que toda sessão precisa. Você tem algumas ferramentas, cada uma para um trabalho diferente.

FerramentaUse paraQuando carrega
CLAUDE.mdFatos necessários em toda sessãoToda sessão
Regras em .claude/rules/Instruções para uma parte do códigoQuando o Claude toca arquivos correspondentes (se tiverem escopo)
HabilidadesProcedimentos de vários passos, manuais de equipeSó quando usadas ou relevantes
HooksCoisas que sempre ou nunca devem acontecerExecutados pelo próprio Claude Code

Regras com escopo para certos arquivos

Coloque um arquivo Markdown por assunto em .claude/rules/, como testing.md ou api-design.md. Para uma regra valer só para certos arquivos, acrescente um campo paths no topo:

---
paths:
  - "src/api/**/*.ts"
---

# API rules

- Every endpoint validates its input
- Use the standard error response format

Uma regra sem paths carrega em toda sessão. Uma regra com escopo carrega quando o Claude lê ou edita um arquivo correspondente, o que tira as instruções do caminho no resto do tempo.

Se um bloco do CLAUDE.md é um procedimento de vários passos, como preparar um release, mova-o para uma habilidade. As habilidades só carregam quando são usadas.

Memória automática: as anotações que o Claude guarda para si

Além do arquivo que você escreve, o Claude Code pode guardar anotações por conta própria. A memória automática vem ligada por padrão nas sessões locais. Enquanto trabalha, o Claude salva quatro tipos de anotação: sobre você (função e preferências), feedback (correções e abordagens que você confirmou), o projeto (decisões e prazos que não aparecem no código) e referências (onde achar coisas fora do projeto).

Ele não salva o que consegue ler no código, nem o que o seu CLAUDE.md já diz. Você verá mensagens como "Saved 2 memories" na sessão. As anotações são Markdown simples em ~/.claude/projects/, e as primeiras 200 linhas ou 25 KB do arquivo de índice são carregadas no início de cada sessão.

Rode /memory para ver todos os arquivos de instruções e a pasta da memória automática, abrir qualquer um deles no seu editor e ligar ou desligar a memória automática. Se você disser ao Claude "use sempre pnpm, não npm", ele salva isso na memória automática. Para colocar algo no CLAUDE.md, diga isso: "adicione isto ao CLAUDE.md".

Dentro do Claude Tutorial

Escrever o que você repetiria

Transformar a mesma correção em instrução permanente é um hábito que vale a pena em qualquer tipo de trabalho com o Claude, não só em código, e o app o ensina passo a passo.

Em breve
Baixe naApp Store
DISPONÍVEL NOGoogle Play

Quando o Claude não segue

Passe por estes pontos em ordem. Eles resolvem a maioria dos casos.

  1. 1

    Confira se o arquivo realmente carregou

    Rode /context e olhe em Memory files. Se o seu arquivo não aparece lá, o Claude não consegue vê-lo. Um CLAUDE.md numa subpasta não aparece na abertura, porque é carregado sob demanda.

  2. 2

    Deixe a linha mais específica

    Troque "formate o código bonito" por "use indentação de 2 espaços". Uma linha que dá para verificar é uma linha que o Claude consegue seguir.

  3. 3

    Procure contradições

    Dois arquivos que dizem coisas diferentes sobre o mesmo comportamento deixam o Claude no palpite. Confira juntos o arquivo do projeto, o do usuário e as regras.

  4. 4

    Reduza o tamanho

    Um arquivo longo dilui todas as linhas. Mova a parte sobre uma área para uma regra com escopo e corte o que o Claude poderia ler sozinho.

  5. 5

    Imponha, se tiver de acontecer

    Se uma instrução precisa rodar num ponto fixo, como antes de todo commit, escreva-a como um hook. Quem executa o hook é o Claude Code, então o modelo não pode pulá-lo.

Dois casos extras merecem atenção. Depois de um /compact, o CLAUDE.md da raiz do projeto é lido de novo do disco, então ele sobrevive. Uma instrução que você deu só na conversa não sobrevive, então mova-a para o arquivo. E quando um CLAUDE.md numa subpasta é muito longo (mais de uns 40.000 caracteres numa janela de contexto menor), o Claude recebe só o começo dele, então mantenha esses curtos.

Perguntas frequentes

Onde coloco o CLAUDE.md?

Na raiz do projeto (./CLAUDE.md) ou em ./.claude/CLAUDE.md. Coloque preferências pessoais para todos os projetos em ~/.claude/CLAUDE.md. Use ./CLAUDE.local.md, adicionado ao .gitignore, para anotações privadas sobre um projeto.

Qual deve ser o tamanho de um CLAUDE.md?

Mire em menos de 200 linhas. Se passar, o Claude Code mostra um aviso ao iniciar e no /status. Mova as partes de uma área específica para regras com escopo e corte o que o Claude consegue ler no código.

O CLAUDE.md é a mesma coisa que um prompt de sistema?

Não. O CLAUDE.md é entregue como uma mensagem depois do prompt de sistema. O Claude tenta segui-lo, mas não há garantia de cumprimento estrito. Para instruções que precisam valer sempre, use um hook ou uma regra de permissão.

Devo fazer o commit do CLAUDE.md no git?

Sim para o arquivo do projeto, para a equipe inteira compartilhá-lo e ele melhorar a cada correção. Não para o CLAUDE.local.md, que é pessoal.

O Claude lê o CLAUDE.md das subpastas?

Sim, sob demanda. Ele carrega o arquivo de uma subpasta na primeira vez que o Claude lê ou edita um arquivo naquela pasta, e mostra uma linha Loaded com o caminho.

Qual é a diferença entre o CLAUDE.md e uma habilidade?

O CLAUDE.md é para fatos necessários em toda sessão. Uma habilidade é um procedimento ou manual que só carrega quando é chamada ou relevante, então não ocupa espaço no resto do tempo.

Seu checklist do CLAUDE.md

  • O arquivo está na raiz do projeto e com commit feito, e um arquivo local separado no .gitignore guarda o que for pessoal

  • Ele tem seus comandos de build, teste e lint exatamente como você os roda

  • Toda linha passa no teste: o Claude não aprenderia isso pelo código, ou perderia tempo redescobrindo

  • Nenhuma linha contradiz outra, e o arquivo tem menos de 200 linhas

  • /context lista o arquivo em Memory files

Continue lendo