Claude Code não lê os arquivos? Como saber se ele leu o projeto ou chutou a resposta

Claude Code não lê os arquivos em toda pergunta, e a resposta genérica chega tão rápido que parece revisão de verdade. Os sinais dão pra reconhecer: nenhum caminho real citado, velocidade incompatível com o tamanho do pedido, e o @ em pasta que entrega só a listagem, nunca o conteúdo. Pra conferir, Ctrl+O abre o visualizador de transcrição e alterna o modo verboso, e o /context mostra o que está ocupando a sessão. Pra forçar leitura antes da resposta: referenciar arquivo a arquivo com @, rodar em plan mode e auditar o transcript antes de aceitar qualquer edição
A resposta chegou em três segundos, veio bem escrita, bem estruturada, com bullet e tudo
E não citou um único arquivo do seu projeto
O problema aqui não é o Claude Code estar errado (às vezes ele até acerta no chute, e é isso que confunde), o problema é você não conseguir separar leitura real de padrão genérico ANTES de aplicar a sugestão no código
Porque uma resposta tirada do padrão do framework parece idêntica a uma resposta tirada do seu repositório
Aí você aplica, quebra, e só descobre depois
Bora aprender a reconhecer os sinais? 🙂
Sinal 1: resposta genérica que nunca cita um arquivo do seu projeto
O sintoma: a resposta fala de "seu componente", "sua config", "o seu handler" e nunca nomeia um caminho, uma função ou uma linha que existam de verdade no repositório
É vago com cara de específico
A causa provável: o modelo respondeu do padrão da linguagem ou do framework, sem abrir arquivo nenhum
Ele sabe como um projeto Next "costuma" ser, e isso basta pra montar uma resposta plausível
A solução: confira o transcript
O Ctrl+O abre o visualizador de transcrição e alterna o modo verboso, mostrando o raciocínio em texto cinza itálico (que fica recolhido por padrão)
Se não existiu chamada de leitura antes da resposta, você acabou de descobrir que aquilo ali não veio do seu código
Pra prevenir: peça o comprovante junto com a resposta
Algo como "me diga o caminho do arquivo e cole o trecho que embasou essa conclusão"
Quando não tem trecho pra colar, a coisa aparece na hora
Sinal 2: velocidade incompatível com o tamanho do pedido
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!
O sintoma: você pediu algo que exige varrer o codebase inteiro, tipo "onde esse estado é mutado?", e a resposta veio quase instantânea
Rápido demais é suspeito
Varrer projeto custa tempo, e tempo aqui é sinal de trabalho feito
A causa provável: nenhuma etapa de busca ou exploração rodou
Ele pulou direto pro texto final
A solução: ligue o modo verboso e olhe o que realmente aconteceu
O Ctrl+O alterna o verboso na sessão, e a flag --verbose mostra a saída COMPLETA das ferramentas em vez de resumos truncados
claude --verbose
Essa flag está disponível a partir da v2.1.119, o padrão do ajuste é false e ela sobrepõe o ajuste apenas para aquela sessão
Se preferir, o mesmo item aparece no /config como "Verbose output"
Pra prevenir: deixe o verbose ligado enquanto você ainda está calibrando confiança num projeto novo
Depois que você já sabe o padrão de comportamento dele ali, dá pra desligar e viver em paz
Sinal 3: ele leu a pasta, não os arquivos
O sintoma: o Claude parece conhecer a estrutura do projeto, fala o nome das pastas certinho, e mesmo assim erra o conteúdo de um arquivo que ele "acabou de ver"
Esse é o mais traiçoeiro dos sinais, porque a estrutura correta te dá a sensação de leitura real
A causa: aqui não é bug nem chute, é comportamento documentado do @
E ele muda conforme o que você referencia:
@em ARQUIVO inclui o conteúdo completo do arquivo na conversa@em DIRETÓRIO fornece apenas a LISTAGEM do diretório, não o conteúdo
Ou seja: @src/ não é "leia src", é "veja os nomes que existem dentro de src"
A diferença é enorme e passa batido fácil
A solução: referencie os arquivos um a um
Dá pra referenciar vários na mesma mensagem, e ao digitar @ abre um menu de sugestão de caminho pra te ajudar a montar isso rápido
revise o fluxo de login em @src/auth/session.ts e @src/auth/middleware.ts
Um detalhe bom de saber: referências @ também trazem o CLAUDE.md da pasta do arquivo e das pastas pai
Pra prevenir: nunca trate @pasta como "ele leu a pasta inteira"
Tome cuidado com isso, é o tipo de suposição que vira uma sessão inteira de resposta errada
Sinal 4: ele leu o arquivo e ignorou as instruções que estavam dentro dele
O sintoma: dessa vez a leitura ACONTECEU, você viu no transcript, e mesmo assim a regra escrita dentro do arquivo não foi obedecida
Você deixou lá "nunca edite migrations aplicadas" e ele editou
A causa: leitura não é adesão
O conteúdo entrar no contexto não garante que a instrução vai ser seguida, e isso não é impressão sua, é comportamento reportado publicamente
No repositório anthropics/claude-code existe a issue "Claude reads files but ignores actionable instructions contained in them" (#32290), aberta como bug, que é exatamente esse cenário
E tem também a issue "Need a way to enforce entire file reading" (#2595), um pedido aberto da comunidade por uma forma de forçar a leitura integral de arquivos
Duas issues, dois lados do mesmo desconforto: ler tudo, e obedecer o que leu
A solução e a prevenção são a mesma coisa: repita a regra crítica DENTRO do prompt, não confie que o arquivo lido basta
Se a regra é inegociável (não tocar em banco, não mexer em rotas de pagamento), ela vai na mensagem, em caixa alta se precisar
Regra crítica em arquivo é lembrete, regra crítica no prompt é ordem
Esse cuidado vale dobrado quando o agente encosta em coisa irreversível, que é o caso de delegar mudanças no banco de dados
Sinal 5: contexto estourado, memória curta no meio da sessão
O sintoma: no começo da sessão ele acertava os arquivos, citava caminho certo, sabia o que tinha lido
Duas horas depois, começou a chutar
Mesmo projeto, mesma pessoa perguntando, qualidade despencou
A causa: a composição do contexto mudou ao longo da conversa
O que estava lá no começo foi ficando espremido por tudo que veio depois
A solução é olhar e agir, nessa ordem:
/contextreporta o que está ocupando o contexto da sessão/compactresume as mensagens mais antigas preservando o contexto importante/clearencerra a conversa e começa uma sessão nova, e a conversa anterior fica preservada e pode ser retomada depois
Pra prevenir: recomece limpo ANTES de tarefas que dependem de leitura fiel
Não adianta pedir uma auditoria de arquitetura no finzinho de uma sessão gigante que já passou por três assuntos diferentes
Sessão nova custa alguns segundos, resposta chutada custa uma tarde
Como forçar a leitura antes da resposta, na prática
Beleza, os sinais você já sabe reconhecer
Agora o fluxo pra não depender de sorte:
- Referencie o arquivo com
@, um a um
Digite @ e o menu de sugestão de caminho abre
Lembra que arquivo entra com conteúdo completo e pasta entra só como listagem
E que as referências @ também puxam o CLAUDE.md da pasta do arquivo e das pastas pai
O erro comum deste passo: referenciar a pasta achando que resolveu
- Entre em plan mode antes de pedir qualquer coisa séria
O Shift+Tab alterna os modos de permissão no meio da sessão, no ciclo default → acceptEdits → plan
Dá pra já abrir a sessão direto nele também:
claude --permission-mode plan
No plan mode ele explora o codebase e produz um plano SEM editar
As edições de arquivo nunca são auto-aprovadas ali, mesmo com regra de allow
A partir da v2.1.212, comandos de shell que modificam arquivos (touch, rm) também passam pelo canUseTool
O erro comum deste passo: passar do plano pro build no automático, sem ler o plano
O plano é justamente onde a leitura preguiçosa aparece, porque plano genérico denuncia leitura genérica
- Delegue a descoberta ao subagente Explore
O Claude Code tem um subagente Explore embutido, rápido e read-only, feito pra descoberta de arquivos, busca de código e exploração do codebase
O Claude delega a ele quando precisa entender o projeto sem alterar nada, e ao invocar especifica um nível de profundidade (quick, medium ou very thorough)
O erro comum deste passo: achar que o subagente carrega tudo que a sessão principal carrega
Não carrega
Os subagentes Explore e Plan pulam os arquivos CLAUDE.md e o git status da sessão pai, justamente pra manter a pesquisa rápida e barata
Então as suas convenções de projeto não estão valendo lá dentro do subagente
- Audite depois, pelo transcript
De novo o Ctrl+O
Com renderização em tela cheia, o ? dentro do visualizador lista os atalhos disponíveis
O erro comum deste passo: auditar só quando a resposta parece errada
A resposta chutada perigosa é a que parece CERTA
Trava automática: bloquear a resposta que não passou pela leitura
Esse aqui é nível avançado, pra quem quer garantia em vez de vigilância manual
A ideia é simples: em vez de você conferir o transcript toda vez, um hook confere por você
Hooks ficam no settings.json, que tem escopos user, project, local ou managed
E tem um detalhe MUITO bom aqui: o Claude Code recarrega o arquivo sem precisar reiniciar a sessão, edições em chaves como permissions e hooks valem na sessão em curso
Os dois pontos de interceptação que interessam pro nosso caso:
- PreToolUse: dispara antes da checagem de modo de permissão, em TODOS os modos, e bloqueia a chamada de ferramenta por padrão
- UserPromptSubmit: roda no envio do prompt e rejeita o prompt quando o hook bloqueia com exit code 2
O PreToolUse tem uma sutileza que muda o uso: com continueOnBlock: true ele devolve o motivo ao Claude como erro da ferramenta, e aí o agente se ajusta e segue em vez de simplesmente parar
É a diferença entre "não deixo" e "não deixo assim, faça diferente"
Do lado do UserPromptSubmit, atenção ao relógio: ele tem timeout de 30 segundos, contra o padrão de 10 minutos dos outros hooks
Hook lento ali não é opção
O erro comum deste passo: assumir que modo permissivo desliga o hook
Não desliga
Um permissionDecision: "deny" bloqueia mesmo em bypassPermissions ou com --dangerously-skip-permissions
Outro cuidado: sessões na nuvem (o Claude Code na web) NÃO leem o ~/.claude/settings.json local
Então a sua trava caprichada não te acompanha pra lá
Já apliquei a sugestão chutada: como voltar atrás
Acontece
Você aceitou a edição, o código mudou, e agora está claro que aquela resposta não olhou o projeto
A solução: /rewind
Ele lista cada prompt enviado na sessão e te deixa escolher o que restaurar:
- restaurar código e conversa
- restaurar a conversa mantendo o código atual
- restaurar o código mantendo a conversa
- resumir a partir daquele ponto, ou até ele
Essa granularidade é útil demais
Porque às vezes você quer manter a conversa (o contexto todo que vocês construíram) e jogar fora só as alterações no código
Pra prevenir: rode em plan mode enquanto a confiança na leitura ainda não está estabelecida
Plano ruim você descarta de graça, código ruim você desfaz na pressa
O que a prática mostra sobre confiar (ou não) na resposta do agente
Esse hábito de desconfiar da resposta rápida eu não peguei lendo doc, peguei apanhando
E ele aparece bem claro num vídeo que gravei testando o OpenCode, um cliente de terminal que roda com vários modelos
No vídeo eu desinstalei a ferramenta antes de gravar pra instalar do zero junto com quem estava assistindo
Mesmo assim ela abriu já com um modelo selecionado, o que eu atribuí a configurações salvas de uma instalação anterior
Ou seja: nem o estado da ferramenta era o que eu achava que era
Instalei via npm porque já tinha Node na máquina, copiei o comando, colei no terminal, enter
Depois conectei a minha própria assinatura do ChatGPT Plus como provedor de modelo: a ferramenta pede pra abrir um link, abre uma aba no navegador pra autorizar, e depois dá pra fechar a janela
Na hora de conectar dá pra escolher o nível de esforço de raciocínio, e eu fiquei no médio, porque quanto mais esforço, mais token consome (e dá pra trocar depois)
Dá pra alternar entre modelos já conectados, e tem modelos gratuitos de curadoria da equipe da ferramenta
Sobre esses gratuitos eu levantei a ressalva no vídeo: provavelmente você está compartilhando prompts e resultados, e eu disse abertamente que não li como isso funciona
Não vou fingir que li
Mas o pedaço que interessa pra este post é o primeiro teste que eu fiz
Não foi um projeto, não foi um refactor bonito de gravar
Foi um prompt trivial de LEITURA DO AMBIENTE: em qual pasta a gente está e quais arquivos existem aqui
A resposta veio com o diretório correto e a informação de que não havia arquivos ou pastas visíveis naquele momento
Pra mim isso foi o sinal verde de que a instalação estava certa
Só DEPOIS desse teste bobo eu parti pro prompt de projeto real, um portfólio pessoal em HTML, CSS e JavaScript, pra avaliar o desempenho em código
E é essa a ordem que eu recomendo em qualquer agente de terminal, o Claude Code incluído: pergunte primeiro algo cuja resposta você já sabe conferir com os próprios olhos
Se ele erra o trivial verificável, não é em cima da resposta complexa (que você NÃO consegue conferir) que você vai descobrir
Duas outras coisas que eu bati na tecla lá e valem aqui
A primeira: separar modo de planejamento de modo de construção muda o jogo, porque evita sair codando direto sem plano
A segunda: documentação oficial é a fonte fiel de informação, acima da perspectiva de qualquer usuário (inclusive a minha)
Eu falo o que vi, a doc fala o que é
Leia o site oficial antes de sair usando, sempre
Essa desconfiança calibrada também é o que separa quem usa a ferramenta com segurança de quem só torce pra dar certo, e vale mais ainda pra quem está começando sem base de programação, porque aí a resposta genérica é ainda mais difícil de flagrar
Quando exigir leitura e quando deixar o Claude Code responder direto
Agora o outro lado, porque exigir leitura em TODA pergunta custa tempo e contexto à toa
Se você referencia meio projeto pra perguntar o que faz um useEffect, você está queimando contexto que vai fazer falta depois
| Tipo de tarefa | Exigir leitura? | Por quê |
|---|---|---|
| Refatoração em codebase grande | Sim, sempre | A resposta depende de como AS SUAS peças conversam, e isso não está no padrão de nenhum framework |
| Bug em arquivo específico | Sim, com @ no arquivo |
Aqui a leitura é barata e certeira: um ou dois arquivos referenciados e pronto |
| Dúvida conceitual de linguagem | Não | Não tem nada seu pra ler, o conhecimento geral responde melhor e mais rápido |
| Revisão de arquitetura | Sim, via plan mode ou Explore | É o caso clássico de varredura ampla, e é onde o chute passa mais fácil por resposta boa |
| Escrever um teste do zero pra algo novo | Depende | Se o padrão de teste do projeto importa, referencie um teste existente como exemplo |
A régua mental é essa: a resposta depende do SEU código ou depende do mundo?
Se depende do seu código, sem leitura ela é chute com sotaque de certeza
Se depende do mundo, exigir leitura só deixa tudo mais lento
Conclusão
Quando bater aquela sensação de que o Claude Code não lê os arquivos, você não precisa adivinhar
Tem três checagens que resolvem quase tudo:
- Transcript:
Ctrl+Oe olhe se existiu chamada de leitura antes da resposta /context: veja o que está ocupando o contexto da sessão antes de culpar o modelo- Citação de caminho real: se a resposta não nomeia arquivo do seu projeto, trate como hipótese, não como diagnóstico
E o próximo passo concreto, pra fazer hoje ainda: abra a próxima sessão em plan mode com claude --permission-mode plan e confira o transcript UMA vez antes de aceitar qualquer edição
Uma vez só já te mostra o padrão de comportamento dele no seu projeto
Depois disso você para de desconfiar no escuro e passa a desconfiar com prova, que é bem diferente 😀
até o próximo post!
Perguntas frequentes
Como saber se o Claude Code realmente leu um arquivo antes de responder?
Abra o transcript com Ctrl+O e veja se existiu uma chamada de leitura antes do texto final. Se não teve leitura registrada ali, a resposta veio do padrão geral do framework, não do seu código. Pedir o caminho do arquivo e o trecho que embasou a resposta também expõe isso na hora.
Qual a diferença entre referenciar um arquivo e uma pasta com @ no Claude Code?
@ em arquivo injeta o conteúdo completo dele na conversa. @ em diretório só traz a listagem de nomes que existem ali dentro, não o conteúdo dos arquivos. Por isso @src/ nunca deve ser lido como ‘ele leu tudo dentro de src’.
Por que o Claude Code lê o arquivo certo e mesmo assim ignora uma regra escrita nele?
Porque leitura e adesão são coisas diferentes: o conteúdo entrar no contexto não garante que a instrução vai ser seguida. Esse comportamento está documentado na issue #32290 do repositório anthropics/claude-code. A prevenção é repetir a regra crítica dentro do próprio prompt, não só deixá-la no arquivo.
Dá pra forçar o Claude Code a ler um arquivo inteiro?
Hoje não existe esse controle nativo, e esse é justamente o pedido feito na issue #2595 (Need a way to enforce entire file reading) no repositório anthropics/claude-code. Enquanto isso não muda, referenciar o arquivo com @ e conferir pelo transcript é o jeito de reduzir a incerteza.
O que fazer quando o Claude Code começa a chutar no meio de uma sessão longa?
Primeiro rode /context para ver o que está ocupando o contexto da sessão. Depois use /compact para resumir mensagens antigas preservando o que importa, ou /clear para começar uma sessão nova (a conversa anterior fica preservada e pode ser retomada depois).
A flag –verbose do Claude Code deixa a resposta mais lenta?
Não, ela só muda o que aparece na tela: em vez de resumos truncados, mostra a saída completa das ferramentas. Está disponível a partir da v2.1.119, vem desativada por padrão e vale só para aquela sessão; o mesmo ajuste aparece no /config como ‘Verbose output’.
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 […]
