- A Anthropic distribuiu um pacote npm incluindo source maps, o que acabou expondo todo o código do Claude Code e revelando funções internas e flags experimentais
- O código inclui injeção de ferramentas falsas para impedir imitação de modelo (anti-distillation), modo undercover para esconder a identidade de IA e uma regex de frustração para detectar palavrões
- Há uma estrutura de atestado de cliente nativo e verificação de hash em nível de DRM, projetada para bloquear o acesso à API por ferramentas não oficiais
- Comentários internos mostram 250 mil chamadas de API com falha por dia, o inacabado modo de agente autônomo KAIROS e um sistema de companheiro no estilo Tamagotchi, entre outros recursos experimentais
- Este vazamento expôs a estrutura central do produto e o roadmap da Anthropic, e levanta a hipótese de que um bug de source maps no runtime Bun tenha sido a causa
Estrutura interna do Claude Code revelada por vazamento de source maps
- A Anthropic distribuiu um pacote npm incluindo source maps, o que expôs todo o código-fonte do Claude Code
- O pacote depois foi removido, mas o código foi espelhado em vários lugares e passou a ser analisado
- Foi o segundo vazamento em uma semana; antes disso, um documento de especificação do modelo já havia sido exposto
- Isso aconteceu logo após a Anthropic bloquear legalmente o uso de APIs internas por ferramentas de terceiros
-
Anti-distillation: injeção de ferramentas falsas para impedir imitação
- Em
claude.ts, existe a flag ANTI_DISTILLATION_CC; quando ativada, ela inclui anti_distillation: ['fake_tools'] na requisição da API e injeta definições de ferramentas falsas no prompt de sistema
- O objetivo é contaminar tentativas de capturar tráfego da API para imitar o modelo
- Só funciona em sessões primárias de CLI com a flag do GrowthBook
tengu_anti_distill_fake_tool_injection ativada
- Em
betas.ts, há um segundo mecanismo: uma proteção do lado do servidor baseada em resumos
- O texto entre chamadas de ferramentas é resumido e retornado com uma assinatura criptográfica, podendo depois ser restaurado
- Mesmo registrando o tráfego externamente, não é possível ver todo o processo de raciocínio
- Esse recurso exige várias condições ao mesmo tempo e pode ser neutralizado removendo campos via proxy MITM
- Também pode ser desativado com a variável de ambiente
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS
- Pela condição
USER_TYPE === 'ant', é exclusivo para usuários internos da Anthropic
- Na prática, a defesa se parece mais com uma restrição legal do que com uma barreira técnica forte
-
Undercover mode: modo para ocultar a identidade de IA
undercover.ts remove codinomes internos da Anthropic, canais do Slack e a expressão “Claude Code” quando usado em repositórios externos
- A frase
"There is NO force-OFF" indica que não pode ser desativado
- Pode ser forçado com a variável de ambiente
CLAUDE_CODE_UNDERCOVER=1
- Em builds externas, a função é reduzida a um retorno sem efeito, formando uma estrutura de mão única
- Com isso, quando funcionários da Anthropic contribuem para projetos open source, não há indicação de que o conteúdo foi escrito por IA
- Embora ocultar informações internas seja compreensível, isso também faz a IA se passar por humana
-
Frustration regex: regex para detectar palavrões
- Em
userPromptKeywords.ts, há padrões de regex para detectar insatisfação e xingamentos do usuário
- Expressões como “wtf”, “this sucks” e “fuck you” são detectadas
- Isso mostra a ironia de uma empresa de LLM usar regex para análise de sentimentos,
- mas faz sentido em custo e velocidade quando comparado a chamar um LLM
-
Native client attestation: autenticação do cliente abaixo do runtime JS
- Em
system.ts, as requisições de API incluem o placeholder cch=00000, e
- a stack HTTP nativa do Bun, baseada em Zig, substitui isso por um hash
- o servidor verifica esse hash para confirmar se o binário é o Claude Code oficial
- Isso funciona como base técnica da disputa legal com o OpenCode,
- realizando uma verificação em nível de DRM para impedir que ferramentas de terceiros chamem a API diretamente
- Porém, isso não funciona se a flag
NATIVE_CLIENT_ATTESTATION estiver desligada ou
- se
CLAUDE_CODE_ATTRIBUTION_HEADER estiver desativado
- a substituição do hash em Zig só funciona no binário oficial do Bun, sendo inválida em ambiente Node
- Não está claro se o servidor rejeita hashes incorretos,
- e há um comentário de que
_parse_cc_header permite “unknown extra fields”
-
250 mil chamadas de API desperdiçadas
- Segundo um comentário em
autoCompact.ts,
- cerca de 250 mil chamadas de API por dia estavam sendo desperdiçadas em loops de falha
- em 1.279 sessões houve mais de 50 falhas consecutivas, com máximo de 3.272
- A correção tinha apenas 3 linhas: ao definir
MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3,
- a compactação automática passa a ser desativada após 3 falhas seguidas
-
KAIROS: modo de agente autônomo ainda não lançado
- Ao longo do código existe um modo sob feature gate chamado
KAIROS
- Segundo
main.tsx, ele parece ser um recurso de agente autônomo
- inclui a skill
/dream (destilação de memória noturna), webhook do GitHub, daemon em segundo plano e refresh por cron a cada 5 minutos
- A implementação está incompleta, mas já existe uma estrutura baseada em agente em segundo plano sempre ativo
-
Outras descobertas
- Easter egg de 1º de abril: em
buddy/companion.ts existe um sistema de companheiro no estilo Tamagotchi
- Com 18 criaturas, raridade, atributos de RPG e uma versão “shiny” com chance de 1%
- Determinado por PRNG baseada no ID do usuário, com codificação de strings para evitar detecção na build
- O motor de renderização de terminal (
ink/screen.ts, ink/optimizer.ts)
- implementa buffer ASCII baseado em
Int32Array, metadados em estilo bitmask e cache com ganho de desempenho de 50x
- A verificação de segurança (
bashSecurity.ts) tem 23 etapas,
- bloqueando comandos embutidos do Zsh, impedindo bypass com
=curl e barrando injeções com zero-width Unicode e null byte
- É um caso raro com modelo de ameaça específico para Zsh
- O gerenciamento de cache de prompt (
promptCacheBreakDetection.ts)
- rastreia 14 vetores de quebra de cache e usa um “sticky latch” para manter o cache durante trocas de modo
- Há um comentário
DANGEROUS_uncachedSystemPromptSection()
- refletindo uma filosofia de design focada em reduzir custo por token
- O coordenador multiagente (
coordinatorMode.ts)
- usa um algoritmo de orquestração baseado em prompts, não em código
- com diretrizes como “não aprovar trabalho fraco” e “não delegar sem entender”
- Também há problemas de qualidade de código
print.ts tem 5.594 linhas, e uma única função chega a 3.167 linhas
- Requisições HTTP usam Axios, coincidindo no tempo com o recente caso de versão maliciosa no npm
-
Significado e impacto
- Diferentemente do SDK público do Google Gemini CLI ou do OpenAI Codex,
- este vazamento expôs toda a estrutura interna do principal produto da Anthropic
- O maior dano talvez não seja o código em si, mas a exposição de feature flags e do roadmap
- recursos estratégicos como KAIROS e Anti-distillation ficaram visíveis para concorrentes
- No ano passado, a Anthropic adquiriu o Bun, e o Claude Code roda sobre ele
- um bug de source maps do Bun (
oven-sh/bun#28001) pode ter sido a causa
- o problema expõe source maps até em modo de produção e ainda não foi corrigido
- No fim, a Anthropic acabou vazando seu próprio produto por causa de um bug na própria cadeia de ferramentas
- como resumiu uma reação no Twitter, foi o tipo de ironia em que “ao distribuir código escrito por IA, o código vazou por causa de um bug criado por IA”
3 comentários
Inteligente
Foi um problema que aconteceu ao fazer commit com IA...?!
Opiniões do Hacker News
Há muitos comentários interpretando errado que “Undercover mode” seria apenas um recurso para ocultar informações internas
No prompt real, está explicitamente dito para nunca incluir “Claude Code” nem menções a IA em mensagens de commit ou descrições de PR
Ou seja, parece um recurso para agir como humano e esconder a própria identidade
É especialmente preocupante que essas diretrizes se apliquem ao contribuir para repositórios públicos
Link para o código relacionado
O histórico do Git serve para rastrear responsabilidade e autoria, não para registrar a lista de ferramentas usadas
Então será que eu também deveria colocar meu linter ou minha IDE como coautores nos meus PRs?
Na prática, isso é um problema resolvível com uma linha trivial de configuração
No fim, a responsabilidade continua sendo do desenvolvedor humano
Talvez tenham definido isso de propósito para atingir o objetivo, ou talvez exista uma intenção oculta
Ainda assim, em vez de concluir logo que está “fingindo ser humano”, faz mais sentido interpretar literalmente a frase “escreva como um desenvolvedor humano”
Quanto mais cético se é, mais convincente fica uma crítica baseada em fatos
Sinceramente, não quero esse tipo de coisa
Com os recentes vazamentos do Mythos em sequência e agora a exposição de toda a base de código do Claude Code, a questão da confiança está crescendo
Cada incidente isolado é interessante, mas, ocorrendo em série, começa a parecer um padrão
No fim, isso leva à pergunta: “dá para continuar confiando esse tipo de ferramenta à base de código?”
Eu ainda pago 140 dólares e uso CC
Na verdade, vejo esse tipo de vazamento como algo ligado ao modelo ético da Anthropic — dá uma sensação de crescimento por meio dos fracassos
O valor real não está no código, e sim no acesso ao modelo
A base de código é bagunçada, mas o acesso ao modelo por assinatura continua atraente, então sigo usando Claude Code todos os dias
Há erros pequenos demais na web UI e no CC
O controle de tmux também não funciona como na documentação, e as sessões não são limpas direito
Mesmo assim, continua sendo um produto de que gosto — desajeitado, mas com charme
Meu fork de anthropics/claude-code no GitHub foi removido por DMCA
Mesmo sem conter o código vazado, a rede inteira (8,1 mil repositórios) foi bloqueada de uma vez
Link para o aviso de DMCA
É ingênuo da parte da Anthropic achar que pode tocar o sino e depois fazê-lo parar
Como o vazamento não pode ser revertido, o mais realista é tratar isso como parte do roadmap do produto
Fiquei surpreso ao ver coisas que empresas antigamente chamariam de segredos comerciais escritas diretamente no código-fonte
Há até contexto de negócio nos comentários
Ex.: dados operacionais como “desperdício de 250 mil chamadas de API por dia” expostos sem filtro
Como eles leem comentários melhor do que documentação, isso pode ser usado quase como memória de longo prazo
A Anthropic só não esperava que vazasse
Do ponto de vista de um concorrente, isso quase não tem valor
Afinal, eles provavelmente não esperavam um vazamento
Some a necessidade de explicar em documentação separada
Algumas funções estão bloqueadas pela condição
process.env.USER_TYPE === 'ant'Ou seja, as instruções para funcionários da Anthropic são mais rígidas e mais francas — uma estrutura interessante
O post original no HN já está popular, então fica a dúvida se fazia sentido publicar também um blog resumindo comentários do HN
Ainda acho que Claude Code é excelente
Não vejo motivo para trocar por OpenAI ou Gemini
O nome “Undercover mode” e a frase “proibido mencionar Claude Code” soam sinistros, mas olhando o código real parece haver mais a intenção de proteger codinomes internos
Link da fonte
Isso me parece uma mudança bem importante
A ideia de “Anti-distillation: inserir ferramentas falsas para impedir cópia” é interessante
Seria uma reviravolta se concorrentes chineses de fato implementassem essas ferramentas falsas
Hoje em dia, acho que o diferencial competitivo está mais em dados e custo de inferência do que no modelo em si
Gostaria de conversar mais sobre esse tema
Afinal, essas empresas também construíram seus impérios usando dados alheios
A qualidade está estagnada, e a diferença real está no nível de acabamento do tooling
Esse vazamento pode até reduzir essa diferença
Hoje em dia, a própria distillation está ficando menos comum
Estou compartilhando o guia visual que eu fiz
ccunpacked.dev