Por que o Claude Code ignora a instrução que você deu duas mensagens atrás?

Quando o Claude Code ignora instruções combinadas no chat, quase sempre é uma de quatro coisas: a conversa foi compactada e a instrução detalhada do começo se perdeu, o pedido ficou num turno do meio (o estudo de multi-turno mediu queda média de 39% no desempenho contra turno único), a densidade de regras é alta demais, ou existem duas regras conflitando sem precedência definida. A saída é a mesma: o que precisa valer sempre não fica em mensagem, fica em arquivo. CLAUDE.md da raiz é reinjetado depois da compactação, /context mostra o que foi carregado e a recomendação oficial é ficar abaixo de 200 linhas por arquivo
Fala aí, beleza? Tu combinou uma regra com o Claude Code, ele seguiu certinho por dois turnos, e no terceiro voltou pro comportamento antigo como se a conversa nunca tivesse acontecido
E aí bate aquela sensação de estar repetindo a mesma frase pra parede 😅
Só que tem duas coisas MUITO diferentes acontecendo aqui, e elas se resolvem de jeitos opostos: ou a instrução saiu do contexto (esquecimento real), ou ela nunca foi clara o bastante pra ser seguida (instrução ambígua, brigando com outra)
Neste post eu separo uma da outra por sintoma, e mostro onde a regra tem que morar pra valer o tempo todo, e não só nos dois turnos seguintes
Bora?
Sintoma 1: a instrução funcionou e parou depois de uma conversa longa
Esse é o clássico
Tu pede algo no começo da sessão, ele obedece por um bom tempo, a conversa cresce, e do nada o comportamento antigo volta
Domine o Claude Code do básico ao avançado
Você vai aprender a criar sistemas completos com Claude Code, sem precisar ser programador. Inscreva-se para ter acesso a um desconto de lançamento e bônus especiais!
A causa: compactação
Quando a sessão fica longa demais pro contexto, o Claude Code compacta o histórico
O processo tem ordem: primeiro ele limpa saídas de ferramenta antigas, depois resume o que sobrou
Os seus pedidos e trechos de código importantes são preservados nesse resumo
Mas instrução detalhada dita lá no começo pode simplesmente sumir na síntese
Ou seja: não é teimosia, é que aquele texto não existe mais na conversa que ele está lendo agora
A solução: tirar a regra do chat e botar no disco
O CLAUDE.md da raiz do projeto sobrevive à compactação
Depois do /compact, o Claude relê esse arquivo do disco e reinjeta na sessão
Então a regra que tu quer que valha do começo ao fim da sessão vai pra lá, e não pra uma mensagem solta
Dá pra controlar o que a compactação preserva de duas formas: com uma seção de instruções de compactação (Compact Instructions) dentro do CLAUDE.md, ou rodando o /compact com um foco:
/compact focus on the API changes
E dá pra mexer no gatilho também, definindo quanto o contexto enche antes da passada automática:
/autocompact 500k
Pra prevenir: nem todo arquivo volta
Se liga nisso, porque essa parte pega muita gente
CLAUDE.md aninhado em subpasta e regra com frontmatter paths: NÃO são reinjetados automaticamente depois da compactação
Eles só voltam quando o Claude ler de novo um arquivo daquela subpasta, ou um arquivo que case com o padrão da regra
Então se a tua convenção mais importante está enterrada num src/api/CLAUDE.md, ela tem uma janela pra sumir e não voltar sozinha
A documentação de memória do Claude Code detalha esses níveis e como cada um é carregado: code.claude.com/docs/en/memory
Sintoma 2: ele lembra do primeiro e do último pedido, mas ignora o do meio
Esse é mais sutil
Tu olha a conversa, a instrução está lá, escrita, legível, no meio do papo
E mesmo assim ele age como se só existisse o que tu falou no início e o que tu acabou de mandar
A causa: perda nos turnos do meio
Tem estudo sobre isso, não é achismo
O paper LLMs Get Lost In Multi-Turn Conversation mediu queda média de 39% no desempenho em conversas multi-turno comparadas com turno único, em seis tarefas de geração
O fenômeno tem nome: loss-in-middle-turns
O modelo ajusta demais a resposta com base no primeiro e no último turno da conversa, e negligencia a informação que ficou no meio
E a conclusão mais dura do estudo é essa: quando o modelo pega o caminho errado numa conversa, ele se perde e não se recupera sozinho
Continuar mandando "não, eu falei pra fazer diferente" no mesmo fio tende a piorar, não a corrigir
A solução: encerrar o fio, não empurrar
/clearentre tarefas não relacionadas, pra não arrastar meia hora de assunto morto- delegar pesquisa a subagentes, mantendo a conversa principal limpa
- se a regra vale só pra esta tarefa, ela pode ser mensagem mesmo
Pra prevenir: a régua é a validade da regra
A pergunta que resolve a maior parte dos casos é simples
Essa regra vale amanhã também?
Se vale, ela vira arquivo
Se é só pra este pedido, mensagem serve
Mensagem no chat é combinado temporário, e ele expira sem avisar
Se tu está montando o teu jeito de trabalhar do zero, vale ver o fluxo completo de um projeto pra entender onde cada tipo de decisão encaixa
Sintoma 3: são regras demais e ele cumpre só algumas
Aqui o CLAUDE.md está lá, bonitão, completão
Com regra pra tudo quanto é canto
E ele cumpre uma parte, ignora outra, sem tu conseguir prever qual
A causa: densidade de instruções
O benchmark IFScale mede exatamente isso: o que acontece com a aderência conforme a densidade de instruções cresce, usando até 500 instruções de inclusão de palavra-chave
O resultado é meio brutal: mesmo os melhores modelos de fronteira chegam a apenas 68% de acurácia na densidade máxima de 500 instruções
O estudo identificou três padrões distintos de degradação, ou seja, três FORMATOS de curva que a queda pode assumir:
- decaimento por limiar: desempenho quase perfeito até uma densidade crítica, e depois variância crescente
- decaimento linear
- decaimento exponencial
E observou um viés a favor das instruções que vieram antes
Agora presta atenção nesta parte, porque é fácil se enrolar: são estudos diferentes, medindo coisas diferentes
O IFScale cataloga o formato da curva de cada caso (tem caso que desce reto, tem caso que despenca), enquanto o benchmark Instruction Stacking Collapse olha a taxa de cumprimento no agregado, conforme a contagem de instruções sobe
Esse segundo benchmark empilha instruções verificadas por verificador, de uma a vinte por vez, em três LLMs de produção, e chega numa conclusão na mesma direção: a aderência degrada de forma NÃO linear conforme a contagem de instruções sobe
Não linear aqui quer dizer que o custo não é fixo por regra
A regra número 30 não custa o mesmo que a número 3
A solução: cortar, sem dó
O CLAUDE.md é carregado por inteiro, independente do tamanho
Mas arquivo mais curto produz aderência melhor, e a recomendação oficial é manter cada CLAUDE.md abaixo de 200 linhas, justamente porque arquivo maior consome mais contexto e derruba a aderência
Então a pergunta não é "o que mais eu posso escrever aqui"
É "o que aqui dentro não precisa estar em TODA sessão"
Pra prevenir: olhe o que foi carregado de verdade
O comando /context mostra uma quebra ao vivo do uso do contexto por categoria, com sugestões de otimização, incluindo quais arquivos CLAUDE.md e de auto memory foram carregados
Vale rodar antes de sair culpando o modelo, sério
Muita "instrução ignorada" é instrução que nem entrou
Sintoma 4: a regra está escrita e mesmo assim não é seguida
Agora a gente sai do esquecimento e entra na ambiguidade
Esse sintoma é diferente dos outros três: a instrução ESTÁ no contexto, tu confirmou no /context, e ainda assim ele faz outra coisa
A causa: dois arquivos falando coisas diferentes
Os arquivos CLAUDE.md existem em níveis de escopo
Tem o de managed policy, o de usuário em ~/.claude/CLAUDE.md e o de projeto em ./CLAUDE.md
Os caminhos de managed policy mudam por sistema operacional:
| Nível | Caminho |
|---|---|
| Managed policy (macOS) | /Library/Application Support/ClaudeCode/CLAUDE.md |
| Managed policy (Linux/WSL) | /etc/claude-code/CLAUDE.md |
| Managed policy (Windows) | C:\Program Files\ClaudeCode\CLAUDE.md |
| Usuário | ~/.claude/CLAUDE.md |
| Projeto | ./CLAUDE.md |
E aqui está o ponto que quase ninguém percebe: esses níveis são ADITIVOS, e não existe regra dura de precedência entre eles
Quando duas instruções conflitam, o resultado depende de como o Claude interpreta
Ou seja: tu escreveu "sempre commitar ao terminar" no arquivo do projeto e "nunca commitar sem eu pedir" no arquivo de usuário, e agora está no chute
Não é esquecimento, é empate
A solução: resolver o conflito no papel
A orientação é escrever regras não conflitantes, ou declarar a precedência explicitamente no arquivo mais específico
Ou seja, se o projeto manda mais que o teu arquivo pessoal naquele ponto, escreva isso, com todas as letras, dentro do arquivo do projeto
Se o problema é um arquivo inteiro que não deveria estar entrando, existe o claudeMdExcludes
Ele pode ser definido em qualquer camada de settings (usuário, projeto, local ou managed policy) e os arrays são mesclados entre as camadas
Uma ressalva importante: CLAUDE.md de managed policy não pode ser excluído
E quando quem briga com você é a memória automática?
O Claude Code tem dois sistemas de memória complementares
Os arquivos CLAUDE.md, que tu escreve
E a Auto memory, que são notas que o próprio Claude salva
Os dois são carregados no início de toda conversa, então uma nota antiga salva por ele pode estar contradizendo a regra que tu acabou de escrever
O comando /memory abre a memória dentro da sessão e deixa navegar a pasta de auto memory, que é markdown puro: dá pra ler, editar ou apagar na mão
O mesmo /memory tem o toggle de auto memory, que grava autoMemoryEnabled nas configurações do usuário em ~/.claude/settings.json
Antes de reescrever a tua regra pela quinta vez, dá uma lida no que ele anotou sobre você 👀
Onde colocar cada tipo de regra para ela valer o tempo todo
Beleza, e o mapa prático?
A régua oficial é por FREQUÊNCIA de uso, não por importância
| Tipo de conteúdo | Onde mora | Quando carrega |
|---|---|---|
| O que toda sessão precisa (comandos de build, convenções de teste, arquitetura) | CLAUDE.md |
No início da sessão, sempre |
| O que vale só pra certos arquivos | .claude/rules/ com frontmatter paths: |
Quando um arquivo casa com o glob |
| Regra modular que vale sempre | .claude/rules/ sem paths: |
No início da sessão |
| O que ele só precisa às vezes (documentação de API, checklist de deploy) | Skill acionada por comando | Sob demanda |
A regra modular fica assim:
---
paths:
- "src/components/**/*.tsx"
---
Componente novo sempre com tipagem explícita das props
Sem o paths:, ela carrega no começo da sessão
Com o paths:, ela só entra quando um arquivo que casa com o glob aparece no contexto
E subdiretórios são descobertos automaticamente, então .claude/rules/frontend/react.md funciona sem tu registrar nada
Massa, né? Isso resolve o Sintoma 3 de graça: tu tira do CLAUDE.md tudo que é situacional e o arquivo principal encolhe
E se eu quiser injeção garantida em toda mensagem?
Existe esse caminho, mas ele tem um preço
O hook UserPromptSubmit roda toda vez que tu envia um prompt, antes do Claude processar
Ele permite injetar contexto pelo campo additionalContext, que entra como system reminder e é lido como texto puro
O detalhe que dói: ele BLOQUEIA o processamento até terminar, e tem timeout padrão de 30 segundos, bem menor que os 600 segundos padrão da maioria dos outros eventos
Então isso não é lugar pra script lento
Tome cuidado: cada mensagem tua passa por ali
Conclusão: o que fazer na próxima vez que ele ignorar a regra
A régua que fecha tudo é essa
Mensagem no chat é combinado temporário
Arquivo é combinado permanente
O Claude Code não está sendo teimoso quando ignora instruções: ou o texto saiu do contexto (compactação, turno do meio), ou ele está no meio de um empate que você não desempatou
Na próxima vez que acontecer, faz nesta ordem:
- Rode
/contextpra ver o que foi realmente carregado, por categoria, incluindo quais CLAUDE.md e arquivos de auto memory entraram. O erro comum aqui é pular esse passo e reescrever a regra que já estava lá, só que perdida no meio de um monte de outras - Mova a regra que se perdeu pro CLAUDE.md da RAIZ do projeto, que é o que é reinjetado depois da compactação. O erro comum: deixar ela num CLAUDE.md de subpasta e achar que está resolvido, quando aninhado não volta sozinho
- Corte o arquivo pra ficar abaixo de 200 linhas, que é a recomendação oficial. O erro comum é confundir "carregado por inteiro" com "seguido por inteiro": ele lê tudo, mas a aderência cai conforme a densidade sobe
- Mande o resto pro lugar certo: regra por tipo de arquivo vai pra
.claude/rules/compaths:, e conteúdo eventual vira skill acionada por comando
E se depois disso a regra continuar sendo ignorada, aí é hora de checar o /memory e ver se tem uma nota antiga discordando de você
Faça o teste! Na maioria das vezes o problema não era a regra, era o endereço dela
Até o próximo post!
Perguntas frequentes
Qual a diferença entre CLAUDE.md e Auto memory no Claude Code?
CLAUDE.md são arquivos que você escreve à mão, e Auto memory são notas que o próprio Claude salva sozinho. Os dois são carregados juntos no início de toda conversa, então funcionam como memórias complementares, não concorrentes.
Onde fica o arquivo CLAUDE.md de nível usuário no Windows?
No Windows, o CLAUDE.md de usuário fica em ~/.claude/CLAUDE.md, e o de managed policy fica em C:\Program Files\ClaudeCode\CLAUDE.md. Já o CLAUDE.md de projeto mora na raiz do repositório, em ./CLAUDE.md.
CLAUDE.md em subpasta recarrega sozinho depois do /compact?
Não. Só o CLAUDE.md da raiz do projeto é reinjetado automaticamente depois da compactação. CLAUDE.md aninhado em subpasta e regras com frontmatter paths voltam somente quando o Claude ler de novo um arquivo daquela subpasta ou que case com o padrão da regra.
Como saber quais arquivos CLAUDE.md foram carregados numa sessão?
O comando /context mostra uma quebra ao vivo do uso do contexto por categoria, incluindo quais arquivos CLAUDE.md e de auto memory entraram na sessão. Ele também traz sugestões de otimização quando o contexto está pesado.
Existe um limite de linhas recomendado para o CLAUDE.md?
Sim, a recomendação oficial é manter cada CLAUDE.md abaixo de 200 linhas. Arquivo maior consome mais contexto e reduz a aderência às instruções, mesmo sendo carregado por inteiro independente do tamanho.
Onde colocar conteúdo que só é usado às vezes, tipo checklist de deploy?
A orientação oficial é usar skills acionadas por comando para esse tipo de conteúdo, e não empilhar no CLAUDE.md. O CLAUDE.md fica reservado pro que toda sessão precisa, como comandos de build, convenções de teste e arquitetura.
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares
As diferenças de var, let e const
Como fazer redirecionamento com PHP
Neste artigo você vai aprender a como fazer redirecionamento com PHP, utilizaremos abordagens fáceis de entender e de aplicar Fala programador(a), beleza? Bora aprender mais […]
Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação
Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação A popularidade da automação de processos com o n8n está em alta, principalmente […]
