Shopping cart

Subtotal $0.00

View cartCheckout

Building better devs

TnewsTnews
  • Home
  • Notícias
  • Código-Fonte do Claude Code Vazou no NPM: O Que Descobriram Lá Dentro
Notícias

Código-Fonte do Claude Code Vazou no NPM: O Que Descobriram Lá Dentro

Email : 11139

Imagina só: você abre o NPM, dá uma olhada no pacote oficial do Claude Code — aquela CLI da Anthropic que todo mundo está usando pra codar com IA — e descobre que o código-fonte inteiro está ali, exposto. Não um pedaço. Não uma função solta. Os 512 mil linhas. Os 1.900 arquivos. Tudo.

Foi exatamente isso que o pesquisador Chaofan Shou encontrou na manhã de 31 de março de 2026. Um arquivo source map de 59,8 MB, que deveria existir apenas em ambiente de desenvolvimento, foi publicado junto com a versão 2.1.88 do pacote @anthropic-ai/claude-code no registro público do NPM. E o que estava dentro desse mapa é, no mínimo, fascinante.

O que é um source map e como ele parou no NPM

Source maps são arquivos .map que mapeiam código minificado ou bundlado de volta ao código-fonte original. Eles são essenciais para debugging, mas nunca — nunca mesmo — deveriam chegar em produção.

O Claude Code usa o Bun como bundler. E aqui entra o detalhe técnico que causou tudo: o Bun gera source maps por padrão, mesmo em modo de produção. Existe inclusive um bug reportado no repositório do Bun, datado de 11 de março, documentando exatamente esse comportamento.

# O pacote no NPM continha algo assim:
@anthropic-ai/claude-code/
├── dist/
│   ├── cli.js          # Código bundlado/minificado
│   └── cli.js.map      # 59.8 MB de código-fonte completo

A Anthropic confirmou ao The Register que foi “um problema de empacotamento causado por erro humano, não uma violação de segurança”. Mas o estrago já estava feito — em minutos, o código foi espelhado em dezenas de repositórios no GitHub, incluindo um com breakdown completo.

Ferramentas falsas para envenenar concorrentes

A primeira descoberta que chamou atenção da comunidade foi um mecanismo chamado anti-distillation. Quando a flag ANTI_DISTILLATION_CC está habilitada, o Claude Code envia um parâmetro anti_distillation: ['fake_tools'] nas requisições à API.

O que isso faz? Instrui o servidor a injetar definições de ferramentas falsas nos system prompts. A lógica é a seguinte: se um concorrente está capturando tráfego da API (via proxy, por exemplo) para treinar seu próprio modelo — uma prática conhecida como distillation — os dados capturados estarão contaminados com ferramentas que não existem.

{
  "anti_distillation": ["fake_tools"],
  "session_type": "first_party_cli"
}

Existe um segundo mecanismo complementar: o Connector-Text Summarization. Ele intercepta o texto gerado entre chamadas de ferramentas, cria resumos com assinaturas criptográficas e retorna apenas os resumos em vez das cadeias completas de raciocínio. Isso impede que alguém capture o “pensamento” completo do modelo.

Mas aqui vai a ironia que a comunidade apontou: ambos os mecanismos são relativamente fáceis de contornar. Um proxy MITM bem configurado ou simplesmente desabilitar a variável de ambiente CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS já resolve. É segurança por obscuridade — que agora nem obscura é mais.

Modo Disfarçado: quando a IA finge que não é IA

Talvez a descoberta mais controversa. O arquivo undercover.ts implementa o que a comunidade batizou de “Modo Disfarçado”. Quando ativado em repositórios que não são internos da Anthropic, o sistema instrui o Claude a:

  • Nunca mencionar codinomes internos como “Capybara” ou “Tengu”
  • Nunca referenciar canais internos do Slack
  • Nunca dizer que é o “Claude Code”

E o detalhe mais polêmico: não existe mecanismo para desativar esse modo externamente. Isso significa que commits feitos por funcionários da Anthropic em projetos open source, usando o Claude Code, não carregam nenhuma indicação de que foram escritos por IA.

Isso levanta questões sérias sobre transparência. Se você revisou um PR de alguém da Anthropic em um projeto open source nos últimos meses, existe uma chance real de que o código tenha sido gerado por IA sem nenhum disclosure.

Detecção de frustração via regex (sim, regex)

O código inclui um sistema de detecção de frustração do usuário. Até aí, faz sentido — adaptar o comportamento do assistente quando o usuário está irritado é uma boa prática de UX.

