Pourquoi OpenClaw continue de vous oublier (et pourquoi ce n'est pas un bug)
L'oubli que vous ressentez est le résultat direct de la façon dont le système de mémoire d'OpenClaw est conçu : la mémoire vit sous forme de simples fichiers Markdown sur le disque, ni dans une base de données, ni dans la RAM, ni dans le modèle. Les fichiers sont la source de la vérité.
Lorsque ces fichiers sont manquants, mal configurés ou écrasés silencieusement pendant le compactage, l'agent perd le contexte et n'a aucun moyen de vous le dire.
Le correctif n’est pas un paramètre que vous inversez. Il s'agit de comprendre suffisamment bien l'architecture à trois niveaux pour prendre des décisions délibérées sur ce qui se passe où.
L'architecture complète de la mémoire OpenClaw (3 couches expliquées)
La mémoire OpenClaw fonctionne sur trois couches distinctes, chacune avec des caractéristiques de persistance et des modes de défaillance différents.
Cycle de vie complet de la mémoire :
Write → Embed/Index → Search → Compact → Recover
↓ ↓ ↓ ↓ ↓
.md file sqlite-vec semantic summary MEMORY.md
created indexes it query replaces re-read at
on save returns context session start
chunks window
Chaque étape de cette chaîne peut échouer indépendamment. La plupart des problèmes d’oubli proviennent exactement d’une étape cassée.
Couche 1 — La fenêtre de contexte actif
Il s'agit de la mémoire de travail du modèle : tout ce qui est actuellement chargé dans la fenêtre contextuelle de la conversation active. Il comprend l'invite de votre système, l'historique des conversations et tous les morceaux de mémoire récupérés par l'outil de recherche.
Ce qui le remplit :
- Invite système (souvent volumineuse)
- Extraits de mémoire récupérés
- Historique des appels d'outils
- La conversation tourne
Que se passe-t-il en cas de débordement : Lorsque la fenêtre contextuelle approche de sa limite de jetons, OpenClaw déclenche le compactage : elle résume le contexte existant dans une représentation compressée et continue. Les instructions qui étaient intégrées à la conversation (plutôt que épinglées dans des fichiers de mémoire durables) sont fréquemment supprimées au cours de ce résumé.
Limite pratique : supposons que vous disposiez d'environ 60 à 70 % de la fenêtre contextuelle annoncée du modèle disponible pour une conversation réelle après l'invite du système et la surcharge de mémoire.
Couche 2 — Notes quotidiennes (la fenêtre glissante de deux jours)
Les notes quotidiennes sont des fichiers Markdown en ajout uniquement nommés au format YYYY-MM-DD stockés dans votre répertoire memory/. Chargements OpenClaw d'aujourd'hui et d'hier fichiers automatiquement au début de chaque session.
- Les faits sur le travail d'aujourd'hui, les décisions prises et les tâches actives sont annexés ici
- Ils ne sont pas destinés à être modifiés : traitez-les comme un journal
- Après deux jours, ils sortent de la fenêtre de chargement automatique et deviennent consultables uniquement via la recherche sémantique.
Le piège critique : OpenClaw ne crée pas le répertoire memory/ pour vous. Si le répertoire n'existe pas, les notes quotidiennes sont supprimées silencieusement, aucune erreur n'est générée et l'agent oublie tout entre les sessions. Cette simple omission est à l'origine de la majorité des rapports « pourquoi continue-t-il à m'oublier ».
Couche 3 — Mémoire durable (MEMORY.md et memory-wiki)
Les faits à long terme qui devraient survivre au fil des sessions (votre nom, le contexte du projet, les préférences de codage, les décisions architecturales) appartiennent à MEMORY.md ou au coffre-fort de plugins structuré memory-wiki.
MÉMOIRE.md
Un fichier Markdown de forme libre. L'agent le lit au début de la session. Écrivez ici les faits que vous souhaitez toujours charger. Simple, aucune configuration requise.
wiki-mémoire
Un plugin structuré avec une organisation au niveau de la page, un suivi des réclamations et des preuves, une détection des contradictions et des métadonnées de fraîcheur. Idéal pour les agents de production disposant de bases de connaissances étendues et évolutives.
Le problème du compactage – Pourquoi vos instructions disparaissent en cours de tâche
Le compactage est le mode de défaillance le plus sous-documenté dans OpenClaw. La plupart des articles traitent de l’oubli post-session. Presque aucune adresse compactage à mi-tâche dans les flux de travail autonomes de longue durée — lorsque l'agent exécute une tâche en plusieurs étapes, le compactage se déclenche silencieusement à l'étape 7 sur 12 et les instructions comportementales de l'étape 1 ont disparu.
À quoi sert le compactage :
- Détecte la fenêtre contextuelle approchant de sa capacité
- Résume la conversation en cours dans un bloc condensé
- Remplace le contexte d'origine par le résumé
- Poursuite de l'exécution
Le problème : les résumés sont optimisés pour les faits et l'état de la tâche, et non pour les instructions comportementales. A system instruction like "always write tests before implementation" or "never overwrite files without confirmation" can survive the first compaction cycle and be gone by the second.
Quand ça se déclenche : Il n'y a pas de seuil configurable dans le plugin memory-core par défaut. Il se déclenche en fonction du nombre de jetons et non de l'étape de la tâche. Dans un fonctionnement autonome de 2 heures, vous pouvez vous attendre à 3 à 5 cycles de compactage.
Comment créer une architecture de fichiers résistante au compactage
Épinglez les instructions comportementales dans MEMORY.md, pas dans la conversation. Tout ce qui doit survivre à plusieurs cycles de compactage doit se trouver dans un fichier durable qui est relu après chaque compactage.
Modèle d’épinglage recommandé :
## Agent Behavioral Rules (always active) - Never overwrite files without showing a diff first - Write tests before implementation (TDD mode: on) - Use TypeScript strict mode in all new files ## Project Context - Stack: Node.js 22, Fastify, PostgreSQL 16 - Repo root: /home/user/project - Active sprint goal: migrate auth to Clerk
Conventions de dénomination qui survivent au compactage :
- Préfixez les sections critiques avec
## [PINNED]— le résumé traite les en-têtes en majuscules comme étant hautement prioritaires. - Gardez chaque fait épinglé sur une seule ligne lorsque cela est possible : les paragraphes denses sont résumés, les faits sur une seule ligne ont tendance à survivre textuellement.
- Répétez les 3 à 5 règles comportementales les plus critiques dans
MEMORY.mdet dans la note quotidienne d'aujourd'hui : la redondance est votre couverture de compactage.
Configuration zéro en mémoire en 10 minutes (échafaudage de fichiers complet)
Il s'agit du guide d'installation qui n'existe nulle part ailleurs. Copiez cette structure, remplissez votre contexte et c'est parti.
Arborescence des répertoires :
memory/
├── MEMORY.md
├── 2026-04-27.md ← today's daily note (create manually)
└── wiki/ ← only if using memory-wiki plugin
├── index.md
├── project-context.md
└── decisions.md
Démarreur MEMORY.md :
# Persistent Memory ## Identity & Preferences - Name: [your name] - Role: [your role] - Preferred response style: concise, no preamble ## Project: [Project Name] - Stack: [your stack] - Key constraints: [e.g., no external APIs, TypeScript only] - Current focus: [active task or sprint goal] ## Behavioral Rules - [Rule 1] - [Rule 2] ## Decisions Made - [YYYY-MM-DD] Decided to use X because Y
Note quotidienne de démarrage (2026-04-27.md) :
# 2026-04-27 ## Session Goals - [ ] Task 1 - [ ] Task 2 ## Notes
Configuration de l'emplacement du plugin (syntaxe 2026) :
{
"plugins": {
"slots": {
"memory": "memory-core"
}
}
}
Pour désactiver complètement la mémoire :
{
"plugins": {
"slots": {
"memory": false
}
}
}
Étapes de vérification :
- Exécutez une session et demandez à l'agent de se souvenir de quelque chose que vous lui avez dit lors d'une session précédente
- Vérifiez que
memory/YYYY-MM-DD.mda été écrit (il doit avoir un nouveau contenu) - Demandez directement à l'agent : « Que savez-vous de moi ? - il devrait provenir de
MEMORY.md
Configuration du wiki mémoire pour une base de connaissances de production
Activez-le en échangeant l'emplacement du plugin :
{
"plugins": {
"slots": {
"memory": "memory-wiki"
}
}
}
memory-wiki génère un coffre-fort structuré sous memory/wiki/. Chaque sujet a sa propre page. Le plugin compile un digest.md qui regroupe des faits de haute confiance et non contredits que l'agent doit charger au démarrage de la session.
Structure de coffre-fort pratique pour un agent de production :
memory/wiki/ ├── index.md ← vault table of contents ├── digest.md ← auto-generated; agent reads this ├── project-context.md ← stack, goals, constraints ├── decisions.md ← architectural decisions log ├── team.md ← stakeholders, contacts └── domain-knowledge.md ← business rules, glossary
Utilisez mémoire-wiki lorsque :
- Votre base de connaissances dépasse ~50 faits
- Vous avez besoin d'une détection des contradictions
- Plusieurs agents écrivent dans le même coffre-fort
Restez fidèle à MEMORY.md brut lorsque :
- Vous êtes un développeur solo
- Votre contexte est stable
- Vous ne voulez aucun frais de maintenance
Recherche sémantique et intégrations – SQlite, sqlite-vec et JS Fallback
OpenClaw indexe vos fichiers mémoire en utilisant SQLite avec l'extension sqlite-vec pour la recherche de similarité vectorielle. Lorsque vous ou l'agent effectuez une recherche dans la mémoire, celui-ci intègre la requête et récupère les fragments les plus sémantiquement pertinents.
Vérifiez que votre magasin vectoriel est sain :
# Check that the memory index exists ls memory/.index/ # Reset a corrupted index (safe to run — it rebuilds from .md files) rm -rf memory/.index/ && OpenClaw reindex
Si sqlite-vec n'est pas disponible (courant sur ARM Linux et certaines configurations Windows), OpenClaw revient à une extension vectorielle pure JS. Forcez explicitement le repli :
{
"memory": {
"vectorBackend": "js"
}
}
Stratégies de mémoire spécifiques à un segment
Développeur solo : surcharge minimale, rappel maximal
Configuration recommandée : plugin memory-core, MEMORY.md + notes quotidiennes uniquement, pas de coffre-fort wiki.
- Gardez
MEMORY.mdsous 200 lignes - les fichiers plus longs ralentissent le démarrage de la session - Ajouter des notes quotidiennes de manière agressive ; n'essayez pas de les garder propres
- Examinez et élaguez
MEMORY.mdchaque semaine : les faits obsolètes dégradent la qualité de la recherche.
Pipeline multi-agents – Mémoire partagée entre les agents
Lorsque plusieurs agents lisent et écrivent dans le même répertoire memory/, vous avez besoin de règles de propriété explicites.
- Un agent est propriétaire des écritures dans chaque fichier — les écritures simultanées dans le même fichier
.mdproduiront des conflits - Utilisez des sous-répertoires par agent :
memory/agent-a/,memory/agent-b/, avec unmemory/shared/MEMORY.mdpartagé - Utilisez memory-wiki pour le coffre-fort partagé - sa compilation de résumé gère mieux la fraîcheur entre plusieurs rédacteurs que les fichiers bruts
Tâches autonomes de longue durée – Survivre aux heures d'exécution
Pour les agents exécutant des tâches mesurées en heures :
- Forcer les écritures en mémoire aux points de contrôle — après chaque étape majeure de la tâche, demandez à l'agent d'ajouter son état actuel à la note quotidienne du jour
- Contexte résistant au compactage pré-chargé — placez la spécification complète de la tâche dans
MEMORY.mdavant le début de l'exécution, pas seulement dans le message initial - Définir des marqueurs de continuation explicites dans les notes quotidiennes :
<!-- RESUME POINT: completed steps 1-4, next: step 5 -->pour que l'agent puisse s'orienter automatiquement après un cycle de compactage
Pourquoi EasyClaw gagne dans les tâches de mémoire de longue durée
EasyClaw est conçu pour le bureau, ce qui signifie que vos fichiers de mémoire, vos index vectoriels et vos notes quotidiennes vivent aux côtés de votre projet sur le disque local, et non dans une session cloud qui supprime le contexte en cas d'expiration. Vous obtenez une mémoire résistante au compactage par défaut, et non par configuration.
- ✅ Mémoire persistante qui survit aux redémarrages — aucune limite de session cloud
- ✅ Indexation locale sqlite-vec avec une latence réseau nulle
- ✅ Mémoire wiki structurée intégrée — aucun plugin supplémentaire à configurer
- ✅ Écritures automatiques de points de contrôle à chaque étape majeure de la tâche
- ✅ Épinglage sensible au compactage : les règles comportementales ne sont jamais résumées
Dépannage de la mémoire OpenClaw - Diagnostiquez tout problème d'oubli en 2 minutes
Suivez ces étapes dans l’ordre :
Étape 1 — Le répertoire memory/ existe-t-il ?
- Non → Créez-le. Cela corrige environ 40 % de tous les rapports d’oubli.
- Oui → Passez à l'étape 2.
Étape 2 — Des notes quotidiennes sont-elles rédigées ?
- Recherchez un fichier nommé date d'aujourd'hui dans
memory/ - Aucun fichier → L'emplacement du plug-in est peut-être mal configuré. Vérifiez que
plugins.slots.memoryest défini et nonfalse. - Le fichier existe mais est vide → L'agent charge de la mémoire mais n'écrit pas. Vérifiez les autorisations d'écriture sur le répertoire.
Étape 3 — Le compactage a-t-il déclenché et dépouillé vos instructions ?
- Symptôme: l'agent se souvient des faits mais ignore les règles de comportement en cours de session
- Réparer: déplacer toutes les règles de comportement vers
MEMORY.mdsous une section## [PINNED]
Étape 4 — La fenêtre contextuelle déborde-t-elle avant le compactage ?
- Symptôme: l'agent commence à ignorer les premières parties de longues conversations
- Réparer: réduisez la taille de l'invite système, supprimez
MEMORY.mdou divisez la tâche en sessions plus courtes avec des notes de point de contrôle explicites
Étape 5 — L'index vectoriel SQLite est-il corrompu ?
- Symptôme: la recherche dans la mémoire ne renvoie aucun résultat ou des résultats clairement non pertinents
- Réparer:
rm -rf memory/.index/ && OpenClaw reindex - Si des erreurs sqlite-vec apparaissent dans les logs : passez au backend JS via
"vectorBackend": "js"
Foire aux questions
Q : Pourquoi OpenClaw oublie-t-il tout après avoir fermé le terminal ?
R : La cause la plus courante est que le répertoire memory/ n'existe pas. OpenClaw supprime silencieusement les notes quotidiennes lorsque le répertoire est manquant – pas d'erreur, pas d'avertissement. Créez le répertoire à la racine de votre projet et vérifiez qu'un fichier daté apparaît après votre prochaine session.
Q : Mon agent suit les instructions au début mais les ignore plus tard dans les tâches longues. Pourquoi?
R : C’est du compactage. Lorsque la fenêtre contextuelle se remplit, OpenClaw résume le contenu précédent pour faire de la place. Les résumés préservent les faits, pas les instructions comportementales. Déplacez vos règles dans MEMORY.md sous une section ## [PINNED] afin qu'elles soient relues après chaque cycle de compactage.
Q : Dois-je utiliser Memory-Core ou Memory-Wiki ?
R : Commencez par memory-core. Il est sans configuration et gère bien la plupart des charges de travail des développeurs solo. Effectuez la mise à niveau vers memory-wiki uniquement si votre base de connaissances dépasse environ 50 faits, si vous avez besoin d'une détection de contradiction ou si plusieurs agents écrivent dans le même coffre-fort mémoire.
Q : À combien de cycles de compactage puis-je m'attendre dans un fonctionnement autonome de 2 heures ?
R : Attendez-vous à 3 à 5 cycles de compactage. Le seuil est basé sur le nombre de jetons, et non sur le temps écoulé ou l'étape de la tâche, et n'est pas configurable par l'utilisateur dans le plugin memory-core par défaut. C'est pourquoi un goupillage résistant au compactage dans MEMORY.md est essentiel pour les tâches de longue durée.
Q : La recherche de mémoire renvoie des résultats non pertinents. Comment puis-je le réparer ?
R : L'index vectoriel SQLite est probablement corrompu ou obsolète. Exécutez rm -rf memory/.index/ && OpenClaw reindex pour le reconstruire à partir de vos fichiers .md. Vous pouvez l'exécuter en toute sécurité à tout moment. Si les erreurs sqlite-vec persistent (courantes sur ARM Linux et certaines configurations Windows), passez au backend de secours JS.
Q : Puis-je exécuter plusieurs agents sur le même répertoire mémoire ?
R : Oui, mais vous avez besoin de règles de propriété explicites. Les écritures simultanées dans le même fichier .md produiront des conflits. Utilisez des sous-répertoires par agent (memory/agent-a/, memory/agent-b/) avec un memory/shared/MEMORY.md partagé et utilisez le wiki mémoire pour le coffre-fort partagé.
Q : Combien de temps les notes quotidiennes restent-elles dans la fenêtre de chargement automatique ?
R : Seules les notes quotidiennes d'aujourd'hui et d'hier sont chargées automatiquement au début de la session. Les notes plus anciennes tombent en dehors de la fenêtre de chargement automatique et ne sont accessibles que via la recherche sémantique. C'est intentionnel : le chargement de chaque note historique consommerait trop de budget contextuel.
Verdict final - La configuration de la mémoire qui colle réellement
Base de référence recommandée pour la plupart des utilisateurs : Plugin memory-core, répertoire memory/ créé avant la première session, MEMORY.md avec des règles de comportement dans une section épinglée clairement étiquetée, des notes quotidiennes ajoutées tout au long de chaque session.
La seule erreur derrière 80 % des problèmes d’oubli : ne pas créer le répertoire memory/ combiné à aucun épinglage résistant au compactage dans MEMORY.md. L'agent supprime le contexte au premier cycle de compactage et n'a nulle part où le réécrire.
Votre liste de contrôle d’action :
- Créez le répertoire
memory/à la racine de votre projet - Copiez le modèle de démarrage
MEMORY.mdci-dessus et remplissez votre contexte - Vérifiez que
plugins.slots.memoryest défini sur"memory-core"(ou le plugin de votre choix) - Ajoutez vos 3 à 5 règles comportementales les plus critiques sous
## [PINNED]dansMEMORY.md - Après votre première séance, confirmez qu'une note quotidienne datée a été rédigée
- Si la recherche sémantique ne vous convient pas, exécutez
OpenClaw reindexpour reconstruire l'index vectoriel
L'architecture est solide une fois qu'on la comprend. La plupart des problèmes d’oubli se résolvent dans les 10 minutes suivant cette liste de contrôle.