# Mémoire de Claude

Contexte persistant via les fichiers CLAUDE.md — comment les écrire et comment ils se chargent dans les monorepos.

<table width="100%">
<tr>
<td><a href="../">← Retour à Claude Code Best Practice</a></td>
<td align="right"><img src="../../!/claude-jumping.svg" alt="Claude" width="60" /></td>
</tr>
</table>

---

## 1. Écrire un bon CLAUDE.md

Un CLAUDE.md bien structuré est le moyen le plus impactant d'améliorer la sortie de Claude Code pour ton projet. Humanlayer propose un excellent guide couvrant ce qu'il faut inclure, comment le structurer et les pièges courants.

- [Humanlayer - Writing a good Claude.md](https://www.humanlayer.dev/blog/writing-a-good-claude-md)

---

## 2. CLAUDE.md dans les grands monorepos

Quand tu travailles avec Claude Code dans un monorepo, comprendre comment les fichiers CLAUDE.md se chargent en contexte est crucial pour organiser efficacement les instructions de ton projet.

<p align="center">
  <a href="https://x.com/bcherny/status/2016339448863355206"><img src="../../best-practice/assets/claude-memory/claude-memory-monorepo.jpg" alt="Chargement des CLAUDE.md dans les monorepos" width="600"></a>
</p>

### Les deux mécanismes de chargement

Claude Code utilise deux mécanismes distincts pour charger les fichiers CLAUDE.md :

#### Chargement des ancêtres (vers le HAUT de l'arborescence)

Quand tu démarres Claude Code, il remonte **vers le haut** depuis ton répertoire de travail courant jusqu'à la racine du système de fichiers et charge chaque CLAUDE.md qu'il trouve en chemin. Ces fichiers sont chargés **immédiatement au démarrage**.

#### Chargement des descendants (vers le BAS de l'arborescence)

Les fichiers CLAUDE.md dans les sous-répertoires situés sous ton répertoire de travail courant **NE sont PAS chargés au lancement**. Ils ne sont inclus que lorsque Claude lit des fichiers dans ces sous-répertoires durant ta session. C'est ce qu'on appelle le **chargement paresseux** (lazy loading).

### Exemple de structure de monorepo

Considère un monorepo typique avec des répertoires séparés pour différents composants :

```
/mymonorepo/
├── CLAUDE.md          # Instructions racine (partagées entre tous les composants)
├── frontend/
│   └── CLAUDE.md      # Instructions spécifiques au frontend
├── backend/
│   └── CLAUDE.md      # Instructions spécifiques au backend
└── api/
    └── CLAUDE.md      # Instructions spécifiques à l'API
```

### Scénario 1 : Lancer Claude Code depuis le répertoire racine

Quand tu lances Claude Code depuis `/mymonorepo/` :

```bash
cd /mymonorepo
claude
```

| Fichier | Chargé au lancement ? | Raison |
|------|-------------------|--------|
| `/mymonorepo/CLAUDE.md` | Oui | C'est ton répertoire de travail courant |
| `/mymonorepo/frontend/CLAUDE.md` | Non | Chargé seulement quand tu lis/édites des fichiers dans `frontend/` |
| `/mymonorepo/backend/CLAUDE.md` | Non | Chargé seulement quand tu lis/édites des fichiers dans `backend/` |
| `/mymonorepo/api/CLAUDE.md` | Non | Chargé seulement quand tu lis/édites des fichiers dans `api/` |

### Scénario 2 : Lancer Claude Code depuis un répertoire de composant

Quand tu lances Claude Code depuis `/mymonorepo/frontend/` :

```bash
cd /mymonorepo/frontend
claude
```

| Fichier | Chargé au lancement ? | Raison |
|------|-------------------|--------|
| `/mymonorepo/CLAUDE.md` | Oui | C'est un répertoire ancêtre |
| `/mymonorepo/frontend/CLAUDE.md` | Oui | C'est ton répertoire de travail courant |
| `/mymonorepo/backend/CLAUDE.md` | Non | Branche différente de l'arborescence |
| `/mymonorepo/api/CLAUDE.md` | Non | Branche différente de l'arborescence |

### Points clés à retenir

1. **Les ancêtres se chargent toujours au démarrage** — Claude remonte l'arborescence et charge tous les CLAUDE.md qu'il trouve. Cela garantit que tu as toujours accès aux instructions racine, valables pour tout le dépôt.

2. **Les descendants se chargent paresseusement** — Les CLAUDE.md de sous-répertoire ne se chargent que lorsque tu interagis avec des fichiers dans ces sous-répertoires. Cela évite que du contexte non pertinent ne gonfle ta session.

3. **Les frères ne se chargent jamais** — Si tu travailles dans `frontend/`, tu n'auras pas `backend/CLAUDE.md` ni `api/CLAUDE.md` chargés en contexte.

4. **CLAUDE.md global** — Tu peux aussi placer un CLAUDE.md dans `~/.claude/CLAUDE.md` dans ton dossier personnel, qui s'applique à TOUTES les sessions Claude Code, quel que soit le projet.

### Pourquoi ce design fonctionne pour les monorepos

- **Les instructions partagées se propagent vers le bas** — Le CLAUDE.md racine contient les conventions valables pour tout le dépôt, les standards de code et les patterns communs qui s'appliquent partout.

- **Les instructions spécifiques aux composants restent isolées** — Les développeurs frontend n'ont pas besoin que des instructions spécifiques au backend encombrent leur contexte, et inversement.

- **Le contexte est optimisé** — En chargeant paresseusement les CLAUDE.md descendants, Claude Code évite de charger potentiellement des centaines de kilo-octets d'instructions non pertinentes au démarrage.

### Bonnes pratiques

1. **Mets les conventions partagées dans le CLAUDE.md racine** — Standards de code, formats de messages de commit, templates de PR, et autres directives valables pour tout le dépôt.

2. **Mets les instructions spécifiques aux composants dans le CLAUDE.md du composant** — Patterns propres au framework, architecture du composant, conventions de test propres à ce composant.

3. **Utilise CLAUDE.local.md pour les préférences personnelles** — Ajoute-le à `.gitignore` pour les instructions qui ne devraient pas être partagées avec l'équipe.

---

## Sources

- [Documentation Claude Code - Comment Claude recherche les mémoires](https://code.claude.com/docs/en/memory#how-claude-looks-up-memories)
- [Boris Cherny sur X - Clarification sur le chargement des CLAUDE.md](https://x.com/bcherny/status/2016339448863355206)
- [Humanlayer - Writing a good Claude.md](https://www.humanlayer.dev/blog/writing-a-good-claude-md)
