Se você já rodou sessões longas no Claude Code, talvez tenha visto uma string estranha surgir de repente na sua tela:

court
<invoke name="Bash">
<parameter name="command">ssh host 'cp file file.bak ; sed -i ...'</parameter>
<parameter name="description">…descrição do comando…</parameter>
</invoke>

Your tool call was malformed and could not be parsed. Please retry.

Uma chamada de ferramenta (um comando) que deveria rodar nos bastidores vaza para o chat como texto cru — e nunca é executada. Na frente, aparece uma palavra sem sentido, court (ou call). É natural pensar "será que meu computador quebrou?" ou "configurei algo errado?". Mas a resposta curta é: não é o seu ambiente, nem o seu comando.

Trata-se de uma falha do lado do modelo, em que o Claude (especialmente a família Opus 4.8 / 4.7) corrompe as "tags de controle" de uma chamada de ferramenta no momento em que as gera. O repositório oficial da Anthropic tem muitas issues abertas sobre isso (#64108, #64150, #64690, #65705, #66153, #67295, #68354 e mais). Este artigo expõe o mecanismo, as causas, os equívocos comuns, as correções para usuário/desenvolvedor, como distingui-lo de erros parecidos e a situação oficial — com base na documentação da Anthropic e nas issues reais. A medida mais importante, logo de cara: quando o court aparecer, não insista naquela sessão — saia cedo para uma sessão nova (/clear). A razão está explicada abaixo.

CLAUDE CODE · TOOL CALL LEAK

O que "court" + tags invoke vazadas realmente são

— uma tag de controle é gerada quebrada, então vaza para a tela em vez de executar

claude-code — opus-4.8 (1M)
Vou fazer um backup desse arquivo antes de editar…
court ← 1) token de controle corrompido
<invoke name="Bash">
<parameter name="command">cp file file.bak</parameter>
</invoke> ← 2) o XML que deveria ter rodado, mostrado cru
Your tool call was malformed and could not be parsed.
↑ 3) rejeitado em modo fail-closed → o comando nunca roda

Uma chamada quebrada não pode ser interpretada, então nunca é executada (fail-closed) — não há risco de um comando errado rodar.
Os problemas reais são um turno desperdiçado e uma "reação em cadeia" se você deixar passar.

1. O que realmente acontece — o token "court" e as tags invoke

O <invoke name="Bash"> e o <parameter name="command"> que você vê são "marcação de chamada de ferramenta" que você nunca deveria ver. Quando o Claude roda um comando ou edita um arquivo, ele gera essas tags estruturadas em estilo XML como tokens, e o Claude Code (o harness) as interpreta e de fato executa o comando. Normalmente o harness absorve as tags, elas nunca chegam à tela, e você só vê o resultado da ferramenta.

