Bien démarrer avec les directives karpathy : les règles de programmation des grands modèles recommandées par Andrej Karpathy

April 10, 2026

Difficulté : niveau débutant | Durée : ~ 15 minutes | Résultat : maîtriser 4 principes + appliquer karpathy-guidelines pour un comportement de programmation par IA conforme

Public visé

  • Développeurs utilisant des assistants de code IA comme Claude Code, Cursor, Copilot, etc.
  • 1 à 5 ans d’expérience en développement, et vous voulez que l’IA écrive un code plus précis, moins bavard et sans modifications inutiles
  • Déjà à l’aise avec la programmation par IA, et vous cherchez des règles de collaboration systématiques

Dépendances clés et environnement

DépendanceExigence de versionUsage
Node.js18+Exécuter la CLI Claude Code
Claude Code CLIDernière versionOutil principal, installation de plugins
curlN’importe quelle versionTélécharger le fichier CLAUDE.md

TIP

Si vous n’avez pas encore installé Claude Code, allez sur claude.ai/code pour découvrir le mode d’installation.

Arborescence complète du projet

andrej-karpathy-skills/
├── CLAUDE.md                # Fichier de guide central (version condensée des 4 principes, utilisé par les deux modes : plugin/fichier)
├── README.md                # Instructions d’installation et d’utilisation
├── EXAMPLES.md              # Beaucoup d’exemples concrets, avec le bon et le mauvais
└── skills/
    └── karpathy-guidelines/  # Format de plugin Claude Code (méthode recommandée)

WARNING

Ce projet est un plugin de règles de comportement pour Claude Code. Ce n’est pas un pack de compétences d’OpenClaw : ne mélangez pas les deux.


1. Comprendre d’abord le problème : pourquoi les LLM "se mettent à délirer"

À la fin 2025, Andrej Karpathy a publié un tweet visant directement le problème central de la programmation par modèles de langage aujourd’hui :

"The models make wrong assumptions on their own behalf and just run along with them without checking. They don't manage their confusion, don't seek clarifications, don't surface inconsistencies, don't present tradeoffs, don't push back when they should."

En français, cela revient à dire : les LLM aiment faire des hypothèses en silence ; lorsqu’il y a des zones floues, ils ne posent pas de questions et commencent à écrire ; le code devient de plus en plus lourd ; et ils modifient aussi, en passant, des parties qu’ils ne comprennent pas.

Ce problème, presque tout développeur utilisant l’IA en profondeur l’a déjà rencontré : vous demandez à l’IA de corriger un petit bug, et elle vous réécrit la moitié d’un module ; vous lui demandez d’ajouter une fonction simple, et elle introduit trois niveaux d’abstraction.

karpathy-guidelines a été conçu précisément pour corriger ces quatre défauts :

SymptômePrincipe associé
Fait des hypothèses en silence, sans clarifier avant de commencerThink Before Coding
Le code grossit : 200 lignes deviennent 2000Simplicity First
En corrigeant un bug, il refait presque tout à la placeSurgical Changes
"Je vais le réparer" — aucun critère de succès vérifiableGoal-Driven Execution

2. Installer karpathy-guidelines

Il y a deux façons de l’installer, la première est recommandée.

Méthode 1 : via plugin (recommandée)

# Étape 1 : ajouter le marché de plugins
/plugin marketplace add forrestchang/andrej-karpathy-skills

# Étape 2 : installer le plugin
/plugin install andrej-karpathy-skills@karpathy-skills

Une fois l’installation terminée, Claude Code charge automatiquement ces 4 principes dans n’importe quel projet.

Méthode 2 : télécharger directement CLAUDE.md (pour n’importe quel projet)

Nouveau projet :

curl -o CLAUDE.md https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md

Projet existant (ajouter à votre CLAUDE.md actuel) :

echo "" >> CLAUDE.md
curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md

TIP

Les méthodes 1 et 2 peuvent être utilisées en même temps. Le plugin fournit un comportement par défaut global, tandis que CLAUDE.md permet une surcharge au niveau du projet.


3. Analyse des quatre principes, un par un

Principe 1 : Think Before Coding

Essence : ne pas supposer, ne pas cacher son incompréhension, et présenter activement les compromis.

C’est la règle la plus contraire à l’instinct de l’IA. L’objectif d’entraînement de l’IA est de "donner une réponse". Dès que les instructions sont floues, elle a tendance à deviner la meilleure interprétation possible et à continuer — plutôt que de s’arrêter pour demander : "au juste, vous voulez dire quoi ?".

La bonne manière : comme ceci.

# L’utilisateur dit : "Rends la recherche plus rapide"

# ❌ Ce que fait souvent l’IA : ajoute en silence du cache, des index, du traitement asynchrone… et produit d’un coup 200 lignes
@lru_cache(maxsize=1000)
async def search(query: str) -> List[Result]:
    # ... une tonne de code d’optimisation
    pass

# ✅ Ce que demandent les karpathy-guidelines :
"""
"Rendre la recherche plus rapide" peut vouloir dire plusieurs choses :
1. Temps de réponse plus court (< 100 ms) : ajouter un index de base de données + cache, estimation 2 heures
2. Plus fort débit de concurrence : refactor asynchrone + pool de connexions, estimation 4 heures
3. Plus rapide à percevoir côté UX : chargement progressif, estimation 3 heures

Lequel voulez-vous ?
"""

Quand une instruction est ambiguë, s’arrêter pour clarifier avant d’agir est bien plus efficace que de finir puis de devoir tout recommencer.

Au niveau du code, cette règle t’exige :

  • Exprimer clairement tes hypothèses, et demander quand tu n’es pas sûr
  • Quand plusieurs interprétations plausibles existent, toutes les lister pour que l’utilisateur choisisse
  • En repérant une option plus simple, la proposer activement
  • Dès qu’il y a quelque chose d’imprécis, s’arrêter immédiatement et demander

Principe 2 : Simplicity First

Essence : n’écrire que le minimum de code nécessaire pour résoudre le problème actuel, sans conception prédictive.

L’IA a une tendance : elle insère d’un bloc des "bonnes pratiques", même quand elles ne sont pas nécessaires. Vous demandez à l’IA d’écrire un calcul de remise : elle peut vous produire un système complet avec pattern de stratégie + pattern de fabrique + classes de configuration.

Regardez une comparaison réelle :

Demande utilisateur : "Ajouter une fonction de calcul de remise"

# ❌ Ce que fait souvent l’IA : introduire des abstractions inutiles
from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import Protocol, Union

class DiscountStrategy(ABC):
    @abstractmethod
    def calculate(self, amount: float) -> float:
        pass

class PercentageDiscount(DiscountStrategy):
    def __init__(self, percentage: float):
        self.percentage = percentage
    def calculate(self, amount: float) -> float:
        return amount * (self.percentage / 100)

@dataclass
class DiscountConfig:
    strategy: DiscountStrategy
    min_purchase: float = 0.0
    max_discount: float = float('inf')

class DiscountCalculator:
    def __init__(self, config: DiscountConfig):
        self.config = config
    def apply_discount(self, amount: float) -> float:
        # ... une tonne de code

# L’utilisation nécessite 30+ lignes de préparation
# ✅ La méthode de Simplicity First :
def calculate_discount(amount: float, percent: float) -> float:
    """Calcule le montant de la remise. percent est un pourcentage : ex. 10 = 10%."""
    return amount * (percent / 100)

# Utilisation

discount = calculate_discount(100.0, 10.0)  # 10% de remise

Critères pour évaluer ce principe :

  • On n’ajoute pas de fonctionnalités que personne n’a demandées
  • Le code à usage unique n’est pas abstrait
  • Si vous n’avez pas besoin de "flexibilité", vous ne prévoyez pas de configuration
  • On n’écrit pas de gestion d’erreurs pour des scénarios impossibles
  • Après avoir écrit le code, vous vous demandez : "Un ingénieur expérimenté appellerait ça une surconception ?" — si oui, réécrivez

WARNING

L’opposé de ce principe n’est pas de "coder n’importe comment", mais d’être "mesuré". Les abstractions ne doivent être introduites que lorsque la complexité apparaît réellement.


Principe 3 : Surgical Changes

Essence : ne modifier que ce qui doit l’être, nettoyer le désordre que vous avez causé, mais ne toucher à rien d’autre.

Quand l’IA corrige un bug, elle a particulièrement tendance à "optimiser en passant" : elle change 3 lignes, puis au passage renomme des variables, reformate, remplace des annotations, etc. karpathy-guidelines demande une précision au niveau "chirurgical".

Un scénario typique : "corriger le problème du validateur qui plante quand l’e-mail est vide"

  def validate_user(user_data):
-     # Check email format
-     if not user_data.get('email'):
+     email = user_data.get('email', '')
+     if not email or not email.strip():
          raise ValueError("Email required")
-     # Basic email validation
-     if '@' not in user_data['email']:
+     if '@' not in email:
          raise ValueError("Invalid email")
-     # Check username
-     if not user_data.get('username'):
+     # Check username  ← Écrire exactement comme avant
+     if not user_data.get('username'):
          raise ValueError("Username required")
      return True

Ce que fait souvent l’IA (en dépassant la demande utilisateur) :

# Elle ajoute aussi :
# - Validation d’e-mail plus stricte (expressions régulières)
# - Vérification de la longueur du nom d’utilisateur
# - Vérification des caractères du nom d’utilisateur
# - docstring
# - Changement du style des guillemets ('' → "")

Ce que demandent les Surgical Changes (ne modifier que les deux lignes liées aux valeurs d’e-mail vides) :

-     if not user_data.get('email'):
+     email = user_data.get('email', '')
+     if not email or not email.strip():
          raise ValueError("Email required")
-     if '@' not in user_data['email']:
+     if '@' not in email:
          raise ValueError("Invalid email")

Critère : chaque ligne modifiée doit pouvoir être reliée à la demande précise de l’utilisateur.


Principe 4 : Goal-Driven Execution

Essence : traduire "quoi faire" en "comment vérifier que c’est réussi". Remplacer les instructions floues par des critères de succès.

C’est un point que Andrej Karpathy souligne énormément : "Les LLM sont très doués pour itérer jusqu’à atteindre un objectif précis. Plutôt que de leur dire quoi faire, donnez-leur des critères de réussite — puis regardez-les exécuter."

Comparez deux façons de formuler des consignes :

Instruction floue (l’IA n’a aucun repère) :

Réparer le problème du système de connexion

Instruction Goal-Driven (l’IA a une direction claire) :

Problème précis : après changement de mot de passe, l’ancienne session n’est pas invalidée.

Plan :
1. Écrire un test : changer le mot de passe → vérifier que l’ancienne session est rejetée
   Validation : test échoue (reproduction du bug)

2. Implémenter : lors du changement de mot de passe, supprimer la session correspondante
   Validation : test passe

3. Cas limites : connexions multi-appareils, modifications concurrentes du mot de passe
   Validation : tous les tests ajoutés passent

4. Vérification de non-régression : tous les tests liés à la connexion passent
   Validation : pnpm test

Couverture actuelle des tests du module de connexion : [données]
Quel est exactement le problème de connexion que vous rencontrez ?

Format standard pour les tâches en plusieurs étapes :

1. [description de l’étape] → Validation : [méthode de validation]
2. [description de l’étape] → Validation : [méthode de validation]
3. [description de l’étape] → Validation : [méthode de validation]

L’avantage : à chaque étape, l’IA a une checklist claire pour valider, sans avoir à recommencer à demander "est-ce que c’est bon comme ça ?".


4. Comment vérifier que les directives ont bien un effet

Après avoir installé karpathy-guidelines, vous pouvez juger si cela agit réellement selon plusieurs axes :

La qualité des diff :

  • Les modifications correspondent-elles bien à ce que l’utilisateur a demandé ?
  • Y a-t-il des "optimisations en passant" inutiles ?
  • Le style des guillemets, les commentaires et les docstrings ont-ils été modifiés sans autorisation ?

Le moment où l’IA pose des questions :

  • Quand l’IA rencontre une instruction floue, s’arrête-t-elle pour clarifier ?
  • Ou bien devine-t-elle et commence-t-elle à écrire directement ?

La complexité du code :

  • Le code nouvellement écrit suffit-il juste ce qu’il faut ?
  • Y a-t-il une abstraction excessive ou une surconception ?

Si ces trois dimensions s’améliorent, alors les directives sont en vigueur.


5. Fusionner avec le CLAUDE.md déjà existant dans le projet

La plupart des projets ont déjà leur propre CLAUDE.md. Le remplacer directement ferait perdre l’ensemble des configurations existantes. La bonne démarche est de l’ajouter plutôt que de remplacer :

# D’abord vérifier le contenu actuel de CLAUDE.md
cat CLAUDE.md

# Puis fusionner manuellement avec un éditeur, ou :
echo "" >> CLAUDE.md
curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md

Structure suggérée après fusion :

# Description du projet (contenu existant conservé)

---

# karpathy-guidelines (nouveau contenu, PS : recommandé par Andrej Karpathy)

[Collez ici le contenu de CLAUDE.md]

---

## Règles spécifiques au projet

- Utiliser le mode strict de TypeScript
- Tous les endpoints côté API doivent avoir des tests
- Suivre le modèle de gestion des erreurs dans src/utils/errors.ts

TIP

karpathy-guidelines fournit des règles de comportement générales. Les règles spécifiques au projet ont une priorité plus élevée. En cas de conflit, suivez les règles du projet.


Dépannage des problèmes fréquents

Q1 : le plugin s’installe mais n’a aucun effet ?

# Confirmer que le plugin est chargé
/plugin list

# Si non : redémarrer Claude Code
# Dans Claude Code, saisissez /exit pour quitter, puis réouvrez

Q2 : CLAUDE.md du projet et plugin se contredisent : que faire ?

C’est CLAUDE.md du projet qui prévaut. Le plugin sert de solution de repli globale, et les fichiers du projet surchargent les réglages du plugin.

Q3 : même pour une tâche simple, l’IA se bloque et demande de confirmer : que faire ?

C’est normal : karpathy-guidelines exige d’obtenir des clarifications sur les instructions floues pour toutes les tâches. Pour des tâches manifestement simples (comme "remplacer la variable a par b"), vous pouvez ajouter explicitement dans votre consigne : "c’est un remplacement simple, fais-le directement". L’IA sautera alors l’étape de confirmation.

Q4 : l’IA ne respecte pas Surgical Changes et modifie quand même le format : que faire ?

Limitez explicitement la portée des modifications dans votre consigne :

Modifiez la vérification des valeurs vides dans la fonction validateEmail : changez seulement cet endroit, ne touchez pas au reste du code ni au format.

Q5 : après avoir fusionné CLAUDE.md, il y a des conflits : comment résoudre ?

Éditez manuellement CLAUDE.md : conservez le contenu existant et les principes ajoutés, évitez les doublons de paragraphes. Si deux endroits définissent le même principe, suivez les règles spécifiques plus concrètes du projet.

Q6 : faut-il appliquer ces principes en rétroaction sur un projet existant ?

Non. karpathy-guidelines contraint le comportement des modifications à venir, pas de vous pousser à refactoriser tout le code existant. Utilisez-le pour guider vos nouvelles interactions de programmation.


Lectures complémentaires et pistes avancées

TIP

EXAMPLES.md contient de nombreux comparatifs de code (bon/mauvais). Chaque principe a aussi 2 à 3 exemples concrets de scénarios : c’est le moyen le plus efficace de comprendre ces principes. Il est recommandé d’en faire le tour complet avant de passer à la pratique.


Pistes avancées

Après avoir maîtrisé les quatre principes, vous pouvez continuer à explorer :

Extensions personnalisées : ajoutez des règles d’encodage spécifiques au projet dans CLAUDE.md, pour que l’IA conserve les contraintes générales de karpathy-guidelines tout en respectant le style propre à votre projet.

Partage au sein de l’équipe : intégrez karpathy-guidelines dans la documentation des normes de codage de l’équipe. Les nouveaux membres clonent le projet et obtiennent automatiquement les règles de comportement pour la programmation par IA.

Mesurer l’efficacité : consigner le nombre de retouches de code par l’IA avant/après l’introduction des directives, la portée des modifications, et le nombre de changements non liés dans les PR, puis valider la valeur réelle de cette méthodologie avec des données.

Updated April 10, 2026