Les fichiers mémoire (CLAUDE.md & co)
Un agent oublie tout entre deux sessions, sauf ce que vous écrivez dans ses fichiers mémoire. Comment les structurer pour qu'il retienne le contexte, vos règles, et vos décisions.
Sur cette fiche
Fiche vérifiée il y a 3 mois : certaines commandes ont pu changer. Signalez-le si c’est le cas.
En bref
Un agent de code repart de zéro à chaque session, sauf ce qu'il lit au démarrage dans son fichier mémoire : CLAUDE.md pour Claude Code, AGENTS.md pour Codex, OpenCode et la plupart des autres outils (Claude Code lit aussi AGENTS.md quand le projet n'a pas de CLAUDE.md). Mettez-y l'objectif du projet, les règles, les commandes qui comptent et les leçons apprises, jamais de secret ni ce que le code dit déjà, et gardez-le court. La commande /init en génère un premier jet à élaguer, et un fichier global (~/.claude/CLAUDE.md pour Claude Code, ~/.codex/AGENTS.md pour Codex) porte vos préférences valables partout.
À faire avant : Cadrer un projet avec un LLM
Voici une vérité un peu déprimante sur les agents de code : ils n’ont aucune mémoire. Vous pouvez passer deux heures à expliquer votre projet, à corriger dix fois la même erreur, à poser vos règles, et à la session suivante, l’agent revient page blanche. Il a tout oublié. Le LLM ne se souvient que de ce qui tient dans la conversation en cours. Fermez la fenêtre, et tout part.
Sauf une chose : le fichier mémoire. C’est un fichier texte que l’agent lit automatiquement au démarrage de chaque session, avant même que vous tapiez quoi que ce soit. Vous y écrivez une fois ce qu’il doit retenir pour toujours. C’est exactement ce qui vous fait arrêter de vous répéter.
Le fichier, et son jumeau global
Tous les agents lisent un fichier mémoire. Le nom change selon l’outil, mais l’idée est identique.
- Claude Code lit un fichier nommé
CLAUDE.md. Depuis sa version 2.1.277, il lit aussiAGENTS.mdquand le projet n’a pas deCLAUDE.md. - Codex lit un fichier nommé
AGENTS.md, à la racine du dépôt et dans chaque sous-dossier jusqu’à celui où vous travaillez. Il ne lit pasCLAUDE.mdde lui-même, mais une ligne dans~/.codex/config.tomlle lui fait prendre là oùAGENTS.mdmanque :project_doc_fallback_filenames = ["CLAUDE.md"]. - OpenCode lit un fichier nommé
AGENTS.md, et se rabat surCLAUDE.mds’il n’en trouve pas.
AGENTS.md est devenu la convention commune : au-delà de Codex et d’OpenCode, Cursor, Gemini CLI, GitHub Copilot et bien d’autres outils le lisent, et le format est désormais porté par l’Agentic AI Foundation, sous l’égide de la Linux Foundation (agents.md). Pour voir quels outils de code existent et quels modèles chacun propose, Quelle IA tient une page des outils.
Même mécanisme, juste un nom de fichier différent. Et dans les deux cas, il existe deux niveaux :
- Le fichier projet, à la racine de votre dépôt. Il décrit ce projet-là : son but, sa pile, ses règles. Il voyage avec le code, donc toute personne (ou tout agent) qui ouvre le dépôt en hérite.
- Le fichier global, au niveau de votre utilisateur. Il porte vos préférences permanentes, valables sur tous vos projets. Pour Claude Code, c’est
~/.claude/CLAUDE.md; pour Codex,~/.codex/AGENTS.md; pour OpenCode,~/.config/opencode/AGENTS.md.
Les deux emplacements que Claude Code lit :
./CLAUDE.md # mémoire du projet (à la racine du dépôt)
~/.claude/CLAUDE.md # mémoire globale (toutes tes sessions)
Les deux emplacements qu’OpenCode lit :
./AGENTS.md # mémoire du projet (à la racine du dépôt)
~/.config/opencode/AGENTS.md # mémoire globale (toutes tes sessions)
Les emplacements que Codex lit :
./AGENTS.md # mémoire du projet (à la racine du dépôt)
./sous-dossier/AGENTS.md # règles propres à un dossier, lues après celles de la racine
~/.codex/AGENTS.md # mémoire globale (toutes vos sessions)
Un AGENTS.override.md placé au même endroit prend le pas sur l’AGENTS.md voisin, pratique pour une consigne temporaire. Par défaut, Codex arrête de lire au-delà de 32 Kio d’instructions cumulées : raison de plus pour rester court.
Ce qui doit y aller (la vraie matière)
Un bon fichier mémoire tient en quatre rubriques. Pas plus.
- Le contexte du projet. Ce que c’est, et surtout l’objectif en une phrase : celui que vous avez déjà extrait dans votre cahier des charges. C’est la boussole de l’agent.
- Les conventions et les règles. Les choix que l’agent ne peut pas deviner et que vous ne voulez pas re-justifier : « toujours montrer les commandes sudo avant de les lancer », « pas de secret en clair », « on utilise React, pas Vue », « ne touche jamais au dossier
legacy/». - Les commandes qui comptent. Comment on lance, build, teste, déploie ce projet. L’agent les répétera fidèlement au lieu d’inventer une commande qui n’existe pas.
- Les leçons apprises à la dure. Le piège récurrent, le truc contre-intuitif, le bug sur lequel vous vous êtes cassé les dents. « L’API renvoie du 429 si on tape plus de 5 fois/s, throttle. » Ce genre de savoir vaut de l’or et se perd sinon.
Ce qui ne doit PAS y aller
Un fichier mémoire obèse, c’est pire qu’un fichier vide : il mange du contexte à chaque session sans rien apporter. Gardez-le sec.
- Ce que le code dit déjà. Pas besoin de recopier l’arborescence ni de lister chaque fichier : l’agent sait lire le dépôt. La mémoire sert à ce qui n’est pas dans le code.
- Les secrets. Jamais. Pas une clé API, pas un mot de passe. Le fichier voyage avec le dépôt, voyez Sécuriser les accès.
- Les détails d’une seule conversation. « Hier on a renommé tel bouton » n’a rien à faire là. La mémoire, c’est le permanent, pas le journal de bord.
Un exemple concret et réutilisable
Voici à quoi ressemble un CLAUDE.md honnête pour un petit projet web. Dense, utile, sans gras :
# Kino, tableau de bord ciné
## Objectif
Regrouper les sorties ciné de la semaine (affiches, notes, synopsis),
consultable depuis mon téléphone. Usage perso, mono-utilisateur.
## Pile
- Front : Astro + TypeScript, déployé en statique.
- Données : API TMDB (clé en variable d'env `TMDB_KEY`, jamais en dur).
- Pas de base de données, pas d'auth, pas de backend en v1.
## Règles
- Montre toujours les commandes destructives (rm, git push --force) avant.
- Pas de secret en clair : tout passe par .env (déjà gitignored).
- TypeScript strict. Pas de `any` sans commentaire qui justifie.
- Ne touche jamais au dossier `vendor/` (code tiers figé).
## Commandes
- Dev : `npm run dev` (port 4321)
- Build : `npm run build`
- Tests : `npm test` (Vitest)
- Lint : `npm run lint`
## Gotchas
- TMDB renvoie du 429 au-delà de ~40 req/10s : on cache les réponses 24h.
- Les affiches manquantes arrivent en `null`, pas en chaîne vide, tester `== null`.
Vous pouvez le lire en quinze secondes. C’est l’objectif : un agent qui l’avale au démarrage repart avec tout le contexte que vous auriez dû lui réexpliquer.
La mémoire globale, pour vos préférences à vous
Le fichier global, lui, ne parle d’aucun projet en particulier. Il porte votre manière de travailler, partout :
# Préférences globales
- Réponds toujours en français.
- Préfère les solutions simples : moins de dépendances, moins d'abstraction.
- Avant toute commande sudo ou destructive, montre-la et attends mon accord.
- Pas de commentaires évidents dans le code. Commente le pourquoi, pas le quoi.
Écrivez ça une fois, et chaque nouveau projet démarre déjà à votre main.
Comment l’amorcer sans partir de zéro
Vous n’avez pas à écrire le fichier projet à la main devant une page blanche. La plupart des agents savent le générer en scannant votre dépôt, puis vous l’affinez.
0 étape sur 3 faite Vos cases cochées restent dans ce navigateur.
-
Lancez la commande d'init
Placez-vous à la racine du projet et demandez à l’agent d’amorcer le fichier.
Dans Claude Code, tapez la commande dédiée :
/initIl parcourt le dépôt et rédige un premier
CLAUDE.md(pile détectée, scripts, structure).OpenCode a la même commande, qui crée ou met à jour
AGENTS.md:/initIl parcourt les fichiers importants du dépôt et y consigne commandes de build et de test, architecture et conventions.
Codex a la même commande, qui génère un premier
AGENTS.mddans le dossier courant :/initC’est un squelette : à vous de le remplir et de le tailler.
-
Élaguez et corrigez
Le brouillon généré est verbeux et liste parfois l’évidence. Coupez. Gardez les quatre rubriques utiles, supprimez tout ce que le code dit déjà. C’est votre fichier, pas le sien.
-
Ajoutez ce que l'agent ne pouvait pas deviner
L’objectif en une phrase, les gotchas, les règles de prudence : ça, aucun scan ne le trouve. C’est à vous de l’écrire.
La mémoire grandit avec le frottement
Ne cherchez pas à écrire le fichier parfait du premier coup. La mémoire se construit à l’usage, et il y a un signal très net : le jour où vous corrigez l’agent deux fois sur la même chose, promouvez la correction en règle.
Il refait une requête SQL non échappée ? → une ligne dans la mémoire. Il oublie systématiquement de lancer le lint avant de committer ? → une ligne. Chaque friction récurrente devient une règle, et la friction disparaît. C’est exactement le « ↻ on reboucle » du guide de cadrage : le projet vit, et la mémoire apprend avec lui.
Toutes les commandes de cette fiche
Questions fréquentes
Comment utiliser un seul fichier mémoire pour Claude Code, Codex et OpenCode ?
Écrivez vos règles une fois dans AGENTS.md, que Codex et OpenCode lisent directement. Créez à côté un CLAUDE.md dont la première ligne est @AGENTS.md : Claude Code inclut alors le contenu de l'autre fichier. Ajoutez en dessous ce qui ne concerne que Claude, et les trois agents suivent les mêmes règles.
Faut-il un fichier mémoire différent pour chaque projet ?
Oui, un fichier dédié à la racine de chaque projet, car chacun a ses règles, sa pile et ses pièges. L'agent charge ainsi le bon contexte dès qu'il ouvre le dépôt, sans mélanger les conventions. Le fichier est commité avec le code, donc vos collègues et leurs agents en héritent. Le fichier global, lui, se réserve à vos préférences valables partout.
Claude Code se souvient-il de choses sans que je les écrive ?
Oui, il tient une mémoire automatique, active par défaut : il note vos préférences, vos corrections et le contexte qu'il ne peut pas déduire du code, dans un dossier memory/ propre au projet, sous ~/.claude/projects/, et relit ces notes au début de chaque session. La commande /memory permet de les consulter ou de couper la fonction. Relisez-les de temps en temps, puisque c'est l'agent qui les écrit.
Quand ajouter une règle au fichier mémoire ?
Le signal est net : le jour où vous corrigez l'agent deux fois sur la même chose, la correction devient une règle. Avant d'ajouter une ligne, demandez-vous si elle resservira à chaque session ou seulement aujourd'hui. Ce qui ne vaut que pour aujourd'hui reste dans la conversation.
Un fichier mémoire trop long pose-t-il problème ?
Oui. Il est rechargé à chaque session et compte dans le budget de contexte de l'agent : 400 lignes, ce sont 400 lignes lues avant votre premier mot, autant de place en moins pour le vrai travail. Relisez-le de temps en temps et coupez ce qui ne sert plus, une mémoire dense et courte fait toujours mieux qu'une mémoire complète et molle.
Les termes de cette fiche : AgentLLMFichier mémoireClaude CodeCodexOpenCodeCLILinuxsudoAPIClé API
Une erreur ?
Une commande ne marche plus, un prix a changé ?
Les outils bougent tous les mois. Dites-moi ce qui cloche dans cette fiche, je corrige et je redate.