Anatomie de Claude Code : Ce que révèle le code source divulgué
Le 31 mars 2026, le code source de Claude Code a fuité via une sourcemap dans un package npm. Il ne s'agit pas d'un dépôt git propre, mais d'un instantané récupéré de code côté client avec des transformations et des fichiers manquants comme assistant/index.ts ou daemon/main.js. screens/REPL.tsx est déjà compilé avec React Compiler, et main.tsx conserve des traces d'optimisations de lancement : profileCheckpoint, préchargement du trousseau de clés, lecture MDM parallèle.
Le code reflète une évolution d'un simple CLI vers un système d'exploitation de terminal. Les imports sont dynamiques pour le chargement différé ; --version s'exécute sans dépendances. Mais la complexité augmente : démon, contrôle à distance, tmux, serveurs MCP.
CLI comme façade d'un runtime multi-mode
entrypoints/cli.tsx est le centre de routage : --version, invite système, démon, exécuteur d'environnement, exécuteur auto-hébergé, ps/logs/attach/kill. Les imports dynamiques minimisent l'évaluation : les workers sont légers. Les chemins rapides ne chargent pas de modules lourds, réduisant la mémoire et les risques de plantage.
Plus : optimisation du démarrage. Moins : connaître tous les modes donne au CLI l'impression d'un aéroport. Le chargement différé sauve la mise, mais la structure est intimidante.
// Exemple de cli.tsx
if (fastPath) {
// zéro import au-delà de ce fichier
console.log(version);
process.exit(0);
}
main.tsx : Le centre de gravité du système
main.tsx est le point de convergence : initialisation, sélection de mode, pool d'outils, drapeaux de fonctionnalités, KAIROS/Proactif, sortie structurée, récupération de session. Plus : toute la logique de branchement en un seul endroit. Moins : des compromis comme le mode proactif avant getTools() pour SleepTool.isEnabled().
L'évolution est visible : d'un CLI à un système avec drapeaux et vérifications. L'échelle engendre de telles constructions.
- Initialisation et sélection de mode
- Invite système et pool d'outils
- Drapeaux de fonctionnalités et sessions distantes
- Lancement de l'interface et sessions
React dans le terminal : Ink et le frontend combinés
Claude Code est une application React sur Ink. screens/REPL.tsx gère les notifications, modales, intégration IDE, MCP, plugins, mode coéquipier, interface flottante, Buddy.
Synchronise l'état, filtre les outils, intègre les plugins. Pas un chat, mais un frontend dans le terminal avec des habitudes de navigateur.
Orchestrer les agents comme infrastructure
Pas un seul agent, mais un centre de contrôle. AgentTool prend en charge :
- Lancement synchrone/asynchrone
- Isolation en arrière-plan et de l'arbre de travail
- Modes distant et coéquipier
- Son propre pool d'outils et mode de permission
- Identité de cache pour prompt/outils
Agents asynchrones avec progression, notifications. L'arbre de travail comme partie de la route. Capacités d'agent matures au-delà de Promise.all.
L'agent d'exploration est limité : lecture seule, pas d'écriture/suppression/redirection/heredoc, concentré sur grep/lecture parallèle. Un équilibre entre autonomie et retenue.
Exécution d'outils : Concurrence et tolérance aux pannes
Les outils sont groupés : lecture seule en parallèle, les plus risqués — en série. Un exécuteur en flux avec :
- Annulation des frères en cas d'erreur
user_interruptedvssibling_errorvsstreaming_fallback- Tamponnage pour l'ordre
- Gestion des interruptions
Le produit survit aux blocages et conflits.
Bash sans autodestruction : Paranoïa de sécurité
bashPermissions et bashSecurity bloquent :
- Substitution de commande/processus
- Heredoc/égalités zsh
zmodload/ztcp/zpty- Drapeaux obfusqués
env/sudo/nice/timeout- Espaces/échappements
Une couche mature contre les vraies morsures de shell des LLMs.
La touche humaine : Buddy et animations
buddy/ — sprites ASCII, bulles de dialogue, animations. Un compagnon de terminal ajoute de la vie au CLI.
Points clés à retenir :
- Imports dynamiques pour un démarrage rapide des modes
main.tsxcomme centre d'orchestration avec des compromis d'échelle- Infrastructure d'agent avec isolation et cycle de vie
- Appels d'outils parallèles/sériels avec gestion des erreurs
- Sécurité Bash contre les attaques shell
- React/Ink pour l'interface terminal avec Buddy
— Editorial Team
Aucun commentaire pour le moment.