O que é e porque importa
Cada sessão do Claude Code começa com o contexto vazio. O que lhe explicaste ontem no chat, hoje já não está lá. Então recomeças do zero: «então, a minha app é…». E nas vezes em que te esqueces, ele adivinha: a ferramenta, a pasta, quanto pode mudar.
É para isso que serve o CLAUDE.md. É um ficheiro de texto simples, na pasta do projeto, com as regras que queres que valham sempre. O Claude Code lê-o no início de cada sessão, antes até da tua primeira mensagem. Por isso chamo-lhe o ficheiro que o Claude lê antes de tudo.
Importa porque escreves uma só vez o que de outra forma repetirias todos os dias. Ele começa já a saber, e tu vais direto ao que queres fazer.
Uma coisa a saber já: é uma indicação, não um cadeado. O Claude lê-o e tenta segui-lo, e quanto mais claras forem as regras, mais as segue. Mas para bloquear mesmo uma coisa não chega: falo disso nas perguntas no fim.
1. O meu ficheiro, para copiar
Aqui está o meu ficheiro para copiar, numa app de exemplo: um livro de receitas. São dez linhas. Troca as partes entre < > pelas do teu projeto e tira os símbolos < >.
# <Livro de receitas>: <app de receitas> Stack: <Next.js e TypeScript> Código em <src/>, testes em <tests/> Não toques no <.env> nem na <pasta dos pagamentos> Pergunta antes de apagar ficheiros Lê antes de mudar Depois de cada alteração: <npm test>, e diz-me o resultado Uma alteração de cada vez Fala comigo em português Escreve o código em inglês
As linhas sem < > mantenho-as iguais em todos os projetos. Aliás, as que valem em todo o lado, como a língua, passo-as para o ficheiro do meu utilizador: já lá vamos.
2. As dez linhas explicadas
Cada linha está lá porque me tirou um problema que eu tinha muitas vezes:
- O que é a app. Acabou o «então, a minha app é…» em cada sessão nova.
- Com o que é feita. Não te propõe ferramentas diferentes das que já usas.
- Onde está o código e onde estão os testes. Não os procura de cada vez.
- O que não deve tocar. As chaves e o dinheiro continuam a ser teus: as chaves secretas costumam estar no ficheiro .env, e os pagamentos são a parte onde um erro faz mais estragos. Mas é uma indicação, não um bloqueio: para o bloquear a sério é preciso uma regra deny ou um hook. Falo disso no guia GUARDIA (strikt.fit/guardia).
- Pergunta antes de apagar. Nada de apagar coisas de surpresa.
- Lê antes de mudar. Percebe o que lá está antes de o reescrever.
- O comando dos testes. É o que prova que a app ainda funciona. E peço-lhe o resultado, não só que o corra.
- Uma alteração de cada vez. Mudanças pequenas: se alguma coisa se partir, sabes onde.
- A língua. Responde-te na tua língua.
- O código em inglês. Nomes, funções e comentários ficam em inglês, como qualquer pessoa os lê.
São tudo coisas que não se percebem pelo código, ou que só se percebem a procurar: é precisamente isso que vale a pena escrever.
3. Onde fica
O nome é sempre CLAUDE.md. O que muda é a pasta, e a pasta decide onde vale:
- Na pasta principal do projeto: ./CLAUDE.md, ou ./.claude/CLAUDE.md. São equivalentes, escolhe um. Tem as regras desse projeto, e se o projeto estiver no git, quem trabalha nele contigo também as vê.
- No ficheiro do teu utilizador: ~/.claude/CLAUDE.md. As regras que valem para todos os teus projetos, como a língua, vão aqui. Só tu as vês.
O Claude Code lê-os no início de cada sessão, os dois: somam-se, não se substituem. Por isso não repitas no projeto o que já está no ficheiro do teu utilizador, e garante que não se contradizem: se duas linhas disserem coisas opostas, o Claude pode seguir uma ou outra.
Quando mudares um ficheiro, abre uma sessão nova: assim tens a certeza de que trabalha com a versão atualizada.
4. Como o crias e alteras
- Abre o Claude Code na pasta do projeto e escreve /init. Ele olha para o teu código e escreve-te um primeiro CLAUDE.md, com os comandos para compilar e testar o projeto e as convenções que encontra. Se já houver um CLAUDE.md, não o substitui: propõe-te melhorias.
- Depois acrescentas tu as regras que ele não consegue adivinhar sozinho: o que não deve tocar, como queres que trabalhe, em que língua falar contigo. São as do meu ficheiro aqui em cima.
- Para o alterares, escreve /memory. Mostra-te os ficheiros de memória do projeto e do teu utilizador. Escolhes o ficheiro e abre-se no teu editor; se não existir, é criado.
- Para confirmar que o carregou, numa sessão nova escreve /context e olha para a lista em Memory files. Os teus CLAUDE.md têm de lá estar: se faltar um, o Claude não o vê.
As regras novas também lhas podes pedir para escrever. Quando reparas que falta uma:
Acrescenta esta regra ao CLAUDE.md do projeto: [a regra]. Escreve-a numa linha, curta e precisa.
Conta a forma como o dizes. Com «acrescenta isto ao CLAUDE.md» vai parar ao ficheiro. Se só lhe disseres «lembra-te de que…», normalmente guarda-o na sua memória automática, que é outra coisa: explico-a nas perguntas no fim.
5. Mantém-no curto
Mantém-no curto e preciso: quanto mais claras e poucas forem as regras, mais as segue. A documentação do Claude Code recomenda ficar abaixo das 200 linhas por ficheiro: acima disso, as regras são menos seguidas.
Preciso quer dizer que se pode verificar. «Depois de cada alteração corre npm test» funciona melhor do que «testa bem o código». «O código está em src/» funciona melhor do que «mantém os ficheiros arrumados».
E depois tem de se manter vivo. Eu sigo três regras:
- Se lhe repetes a mesma coisa duas vezes, é uma linha que falta: acrescenta-a.
- Se uma linha já não é verdade, tira-a.
- Se é uma coisa que o Claude vê sozinho ao abrir o código, não é preciso escrevê-la.
Os erros mais comuns
- Deixar o ficheiro do /init como está. É uma base: acrescenta as regras que não se veem no código, como o que não tocar e em que língua falar contigo.
- Repetir em cada projeto as regras que valem em todo o lado. Põe-nas uma só vez em ~/.claude/CLAUDE.md.
- Escrever regras vagas, tipo «tem cuidado». Escreve coisas que se possam verificar: um comando, uma pasta, um ficheiro.
- Tratá-lo como um cadeado. É uma indicação: para bloquear mesmo um ficheiro precisas de uma regra deny nas permissões do Claude Code ou de um hook.
- Alterá-lo e continuar na mesma sessão a contar que ele o vê. Abre uma sessão nova e confirma com /context.
Checklist
- O CLAUDE.md está na pasta principal do projeto
- As partes entre < > já falam do meu projeto
- Está lá o comando que corre os testes
- A língua está em ~/.claude/CLAUDE.md, não em cada projeto
- Numa sessão nova, o /context mostra-o em Memory files
- É curto, sem linhas repetidas nem desatualizadas
Perguntas frequentes
O Claude Code não tem já uma memória própria?
Sim, a memória automática (auto memory), ativa por defeito: o Claude toma notas sozinho, por exemplo sobre as correções que lhe fazes, e volta a lê-las nas sessões seguintes. A diferença é quem escreve: o CLAUDE.md escreves tu, e é o sítio das regras; a memória automática escreve-a ele. Com /memory podes abrir a pasta dela ou desligá-la.
Se escrever «não toques no .env», posso ter a certeza de que não o abre?
Não. O CLAUDE.md é contexto: o Claude lê-o e tenta segui-lo, mas não o trava. Para um bloqueio a sério existem as regras de permissões nas definições do Claude Code: com uma regra de proibição como Read(./.env), o Claude Code impede as suas ferramentas de leitura de abrir esse ficheiro, decida o Claude o que decidir. Mantém na mesma a linha no CLAUDE.md: diz-lhe o que evitar mesmo onde não puseste um bloqueio.
O meu CLAUDE.md ficou enorme. O que faço?
Primeiro tira as linhas que já não são verdade e as que o Claude percebe pelo código. Se ficarem regras que só valem para uma parte do projeto, podes passá-las para ficheiros separados na pasta .claude/rules/: se indicares no topo do ficheiro a que ficheiros se aplicam, só são carregadas quando o Claude trabalha nesses ficheiros. Dividi-lo em vários ficheiros com os imports @caminho ajuda a mantê-lo arrumado, mas não o torna mais leve: os ficheiros importados também são carregados no início.