Quando o trabalho trava enquanto você usa o Claude, o primeiro reflexo é pesquisar exatamente a mensagem que apareceu. Só que a busca quase não devolve nada — existem mensagens assim. Estas, por exemplo.

The model returned no content because the response was blocked by content filtering
The response was blocked by the provider's content filter
Streaming response ended before any complete data was received
Could not locate the Claude CLI on PATH
Connection to Claude's response was lost. Claude may still be working

O que todas têm em comum é isto: apareceram durante o uso do Claude, mas não são encontradas (ao menos aparentemente) na documentação oficial do Claude. O motivo é bem claro: quem escreveu a mensagem que está na sua tela não é necessariamente o programa que você imagina.

O caminho até o Claude já não é um só. O claude do terminal, a extensão da IDE, outro agente como o OpenCode, o uso via GitHub Copilotcada um decide por conta própria como falar quando algo falha. Diante do mesmo acontecimento, a frase muda conforme a camada que a escreveu.

Este artigo não explica cada causa do zero. Ele é a porta de entrada para identificar quem escreveu a mensagem e encaminhar você ao artigo certo. Os detalhes ficam com os artigos já publicados; aqui tratamos apenas da identificação da origem. O que foi confirmado em fontes primárias e o que não foi aparecem separados.

Direto ao ponto
① Primeiro movimento
Comparar com o catálogo oficial

O Claude Code lista oficialmente as mensagens que ele mesmo exibe. Haver ou não correspondência exata já reduz a camada que escreveu. Faça isso antes de deduzir a causa.

② A armadilha
O culpado apontado erra

A mensagem de ferramentas de terceiros aponta uma causa, mas há casos registrados em issues públicas em que esse apontamento diverge da realidade. Acreditar na frase leva a consertar outro lugar.

③ A aparência não denuncia
Duas das cinco eram oficiais

Ao conferir de fato as cinco mensagens do começo, duas estavam na referência oficial de erros do Claude Code. Pelo tom da frase não se acerta a camada.

1. O primeiro passo — procurar correspondência exata no catálogo oficial

Antes de deduzir a causa há algo a fazer: verificar se aquela mensagem pertence ao vocabulário do próprio Claude Code.

O Claude Code tem uma referência oficial de erros, e nela estão enumeradas de forma abrangente as mensagens que o Claude Code exibe na tela. Autenticação, limite de taxa, estouro de contexto, rede, streaming, MCP, plugins — todas aparecem com o texto exibido tal e qual. Por isso, saber se a string que você viu está lá não é palpite: é comparação.

Resultado A
Houve correspondência exata

É do próprio Claude Code ou uma mensagem que a documentação oficial classifica como emitida por quem o inicia. A explicação e a solução oficiais servem diretamente. Duas das cinco do começo estavam nesse caso.

Resultado B
Parecida, mas não idêntica

É provável que outro programa a tenha reescrito. Nessa reescrita costuma ser acrescentado um culpado, então esse apontamento não deve ser aceito sem verificação.

Resultado C
Não há nem sombra dela

Essa mensagem pertence ao vocabulário da ferramenta que você usa. O lugar a procurar não é o material da Anthropic, e sim o repositório e as issues dessa ferramenta.

Dizer “Claude” não transforma a frase em texto da Anthropic. A presença das palavras Claude ou model indica apenas que aquela ferramenta chama o Claude, não que a Anthropic escreveu a frase. E existe o inverso: uma mensagem emitida por um programa da Anthropic que não consta no corpo principal do catálogo oficial (capítulo 5).

2. Quem escreve a mensagem de erro é uma destas quatro camadas

Ao decompor o caminho de uso do Claude, há quatro lugares capazes de escrever uma string quando algo falha. A camada que escreveu muda tanto a leitura quanto o alvo da correção.

Camada ①
O backend que fornece o modelo

Além da API da Anthropic, o Amazon Bedrock, o Google Vertex AI, o gateway do GitHub Copilot e outros. Com frequência o status HTTP e o error.message do JSON vão direto para a tela.

Exemplo: Output blocked by content filtering policy

Camada ②
O próprio Claude Code

