19 points par GN⁺ 2026-04-01 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Anthropic a publié un package npm avec les source maps incluses, exposant l’intégralité du code de Claude Code ainsi que ses fonctions internes et flags expérimentaux
  • Le code contient une injection de faux outils pour empêcher l’imitation du modèle (anti-distillation), un mode undercover pour masquer l’identité IA, ainsi qu’une regex de frustration pour détecter les insultes
  • Une architecture d’attestation du client natif et de vérification de hachage de niveau DRM est présente afin de bloquer l’accès API depuis des outils non officiels
  • Les commentaires internes mentionnent 250 000 appels API en échec par jour, un mode d’agent autonome KAIROS inachevé, ainsi qu’un système de compagnon façon Tamagotchi parmi plusieurs fonctions expérimentales
  • Cette fuite est présentée comme une exposition de l’architecture produit clé et de la feuille de route d’Anthropic, possiblement causée par un bug des source maps du runtime Bun

La structure interne de Claude Code révélée par une fuite de source maps

  • Anthropic a distribué Claude Code avec les source maps incluses dans un package npm, ce qui a rendu l’intégralité du code source publique
    • Le package a ensuite été supprimé, mais le code a été miroité à plusieurs endroits et analysé
    • Il s’agit de la deuxième fuite en une semaine, après l’exposition d’un document de spécification du modèle
    • L’incident survient peu après qu’Anthropic a bloqué juridiquement l’usage de ses API internes par des outils tiers
  • Anti-distillation : injection de faux outils pour empêcher l’imitation

    • Dans claude.ts, un flag ANTI_DISTILLATION_CC existe ; lorsqu’il est activé, il ajoute anti_distillation: ['fake_tools'] à la requête API afin d’injecter des définitions de faux outils dans le prompt système
      • L’objectif est de polluer les tentatives de capture du trafic API destinées à imiter le modèle
      • Le mécanisme ne fonctionne que dans les sessions CLI primaires où le flag GrowthBook tengu_anti_distill_fake_tool_injection est activé
    • Dans betas.ts, un second mécanisme met en place une protection côté serveur basée sur des résumés
      • Le texte entre les appels d’outils est résumé puis renvoyé avec une signature cryptographique, avant d’être restaurable ultérieurement
      • Même si un tiers enregistre le trafic, il ne peut pas voir l’intégralité du processus de raisonnement
    • Cette fonctionnalité exige que plusieurs conditions soient réunies simultanément et peut être neutralisée en supprimant certains champs via un proxy MITM
      • Elle peut être désactivée avec la variable d’environnement CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS
      • La condition USER_TYPE === 'ant' la réserve aux utilisateurs internes d’Anthropic
    • En pratique, la défense ressemble davantage à une contrainte juridique qu’à une véritable protection technique
  • Mode undercover : masquer l’identité de l’IA

    • undercover.ts supprime, lors de l’usage sur des dépôts externes, les noms de code internes d’Anthropic, les canaux Slack et la mention “Claude Code”
      • La chaîne "There is NO force-OFF" indique qu’il n’existe aucun moyen de le désactiver
      • Il peut être forcé via la variable d’environnement CLAUDE_CODE_UNDERCOVER=1
    • Dans les builds externes, la fonction est réduite à un retour sans effet, ce qui en fait une structure à sens unique
    • Résultat : lorsqu’un employé d’Anthropic contribue à l’open source, rien n’indique qu’un contenu a été rédigé par une IA
      • Le but de masquer les informations internes peut se comprendre, mais l’effet revient aussi à faire passer l’IA pour un humain
  • Regex de frustration : détection des insultes

    • Dans userPromptKeywords.ts, des motifs regex sont utilisés pour détecter la frustration ou les insultes de l’utilisateur
      • Des expressions comme “wtf”, “this sucks” ou “fuck you” sont reconnues
    • Cela illustre l’ironie de voir une entreprise de LLM recourir à des regex pour l’analyse émotionnelle,
      • mais c’est plus rapide et moins coûteux qu’un appel à un LLM
  • Attestation du client natif : authentification sous le runtime JS

    • Dans system.ts, les requêtes API incluent un placeholder cch=00000, qui est ensuite
      • remplacé par un hachage par la pile HTTP native de Bun écrite en Zig
      • Le serveur vérifie ce hachage afin de confirmer qu’il s’agit bien du binaire officiel de Claude Code
    • Cela constitue la base technique du litige juridique autour d’OpenCode,
      • avec une vérification de niveau DRM destinée à empêcher les outils tiers d’appeler directement l’API
    • Toutefois, le mécanisme ne fonctionne pas si le flag NATIVE_CLIENT_ATTESTATION est désactivé ou si
      • CLAUDE_CODE_ATTRIBUTION_HEADER est coupé
      • Le remplacement du hachage côté Zig ne fonctionne que dans le binaire officiel de Bun et est inopérant sous Node
    • On ne sait pas clairement si le serveur rejette réellement les mauvais hachages,
      • et un commentaire indique que _parse_cc_header autorise des “unknown extra fields”
  • 250 000 appels API gaspillés

    • D’après un commentaire dans autoCompact.ts,
      • environ 250 000 appels API par jour étaient perdus dans une boucle d’échecs
      • 1 279 sessions ont connu plus de 50 échecs consécutifs, avec un maximum de 3 272
    • La correction tient en seulement 3 lignes : avec MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3,
      • la fonction de compactage automatique est désactivée après 3 échecs consécutifs
  • KAIROS : un mode d’agent autonome non publié

    • Le code contient partout un mode géré par feature gate nommé KAIROS
      • D’après main.tsx, il s’agirait d’une fonction d’agent autonome
      • avec une skill /dream (distillation nocturne de mémoire), des webhooks GitHub, un démon en arrière-plan et un rafraîchissement cron toutes les 5 minutes
    • L’implémentation est incomplète, mais une architecture d’agent de fond toujours actif est déjà en place
  • Autres découvertes

    • Easter egg du 1er avril : buddy/companion.ts contient un système de compagnon de style Tamagotchi
      • avec 18 créatures, rareté, statistiques RPG et une version “shiny” à 1 %
      • le choix repose sur un PRNG fondé sur l’identifiant utilisateur, avec un encodage de chaîne pour éviter les contrôles de build
    • Le moteur de rendu terminal (ink/screen.ts, ink/optimizer.ts)
      • implémente un buffer ASCII basé sur Int32Array, des métadonnées de style en bitmask et un cache annonçant un gain de performances de 50x
    • Les contrôles de sécurité (bashSecurity.ts) comportent 23 étapes
      • dont le blocage des commandes intégrées Zsh, la prévention du contournement via =curl, ainsi que le blocage des injections Unicode zero-width et null-byte
      • c’est un cas rare avec un modèle de menace spécifique à Zsh
    • La gestion du cache de prompt (promptCacheBreakDetection.ts)
      • suit 14 vecteurs de corruption de cache et utilise un “sticky latch” pour conserver le cache lors des changements de mode
      • un commentaire mentionne DANGEROUS_uncachedSystemPromptSection()
      • ce qui reflète une philosophie de conception centrée sur la réduction du coût des tokens
    • Le coordinateur multi-agent (coordinatorMode.ts)
      • s’appuie non pas sur du code, mais sur un algorithme d’orchestration piloté par prompt
      • avec des consignes telles que “interdiction d’approuver un travail faible” ou “interdiction de déléguer sans comprendre”
    • Des problèmes de qualité de code sont également visibles
      • print.ts fait 5 594 lignes, dont une fonction unique de 3 167 lignes
      • les requêtes HTTP utilisent Axios, ce qui coïncide temporellement avec le récent incident de version malveillante sur npm
  • Signification et impact

    • Contrairement au SDK public de Google Gemini CLI ou d’OpenAI Codex,
      • cette fuite expose l’intégralité de la structure interne d’un produit clé d’Anthropic
    • Le dommage principal tient moins au code lui-même qu’à la révélation des feature flags et de la feuille de route
      • avec des fonctions stratégiques comme KAIROS ou l’anti-distillation désormais visibles par la concurrence
    • Anthropic a racheté Bun l’an dernier, et Claude Code fonctionne au-dessus de Bun
      • un bug des source maps de Bun (oven-sh/bun#28001) pourrait être à l’origine du problème
      • il exposerait les source maps même en mode production et n’est toujours pas corrigé
    • En conséquence, Anthropic aurait fait fuiter son propre produit à cause d’un bug de sa propre chaîne d’outils
      • selon une réaction sur Twitter, il s’agit du cas ironique où “du code écrit par IA a été déployé, puis a fui à cause d’un bug créé par IA”

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.