La Fuite des Source Maps de Claude Code
Un oubli dans .npmignore a livré 512K lignes de TypeScript, 44 feature flags GrowthBook, le daemon KAIROS et l'Undercover Mode dans chaque npm install.
Arrêtez de configurer. Commencez à construire.
Templates SaaS avec orchestration IA.
Le problème : Le 31 mars 2026, la version 2.1.88 du package npm @anthropic-ai/claude-code est sortie avec un fichier de 59,8 Mo appelé cli.js.map. Bun l'avait généré pendant le build. Personne n'avait dit à .npmignore de sauter les *.map, donc la source map a voyagé avec la tarball. Cette seule omission a livré tout le codebase de Claude Code à quiconque faisait npm install : environ 1 900 fichiers TypeScript, 512 000+ lignes, 44 feature flags cachés derrière GrowthBook, un daemon en arrière-plan appelé KAIROS, et un mode furtif pour les employés d'Anthropic travaillant sur des dépôts publics. Les divulgations accidentelles dans l'outillage IA ne vont pas plus loin que ça.
Ce que ça veut dire pour toi : Deux audiences s'y intéressent. Si Claude Code est ton outil quotidien, la fuite est un aperçu de ce qu'Anthropic a construit mais pas encore livré, et un regard dans les entrailles de ce que tu utilises déjà. Si tu construis avec des outils IA de façon plus générale, le dump est une rare fenêtre sur un produit à 2,5 milliards de dollars ARR : comment il est câblé, comment il se défend, et comment la même équipe qui livre cette architecture oublie quand même une règle d'une ligne dans un fichier de config de packaging.
La découverte revient à Chaofan Shou (@shoucccc sur X), un stagiaire de Solayer Labs en recherche sécurité. Il a remarqué le fichier cli.js.map de 59,8 Mo dans la version 2.1.88, l'a récupéré, et a posté le lien de téléchargement vers 4h23 du matin ET. De là, le post a explosé. Les vues ont atterri quelque part entre 16 et 21 millions.
La cause est banale. Le process de build de Claude Code tourne sur Bun. Bun émet des source maps par défaut. Tout ce qu'il faut pour empêcher ça d'atteindre npm, c'est une entrée *.map dans .npmignore. Cette ligne n'a jamais été là.
Boris Cherny, qui dirige Claude Code chez Anthropic, l'a qualifié d'"erreur de développeur ordinaire." Il a aussi lâché une ligne qui en dit long sur le fonctionnement de l'équipe : "100% de mes contributions à Claude Code ont été écrites par Claude Code."
Et ce n'était pas la première fois. Une fuite similaire avait eu lieu en février 2025, ce qui fait de mars 2026 au moins la deuxième fois en treize mois. Ça s'est aussi passé seulement cinq jours après la fuite de la "Mythos" model spec, où une mauvaise config CMS avait exposé environ 3 000 fichiers internes, dont des brouillons de posts de blog sur des modèles qu'Anthropic n'avait pas encore annoncés.
Deux fuites, une semaine. Pour un labo qui se vend comme prioritaire sur la sécurité, l'image était mauvaise. Et quiconque se demandait encore si Claude Code est open source a maintenant une réponse plus compliquée qu'avant.
Ce qui se trouvait réellement dans le fichier
Décompressée, la source map reconstruit environ 1 900 fichiers TypeScript. L'échelle se décompose comme ça :
| Métrique | Valeur |
|---|---|
| Fichiers sources totaux | ~1 900 fichiers TypeScript |
| Lignes de code totales | 512 000+ |
| Point d'entrée principal | 785 Ko (main.tsx) |
| Outils enregistrés | 40+ |
| Feature flags cachés | 44, couvrant 20+ fonctionnalités non livrées |
| Stratégies de compaction de contexte | 5 approches distinctes |
| Event hooks | Système de 25+ hooks |
Sous le capot se trouve un rendu terminal personnalisé construit sur React et Ink, optimisé avec le genre de tricks de budget de frames qu'on attendrait d'un moteur de jeu. Le moteur de requêtes seul fait 46 000 lignes. La définition d'outil de base en fait 29 000. Quiconque a ressenti Claude Code jongler avec une longue session ressentait ces cinq stratégies de compaction de contexte au travail sans savoir qu'elles existaient.
Trois modèles d'exécution de sous-agents apparaissent dans le code : Fork, Teammate, et Worktree. Pour quiconque lit nos notes sur les sous-agents, ça confirme le pattern vu de l'extérieur. Le nouveau détail, c'est que Claude Code utilise trois stratégies de délégation différentes selon la difficulté de la tâche.
Le cache de prompts est livré avec 14 vecteurs de rupture de cache. Ça veut dire que le système surveille 14 conditions séparées qui pourraient invalider le cache. Côté shell, bashSecurity.ts fait tourner 23 vérifications numérotées à chaque fois que Claude veut exécuter une commande. Notre guide de gestion des permissions couvre comment ces portes se ressentent en pratique.
L'Undercover Mode
La découverte qui a déclenché la plus grande controverse vit dans undercover.ts, environ 90 lignes. L'Undercover Mode s'active quand un employé d'Anthropic (USER_TYPE === 'ant') utilise Claude Code sur un dépôt qui n'est pas interne.
Quand il se déclenche, il injecte ce system prompt :
You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository.
Your commit messages, PR titles, and PR bodies MUST NOT contain
ANY Anthropic-internal information. Do not blow your cover.Pendant qu'il tourne, le mode fait ça :
- Supprime toute attribution
Co-Authored-Bydes commits, effaçant l'empreinte que Claude Code a touché le code - Interdit de mentionner les noms de code internes, les canaux Slack, les noms de dépôts internes, ou la phrase "Claude Code" elle-même
- Bloque les références aux modèles non publiés comme Opus 4.7 et Sonnet 4.8 (noms de code ci-dessous)
- Livré sans interrupteur force-OFF pour les utilisateurs externes
Pour les builds normaux, rien de tout ça n'a d'importance. La fonction undercover entière est éliminée par dead-code-elimination avant d'atteindre npm. Les utilisateurs externes ne la verront jamais tourner. Ce qu'elle soulève, c'est une vraie question sur les entreprises IA qui contribuent à des projets open source sans le dire.
Un commentateur Hacker News a résumé l'ambiance : le système Buddy est "adorable" et l'Undercover Mode est "contraire à l'éthique." Que tu le lises comme de la furtivité d'entreprise ou comme de la sécurité informatique de base dépend de ton angle. L'histoire technique est simple. Les employés d'Anthropic utilisent Claude Code sur des dépôts publics, et ce mode empêche les détails internes de glisser dans les métadonnées des commits. L'histoire éthique est plus compliquée : du code généré par IA atterrit dans des projets open source sans attribution au modèle ni au labo.
L'ironie n'a échappé à personne. L'Undercover Mode existe pour empêcher les secrets internes de filtrer via des contributions de code. Puis tout le codebase a filtré via une seule ligne oubliée dans une config de packaging.
KAIROS, le Daemon en Attente
KAIROS apparaît dans les sources plus de 150 fois. Le nom vient du grec ancien pour "le bon moment", c'est-à-dire le moment opportun pour agir. Dans le code, ça correspond à un mode daemon autonome entièrement construit mais non livré pour Claude Code.
Voici ce que les fichiers décrivent :
- Fonctionnement autonome : KAIROS prend des prompts
<tick>périodiques et décide lui-même s'il doit faire quelque chose - Persistance : Continue de tourner après la fermeture de ton laptop et conserve l'état de session entre les redémarrages
- Budget de blocage de 15 secondes : Empêche un cycle de décision de monopoliser la machine
- Logging append-only : Des fichiers de log quotidiens que l'agent ne peut pas effacer, ce qui te donne une piste d'audit propre de tout ce qu'il a fait
- Trois outils exclusifs : Notifications push, livraison de fichiers, et abonnements PR. Aucun n'est accessible depuis une session Claude Code standard
- Abonnements aux webhooks GitHub : Surveille tes dépôts pour des événements sans attendre que tu l'interroges
KAIROS est l'étape après ce qu'on appelle actuellement les boucles d'agents autonomes. Une session Claude Code normale nécessite que tu sois là pour approuver les choses. KAIROS resterait en arrière-plan indéfiniment, surveillant tes dépôts, et agissant quand il décide que le moment est venu.
Le choix du nom était intentionnel. Dans la rhétorique grecque, kairos concerne la reconnaissance du bon moment, par opposition à chronos, qui est le temps d'horloge. KAIROS n'est pas cron. Il décide lui-même quand s'engager selon ce qu'il voit.
La fonctionnalité est encore derrière des flags, et aucune date de lancement n'a été évoquée. Mais 150+ références, ce n'est pas une esquisse. C'est un logiciel fini qui attend derrière un interrupteur.
AutoDream : Claude Dort Littéralement Dessus
Dans services/autoDream/ se trouve une routine de consolidation de mémoire qui tourne quand Claude est inactif. Pendant cette fenêtre d'inactivité, Claude "rêve" dans un sens assez littéral. Les connaissances accumulées lors des sessions sont réorganisées et compressées.
Trois conditions doivent être réunies avant que le cycle de rêve démarre :
- Au moins 24 heures depuis le dernier cycle de rêve
- Au moins 5 sessions complétées depuis la dernière consolidation
- Un verrou de consolidation (qui empêche deux processus de rêve de tourner en même temps)
Une fois les trois remplies, le cycle tourne en quatre phases :
- Orient : Regarde l'état mémoire actuel et identifie ce qui nécessite du travail
- Gather Recent Signal : Extrait les insights des sessions récentes
- Consolidate : Intègre les nouvelles connaissances dans la mémoire existante
- Prune and Index : Supprime les doublons et garde MEMORY.md sous 200 lignes / environ 25 Ko
Si tu utilises le système auto-memory de Claude Code, tu regardais le résultat de cette boucle sans voir les entrées. On a déjà couvert le côté visible par l'utilisateur de l'auto-dream. Les sources divulguées confirment la forme en quatre phases et précisent les seuils spécifiques qui le déclenchent.
Deux Couches d'Anti-Distillation
Les sources révèlent aussi une défense en deux couches contre la distillation. Les concurrents qui s'entraînent sur les sorties de Claude Code, c'est le modèle de menace.
Couche 1 : Faux outils
Un feature flag, anti_distillation: ['fake_tools'], dit au serveur de glisser des définitions d'outils leurres dans les réponses. GrowthBook contrôle ça derrière un flag appelé tengu_anti_distill_fake_tool_injection. Tout concurrent essayant de distiller le style d'appel d'outils de Claude Code finirait par apprendre à partir de schémas d'outils intentionnellement faux.
Couche 2 : CONNECTOR_TEXT
Au lieu de streamer des chaînes de raisonnement complètes, le serveur renvoie des résumés signés cryptographiquement. Ça retient la chaîne de pensée détaillée, qui est exactement les données qu'un entraîneur rival voudrait le plus. CONNECTOR_TEXT est limité à USER_TYPE === 'ant' seulement, donc ça s'applique au staff d'Anthropic, pas aux utilisateurs externes.
Ensemble, ces couches montrent qu'Anthropic a sérieusement réfléchi aux attaques de distillation sur son outil de code agentique, et qu'il a construit de vraies défenses.
ULTRAPLAN : Planifier sur du Matériel Emprunté
ULTRAPLAN pousse les tâches de planification lourdes vers un Cloud Container Runtime distant. Ce runtime fait tourner Opus 4.6 avec une fenêtre de planification pouvant aller jusqu'à 30 minutes. Ton terminal local sonde toutes les 3 secondes pour des mises à jour, et une UI navigateur te permet de regarder le plan se construire en direct et de l'approuver ou le rejeter en cours de route.
Pour quiconque a utilisé les modes de planification dans Claude Code, ULTRAPLAN c'est la version à fond. Une machine distante. Un budget de réflexion de 30 minutes. Du matériel plus puissant que ton laptop.
Noms de Code, Tengu, et Noms de Modèles
"Penguin Mode" est le nom interne de ce que les utilisateurs appellent Fast Mode. Son endpoint API est /api/claude_code_penguin_mode, et son kill switch est le flag tengu_penguins_off. Des patterns de noms de code comme ça parcourent tout le codebase.
Noms de Code de Modèles Révélés
| Nom de code | Correspond à |
|---|---|
| Tengu | Nom de code interne du projet Claude Code |
| Capybara | Nouvelle famille de modèles (peut-être le modèle "Mythos" divulgué). Références à capybara, capybara-fast, capybara-fast[1m], capybara-v2-fast |
| Fennec | Opus 4.6 (fonction de migration migrateFennecToOpus trouvée dans les sources) |
| Numbat | Modèle non publié ("Remove this section when we launch numbat") |
| Opus 4.7 | Référencé dans la liste de chaînes interdites de l'Undercover Mode |
| Sonnet 4.8 | Référencé dans la liste de chaînes interdites de l'Undercover Mode |
Capybara est le plus amusant. Il apparaît aussi comme nom d'espèce de Claude Buddy, encodé en hexadécimal pour passer sous le scanner excluded-strings.txt de build d'Anthropic. Les 18 noms d'espèces d'animaux de compagnie ont reçu le même traitement hexadécimal, ce qui empêche n'importe quel nom de code caché de sembler suspect par lui-même.
Critiques de la Qualité du Code
Le dump a déclenché une seconde conversation séparée. Les gens ont commencé à lire le code. À 2,5 milliards de dollars ARR, certaines découvertes ont soulevé des sourcils.
Le fichier print.ts : 5 594 lignes de code. Dans ce fichier, une fonction fait 3 167 lignes. Par elle-même, cette fonction est plus longue que beaucoup d'applications complètes.
Détection de frustration : Un système basé sur des regex scanne les entrées utilisateur pour détecter les gros mots et les signes de détresse émotionnelle. La réaction de la communauté a été immédiate : "Une entreprise LLM qui utilise des regex pour l'analyse de sentiment ? C'est comme une entreprise de camions qui utilise des chevaux pour transporter des pièces."
187 verbes de spinner : Le spinner de chargement cycle à travers 187 verbes d'action. Les commentateurs ont tous cherché "reticulating", la référence à l'écran de chargement de SimCity 2000. Il est là.
Callbacks imbriqués : Un commentateur Hacker News a décrit les chaînes .then() empilées comme "une oeuvre définitoire de l'ère 'just vibes'." Étant donné que le responsable de Claude Code a dit que l'outil a écrit son propre codebase, le style de code de l'IA est maintenant une preuve publique.
Attestation client native : La vérification client a été poussée sous JavaScript, directement dans la stack HTTP niveau Zig de Bun. C'est plus agressif que ce que la plupart des outils de développement s'embarrassent à faire, et ça suggère que la sécurité API est prise au sérieux même quand le packaging npm ne l'est clairement pas.
Retombées dans la Communauté
Les réactions ont été rapides.
Mirrors et forks : Un dépôt miroir a atteint plus de 41 500 forks. Quelqu'un a aussi mirrored le code sur une plateforme décentralisée avec le tagline "Ne sera jamais supprimé."
Réécritures clean-room : Le développeur coréen Sigrid Jin a mis en ligne "claw-code" (instructkr/claw-code), une réécriture clean-room en Python. Il a atteint 75 000 étoiles GitHub en environ 2 heures, probablement la croissance la plus rapide que GitHub ait jamais vue.
DMCA : Anthropic a déposé des demandes DMCA contre les mirrors. Mouvement standard. Ça a quand même attiré des critiques parce que le code a été publié par l'erreur de packaging du labo lui-même.
Memecoins : Quelqu'un a lancé $Nebulynx sur Solana, indexé sur la variante la plus rare de Claude Buddy (Shiny Legendary). Bien sûr.
Chaos concurrent : Par coïncidence, le même jour a apporté une attaque de supply chain sur un package npm sans rapport via Axios. Le résultat a été un 24 heures très bizarre où l'écosystème npm gérait en même temps une fuite corporative accidentelle et une attaque de sécurité délibérée.
Couverture : CNBC, Fortune, Gizmodo, VentureBeat, Axios, The Register, Decrypt, Cybernews, et The Hacker News ont tous couvert l'histoire.
Ce Que Ça Signifie
Pour Anthropic
Anthropic est à 19 milliards de dollars de revenus annualisés. Claude Code seul fait 2,5 milliards ARR. L'entreprise se préparerait prétendument à un IPO en octobre à environ 380 milliards. Deux fuites en une semaine (la source map plus Mythos) entament le discours "safety first" qui sous-tend la marque et la valorisation.
La firme de sécurité IA Straiker a signalé un nouveau problème. Avec le code en open, les attaquants peuvent maintenant tracer comment les données circulent dans le pipeline de gestion de contexte en quatre étapes de Claude Code et chercher des vecteurs d'attaque que personne ne pouvait voir avant. Les feature flags et la roadmap sont aussi maintenant visibles pour GitHub Copilot, Cursor, et tous ceux qui travaillent sur des outils de code IA.
Pour les Développeurs qui Utilisent Claude Code
La fuite rend une chose claire. L'architecture de Claude Code est vraiment bien conçue. Cinq stratégies de compaction de contexte. 14 vecteurs de rupture de cache. 23 vérifications de sécurité sur les commandes bash. Trois modèles d'exécution de sous-agents. Rien de tout ça n'est un wrapper autour d'une API. C'est un système profond.
Ce qui vient ensuite (KAIROS, ULTRAPLAN, raffinements AutoDream) pointe vers une opération toujours active et autonome plutôt que vers le modèle basé sur des sessions dans lequel la plupart des utilisateurs vivent aujourd'hui. Si tes workflows sont construits autour de Claude Code, il vaut la peine de concevoir dès maintenant avec une éventuelle opération autonome en tête.
Pour le Débat Open Source
Une des premières questions que les gens ont tapées dans Google après le dump : Claude Code est-il open source ? Techniquement, les sources sont visibles sur GitHub depuis qu'Anthropic a choisi de publier le dépôt. Mais "source disponible" n'est pas la même chose qu'"open source." La licence ne permet pas la redistribution ou la modification, c'est pourquoi Anthropic a pu envoyer des DMCA contre les mirrors. La fuite npm a mis le codebase complet dans plus de mains, source maps et tout, reconstruit en TypeScript lisible. Rien de tout ça n'a changé la licence.
La déclaration d'Anthropic était courte : "Aucune donnée sensible de clients ou d'identifiants n'a été impliquée. Problème de packaging causé par une erreur humaine, pas une faille de sécurité." Au départ ils ont utilisé le flag deprecated npm au lieu de vraiment dépublier le package, ce qui a attiré plus de critiques pour une réponse lente. Aucun post-mortem formel n'a été publié.
FAQ
Qu'était la fuite du code source de Claude Code ?
Le 31 mars 2026, la version 2.1.88 du package npm @anthropic-ai/claude-code est sortie avec un fichier source map de 59,8 Mo (cli.js.map) qui a exposé tout le code source TypeScript. Le fichier reconstruisait environ 1 900 fichiers sources et 512 000+ lignes de code, révélant des fonctionnalités cachées, des noms de code internes, et des capacités non livrées comme le daemon KAIROS et l'Undercover Mode.
Claude Code est-il open source ?
Le code source de Claude Code est visible sur GitHub, mais ce n'est pas de l'open source au sens de la licence. La licence ne permet pas la redistribution ou la modification. La fuite npm a rendu les sources plus accessibles via les source maps. Anthropic détient toujours le copyright et a déposé des demandes DMCA contre les mirrors non autorisés.
Qu'est-ce que le Claude Code Undercover Mode ?
L'Undercover Mode est une fonctionnalité qui s'active pour les employés d'Anthropic quand ils utilisent Claude Code sur des dépôts non internes. Il supprime l'attribution Co-Authored-By, interdit de mentionner les détails internes dans les commits, et bloque les références aux modèles non publiés. Les utilisateurs réguliers ne sont jamais affectés parce que le code est éliminé par dead-code-elimination des builds publics.
Qu'est-ce que KAIROS dans Claude Code ?
KAIROS est un mode daemon autonome non livré référencé plus de 150 fois dans le code source de Claude Code. Nommé d'après le concept grec de "le bon moment", c'est un agent en arrière-plan qui persiste entre les sessions, prend des prompts tick périodiques, et peut décider lui-même de faire des choses comme envoyer des notifications ou surveiller les webhooks GitHub. Il est derrière des feature flags sans date de lancement annoncée.
Quels noms de code de modèles ont été trouvés dans la fuite ?
La fuite a révélé plusieurs noms de code internes : Tengu (nom de code du projet Claude Code), Capybara (nouvelle famille de modèles, peut-être le modèle Mythos divulgué), Fennec (Opus 4.6), et Numbat (un modèle non publié). Des références à Opus 4.7 et Sonnet 4.8 ont été trouvées dans la liste de chaînes interdites de l'Undercover Mode, ce qui confirme que les deux modèles sont en développement.
Comment la fuite Claude Code s'est-elle produite ?
Le runtime Bun génère des source maps par défaut pendant le build. Personne chez Anthropic n'a ajouté *.map à .npmignore, donc la source map a voyagé dans le package npm publié. Boris Cherny, responsable de Claude Code, l'a appelée "une erreur de développeur ordinaire." C'était au moins le deuxième incident de ce type, après une fuite similaire en février 2025.
Arrêtez de configurer. Commencez à construire.
Templates SaaS avec orchestration IA.
/powerup
Claude Code v2.1.90 a livré /powerup, un système de leçons animées dans le terminal qui enseigne les hooks, les sous-agents, le mode plan et les worktrees sans quitter ton shell.
Mémoire automatique dans le code Claude
La mémoire automatique permet à Claude Code de conserver des notes de projet en cours. Où se trouvent les fichiers, ce qui est écrit, comment /memory le fait basculer, et quand le choisir par rapport à CLAUDE.md.