Nota que a CLI acrescenta por decisão própria. Estar palavra por palavra na referência oficial de erros é a marca desta camada, e o sentido e o procedimento de recuperação estão documentados.

Exemplo: Streaming response ended before any complete data was received

Camada ③
O programa que inicia (extensão de IDE, wrapper)

Emitida por quem tentou iniciar o Claude Code e falhou. A referência oficial coloca isso num capítulo separado, “Wrapper and IDE errors”, e explica que são mensagens impressas pelo programa que faz a inicialização, e não pelo próprio Claude Code.

Exemplo: Could not locate the Claude CLI on PATH

Camada ④
Cliente de terceiros

Outro agente que chama o Claude como modelo. A frase é escrita pelo próprio projeto e não existe no catálogo oficial. Costuma nomear a causa, mas às vezes erra o alvo.

Exemplo: The response was blocked by the provider's content filter

Dessas quatro, a mais fácil de ler errado é a camada ④. As camadas ① a ③ tendem a descrever “o que aconteceu”, ao passo que a frase da camada ④ muitas vezes afirma até “por que aconteceu”. Só que essa afirmação é apenas a suposição daquela ferramenta. O próximo capítulo trata de um caso real.

3. Quando aparece “content filter”, de quem é esse filtro

Duas das cinco mensagens listadas no começo dizem que “a resposta foi bloqueada por um filtro de conteúdo”. É aqui que a troca é mais fácil de acontecer, porque usar o Claude não significa que quem barrou foi o filtro da Anthropic.

3-1. The model returned no content because the response was blocked by content filtering

🟡 Origem (apenas observada): a única fonte primária em que essa string foi confirmada palavra por palavra é a issue #3348 de github/copilot-cli, no repositório do próprio GitHub. O título é “Repeated 'The model returned no content because the response was blocked by content filtering' on legitimate technical reasoning turns”, com a string embutida. Só que o autor retirou o corpo do relato, não há resposta técnica de mantenedores e o status é closed as not planned. Essa string em si não aparece na documentação pública do GitHub. Por isso este artigo não afirma nada além de “é uma mensagem relatada no GitHub Copilot CLI”.

Por outro lado, ✅ há uma coisa que se pode afirmar com segurança. A documentação oficial do GitHub, “Hosting of models for GitHub Copilot”, diz o seguinte sobre o uso do Claude.

“Mesmo ao usar o Claude, os prompts de entrada e as complementações de saída continuam passando pelos filtros de conteúdo do GitHub Copilot — o filtro de correspondência com código público (quando aplicável) e o filtro de conteúdo nocivo ou ofensivo.”

Ou seja, quando você usa o Claude via Copilot, existe também do lado do GitHub um filtro capaz de barrar a saída. A mesma página ainda descreve a hospedagem dos modelos Claude disponíveis no Copilot como “Amazon Web Services, Anthropic PBC, and Google Cloud Platform” — isto é, não é certo que a configuração esteja chamando diretamente o api.anthropic.com da Anthropic.

Por isso a solução muda. O Output blocked by content filtering policy que aparece diretamente na API da Anthropic ou no Claude Code tem como causa principal o filtro de saída que impede a reprodução de obras existentes, e a solução vai na direção de “não deixar copiar literalmente” (→ causas e solução de Output blocked by content filtering policy). No caminho via Copilot, porém, o próprio GitHub escreve que também observa a “correspondência com código público”. Se o trabalho produz saída parecida com código existente, pode ser ali que a coisa parou. A mesma expressão “content filtering” não garante que o objeto observado seja o mesmo.

Um único teste basta para isolar. Rode o mesmo prompt também no claude do terminal (o caminho que liga direto à Anthropic). Se lá passa e só o Copilot CLI barra, quem barrou não foi o filtro da Anthropic. Se barra nos dois, é provável que a decisão venha do lado que fornece o modelo.

3-2. The response was blocked by the provider's content filter

✅ Origem (confirmada): essa string é do OpenCode (um agente de codificação de código aberto). Na issue #35736 do repositório anomalyco/opencode, a frase está relatada palavra por palavra.

E é justamente essa issue o exemplo que este artigo mais quer transmitir. O título, traduzido, fica assim: “erros do provedor Vertex (404, socket rompido, stop_reason:refusal) afloram todos como o mesmo ‘blocked by content filter’”.

