Rappeler décisions et événements passés, journaliser le travail d’un agent, renforcer un motif par des signaux de récompense, relier une leçon à un travail Nexus accepté. Options, sortie, erreurs.
Le pack Memory range ce qu’un projet a appris dans des fichiers Markdown : décisions, leçons et motifs. bmad-plus mem est la petite boîte à outils déterministe qui permet à n’importe quel assistant d’utiliser ces fichiers de la même façon, qu’il tourne dans Claude Code, Gemini CLI, Codex CLI, Cursor, OpenCode, Aider ou Antigravity. Elle a cinq actions : recall retrouve des notes et événements pertinents, write ajoute un événement à un journal, reinforce monte ou baisse le score d’un motif, observe relie une leçon à un travail vérifié de façon indépendante puis accepté, et outcomes liste ces liens. Elle n’a aucune question de terminal et n’appelle jamais de modèle : un agent peut donc la lancer et analyser le résultat. Cette page s’adresse à qui veut qu’un agent se souvienne avec des preuves, et à qui audite cette mémoire.
Journal d’événements en ajout seul, un objet JSON par ligne.
write
.bmad/memory/pattern-scores.json
Score de chaque motif renforcé (une cote Elo et une distribution Bêta).
reinforce
.bmad/memory/promotions.ndjson
Propositions de remontée vers le cerveau global. Toujours au statut PROPOSED.
reinforce
.bmad/memory/outcomes.ndjson
Reçus qui relient une section de mémoire à un travail Nexus accepté.
observe
.bmad/memory/writer.lock
Verrou de courte durée qui met les écrivains en file.
toute action qui écrit
decisions.md, lessons.md, patterns.md dans .agents/memory/ et .bmad/memory/
Notes humaines, découpées en sections à chaque titre ### . Lecture seule.
vous et vos agents
Chaque registre est limité à 2 Mio, celui des résultats à 1000 reçus, et les chemins doivent rester dans le projet sans suivre de lien symbolique. Une ligne abîmée du journal est ignorée à la lecture, jamais fatale.
Cherche dans les événements du journal et dans les sections ### de decisions.md, lessons.md et patterns.md, à la fois dans .agents/memory/ et .bmad/memory/. Le classement est lexical : mots de la requête trouvés dans une entrée, avec des rendements décroissants pour les répétitions, un bonus pour la part de la requête couverte et une normalisation par la longueur. Les événements du journal perdent la moitié de leur poids tous les 30 jours. Aucun service de recherche ni Python n’est requis. Avec --scope portfolio --portfolio <path>, le dossier memory/ d’un cerveau de portefeuille est aussi fouillé. Avec --ranking evidence (portée projet seulement, et --context-scope devient obligatoire), une note qui a un reçu de résultat accepté valide pour les chemins donnés voit son score multiplié par 1,25 ; une note dont tous les reçus sont périmés, remplacés ou contredits est écartée au lieu de retomber silencieusement ; les notes sans reçu restent, marquées unverified.
Ajoute un événement à .bmad/memory/journal.ndjson avec l’heure de l’appel, l’agent, et si fournis l’assistant, le modèle, la tâche, le résultat et les signaux de récompense passés. L’identifiant de l’événement dérive de l’heure, de l’agent et de la tâche : il est reproductible. Rien dans l’événement n’est une mesure faite par BMAD+ : les signaux sont ce que l’appelant déclare.
Replie les signaux en une récompense entre 0 et 1 : --eval pèse 0,5, --accept 0,3 et --ci 0,2, et les signaux omis sont ignorés avec les poids renormalisés, si bien qu’un appel avec le seul CI donne quand même une récompense exploitable. La récompense déplace la cote Elo du motif (départ à 1200, facteur K de 32) et sa distribution Bêta (départ à 1 et 1, avec un oubli qui estompe les vieilles preuves). Quand la moyenne Bêta atteint 0,7 sur au moins 3 mises à jour, une promotion de candidate à validated est écrite dans promotions.ndjson, toujours au statut PROPOSED. L’appliquer demande une approbation humaine ou de Shield que cette commande ne peut jamais enregistrer. Le résultat indique evidenceStatus: self-reported et rankingEligible: false : un renforcement est l’affirmation de l’appelant, pas une preuve acceptée.
observe est le seul moyen pour qu’une leçon obtienne une preuve. Elle lit un fichier JSON et n’écrit un reçu que si la tâche Nexus nommée est acceptée, que sa dernière tentative est terminée, que sa vérification indépendante a réussi et que sa preuve est encore à jour, et seulement si la section de mémoire nommée existe exactement une fois. Le reçu enregistre l’empreinte de cette section et la tâche, et indique lessonCausality: unmeasured : BMAD+ ne prétend pas que la leçon a causé le succès. outcomes revérifie chaque reçu contre les fichiers d’aujourd’hui et affiche accepted-current ou la raison pour laquelle il ne compte plus : superseded, contradictory, stale-memory-section (le texte de la section a changé), stale-outcome-source (la tâche Nexus a changé) ou unavailable-or-ineligible-source.
Fichier d’entrée de observe
{
"runId": "<nexus run id>",
"taskId": "<accepted task id>",
"memory": { "file": ".agents/memory/lessons.md", "heading": "<exact ### heading>" },
"scope": ["src/auth"],
"interpretation": "Why this accepted work supports the lesson.",
"supersedes": [],
"contradicts": []
}
memory.file doit être decisions.md, lessons.md ou patterns.md sous .agents/memory/ ou .bmad/memory/. scope liste de 1 à 30 chemins relatifs et doit rester dans le périmètre de la tâche acceptée. supersedes et contradicts nomment des identifiants de reçus antérieurs qui recouvrent le même périmètre ; un identifiant ne peut figurer dans les deux. Une tentative de tâche ne peut produire qu’un seul reçu.
L’action s’est exécutée. Un recall sans résultat reste à 0.
1
Action inconnue, option obligatoire absente, valeur invalide, registre verrouillé ou toute autre défaillance. Avec --json, l’erreur sort sur la sortie standard sous la forme {"error": "..."} ; sinon sur le flux d’erreur sous la forme mem <action>: <message>.
$ npx bmad-plus mem recall auth strategymem recall: 1 match(es) for "auth strategy" (scope: project) 1. [0.412] note decisions.md § Auth strategy Use short-lived sessions with server-side revocation.
npx bmad-plus mem recall auth strategy
Transcription illustrative, non capturée lors d’une exécution réelle. Source: tools/cli/commands/memory-journal-cmd.js (modèles de messages de runRecall) ; les scores et le texte sont inventés
write puis reinforce (calculé avec les formules, identifiants illustratifs)Simulé
$ npx bmad-plus mem write --agent forge --cli claude-code --task "Add login rate limit" --outcome success --ci passmem write: event 3f9a1c7b02de appended (2026-10-18T09:30:00.000Z) agent=forge cli=claude-code model=- outcome=success task: Add login rate limit$ npx bmad-plus mem reinforce --pattern "Rate limit on auth routes" --accept true --ci passmem reinforce: pattern "Rate limit on auth routes" reward 1.000 (from {"acceptance":true,"ci":"pass"}) elo 1200.0 -> 1216.0 mean 0.667 (alpha=2.00, beta=1.00, updates=1) promotion: none proposed (needs mean >= 0.7 and >= 3 updates)
Transcription illustrative, non capturée lors d’une exécution réelle. Source: tools/cli/commands/memory-journal-cmd.js (runWrite, runReinforce) et lib/memory-journal.js (computeReward, updatePatternScore) ; l’identifiant et l’heure de l’événement sont inventés
Avant de toucher à l’authentification, vous voulez que l’agent vérifie ce que le projet a déjà décidé.
Dans votre assistant IA
Lance `bmad-plus mem recall auth strategy --json` et cite les trois meilleurs résultats avec leur fichier source et leur section.
Ce que vous devriez obtenir La commande affiche un objet JSON avec query, scope, ranking, count et un tableau results trié par score. Chaque résultat est soit une note (avec source comme decisions.md, ref égal au titre ### et le texte de la section), soit un event du journal. Sans résultat, count vaut 0 et le code de sortie reste 0.
Un changement a été accepté et la CI est verte. Vous voulez que la mémoire le consigne et pousse le motif qui l’a guidé.
Dans votre assistant IA
Écris un événement de journal pour l’agent forge, tâche « Add login rate limit », résultat success, CI pass, puis renforce le motif « Rate limit on auth routes » avec acceptation true et CI pass.
Ce que vous devriez obtenirmem write ajoute une ligne à .bmad/memory/journal.ndjson et affiche son identifiant. mem reinforce calcule une récompense de 1,000 (acceptation 0,3 et CI 0,2, renormalisés), fait passer l’Elo du motif de 1200,0 à 1216,0 à sa première mise à jour et affiche une moyenne de 0,667. Aucune promotion n’est proposée avant que la moyenne atteigne 0,7 sur au moins 3 mises à jour, et une proposition n’est jamais stockée autrement qu’en PROPOSED.
Une tâche Nexus qui ajoute une limite de débit a été vérifiée et acceptée. Vous voulez que la leçon correspondante porte cette preuve.
Dans votre assistant IA
Écris le fichier de résultat pour la tâche Nexus acceptée T-12 de l’exécution <run id>, rattaché à la leçon « Rate limit on auth routes » dans .agents/memory/lessons.md avec le périmètre src/auth, puis lance `bmad-plus mem observe --input` dessus et `bmad-plus mem outcomes`.
Ce que vous devriez obtenirmem observe affiche mem observe: <receipt id> recorded; lesson causality remains unmeasured. et ajoute le reçu à .bmad/memory/outcomes.ndjson. mem outcomes affiche ensuite <receipt id>: accepted-current. Si la tâche n’est pas acceptée, si la section manque ou est ambiguë, ou si le périmètre sort de celui de la tâche, observe refuse avec le message du tableau des erreurs et n’écrit rien.