System Prompt Claude Code : 14 902 Lignes Décortiquées
Le system prompt de Claude Code, révélé par un leak de code source
fin mars 2026, totalise
14 902 lignes TypeScript réparties en modules
spécialisés. Contrairement à un prompt statique classique, il est
compilé dynamiquement à chaque session via le
mécanisme SYSTEM_PROMPT_DYNAMIC_BOUNDARY, qui adapte les
instructions selon le projet détecté (langage, framework,
structure). Le système intègre environ
40 outils (filesystem, exécution shell, analyse de
code, Git, navigation web, outils internes comme
think et plan) et gère
5 niveaux de permission (Strict, Standard, Relaxed,
YOLO, Supervised). Le prompt compilé varie entre 8 000 et 50 000
tokens selon le contexte. Les patterns clés identifiés incluent la
modularité du prompt, l'usage massif d'instructions négatives (347
occurrences de « never/do not »), et l'outil think comme
chain-of-thought formalisé. C'est l'architecture de prompt la plus
sophistiquée jamais documentée publiquement.
Pourquoi le system prompt de Claude Code fait-il 14 902 lignes ?
Quand le code source de Claude Code a fuité via un package npm mal configuré fin mars 2026, la communauté dev s'attendait à trouver un prompt système classique — quelques centaines de lignes, des instructions de comportement, point. Ce qu'on a découvert est d'un tout autre calibre : 14 902 lignes TypeScript qui orchestrent un véritable système d'exploitation pour agent IA. Pas un simple prompt. Un framework complet de génération dynamique.
Pour comprendre l'ampleur du truc, il faut remettre en contexte. Un system prompt GPT-4 classique fait entre 500 et 2 000 tokens. Celui de Claude Code, une fois compilé et injecté, peut dépasser les 50 000 tokens selon le contexte d'exécution. C'est un ordre de grandeur au-dessus de tout ce qu'on avait vu jusqu'ici dans l'industrie. Comme le souligne Engineer's Codex, on est face à « l'architecture de prompt la plus sophistiquée jamais rendue publique ».
La raison de cette taille ? Claude Code n'est pas un chatbot. C'est un agent autonome capable de lire, écrire, exécuter du code, naviguer dans un filesystem, gérer des processus — et tout ça nécessite des instructions extrêmement précises pour chaque scénario. Chaque outil, chaque mode de permission, chaque edge case a ses propres instructions. Et tout est généré dynamiquement.
La structure globale du fichier source
D'après l'analyse de
Sabrina.dev, le system prompt est réparti sur plusieurs modules TypeScript qui
sont assemblés au runtime. Le fichier principal —
system-prompt-builder.ts — fait à lui seul 3 200 lignes.
Il importe ensuite des modules spécialisés :
tool-definitions.ts (4 100 lignes),
permission-modes.ts (1 800 lignes),
context-injectors.ts (2 400 lignes), et une dizaine
d'autres fichiers auxiliaires.
Le total de 14 902 lignes inclut les commentaires, les types TypeScript et les fonctions utilitaires. Le prompt effectif — le texte réellement envoyé à Claude — varie entre 8 000 et 50 000 tokens selon la configuration active. C'est cette génération conditionnelle qui rend le système si puissant et si complexe. Pour approfondir l'architecture globale, consulte notre analyse des secrets d'architecture du leak.
Comparaison avec les autres system prompts connus
Pour situer : le system prompt de ChatGPT qui avait fuité en 2024 faisait environ 1 500 mots. Celui de GitHub Copilot, environ 3 000 lignes en comptant les exemples few-shot. Claude Code est 5x plus volumineux que le plus gros system prompt documenté publiquement. Comme le note Layer5, sur les 512 000 lignes totales du leak, le system prompt représente à lui seul près de 3% du codebase — une proportion énorme pour ce qui est techniquement « juste des instructions ».
Comment fonctionne la génération dynamique du prompt ?
C'est probablement la révélation la plus importante du leak. Claude
Code n'utilise pas un prompt statique. Il compile son
system prompt à chaque session en fonction de dizaines de variables
contextuelles. C'est ce qu'Anthropic appelle en interne le mécanisme
SYSTEM_PROMPT_DYNAMIC_BOUNDARY.
Concrètement, quand tu lances Claude Code dans un projet, le builder
analyse ton environnement : quel langage dominant, quel framework,
quelle structure de dossiers, quels fichiers de config existent
(tsconfig.json, .eslintrc,
Dockerfile, etc.). À partir de ces signaux, il active ou
désactive des blocs d'instructions conditionnels. Un
projet Python/Django ne recevra pas les mêmes instructions qu'un
projet Rust ou un monorepo TypeScript.
Le mécanisme SYSTEM_PROMPT_DYNAMIC_BOUNDARY
D'après l'analyse technique de
Alex Kim, le SYSTEM_PROMPT_DYNAMIC_BOUNDARY est un marqueur
interne qui délimite les sections variables du prompt. Le builder
insère des blocs entre ces marqueurs, et un sanitizer final vérifie la
cohérence globale avant injection. Ce mécanisme permet aussi à
Anthropic de mettre à jour des sections spécifiques du prompt sans
toucher au reste — une sorte de
hot-patching de prompt.
Le code révèle au moins 47 conditions de branchement différentes. Certaines sont triviales (« si le projet utilise TypeScript, inclure les conventions TS »), d'autres sont remarquablement sophistiquées (« si le fichier modifié est dans un répertoire contenant des tests, ajuster le comportement de vérification »). C'est du prompt engineering industriel, pas artisanal.
Les context injectors : l'intelligence contextuelle
Le module context-injectors.ts est fascinant. Il scanne
le projet pour extraire des métadonnées et les injecter directement
dans le prompt sous forme de « contexte enrichi ». Par exemple, il
détecte les conventions de nommage du projet, les patterns
architecturaux utilisés, et même le style de commit messages dans
l'historique Git.
VentureBeat
rapporte que ce mécanisme est la raison pour laquelle Claude Code
semble « comprendre » un projet dès la première interaction — il a
littéralement analysé ta codebase avant de te répondre.
Pour voir comment exploiter au mieux cette intelligence contextuelle, jette un œil à notre guide des best practices Claude Code.
Quels sont les ~40 outils intégrés dans Claude Code ?
Le leak révèle que Claude Code dispose d'environ 40 outils (tools) définis comme des plugins internes. Chaque outil a sa propre définition JSON Schema, ses instructions d'usage dans le prompt, et ses contraintes de permission. C'est un véritable écosystème.
D'après le décompte de MindStudio, les outils se répartissent en plusieurs catégories fonctionnelles.
Les outils filesystem et exécution
Le cœur du système. On trouve : read_file,
write_file, edit_file (avec un système de
diff sophistiqué), list_directory,
search_files (regex sur le filesystem),
execute_command (exécution shell),
spawn_process, et kill_process. Chaque outil
a des garde-fous intégrés directement dans sa définition de prompt.
Par exemple, execute_command contient une liste de
commandes blacklistées (rm -rf /,
:(){ :|:& };:, etc.) et des instructions pour toujours
demander confirmation sur les commandes destructives.
Le plus impressionnant est edit_file : il utilise un
format de diff propriétaire que
Blake Crosley
décrit comme « un search-and-replace contextuel avec fallback sur
l'édition ligne par ligne ». Cet outil seul fait l'objet de 800 lignes
d'instructions dans le prompt. Pour une exploration complète des
features cachées, consulte notre article sur les
10 features cachées révélées par le leak.
Les outils de navigation et analyse de code
On trouve ensuite une série d'outils dédiés à la compréhension du code
: grep_codebase, find_references,
get_symbol_definition, analyze_imports, et
un outil particulièrement puissant appelé
codebase_search qui combine recherche sémantique et
recherche textuelle. Il y a aussi git_log,
git_diff, git_blame pour l'analyse de
l'historique.
Ce qui surprend, c'est la présence d'outils qu'on ne soupçonnait pas :
web_fetch pour récupérer de la documentation en ligne,
screenshot_browser pour capturer des pages web, et
run_tests qui détecte automatiquement le framework de
test du projet et lance les suites appropriées.
Les outils internes et de coordination
La catégorie la moins visible mais la plus révélatrice. Claude Code
dispose d'outils internes comme think (un espace de
réflexion structuré, confirmé par
Penligent), plan (génération de plan d'action avant exécution),
summarize_conversation (compression du contexte quand la
fenêtre se remplit), et delegate_to_subagent — la preuve
que Claude Code peut spawner des sous-agents pour des tâches
parallèles. Ce dernier outil est au cœur du fonctionnement de systèmes
comme
KAIROS, l'agent autonome basé sur Claude Code.
Comment fonctionnent les modes de permission ?
Le fichier permission-modes.ts révèle un système de
permissions à 5 niveaux bien plus granulaire que ce
que la documentation officielle laissait entendre. C'est un des
aspects les plus critiques du leak, comme le souligne
The Register
dans son analyse des implications en matière de vie privée.
Les 5 niveaux de permission détaillés
Le leak identifie les modes suivants : Strict (confirmation pour chaque action), Standard (confirmation pour les écritures et exécutions), Relaxed (confirmation uniquement pour les commandes shell), YOLO (aucune confirmation, tout est auto-approuvé), et un cinquième mode non documenté appelé Supervised qui semble destiné à un usage entreprise avec approbation par un humain distant.
Chaque mode modifie dynamiquement le system prompt. En mode Strict, Claude Code reçoit des instructions supplémentaires pour toujours présenter un plan avant d'agir et attendre validation. En mode YOLO, ces blocs sont supprimés et remplacés par des instructions d'exécution directe. La différence entre les prompts Strict et YOLO est d'environ 3 000 tokens.
Le système de sandboxing intégré
Au-delà des modes utilisateur, le prompt contient un système de sandboxing interne. Certaines opérations sont hard-blocked quel que soit le mode de permission : accès aux fichiers en dehors du répertoire projet (sauf autorisation explicite), exécution de commandes réseau sortantes non liées au projet, modification de fichiers système. The Hacker News note cependant que certaines de ces restrictions sont implémentées uniquement au niveau du prompt — pas au niveau système — ce qui pose des questions de sécurité si le modèle décide de les contourner.
Quelles leçons tirer pour le prompt engineering avancé ?
Ce leak est une masterclass involontaire en prompt engineering industriel. Voici les patterns les plus instructifs que tu peux appliquer à tes propres projets.
Le pattern de prompt compilé
La leçon numéro un : un bon system prompt n'est pas un texte, c'est un programme. L'approche d'Anthropic — traiter le prompt comme du code compilé avec des conditions, des imports et des variables — est transposable à n'importe quel agent IA. Au lieu d'écrire un prompt monolithique, structure-le en modules réutilisables assemblés selon le contexte. C'est exactement ce pattern qu'on détaille dans notre guide complet Claude Code.
L'importance des instructions négatives
Un pattern frappant dans le prompt de Claude Code : la quantité d'instructions négatives. Pas juste « fais X », mais « ne fais JAMAIS Y dans le contexte Z ». Engineer's Codex a compté 347 occurrences de « never », « do not », « must not » dans le prompt compilé. Les instructions négatives sont plus fiables que les positives pour contraindre le comportement d'un LLM — et Anthropic le sait visiblement très bien.
La stratégie de l'outil think
L'outil think est un pattern de chain-of-thought
formalisé. Au lieu de demander au modèle de « réfléchir étape par
étape » dans le texte, Claude Code lui donne un
outil dédié pour poser sa réflexion. Le résultat de
cet outil n'est pas montré à l'utilisateur — c'est un scratchpad
interne. Ce pattern améliore significativement la qualité des
décisions complexes et peut être répliqué avec n'importe quelle API
supportant le function calling.
Le prompt indique explicitement à Claude : « Utilise l'outil think avant toute opération qui modifie plus de 3 fichiers, avant de résoudre un bug complexe, et quand tu n'es pas sûr de la meilleure approche. » C'est du meta-prompting — le prompt qui dit au modèle comment utiliser ses propres outils de réflexion.
Questions fréquentes
Oui, le total des fichiers TypeScript qui composent le système de génération du prompt atteint 14 902 lignes. Le prompt effectif envoyé au modèle varie entre 8 000 et 50 000 tokens selon le contexte du projet, les outils activés et le mode de permission sélectionné.
C'est un marqueur interne utilisé par Anthropic pour délimiter les sections variables du system prompt. Il permet au builder de compiler un prompt différent à chaque session en insérant ou supprimant des blocs d'instructions selon le contexte du projet, le langage détecté et la configuration utilisateur.
Le leak révèle environ 40 outils répartis en catégories : filesystem (read, write, edit, search), exécution (shell, processus), analyse de code (grep, references, symbols), Git, navigation web, et outils internes (think, plan, summarize, delegate). Le nombre exact varie selon les comptages car certains outils ont des variantes.
Le mode YOLO supprime toutes les confirmations utilisateur, ce qui accélère considérablement le workflow mais expose à des risques. Le prompt conserve néanmoins des hard-blocks sur certaines opérations critiques (suppression récursive, accès hors projet). Le risque principal est que ces protections sont partiellement implémentées au niveau prompt, pas au niveau système.
Absolument. Les patterns les plus transposables sont : la génération dynamique de prompt selon le contexte, l'outil think comme scratchpad interne, les instructions négatives massives pour contraindre le comportement, et la structure modulaire avec imports conditionnels. Ces techniques fonctionnent avec n'importe quelle API LLM supportant le function calling.