Realidade 1
404 NOT_FOUND

O modelo não existe na região configurada. O exemplo da issue é claude-opus-4-8@default. Isso é só erro de configuração e não tem relação nenhuma com filtro.

Realidade 2
Socket rompido, conexão reiniciada

Quando a conexão com a API do Vertex cai durante uma sessão longa. É um evento de rede, e o conteúdo da saída nem chegou a ser avaliado.

Realidade 3
Recusa de verdade

Quando a resposta volta com HTTP 200 acompanhada de stop_reason: refusal e de uma categoria de segurança (no exemplo da issue, cyber). Só esta corresponde ao que a frase diz.

Das três, só uma torna a frase correta. Ainda assim, a tela mostra sempre o mesmo texto. É por isso que não se deve aceitar sem verificar a frase da camada ④ — se você ler “bloqueado pelo filtro” e reescrever o texto de forma mais branda, nada se resolve enquanto a realidade for um 404. O que precisa mudar é a configuração de ID de modelo e região.

No mesmo repositório também está aberta a issue #35643, “mesmo quando o filtro de conteúdo bloqueia a saída, o que foi gerado é cobrado”. As duas estavam abertas quando este artigo foi escrito.

🟡 O que não foi possível confirmar: em que ponto do código-fonte do OpenCode essa string é montada não consta na issue e não pôde ser identificado. A issue menciona o PR #31745 como correção parcial anterior, mas o sentido do relato é que ainda não se distinguem as três falhas.

A ordem para testar agora é esta. ① confirmar se o ID de modelo e a região configurados formam uma combinação existente; ② ver se reproduz com o mesmo prompt ou se é esporádico (se for esporádico, é do lado da conexão); ③ se der para capturar a resposta bruta, olhar o stop_reason. Só quando ③ mostrar refusal é que se pode tratar como problema de conteúdo.

4. Streaming response ended before any complete data was received — esta era uma mensagem do próprio Claude Code

A partir daqui tratamos das duas que parecem de ferramentas de terceiros mas eram, na verdade, vocabulário oficial do Claude Code.

✅ Confirmado: essa string existe como item na referência oficial de erros do Claude Code. E a explicação oficial é diferente do que a maioria imagina.

“A API devolveu os cabeçalhos da resposta, mas o corpo da resposta não continha uma mensagem da API do Claude.”

Ou seja, não é “veio até certo ponto e cortou”, e sim “não veio conteúdo nenhum”. Por causa das palavras Streaming e ended, é fácil ler como uma queda no meio do fluxo da resposta, mas a definição oficial aponta para o estado em que só os cabeçalhos voltaram e o corpo veio vazio. Confundir isso leva a testar medidas contra desconexão indefinidamente.

A solução indicada pela documentação oficial tem dois passos. ① enviar de novo — a mensagem original continua na conversa, então não é preciso colar outra vez um prompt longo: basta digitar try again. ② se acontece sempre igual, suspeitar da rede, do proxy ou do gateway do provedor — a documentação oficial encaminha para o item “Unable to connect to API”.

Quem sustenta essa leitura são os itens irmãos que aparecem ao lado. A referência oficial traz API returned an empty or malformed response (os cabeçalhos indicam sucesso, mas o corpo não é uma mensagem válida da API do Claude) e ainda Bedrock streaming response has content-type "..."; expected "application/vnd.amazon.eventstream", um item que nomeia explicitamente o tipo errado devolvido pelo gateway. Todo esse grupo é da família “o 200 voltou, mas o conteúdo não é a resposta do Claude”.

O lado em que nada de conteúdo chegou

Streaming response ended before any complete data was received
API returned an empty or malformed response

O que se suspeita é do caminho. Proxy corporativo, terminação TLS, gateway de API, o intermediário que fica à frente do Bedrock ou do Vertex. → artigo sobre erros de rede, proxy e certificado TLS

O lado em que cortou depois de já haver saída

Connection lost mid-response
The response stopped arriving

Aqui o que apareceu na tela permanece e dá para retomar de onde parou com continue. → artigo sobre Connection lost mid-response

5. Could not locate the Claude CLI on PATH — a mensagem que a documentação oficial classifica como “emitida por quem inicia”

✅ Confirmado: essa string também está na referência oficial de erros. Mas o lugar em que ela aparece é o que importa: está em um capítulo separado chamado “Wrapper and IDE errors”. A documentação oficial explica esse capítulo como erros impressos pelo programa que faz a inicialização, e não pelo próprio Claude Code.

A definição oficial é “o programa que faz a inicialização não conseguiu encontrar o comando claude no PATH do sistema”. As duas soluções indicadas são estas.

  • Reinstalar. O instalador adiciona o claude ao PATH
  • Colocar o diretório de instalação no PATH. No macOS e no Linux costuma ser ~/.local/bin ou /usr/local/bin; no Windows, normalmente %APPDATA%\Anthropic\Claude\bin ou C:\Program Files\Anthropic\Claude\bin

Só que — a frase que realmente aparece na tela pode ser mais longa que o título do catálogo oficial. Na issue #80087 de anthropics/claude-code, o texto real emitido pela extensão do VS Code está registrado palavra por palavra.

Could not locate the Claude CLI on PATH. Launching by name in a PowerShell terminal would run a 'claude' from the open folder instead of the installed CLI, so the launch was blocked. Make sure the Claude CLI's install directory is on your system PATH (not only your PowerShell profile), then restart VS Code and try again.

A segunda metade é uma explicação que a extensão acrescentou por conta própria. É por isso que a busca não retorna nada, e o certo é pesquisar apenas a primeira frase. Isso vale para as mensagens da camada ③ em geral: quem inicia enxerta as próprias circunstâncias no título oficial.

🟡 O que a issue #80087 relata (inclui pontos não confirmados): o autor está no Windows 11 e diz que o claude do terminal funciona normalmente, mas só a extensão falha. Funcionava na v2.1.212 e reproduziu na v2.1.214 e na v2.1.217, então ele supõe uma regressão introduzida na v2.1.214. Suspeita-se, como causa, do tratamento da saída do where.exe do Windows (em ambientes cujo nome de usuário contém caracteres não ASCII), mas isso é a suposição do autor, não uma causa confirmada. A issue estava aberta quando este artigo foi escrito, e como contorno é citado fixar a extensão na v2.1.212.

Uma linha basta para isolar. Digite claude --version no terminal. Se a versão aparece e só a extensão falha, o que está quebrado não é a CLI, e sim o PATH que o programa iniciador enxerga. Quando o editor é aberto pelo ícone, o PATH que aquele processo recebe pode ser diferente do PATH montado pelo shell de login. O caso em que a instalação sequer foi concluída está reunido no artigo sobre command not found.

6. A mensagem cuja origem não foi identificada e quatro passos para descobrir sozinho

Sobre uma das cinco do começo — Connection to Claude's response was lost. Claude may still be working🔴 não foi possível identificar a origem. Este artigo não cita nomes aqui.

O que foi verificado e o resultado ficam registrados. Todos os itens da referência oficial de erros do Claude Code foram percorridos e essa string não estava lá. A documentação oficial do Remote Control (o recurso de continuar a sessão local pelo celular ou pelo navegador) também foi lida por inteiro e, igualmente, não a continha. No material oficial, o que mais se aproxima em sonoridade são Connection lost mid-response e Couldn't reconnect to your Remote Control session, e a string não coincide com nenhuma das duas.

Portanto, a camada é ③ ou ④, mas não foi possível confirmar qual ferramenta a escreveu. A formulação “Claude may still be working” (o Claude pode ainda estar trabalhando) sugere que quem escreveu a frase não é quem está executando o Claude — está olhando de fora para outro processo ou outra máquina —, mas isso é 🟡 uma dedução a partir do uso da língua, sem confirmação.

Fica aqui o procedimento com que o leitor pode decidir sozinho em casos assim. Ele serve tal e qual para todos os casos dos capítulos anteriores.

Passo 1
Ver onde ela foi desenhada

Ela apareceu misturada ao fluxo da resposta do Claude ou na moldura, na notificação ou no painel de fora? Se foi por fora, quem escreveu é a camada ③ ou a ④.

Passo 2
Reproduzir no claude puro

