Claude Code — Skill Repository
Aperçu du projet
Claude Code est l'outil CLI d'Anthropic pour interagir avec Claude depuis le terminal. Il supporte l'édition de fichiers, les commandes shell, les workflows git, la revue de code, la coordination multi-agent, l'intégration IDE (VS Code, JetBrains), et le Model Context Protocol (MCP).
Codebase : ~1 900 fichiers, 512 000+ lignes de TypeScript sous src/.
Stack technique
| Composant | Technologie |
|---|---|
| Langage | TypeScript (mode strict, ES modules) |
| Runtime | Bun (support JSX, feature flags bun:bundle) |
| Interface terminal | React + Ink (React pour CLI) |
| Parser CLI | Commander.js (@commander-js/extra-typings) |
| Client API | @anthropic-ai/sdk |
| Validation | Zod v4 |
| Linter/Formatter | Biome |
| Analytics | GrowthBook (feature flags & tests A/B) |
| Protocole | Model Context Protocol (MCP) |
Architecture
Plan des répertoires (src/)
| Répertoire | Objectif |
|---|---|
commands/ |
~50 commandes slash (/commit, /review, /config, etc.) |
tools/ |
~40 agent tools (Bash, FileRead, FileWrite, Glob, Grep, etc.) |
components/ |
~140 composants Ink/React pour le rendu terminal |
services/ |
Intégrations externes (API, OAuth, MCP, LSP, analytics, plugins) |
bridge/ |
Couche de communication IDE bidirectionnelle |
state/ |
React context + store personnalisé (AppState) |
hooks/ |
React hooks (permissions, keybindings, commandes, paramètres) |
types/ |
Définitions de types TypeScript |
utils/ |
Utilitaires (shell, opérations fichier, permissions, config, git) |
screens/ |
Interfaces plein écran (Doctor, REPL, Resume, Compact) |
skills/ |
Skills groupées + système de chargement de skills |
plugins/ |
Système de plugins (marketplace + plugins groupés) |
coordinator/ |
Coordination multi-agent & logique supervisor |
tasks/ |
Gestion des tâches (shell tasks, agent tasks, teammates) |
context/ |
Providers React context (notifications, stats, FPS) |
memdir/ |
Système de mémoire persistant (CLAUDE.md, mémoire user/project) |
entrypoints/ |
Logique d'initialisation, Agent SDK, entrée MCP |
voice/ |
Entrée/sortie vocale (STT, keyterms) |
vim/ |
Support des keybindings mode Vim |
schemas/ |
Schémas de configuration Zod |
keybindings/ |
Configuration et résolution des keybindings |
migrations/ |
Migrations de config entre versions |
outputStyles/ |
Formatage et thémage des sorties |
query/ |
Pipeline et traitement des requêtes |
server/ |
Mode serveur/daemon |
remote/ |
Gestion des sessions distantes |
Fichiers clés
| Fichier | Rôle |
|---|---|
src/main.tsx |
Point d'entrée CLI (parser Commander, profiling startup) |
src/QueryEngine.ts |
Appelant API LLM principal (streaming, boucles tool-call) |
src/Tool.ts |
Définitions de type Tool & factory buildTool |
src/tools.ts |
Registre et presets d'outils |
src/commands.ts |
Registre de commandes |
src/context.ts |
Collection de contexte système/user (git, mémoire) |
src/cost-tracker.ts |
Suivi du coût des tokens |
Points d'entrée et séquence d'initialisation
src/main.tsx— Parser CLI Commander, profiling startupsrc/entrypoints/init.ts— Config, telemetry, OAuth, MDMsrc/entrypoints/cli.tsx— Orchestration de session CLIsrc/entrypoints/mcp.ts— Mode serveur MCPsrc/entrypoints/sdk/— Agent SDK (API programmatique)src/replLauncher.tsx— Lanceur de session REPL
Le démarrage effectue l'initialisation parallèle : lectures de politiques MDM, prefetch Keychain, vérifications feature flags, puis init principale.
Patterns et conventions
Définition d'outil
Chaque outil se trouve dans src/tools/{ToolName}/ et utilise buildTool :
export const MyTool = buildTool({
name: 'MyTool',
aliases: ['my_tool'],
description: 'Ce que cet outil fait',
inputSchema: z.object({
param: z.string(),
}),
async call(args, context, canUseTool, parentMessage, onProgress) {
// Exécuter et retourner { data: result, newMessages?: [...] }
},
async checkPermissions(input, context) { /* Vérifications de permissions */ },
isConcurrencySafe(input) { /* Peut s'exécuter en parallèle ? */ },
isReadOnly(input) { /* Non-destructive ? */ },
prompt(options) { /* Injection de prompt système */ },
renderToolUseMessage(input, options) { /* UI pour l'invocation */ },
renderToolResultMessage(content, progressMessages, options) { /* UI pour le résultat */ },
})
Structure de répertoire par outil : {ToolName}.ts ou .tsx (principal), UI.tsx (rendu), prompt.ts (prompt système), plus fichiers utilitaires.
Définition de commande
Les commandes se trouvent dans src/commands/ et suivent trois types :
- PromptCommand — Envoie un prompt formaté avec outils injectés (la plupart des commandes)
- LocalCommand — S'exécute in-process, retourne du texte
- LocalJSXCommand — S'exécute in-process, retourne du JSX React
const command = {
type: 'prompt',
name: 'my-command',
description: 'Ce que cette commande fait',
progressMessage: 'travail en cours...',
allowedTools: ['Bash(git *)', 'FileRead(*)'],
source: 'builtin',
async getPromptForCommand(args, context) {
return [{ type: 'text', text: '...' }]
},
} satisfies Command
Les commandes sont enregistrées dans src/commands.ts et invoquées via /command-name dans le REPL.
Structure des composants
- Composants React fonctionnels avec primitives Ink (
Box,Text,useInput()) - Stylisés avec Chalk pour les couleurs terminal
- React Compiler pour les re-rendus optimisés
- Primitives du système de design dans
src/components/design-system/
Gestion d'état
AppStatevia React context + store personnalisé (src/state/AppStateStore.ts)- Objet d'état mutable passé aux contextes d'outils
- Fonctions de sélecteur pour l'état dérivé
- Observateurs de changement dans
src/state/onChangeAppState.ts
Système de permissions
- Modes :
default(demande par opération),plan(affiche plan, demande une fois),bypassPermissions(auto-approve),auto(ML classifier) - Règles : Patterns wildcards —
Bash(git *),FileEdit(/src/*) - Les outils implémentent
checkPermissions()retournant{ granted: boolean, reason?, prompt? }
Feature flags et build
Les feature flags bun:bundle de Bun permettent l'élimination du code mort au moment du build :
import { feature } from 'bun:bundle'
if (feature('PROACTIVE')) { /* proactive agent tools */ }
Flags notables : PROACTIVE, KAIROS, BRIDGE_MODE, VOICE_MODE, COORDINATOR_MODE, DAEMON, WORKFLOW_SCRIPTS.
Certaines fonctionnalités sont aussi bloquées via process.env.USER_TYPE === 'ant'.
Conventions de nommage
| Élément | Convention | Exemple |
|---|---|---|
| Fichiers | PascalCase (exports) ou kebab-case (commandes) | BashTool.tsx, commit-push-pr.ts |
| Composants | PascalCase | App.tsx, PromptInput.tsx |
| Types | PascalCase, suffixe Props/State/Context | ToolUseContext |
| Hooks | Préfixe use |
useCanUseTool, useSettings |
| Constantes | SCREAMING_SNAKE_CASE | MAX_TOKENS, DEFAULT_TIMEOUT_MS |
Pratiques d'imports
- ES modules avec extensions
.js(convention Bun) - Imports lazy pour casser les dépendances circulaires :
const getModule = () => require('./heavy.js') - Imports conditionnels via feature flags ou
process.env - Marqueurs
biome-ignorepour l'ordonnement manuel d'imports quand nécessaire
Services
| Service | Chemin | Objectif |
|---|---|---|
| API | services/api/ |
Client SDK Anthropic, uploads fichiers |
| MCP | services/mcp/ |
Client MCP, découverte tool/ressource |
| OAuth | services/oauth/ |
Flux auth OAuth 2.0 |
| LSP | services/lsp/ |
Gestionnaire Language Server Protocol |
| Analytics | services/analytics/ |
GrowthBook, telemetry, événements |
| Plugins | services/plugins/ |
Chargeur de plugins, marketplace |
| Compact | services/compact/ |
Compression de contexte |
| Limites de politique | services/policyLimits/ |
Limites org, vérification quota |
| Paramètres distants | services/remoteManagedSettings/ |
Sync paramètres gérés (Entreprise) |
| Estimation de tokens | services/tokenEstimation.ts |
Estimation du nombre de tokens |
Configuration
Emplacements des paramètres :
- Global :
~/.claude/config.json,~/.claude/settings.json - Projet :
.claude/config.json,.claude/settings.json - Système : macOS Keychain + MDM, Windows Registry + MDM
- Gérés : Sync distante pour utilisateurs Entreprise
Directives
- Lisez les fichiers sources pertinents avant de faire des changements — comprenez d'abord les patterns existants.
- Suivez les patterns tool/command/component ci-dessus quand vous en ajoutez de nouveaux.
- Gardez les édits minimes et ciblées — évitez les refactorisations inutiles.
- Utilisez Zod pour toute validation d'entrée aux limites du système.
- Bloquez les fonctionnalités expérimentales derrière les feature flags
bun:bundleou les vérifications env. - Respectez le système de permissions — les outils qui modifient l'état doivent implémenter
checkPermissions(). - Utilisez les imports lazy quand vous ajoutez des dépendances qui pourraient créer des références circulaires.
- Mettez à jour ce fichier à mesure que les conventions du projet évoluent.