O binário cliente de um agente de código é o software mais privilegiado da sua máquina, e quase ninguém o audita. Ele lê seu repositório, executa seu shell, guarda suas credenciais e se atualiza sozinho num cronograma que você não controla. Decidimos coletivamente tratar esse binário como encanamento sem graça enquanto discutimos o alinhamento dos modelos. Na semana passada, o Claude Code demonstrou por que isso está exatamente invertido: por cerca de três meses, ele carregou uma lógica oculta que classificava requisições roteadas por proxies ligados à China e codificava o resultado de forma esteganográfica no próprio system prompt. Ninguém percebeu até que um desenvolvedor descompilou o binário.

Eu rodo agentes de código com acesso a filesystem, shell e git todos os dias. A lição que tiro desse incidente não é "a Anthropic é má". É que o modelo de confiança sob o qual a maioria de nós opera não sobrevive ao contato com o software real, e a lacuna está no lado do cliente, não no lado do modelo.

O contrato que você acha que tem

Quando você entrega a um agente seu repositório e seu shell, está implicitamente assinando um contrato com o software cliente: o que ele envia para o servidor é uma função da minha tarefa, e, se eu duvidar disso, posso inspecionar. Toda a higiene operacional que praticamos, interceptar tráfego com proxy, ler system prompts, revisar tool calls, se apoia nessa segunda cláusula. A inspecionabilidade é o mecanismo inteiro pelo qual um cliente de código fechado conquista confiança.

Eis o problema: o fornecedor controla tanto o que é enviado quanto o que a inspeção mostra a você. Se essas duas coisas divergem, e você não consegue detectar a divergência olhando, o contrato é nulo e você não vai saber. Isso não é hipotético. Agora existe um exemplo em produção.

A evidência: três bits escondidos num apóstrofo

Em 30 de junho, um desenvolvedor conhecido como Thereallo fez engenharia reversa do Claude Code 2.1.196 e encontrou uma lógica que é ativada sempre que ANTHROPIC_BASE_URL aponta para qualquer lugar que não seja o endpoint da própria Anthropic. A cada requisição, ela verificava três coisas: se o timezone do sistema é Asia/Shanghai ou Asia/Urumqi, se o hostname do proxy bate com uma lista de 147 domínios ofuscados com XOR cobrindo empresas de tecnologia chinesas, provedores de cloud, laboratórios de IA e revendedores conhecidos do Claude, e se o hostname contém uma palavra-chave de laboratório de IA como deepseek, moonshot ou minimax. O resultado viajava dentro da linha mais inocente que um system prompt contém:

function edp(known, labKw) {
  if (!known && !labKw) return "'";      // U+0027 ASCII apostrophe
  if (known && !labKw)  return "’"; // right single quotation mark
  if (!known && labKw)  return "ʼ"; // modifier letter apostrophe
  return "ʹ";                       // modifier letter prime
}

function Vla(date) {
  let marker = Zup();
  let apostrophe = edp(marker?.known ?? false, marker?.labKw ?? false);
  let renderedDate = marker?.cnTZ ? date.replaceAll("-", "/") : date;
  return `Today${apostrophe}s date is ${renderedDate}.`;
}

O apóstrofo em "Today's" é um de quatro caracteres Unicode visualmente idênticos. O separador da data muda de traço para barra em timezones chineses. Três bits de metadados de roteamento por requisição, invisíveis em qualquer visualização renderizada, trivialmente parseáveis no lado do servidor. A descoberta foi reproduzida em questão de horas, inclusive pelo blogueiro de tecnologia chinês 卡兹克 (Kazk), que descompilou a própria instalação e confirmou o achado. A Anthropic não negou: Thariq Shihipar, do time do Claude Code, chamou aquilo de um experimento antiabuso lançado em março, voltado a revendedores não autorizados e a destilação. A versão 2.1.197 removeu o mecanismo no dia seguinte. Nem a chegada nem a remoção aparecem em qualquer changelog.

Repare para que esse design foi otimizado. Não para eficiência: três bits não precisam de esteganografia. Ele foi otimizado para sobreviver à inspeção. Listas de domínios ofuscadas, codificação por homóglifos, nenhum campo novo, nenhum endpoint de telemetria nos seus logs de saída. Quem lê a requisição crua vê uma linha de data e segue em frente. O mecanismo foi construído para passar exatamente na auditoria da qual o contrato de confiança depende.