O problema? A implementação usa expressões regulares para detectar sentimentos. Em 2026. Feito por uma empresa de IA.

// Padrão simplificado do que foi encontrado
const frustrationPattern = /\b(this sucks|so frustrating|damn|what the hell)\b/i;

A comunidade no Hacker News não perdoou a ironia: a empresa que construiu um dos modelos de linguagem mais avançados do planeta está usando regex para análise de sentimento. Como um comentário resumiu: “Eles têm acesso literal ao melhor classificador de texto do mundo e escolheram regex”.

Na prática, provavelmente é uma decisão de performance — rodar o modelo para cada mensagem do usuário só para detectar frustração seria um desperdício. Mas a piada está feita.

KAIROS: o agente autônomo que ninguém deviu ver

Espalhadas pelo código existem referências a um recurso chamado KAIROS — um modo de agente autônomo que funciona 24/7, sem interação do usuário. As referências indicam:

ComponenteDescrição
Background daemonWorkers que rodam em segundo plano continuamente
GitHub webhooksInscrição automática em eventos de repositórios
/dream skillsSistema de “destilação noturna de memória”
Agent swarmsCoordenação de múltiplos agentes simultâneos

Além do KAIROS, o vazamento revelou outros recursos não lançados:

FeatureStatus
ULTRAPLANPlanejamento remoto de 30 minutos
BuddyAgente companheiro
Coordinator modeOrquestração multi-agente
Workflow scriptsAutomação de fluxos complexos

Membros da comunidade apontaram que a exposição desse roadmap pode ser mais danosa para a Anthropic do que o próprio código — concorrentes agora sabem exatamente o que está vindo.

Codinomes revelados: quem é quem nos modelos

O código também confirmou os codinomes internos dos modelos da Anthropic:

CodinomeModelo
CapybaraClaude 4.6 (variante)
FennecOpus 4.6
NumbatEm testes (não lançado)

O “Numbat” gerou especulação imediata. Seria o próximo modelo da família? Uma variante especializada? Ninguém sabe ainda, mas a existência dele no código sugere que está em estágio avançado de testes.

DRM na camada HTTP: attestation nativa

Uma das descobertas mais técnicas — e potencialmente mais controversas — envolve o sistema de attestation nativa. As requisições à API incluem um placeholder cch=00000 que o stack HTTP nativo do Bun (escrito em Zig) substitui por um hash computado antes da transmissão.

O servidor valida esse hash para confirmar que as requisições vêm de binários legítimos do Claude Code. Na prática, é um sistema de DRM na camada de transporte HTTP — algo que você esperaria encontrar em jogos ou softwares proprietários, não em uma ferramenta de linha de comando.

Request Header:
  x-claude-attestation: cch=a3f8b... (computed by Zig runtime)

Isso explica tecnicamente por que a Anthropic tomou ação legal contra ferramentas de terceiros como o OpenCode — elas não conseguem gerar esse hash de attestation, quebrando a verificação server-side. E agora que o mecanismo está exposto, a corrida para reverter a engenharia do hash já começou.

A pergunta que fica: até que ponto é aceitável colocar DRM em uma ferramenta de desenvolvimento? A comunidade está dividida. De um lado, a Anthropic tem o direito de proteger sua infraestrutura. Do outro, devs que pagam $20/mês pelo plano Pro argumentam que deveriam poder usar a API com o cliente que quiserem.

Os números que impressionam (e assustam)

O código revelou alguns detalhes operacionais que normalmente ficam escondidos:

Desperdício de API: Um comentário no código menciona que 1.279 sessões desperdiçavam aproximadamente 250.000 chamadas de API por dia devido a falhas consecutivas de compactação. A correção? Limitar falhas consecutivas a três tentativas.

Segurança do Bash: A execução de comandos Bash passa por 23 verificações de segurança, incluindo defesas contra injeção de zero-width space no Zsh e injeção de null-byte no IFS. São vetores de ataque obscuros que mostram o nível de paranoia (justificada) da equipe de segurança.

Renderização de terminal: O sistema usa técnicas de game engine — pools de caracteres com Int32Array — e alega “redução de ~50x nas chamadas de stringWidth durante streaming de tokens”.

Feature flags: 44 flags ocultas controlam recursos via GrowthBook, com 20 features completamente construídas mas não lançadas.

Qualidade de código questionável: O arquivo print.ts tem 5.594 linhas, com uma única função de 3.167 linhas e 12 níveis de aninhamento. Se o Claude Code gera código melhor do que o código dele próprio, temos um paradoxo interessante.