Rode o mesmo trabalho no claude do terminal. Se não reproduz, a frase é daquela ferramenta. Se reproduz, desça para a camada ① ou a ②.

Passo 3
Procurar correspondência exata no catálogo oficial

Busque dentro da página da referência oficial de erros. Use como termo de busca apenas a primeira frase — a segunda metade pode ter sido enxertada por quem inicia (capítulo 5).

Passo 4
Pesquisar as issues daquela ferramenta

Se não está no oficial, o lugar a procurar não é o material da Anthropic. Busque pela string nas issues do repositório da ferramenta que você usa. A identificação de origem deste artigo foi feita assim.

7. Tabela de correspondência — da mensagem ao destino

As conclusões até aqui cabem em uma tabela. A coluna “quem escreveu” é o que decide até onde a frase pode ser levada a sério.

Mensagem exibida Quem escreveu O que está acontecendo de verdade Destino
The model returned no content because the response was blocked by content filtering 🟡 Camada ④
mensagem relatada no GitHub Copilot CLI
A saída está sendo barrada por um filtro. Só que pode ser o filtro do lado do GitHub (que também observa a correspondência com código público) artigo do filtro de saída
The response was blocked by the provider's content filter ✅ Camada ④
OpenCode
Há três possibilidades — 404 do ID de modelo, queda de conexão, recusa de verdade. Só a terceira corresponde à frase o isolamento do capítulo 3
Streaming response ended before any complete data was received ✅ Camada ②
o próprio Claude Code (oficial)
Os cabeçalhos chegaram, mas o corpo veio vazio. Não cortou no meio. Suspeitar do caminho (proxy, gateway) artigo de rede e proxy
Could not locate the Claude CLI on PATH ✅ Camada ③
quem inicia (explicitado no material oficial)
Não há claude no PATH que o iniciador enxerga. Na maioria das vezes a própria CLI está sadia artigo do command not found
Connection to Claude's response was lost. Claude may still be working 🔴 Não identificado
não está no catálogo oficial
Indefinido. No oficial, o que mais se aproxima em sonoridade é Connection lost mid-response os quatro passos do capítulo 6 / artigo da mensagem oficial mais próxima

Lendo a tabela na horizontal, dá para ver que só as duas linhas da camada ④ oscilam na coluna “o que está acontecendo de verdade”. As camadas ② e ③ não oscilam porque têm definição oficial. Essa diferença é exatamente a diferença de quanto se pode confiar na frase.

8. O que está confirmado e o que não está

✅ Confirmado em fontes primárias
  • Streaming response ended… e Could not locate the Claude CLI on PATH existem como itens na referência oficial de erros do Claude Code
  • A documentação oficial coloca a segunda em “Wrapper and IDE errors” e a explica como algo impresso pelo programa que faz a inicialização
  • O sentido da primeira é “os cabeçalhos voltaram, mas o corpo não tem mensagem da API do Claude” — não é queda no meio
  • A issue #35736 do OpenCode relata que 404, queda de conexão e recusa de verdade viram a mesma frase
  • A documentação oficial do GitHub afirma que, também ao usar o Claude, entrada e saída passam pelos filtros de conteúdo do GitHub Copilot
🟡 Há relato, mas não está confirmado
  • A origem de The model returned no content because…. O que se confirmou palavra por palavra foi só o título da issue #3348 de github/copilot-cli, cujo corpo foi retirado
  • A causa da regressão da extensão do VS Code apontada na issue #80087 (o tratamento da saída de where.exe) é suposição do autor
  • Qual trecho de código do OpenCode emite essa frase não consta na issue
  • Que “Claude may still be working” seja o jeito de falar de quem observa outro processo é dedução a partir do uso da língua
