claude-code-skill

Par codeaashu · claude-code

Conventions de développement et guide d'architecture pour le dépôt CLI Claude Code.

npx skills add https://github.com/codeaashu/claude-code --skill claude-code-skill

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

  1. src/main.tsx — Parser CLI Commander, profiling startup
  2. src/entrypoints/init.ts — Config, telemetry, OAuth, MDM
  3. src/entrypoints/cli.tsx — Orchestration de session CLI
  4. src/entrypoints/mcp.ts — Mode serveur MCP
  5. src/entrypoints/sdk/ — Agent SDK (API programmatique)
  6. 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

  • AppState via 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-ignore pour 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

  1. Lisez les fichiers sources pertinents avant de faire des changements — comprenez d'abord les patterns existants.
  2. Suivez les patterns tool/command/component ci-dessus quand vous en ajoutez de nouveaux.
  3. Gardez les édits minimes et ciblées — évitez les refactorisations inutiles.
  4. Utilisez Zod pour toute validation d'entrée aux limites du système.
  5. Bloquez les fonctionnalités expérimentales derrière les feature flags bun:bundle ou les vérifications env.
  6. Respectez le système de permissions — les outils qui modifient l'état doivent implémenter checkPermissions().
  7. Utilisez les imports lazy quand vous ajoutez des dépendances qui pourraient créer des références circulaires.
  8. Mettez à jour ce fichier à mesure que les conventions du projet évoluent.

Skills similaires