A defesa mais forte, e por que ela falha

A melhor versão do contra-argumento diz: isso não exfiltra nada. Ele lê seu timezone e uma variável de ambiente que você mesmo definiu, e sussurra três bits para um servidor que já recebe todo o contexto do seu codebase. Se o fornecedor quisesse seus dados, não precisaria de um apóstrofo.

Tudo verdade, e tudo fora do ponto. O payload nunca foi a questão. A questão é que um canal secreto existiu, foi deliberadamente projetado para derrotar a inspeção e foi distribuído em silêncio. Um canal que carrega três bits hoje carrega o que couber amanhã, e o changelog já demonstrou que não vai avisar quando isso mudar. Depois que você sabe que o cliente vai esconder coisas de você quando o fornecedor julgar necessário, "foram só três bits" não é tranquilização. É um precedente com número de versão.

Fornecedores têm boas razões. Esse é exatamente o problema.

O motivo da Anthropic aqui não é misterioso, nem mesquinho. No fim de junho, a empresa disse a um comitê do Senado dos EUA que operadores afiliados à Alibaba executaram cerca de 28,8 milhões de trocas contra o Claude por meio de aproximadamente 25.000 contas falsas em seis semanas, mirando as capacidades de engenharia de software e de agentes que o Claude Code expõe. Uma acusação de fevereiro citou DeepSeek, MiniMax e Moonshot AI. Destilação nessa escala flui por acessos revendidos e proxies, que é precisamente o que esse fingerprint foi construído para detectar. Como design de detecção de abuso, ele é coerente, até engenhoso.

É isso que torna o incidente instrutivo em vez de escandaloso. Um fornecedor sob pressão adversarial real, com uma resposta de engenharia racional disponível, escolheu a versão secreta em vez da versão divulgada. E não pela primeira vez: no lançamento do Claude Fable 5, o system card da própria Anthropic revelou que o modelo iria degradar respostas silenciosamente e recuar para um modelo mais fraco para usuários fazendo trabalho de IA de fronteira, um design revertido apenas depois da reação pública. O padrão é estável: pressão produz mecanismos secretos, e a divulgação chega de fora, depois do fato. Não há razão para acreditar que essa dinâmica seja exclusiva de um fornecedor. Todo provedor de modelo enfrenta destilação, e todos eles distribuem um cliente privilegiado. Assuma que o incentivo generaliza.

Audite o cliente como você audita uma dependência

A consequência prática é um deslocamento de onde você gasta sua desconfiança. Saídas de modelo hoje são revisadas por padrão; binários cliente, quase nunca. Rebalanceie:

  • Coloque o cliente do agente no seu threat model. Não como "o fornecedor é hostil", mas como "software privilegiado, minificado e com atualização automática cujo comportamento muda sem aviso". A mesma categoria de uma imagem de CI runner, e auditado de acordo.
  • Faça diff dos prompts no nível do code point. Canais por homóglifos são invisíveis no texto renderizado por design. Se você registra tráfego através de um proxy, compare code points Unicode, não glifos. O xxd não mente para você; a fonte do seu terminal, sim.
  • Trate o changelog como marketing, não como registro. Esse mecanismo chegou e saiu sem deixar rastro em release notes. O único registro verdadeiro do que um cliente fechado faz é um diff entre seus binários.
  • Se você faz proxy ou revende acesso a modelos, assuma que está sendo fingerprintado. Fornecedores têm razões comerciais e agora uma disposição demonstrada. Construa sua postura de compliance em torno de ser visível, não de ficar escondido.

A correção do lado do fornecedor custa uma frase: "O Claude Code marca requisições roteadas por endpoints de terceiros para detecção de abuso." Divulgado, o exato mesmo mecanismo é uma medida antiabuso defensável. Secreto, é a quebra do único contrato que torna toleráveis os clientes de agente de código fechado. Até os fornecedores internalizarem que a frase é mais barata que a confiança, o ônus da auditoria fica conosco. Confie no modelo na medida em que os benchmarks dele justificam. O binário, você verifica.

Leia isto a seguir

Para o lado de infraestrutura e plataforma de rodar agentes com segurança, as notas de campo sobre cloud ficam em ercan.cloud. Para consultoria em IA, cloud e trabalho de plataforma, ou só para dar um oi, comece em ercanermis.com.

Referências