Desta vez, porém, o "token de controle de abertura" da chamada de ferramenta foi gerado quebrado, com a palavra sem relação court ou call surgindo na frente. O harness só reage a uma sintaxe estrita, então ele decide "isto não é uma chamada de ferramenta, é só texto" e despeja tudo direto na tela. O comando não roda, e você recebe "Your tool call was malformed and could not be parsed." Em alguns casos não há mensagem de erro nenhuma e ele simplesmente trava em silêncio (na issue #65705 a resposta voltou como stop_reason=end_turn sem nada para executar, então a conversa ficou pendurada).

A palavra court em si não tem significado. Mas também não é uma palavra totalmente aleatória e pontual — em vários relatos independentes, o vazamento aparece como court / call com uma consistência estranha. A issue #64690 analisa isso como "um token adjacente no vocabulário sendo selecionado no lugar da tag correta." Em outras palavras, é melhor entender o court como uma assinatura que ajuda você a reconhecer esse bug.

2. Contexto: um agente também "gera" suas chamadas de ferramenta

Por que uma "tag de controle" pode quebrar, afinal? A chave é que para um agente de IA, uma chamada de ferramenta é, no fim das contas, apenas geração de texto.

Quando você usa ferramentas com a API do Claude, o formato que você vê como desenvolvedor é JSON (um bloco tool_use). Internamente, porém, o modelo segue um system prompt oculto que a Anthropic injeta automaticamente e gera as tags envoltórias <function_calls>, <invoke> e <parameter> como um fluxo de tokens. A camada da API então interpreta isso e converte em um bloco tool_use JSON limpo (conforme a documentação oficial de tool use). Toda "chamada de ferramenta" em MCP e agentes de IA se apoia nesse mecanismo.

O que importa aqui é que o parser do harness é "fail-closed" (ele erra para o lado seguro). Se uma tag diferir da forma esperada em apenas um token, o harness não adivinha nem executa — ele rejeita imediatamente como malformada. Esse é o design de harness correto: "consertar prestativamente" um comando ambíguo e rodá-lo seria muito mais perigoso. Então todo esse fenômeno é um caso de "quebrou → foi rejeitado → não rodou" — ou seja, falhou de forma segura.

Em uma frase

Uma chamada de ferramenta é "texto com tags especiais" que o modelo gera. Quando o token de abertura dessas tags quebra durante a geração, o harness não consegue reconhecê-lo, então ele vaza para a prosa e não roda. A rejeição em si é um mecanismo de segurança correto; o bug está puramente na geração do lado do modelo.

3. Por que acontece — duas causas-raiz e gatilhos

Consolidando as issues reais, a causa se divide em "(1) corrupção no momento da geração" e na "(2) reação em cadeia por autoenvenenamento" que a torna desagradável.

2 ROOT CAUSES

Como quebra e depois "encadeia"

Causa 1 · Corrupção na geração do token de controle
A tag de abertura de uma chamada de ferramenta, por flutuação na amostragem, vira um token adjacente (court / call). O prefixo de namespace também cai, e o harness não consegue mais reconhecê-la. Independente de ambiente (reproduzido em Win/mac/Linux — #68354).
Causa 2 · Reação em cadeia por autoenvenenamento
Uma vez que o bloco quebrado permanece no histórico da conversa, o modelo o confunde com um exemplo correto e o copia. É por isso que tentar de novo tem efeito reverso e a falha se repete de forma determinística (#64150, #62344).
Condições que aumentam as chances (relatadas; causalidade não comprovada)
· Sessões muito longas / retomadas por vários dias; contexto pesado em escala de 1M (#65705: 1.739 linhas ao longo de 3 dias)
· Múltiplas chamadas de ferramenta em uma mensagem / uma chamada de ferramenta colocada logo após a prosa (#66153)
· O estado logo após rodar /compact (#67295: recorre na primeira chamada após o compact)
· Bash em segundo plano (run_in_background) ou 3+ servidores MCP conectados (#64690)
· Argumentos de ferramenta longos do tamanho de parágrafos (#49747: uma variante separada em que o XML vaza para o JSON)

Lição: a quebra em si é uma rara flutuação de amostragem. A parte realmente desagradável é a cadeia em (2)
e é por isso que "insistir com retentativas na mesma sessão" pode ser a pior jogada.

4. Três equívocos comuns, corrigidos

A informação sobre esse fenômeno se embaralha facilmente. Para reagir corretamente, aqui estão três equívocos comuns esclarecidos.

Crença comumRealidade
"A ferramenta saiu do controle / deu defeito"O contrário. A chamada quebrada foi rejeitada sem executar (fail-closed). Não há risco de um comando errado rodar; tudo o que aconteceu foi um "turno desperdiçado + um vazamento visual." Falhou de forma segura.
"Basta tentar de novo — se você deixar, ele se cura sozinho"Só meia verdade. Um caso leve se recupera numa única retentativa, mas uma vez que o bloco quebrado fica no histórico o modelo o imita e encadeia. A #65705 teve 14 falhas seguidas em mais de 5 horas; a #66153 teve mais de 30 numa única sessão. Insistir na mesma sessão tem efeito reverso.
"court significa algo / é um comando"Não significa nada — apenas destroços de um token de controle corrompido. Mas court/call recorrem como um marcador, então são úteis como um sinal de diagnóstico.

O segundo é o que mais importa. Relatos de incidentes costumam dizer "se recuperou na retentativa, então sem problema" — mas isso só vale para o caso "leve" antes de a cadeia começar. A essência desse bug é que uma vez que ele entra em modo de cadeia, nenhuma quantidade de retentativas dentro daquela sessão vai consertá-lo.

5. Resolva agora (para usuários do Claude Code)

A reação depende de "você ainda está leve ou a cadeia já começou?" Em ordem de prioridade:

USER FIXES

Ordem de prioridade

FIX 1 · Saia para uma sessão nova (prioridade máxima)
Quando o court aparecer, faça /clear ou inicie uma sessão nova cedo. Cortar o histórico envenenado é o mais confiável. Antes de mudar, salve o estado com git commit ou uma nota de passagem.
FIX 2 · Tente de novo exatamente uma vez (caso leve)
Numa primeira ocorrência pontual, um empurrãozinho para "continuar" muitas vezes faz o modelo reemitir corretamente (na #66153, digitar "resume" o recuperou). Mas se falhar duas vezes seguidas, pare de insistir e vá para o FIX 1.
FIX 3 · Rode uma carga mais leve
Evite sessões longas, de vários dias. Não empilhe demais numa única mensagem. Note que o /compact já foi relatado recorrendo logo depois — não é uma solução confiável.

A regra: "errou duas vezes, abandone a sessão e comece do zero."
Quanto mais você insiste num histórico envenenado, mais fundo é o ferimento. Mantenha a CLI atualizada (mas note: nenhuma correção foi lançada ainda — atualizar é higiene, não uma cura mágica).

Dica: se você habitualmente salva o estado em git ou numa nota de passagem em .md, mudar para uma sessão nova a qualquer momento não custa nada. Quanto mais você roda sessões autônomas longas, mais esse hábito compensa (e ele se conecta diretamente à gestão da sua janela de contexto).

6. Para desenvolvedores: previna via API/SDK

Se você constrói seu próprio agente sobre a API / SDK do Claude, pode adicionar as defesas a seguir no seu harness. A lógica de detecção proposta na issue #65705 é prática.

// Inspecione o turno do assistente recebido antes de executar
const text = assistantText(resp);
const looksLeaked =
  /<invoke\s+name=/.test(text) ||
  /function_calls/.test(text) ||
  /\bcourt\s*<invoke/.test(text);

// 1) Marcação acima presente mas SEM bloco tool_use estruturado → chamada quebrada
if (looksLeaked && !hasToolUseBlock(resp)) {
  // 2) Não mostre; registre em log. NÃO mantenha o bloco quebrado no histórico (previne autoenvenenamento)
  // 3) Empurre para "emitir como tool_use estruturado, não texto" e tente de novo automaticamente
  return retryWithNudge(messages);
}

// Rejeite um tool_use incompleto causado por truncamento
if (resp.stop_reason === 'max_tokens' && lastBlock(resp)?.type === 'tool_use') {
  return retryWith({ max_tokens: higher }); // não execute
}

Quatro princípios. (1) Sempre verifique o stop_reason (um end_turn sem nenhuma ferramenta de fato rodando = detecte a trava silenciosa). (2) Antes de executar, verifique se o texto não contém <invoke name= ou function_calls; se contiver, tente de novo em vez de executar. (3) Não mantenha o bloco quebrado no histórico da conversa (mantê-lo faz a próxima geração imitá-lo — autoenvenenamento / #62344). (4) Mantenha os argumentos de ferramenta curtos e divida saídas longas (evite a variante de payload longo na #49747). Mesmo ao usar um harness oficial como o Claude Agent SDK, vale entender como os loops de longa duração se comportam.

7. Diferenciando de erros parecidos

Existem vários erros de "a ferramenta não roda", e eles precisam de correções diferentes. Distinga estes quatro para não confundi-los.

SintomaO que realmente éCorreção principal
court / call + tags invoke cruas exibidas, sem execuçãoO tema deste artigo. Corrupção na geração do token de controle + encadeamento via autoenvenenamentoPrefira uma sessão nova (/clear); não insista após dois erros
400 "thinking blocks cannot be modified" trava a sessãoUm descompasso de assinatura no extended thinking (um bug diferente). Um erro fatal da APIVeja o artigo dedicado (Esc×2 / rewind)
A resposta é cortada no meio do fluxo (sem XML embaralhado)Um truncamento normal por atingir o max_tokens. Não é um erroAumente o max_tokens e rode de novo
O XML não é estruturado no Bedrock, LangChain, etc.Um cliente de terceiros falhando em interpretar o formato da Anthropic (langchain-aws #521). Não se reproduz na API oficial / Claude CodeRevise a biblioteca de integração / camada de hospedagem

O eixo para diferenciá-los é simples. Se você vê um "embaralhamento court / call + XML cru," é este bug. Um erro de assinatura 400 é o erro de bloco de thinking. Um corte limpo é só o limite de saída. Apenas no Bedrock ou via LangChain aponta para a camada de integração. Para outros erros comuns do Claude Code, veja a compilação de erros.

8. Situação oficial

Em junho de 2026, não há correção oficial confirmada (entrada de changelog) afirmando que esse fenômeno foi resolvido. Rastreando as notas de versão até o Claude Code mais recente (a linha 2.1.183), não há entrada que trate da corrupção de serialização de chamada de ferramenta, e muitas das issues relacionadas permanecem abertas, ou foram registradas como "duplicate / stale." Então toda correção neste artigo é uma solução de contorno enquanto se aguarda uma correção oficial, e não dá para afirmar que "atualizar para a versão mais recente resolve" (atualizar é recomendado, mas não é cura garantida).

Dito isso, o design fail-closed do harness de "rejeitar uma chamada quebrada em vez de executá-la por adivinhação" está, em si, correto. O que precisa de conserto é a estabilidade da geração do modelo — não afrouxar o parser para "consertar e rodar mesmo assim," o que convidaria o risco sério de rodar o comando errado. A melhor coisa que nós, usuários, podemos fazer é operar para evitar a cadeia e reportar reproduções nas issues oficiais com seu ambiente e logs (mais relatos elevam a prioridade e aceleram a correção).

9. Checklist de prevenção

Usuários do Claude Code: (1) Quando court/call aparecer, tente de novo no máximo duas vezes; se persistir, faça /clear / sessão nova imediatamente. (2) Evite sessões muito longas / de vários dias; salve o trabalho em git/notas nos pontos de parada. (3) Não empilhe múltiplas chamadas de ferramenta numa única mensagem. (4) Lembre-se de que o /compact não é uma panaceia (pode recorrer logo depois). (5) Mantenha a CLI atualizada e reporte reproduções nas issues oficiais.

Desenvolvedores de API/SDK: (1) Sempre verifique o stop_reason. (2) Detecte <invoke name= / function_calls vazando no texto e tente de novo. (3) Não mantenha chamadas quebradas no histórico (previna o autoenvenenamento). (4) Mantenha os argumentos de ferramenta curtos; divida saídas longas. (5) Nunca execute um tool_use incompleto vindo de um corte por max_tokens — tente de novo em vez disso.

Resumo

No Claude Code, "court / call + uma tag <invoke> crua exibida, com a ferramenta não executando" é uma falha do lado do modelo, em que o Claude (a família Opus 4.8 / 4.7) gera o token de controle de uma chamada de ferramenta de forma quebrada. O harness o rejeita em modo fail-closed, então não há risco de um comando errado rodar (falhou de forma segura). A parte realmente desagradável é que uma vez que o bloco quebrado fica no histórico, o modelo o imita e "encadeia." Por isso, "tentar de novo resolve" só vale enquanto está leve, e a regra passa a ser "errou duas vezes, saia para uma sessão nova."

A causa tem duas camadas: (1) corrupção na geração do token de controle + (2) encadeamento via autoenvenenamento. Os gatilhos incluem sessões longas / de vários dias, contexto pesado, o estado pós-/compact, múltiplas ferramentas concorrentes, 3+ servidores MCP e argumentos de ferramenta longos. Como nenhuma correção oficial foi lançada até junho de 2026, todo remédio é uma solução de contorno. Usuários devem "preferir uma sessão nova + salvar o estado com frequência"; desenvolvedores devem "verificar o stop_reason, tentar de novo ao detectar vazamento, nunca manter histórico quebrado e encurtar os argumentos." Ler o erro 400 de bloco de thinking, a compilação de erros do Claude Code e MCP junto com este texto vai deixar você muito mais resiliente a problemas de chamada de ferramenta.

FAQ

Q. O "court" ou a tag invoke na minha tela são causados por um erro no meu comando ou nas configurações?
A. Não — quase certamente não. Esta é uma falha conhecida do lado do modelo, em que o Claude gera tags de chamada de ferramenta de forma quebrada, com várias issues registradas no repositório oficial da Anthropic (#64108, #65705, #66153 e mais). Não é um erro no seu ambiente, comando ou configurações. Trate court/call como uma "assinatura" do bug.

Q. Um comando errado poderia rodar e danificar meu servidor ou arquivos quando isso acontece?
A. Não. Uma chamada de ferramenta quebrada é julgada "malformada" e rejeitada sem executar (design fail-closed). Tudo o que acontece é que o turno é desperdiçado e o texto de controle fica visível; não há efeito sobre seus dados ou o estado do servidor. Ele é projetado para falhar de forma segura.

Q. Ouvi dizer "basta tentar de novo que se resolve sozinho." Isso é verdade?
A. Só quando está leve. Numa primeira ocorrência pontual, um empurrãozinho para "continuar" muitas vezes faz o modelo reemitir corretamente. Mas uma vez que o bloco quebrado fica no histórico da conversa, o modelo o usa como template e repete a mesma corrupção (autoenvenenamento). A partir daí, tentar de novo na mesma sessão tem efeito reverso. Se falhar duas vezes seguidas, pare de insistir e mude para uma sessão nova (/clear).

Q. O /compact vai resolver?
A. Não de forma confiável. Compactar o contexto às vezes ajuda, mas na issue #67295 ele recorreu na primeiríssima chamada de ferramenta logo após o /compact. A medida mais confiável não é o /compact e sim uma sessão nova (/clear) que reseta totalmente o histórico. Salve seu estado de trabalho em git ou notas antes de mudar.

Q. Atualizar o Claude Code para a versão mais recente vai resolver?
A. Não dá para afirmar que "resolve." Em junho de 2026 não há entrada oficial de changelog confirmando uma correção, e muitas issues relacionadas permanecem abertas ou duplicadas. Atualizar é recomendado como higiene, mas não é uma cura mágica. Por ora, a melhor abordagem é operar para evitar a cadeia (errou duas vezes → sessão nova) e reportar reproduções nas issues oficiais.