🔴 Não foi possível confirmar
  • Qual ferramenta emite Connection to Claude's response was lost…. Não estava nem na referência oficial de erros nem na documentação oficial do Remote Control
  • A explicação técnica do lado do GitHub para aquela mensagem do GitHub Copilot CLI (a issue #3348 está closed as not planned, sem resposta de mantenedores)
  • A conclusão das correções para as duas issues do OpenCode (ambas abertas quando este artigo foi escrito)

Resumindo: pela aparência da frase não se distingue a camada que a escreveu. As cinco do começo parecem todas “escritas por ferramenta de terceiros”, mas, na prática, duas eram oficiais, duas eram de terceiros e uma ficou indefinida. Por isso o primeiro movimento não é deduzir a causa, e sim comparar com o catálogo oficial. Leva um minuto e ainda decide onde procurar depois.

FAQ

Q1. Estou usando o Claude, mas não encontro a mensagem procurando na documentação da Anthropic.

É possível que a Anthropic não tenha escrito essa mensagem. As ferramentas que chamam o Claude como modelo (extensões de IDE, outros agentes de codificação, o uso via Copilot) decidem cada uma o próprio jeito de falar quando algo falha. Procure primeiro a correspondência exata na referência oficial de erros e, se não houver, pesquise a string nas issues do repositório da ferramenta que você usa.

Q2. Se aparece “content filter”, significa que bati no filtro da Anthropic?

Não necessariamente. A documentação oficial do GitHub afirma que, também ao usar o Claude, os prompts de entrada e as complementações de saída passam pelos filtros de conteúdo do GitHub Copilot. E, no OpenCode, a issue #35736 relata casos em que até 404 e sockets rompidos, sem nenhuma relação com filtro, são exibidos com a mesma frase de “content filter”. Rode o mesmo prompt também no claude do terminal e isole pela reprodução.

Q3. Streaming response ended before any complete data was received quer dizer que a conexão caiu?

Não. A definição da referência oficial de erros é “a API devolveu os cabeçalhos da resposta, mas o corpo não continha uma mensagem da API do Claude”. Não é que chegou até certo ponto e cortou: não chegou conteúdo nenhum. Envie de novo primeiro (basta try again) e, se acontece sempre igual, suspeite do caminho, como proxy e gateway.

Q4. No terminal o claude funciona, mas só a extensão da IDE mostra “Could not locate the Claude CLI on PATH”.

O problema não é a CLI, e sim quem a inicia. A referência oficial classifica essa frase como “Wrapper and IDE errors” — impressa pelo programa que faz a inicialização, não pelo próprio Claude Code. Quando o editor é aberto pelo ícone, o PATH que aquele processo recebe pode ser diferente do PATH montado pelo shell de login. Há também casos de regressão conforme a versão da extensão, como na issue #80087.

Q5. Não achar nada na busca significa que esse erro é raro?

Na maioria das vezes é porque a string é longa demais. Nas mensagens da camada ③, quem inicia às vezes enxerta a própria explicação no título oficial (no exemplo do capítulo 5, o título oficial tem uma frase e a exibição real tinha quatro). Pesquise apenas a primeira frase.

Q6. Não posso acreditar na causa escrita na mensagem e agir a partir dela?

Depende da camada. As frases com correspondência exata no catálogo oficial (camadas ② e ③) têm sentido e solução documentados, então dá para segui-las como estão. O problema é a camada ④. A issue #35736 do OpenCode relata que três falhas completamente diferentes viram a mesma frase de “bloqueado pelo content filter”. Se a realidade é erro de configuração, reescrever o texto acreditando na frase não resolve nunca.

Q7. Basta parar de usar ferramentas de terceiros?

Não é preciso chegar a tanto. O que está em questão aqui não é a qualidade das ferramentas, e sim a origem da frase quando algo falha. Basta a prática de tentar reproduzir uma única vez no claude puro na hora de isolar. Sobre qual ferramenta escolher, veja a comparação entre Cursor, Claude Code, GitHub Copilot e Codex.

Q8. Como corrigir Connection to Claude's response was lost. Claude may still be working?

Este artigo não conseguiu identificar a origem. Essa string não está na referência oficial de erros do Claude Code nem na documentação oficial do Remote Control. Logo, quem a escreveu é o programa iniciador ou um cliente de terceiros, mas como não foi possível confirmar qual ferramenta, este artigo não cita nomes. Identifique no seu ambiente com os quatro passos do capítulo 6. Sobre o fenômeno de cortar no meio da resposta, serve de referência o artigo do Connection lost mid-response, a mensagem oficial de sonoridade mais próxima.

Artigos relacionados

Fontes primárias consultadas