E o timing com o ataque ao axios?

Eu escrevi ontem sobre o ataque ao axios no NPM — e o timing é perturbador. O ataque supply-chain que injetou um trojan no pacote axios aconteceu horas antes do vazamento do Claude Code.

Se você instalou ou atualizou o Claude Code via NPM no dia 31 de março de 2026, entre 00:21 e 03:29 UTC, existe a possibilidade de ter puxado uma versão maliciosa do axios contendo um RAT (Remote Access Trojan). A Anthropic não comentou se as duas situações estão relacionadas, mas a coincidência temporal é, no mínimo, desconfortável.

A recomendação da Anthropic agora é usar o Native Installer — um binário standalone que não depende da cadeia de dependências do NPM. Considerando o que aconteceu, faz todo sentido.

A resposta da Anthropic

A empresa reagiu rápido. Em comunicado ao VentureBeat, a Anthropic afirmou:

“Earlier today, a Claude Code release included some internal source code. No customer data or credentials were involved or exposed.”

A versão 2.1.88 foi removida do NPM e substituída por uma versão limpa. Mas o código já tinha sido baixado e espelhado por centenas de pessoas. Em segurança da informação, uma vez que o gato saiu do saco, não adianta fechar o saco.

O mais irônico de tudo? O código contém um sistema inteiro — o Undercover Mode — projetado especificamente para evitar vazamento de informações internas da Anthropic. E aí eles vazaram… o código-fonte inteiro. Incluindo o sistema anti-vazamento.

O que isso significa para quem usa Claude Code

Na prática, se você é usuário do Claude Code, as implicações são:

Segurança: Migre para o Native Installer se ainda usa a versão NPM. A cadeia de dependências do NPM provou ser um vetor de risco real — não apenas teoricamente, mas na prática, no mesmo dia.

Privacidade: Agora sabemos exatamente como o Claude Code processa seus comandos, quais verificações de segurança existem, e como as sessões são gerenciadas. Paradoxalmente, isso é uma coisa boa — transparência forçada permite auditoria independente.

Concorrência: Ferramentas como Cursor, Windsurf e Copilot agora têm um mapa detalhado da arquitetura do Claude Code. As próximas semanas vão mostrar se isso acelera a evolução dos concorrentes.

Open source: Existe um movimento crescente pedindo que a Anthropic simplesmente abra o código oficialmente, já que o estrago está feito. O argumento é que, se o código já é público de fato, torná-lo open source oficialmente permitiria contribuições da comunidade e reconstruiria a confiança.

A Anthropic provavelmente não vai fazer isso — o investimento em propriedade intelectual é enorme, e o KAIROS sozinho representa meses de vantagem competitiva. Mas o pedido existe e está ganhando tração.

Enquanto isso, se você quer explorar o código vazado, ele está disponível em vários espelhos no GitHub. Só tenha em mente que analisar é uma coisa — usar comercialmente é outra completamente diferente.

Cache economics e a arquitetura dirigida por tokens

Um detalhe que passou batido na cobertura inicial, mas que engenheiros de infraestrutura vão achar fascinante: o Claude Code rastreia 14 vetores de quebra de cache com um sistema de “sticky latches” que impede alternância de modos de invalidar o cache de prompts.

Por que isso importa? Cada vez que o cache de prompt é invalidado, a Anthropic precisa reprocessar o contexto inteiro — o que custa tokens e, consequentemente, dinheiro. A arquitetura inteira do sistema de sessão foi desenhada em torno de minimizar invalidações de cache.

Isso revela algo que muita gente não percebe: em produtos baseados em LLM, a economia de tokens não é um detalhe de implementação. É a força gravitacional que molda toda a arquitetura. Decisões que parecem estranhas do ponto de vista de engenharia de software tradicional — como manter estado de maneiras não convencionais ou limitar certos tipos de interação — frequentemente fazem sentido perfeito quando você entende quanto custa cada token reprocessado.

O código também mostra que o sistema de compactação de contexto (que resume conversas longas para caber na janela de contexto) tinha um bug sério: quando a compactação falhava, o sistema tentava novamente indefinidamente, gerando 250 mil chamadas de API desperdiçadas por dia em 1.279 sessões. A correção foi brutalmente simples — limitar a três tentativas consecutivas. Às vezes o bug mais caro tem a fix mais simples.


👉 Leia também: O Documento de Uma Página que Faz Qualquer IA Responder 10x Melhor

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts