
Votre CLAUDE.md a bien grossi : conventions API, règles de tests, scripts d'infra, le tout mélangé. Claude lit l'ensemble à chaque session, et certaines règles polluent les zones où elles ne s'appliquent pas. Les rules ciblées (.claude/rules/*.md) règlent ce problème : vous sortez les règles trop spécifiques de CLAUDE.md et les chargez uniquement quand Claude touche la zone concernée, grâce au frontmatter paths.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Ce qui reste dans
CLAUDE.mdet ce qui part dans.claude/rules/ - La syntaxe du frontmatter
pathsavec globs - Appliquer une rule ciblée sur
lab-claude - Vérifier les rules réellement chargées dans la session avec
/context
Dans quel contexte utiliser cette fonctionnalité ?
Section intitulée « Dans quel contexte utiliser cette fonctionnalité ? »Le déclencheur n'est pas la taille du fichier en soi, c'est le ratio de
pertinence. Un CLAUDE.md de 300 lignes dont 280 s'appliquent partout reste
sain ; un CLAUDE.md de 120 lignes dont la moitié ne concerne que tests/
mérite déjà un découpage. Chaque ligne inutile occupe du contexte à chaque
session et dilue les règles qui comptent vraiment.
- Votre
CLAUDE.mddépasse 150 lignes et mélange plusieurs zones - Une règle ne s'applique qu'à un dossier (ex :
tests/,app/api/) - Plusieurs équipes contribuent et veulent des règles locales
- Vous voulez éviter que des règles de tests guident des changements côté API
Prérequis
Section intitulée « Prérequis »CLAUDE.mddéjà posé (voir configurer CLAUDE.md)- Projet fil rouge prêt :
~/Projets/lab-claude
CLAUDE.md vs .claude/rules/
Section intitulée « CLAUDE.md vs .claude/rules/ »La distinction tient en un mot : le moment du chargement. CLAUDE.md et les rules sans paths entrent en contexte au démarrage de la session, avec la même priorité. Une rule portant un paths ne s'y trouve pas : elle est injectée plus tard, quand Claude lit un fichier correspondant au motif. Ce n'est donc pas un filtre appliqué à chaque appel d'outil, mais un déclenchement à la lecture.
| Mécanisme | Chargé quand | Usage recommandé |
|---|---|---|
CLAUDE.md | À chaque session, en entier | Faits toujours vrais : stack, commandes, conventions globales |
.claude/rules/<nom>.md sans paths | À chaque session, en entier | Règles transversales trop volumineuses pour CLAUDE.md |
.claude/rules/<nom>.md avec paths | Quand Claude touche un fichier matché | Règles spécifiques à une zone (API, tests, migrations) |
Règle simple :
- Si la règle vaut pour tout le projet et tient en quelques lignes, gardez-la dans
CLAUDE.md - Si elle ne vaut que pour un dossier précis, sortez-la dans
.claude/rules/<zone>.mdavecpaths
Structure des rules
Section intitulée « Structure des rules »Les rules vivent dans .claude/rules/ et sont découvertes récursivement. Chaque fichier Markdown couvre un sujet et peut être scopé avec un frontmatter YAML :
lab-claude/├── CLAUDE.md├── .claude/│ ├── settings.json│ └── rules/│ ├── tests.md│ └── api.md└── ...Exemple de rule ciblée sur les tests :
---paths: - "tests/**/*.py"---
# Règles pour les tests
- Utiliser `TestClient` de FastAPI pour les tests d'endpoint- Chaque endpoint a au moins un test de cas nominal et un test d'erreur- Les fixtures vivent dans `tests/conftest.py`- Ne pas mocker la validation Pydantic : tester le comportement réelSans paths, la rule se charge à chaque session. Avec paths, elle n'arrive en contexte que quand Claude lit un fichier qui matche le glob.
Syntaxe du frontmatter paths
Section intitulée « Syntaxe du frontmatter paths »Les motifs suivent la syntaxe glob habituelle, avec une distinction qui
piège souvent : * ne traverse pas les répertoires, ** si. Écrire
app/*.py ne couvrira donc que les fichiers posés directement dans app/,
pas ceux de app/routers/. C'est la cause numéro un des rules qui semblent ne
jamais se déclencher.
Attention aussi au crochet [ : glob le lit comme le début d'une classe de
caractères ([abc]). Un motif contenant un [ non refermé correctement ne
correspond à rien, silencieusement, sans casser les autres motifs de la même
rule. Pour un crochet littéral dans un nom de fichier, échappez-le : \[.
Quelques motifs utiles :
| Motif | Correspond à |
|---|---|
**/*.py | Tous les fichiers Python du projet |
app/**/* | Tous les fichiers sous app/ |
tests/**/*.py | Tous les tests Python |
app/api/**/*.py | API uniquement |
migrations/*.sql | Fichiers SQL de migration à la racine de migrations/ |
Vous pouvez combiner plusieurs motifs et utiliser l'expansion accolade :
---paths: - "app/**/*.{py,pyi}" - "tests/**/*.py"---Application sur lab-claude
Section intitulée « Application sur lab-claude »Objectif : sortir les règles tests et les règles endpoints API de CLAUDE.md vers deux rules dédiées.
L'étape 4 est celle qu'on oublie, et c'est la seule qui produise le bénéfice
recherché. Créer les fichiers dans .claude/rules/ sans retirer les sections
correspondantes de CLAUDE.md ne fait qu'ajouter du contexte : les règles
sont désormais présentes deux fois, avec le risque qu'elles divergent à la
première modification. Le déplacement doit être un déplacement, pas une copie.
-
Créez le dossier des rules
Fenêtre de terminal cd ~/Projets/lab-claudemkdir -p .claude/rules -
Créez
.claude/rules/tests.md---paths:- "tests/**/*.py"---# Règles pour les tests- Chaque endpoint a au moins un test de cas nominal et un test d'erreur- Utiliser `TestClient` de FastAPI pour les tests d'endpoint- Nom des fonctions de test : `test_<endpoint>_<cas>`- Pas de mock sur la validation Pydantic -
Créez
.claude/rules/api.md---paths:- "app/**/*.py"---# Règles pour l'API- Chaque endpoint déclare son type de retour (`-> dict[str, str]`)- Statut HTTP explicite via `status_code=` si différent de 200- Documenter l'endpoint en une ligne (docstring)- Ne pas dupliquer la logique de `/health` : factoriser si besoin -
Allégez votre
CLAUDE.mdRetirez les sections "Tests" et "API" qui sont maintenant dans les rules. Gardez dans
CLAUDE.mduniquement ce qui vaut pour tout le projet (stack, commandes de validation, conventions globales). -
Démarrez une session et vérifiez
Fenêtre de terminal claudePuis dans la session :
/contextLes rules sans
pathsapparaissent tout de suite sous Memory files. Les rules avecpathsn'apparaissent que quand Claude lit un fichier qui matche.
Vérifier ce qui est chargé
Section intitulée « Vérifier ce qui est chargé »Deux commandes, deux usages distincts, et les confondre fait perdre du temps.
/context affiche ce qui est réellement chargé dans la session en cours,
sous la rubrique Memory files : c'est la commande de diagnostic quand
Claude semble ignorer une règle. /memory liste et ouvre les emplacements
des fichiers d'instructions (CLAUDE.md, CLAUDE.local.md, mémoire
automatique), y compris ceux qui n'existent pas encore : c'est la commande
d'édition, pas de vérification.
Quand garder dans CLAUDE.md, quand déplacer
Section intitulée « Quand garder dans CLAUDE.md, quand déplacer »La dernière ligne du tableau tranche une confusion fréquente. Une règle est un fait toujours vrai que Claude doit avoir en tête ; une procédure est une suite d'étapes à dérouler dans un cas particulier. Les procédures n'ont rien à faire dans les rules : elles occuperaient du contexte en permanence pour servir une fois. Elles vont dans les skills, qui ne se chargent qu'à l'invocation.
| La règle… | Où la mettre |
|---|---|
| s'applique au projet entier et tient en 2 lignes | CLAUDE.md |
| s'applique au projet entier mais fait 20+ lignes | .claude/rules/<sujet>.md sans paths |
| ne concerne qu'un dossier | .claude/rules/<zone>.md avec paths |
| est personnelle et ne doit pas être partagée | CLAUDE.local.md |
| est une procédure (pas un fait) | à déplacer en skill |
Erreurs fréquentes
Section intitulée « Erreurs fréquentes »Les deux premières lignes se ressemblent mais ne se diagnostiquent pas pareil.
Une rule absente de /context n'a pas été lue du tout : le problème est
dans le fichier lui-même, frontmatter mal fermé ou emplacement incorrect. Une
rule présente mais sans effet sur certains fichiers a bien été lue : c'est
le glob qui ne couvre pas la zone attendue. Vérifiez toujours la présence
avant de retoucher le motif.
| Symptôme | Cause probable | Correction |
|---|---|---|
La rule n'apparaît pas dans /context | Frontmatter mal fermé ou paths incorrect | Vérifier les trois tirets et la syntaxe YAML |
| Règle ignorée sur les nouveaux fichiers | Glob trop restrictif | Passer de app/*.py à app/**/*.py |
CLAUDE.md toujours aussi long | Règles transversales laissées dedans | Ne déplacer que les règles réellement ciblées |
| Rules contradictoires entre scopes | Rule utilisateur qui entre en conflit avec projet | Les rules projet passent après celles de ~/.claude/rules/ et l'emportent ; trancher une bonne fois |
Checklist de fin de guide
Section intitulée « Checklist de fin de guide »Reprenez ces cinq points sur un projet réel, pas sur le lab. Le troisième est
celui qui décide du résultat : tant que CLAUDE.md n'a pas maigri, le contexte
consommé à chaque session n'a pas bougé et l'exercice n'a rien apporté.
- J'ai créé le dossier
.claude/rules/ - J'ai au moins une rule avec
pathsfonctionnelle - J'ai allégé
CLAUDE.mden retirant les règles déplacées - J'ai vérifié avec
/contextque les rules sont chargées - Je sais quand garder une règle dans
CLAUDE.mdet quand la sortir
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »CLAUDE.md= faits globaux,.claude/rules/= règles ciblées- Le frontmatter
pathsévite de polluer le contexte avec des règles non pertinentes - Chaque rule couvre un sujet, pour rester lisible et maintenable
/contextest l'outil de vérification : il montre ce qui est chargé dans la session, là où/memoryne fait que lister et ouvrir les fichiers- Les procédures ne vont pas dans les rules : elles vont dans les skills
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Hooks pour automatiser lint et tests : Une règle qui doit s'appliquer sans dépendre du bon vouloir du modèle devient un hook.
- Skills : routines réutilisables : L'étage au-dessus des rules : une procédure complète invoquée à la demande.
- Quelle brique utiliser quand ? : La frontière exacte entre rules, CLAUDE.md, settings, hooks et skills, sans doublon.