Parcourir la documentation

bmad-plus mem

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.

Sur cette page
  1. Synopsis
  2. Ce qu’elle lit et écrit
  3. Les cinq actions
  4. Codes de sortie
  5. Lire la sortie
  6. Erreurs et conduite à tenir
  7. Exemples

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.

Synopsis

Dans le terminal de votre projet
npx bmad-plus mem recall <query...> [--scope project|portfolio] [--portfolio <path>] [--limit <n>] [--ranking lexical|evidence] [--context-scope <paths>] [--json]
npx bmad-plus mem write --agent <name> [--cli <name>] [--model <id>] [--task <text>] [--outcome <outcome>] [--eval <0-1>] [--accept <bool>] [--ci <result>] [--json]
npx bmad-plus mem reinforce --pattern <id> [--eval <0-1>] [--accept <bool>] [--ci <result>] [--evidence <ids>] [--json]
npx bmad-plus mem observe --input <file> [--json]
npx bmad-plus mem outcomes [--json]

Arguments et options de mem
OptionArgumentDéfautEffet
<action>recall, write, reinforce, observe, outcomesobligatoireL’action à exécuter.
[query...]motsaucunLe texte de recherche de recall. Plusieurs mots sont joints par des espaces.
-d, --directory <path>chemindossier courantDossier du projet contenant .agents/memory/ et .bmad/memory/.
--scope <scope>project ou portfolioprojectrecall seulement. portfolio cherche aussi dans le dossier mémoire d’un cerveau de portefeuille.
--portfolio <path>cheminaucunDossier du cerveau de portefeuille ; son sous-dossier memory/ est fouillé avec --scope portfolio.
--limit <n>nombre8recall : combien de résultats garder.
--ranking <mode>lexical ou evidencelexicalrecall : evidence favorise les notes appuyées par un résultat accepté. Portée projet uniquement.
--context-scope <paths>chemins relatifs séparés par des virgulesaucunObligatoire avec --ranking evidence : les chemins du projet sur lesquels porte la question.
--input <file>chemin relatif au projetaucunobserve : fichier JSON qui décrit le résultat.
--agent <name>texteaucunwrite : l’agent qui a produit l’événement. Obligatoire.
--cli <name>texteaucunwrite : l’assistant qui le pilotait (par exemple claude-code, gemini-cli, codex-cli, cursor, opencode, aider, antigravity). Enregistré tel quel.
--model <id>texteaucunwrite : identifiant du modèle, enregistré tel quel.
--task <text>textevidewrite : ce qui a été tenté.
--outcome <outcome>success, failure, partial, abandonedaucunwrite : résultat de la tentative.
--pattern <id>texteaucunreinforce : le titre du motif dans patterns.md. Obligatoire.
--eval <score>nombre de 0 à 1aucunSignal de récompense : score d’une suite d’évaluation.
--accept <bool>true, false (ou yes, no), ou un nombre de 0 à 1aucunSignal de récompense : la personne a-t-elle accepté le résultat.
--ci <result>pass, fail, ou un nombre de 0 à 1aucunSignal de récompense : résultat de l’intégration continue.
--evidence <ids>identifiants d’événements séparés par des virgulesaucunreinforce : événements du journal qui appuient le renforcement ; recopiés dans une proposition de remontée vers le cerveau global.
--jsonaucundésactivéAffiche du JSON au lieu du texte. Les erreurs deviennent {"error": "..."}.

Ce qu’elle lit et écrit

Fichiers utilisés par mem
FichierRôleÉcrit par
.bmad/memory/journal.ndjsonJournal d’événements en ajout seul, un objet JSON par ligne.write
.bmad/memory/pattern-scores.jsonScore de chaque motif renforcé (une cote Elo et une distribution Bêta).reinforce
.bmad/memory/promotions.ndjsonPropositions de remontée vers le cerveau global. Toujours au statut PROPOSED.reinforce
.bmad/memory/outcomes.ndjsonReçus qui relient une section de mémoire à un travail Nexus accepté.observe
.bmad/memory/writer.lockVerrou 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.

Les cinq actions

recall

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.

write

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.

reinforce

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 et outcomes

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.

Codes de sortie

Codes de sortie de mem
CodeSignification
0L’action s’est exécutée. Un recall sans résultat reste à 0.
1Action 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>.

Lire la sortie

recall (scores et note illustratifs)Simulé
npx bmad-plus mem recall auth strategy
mem 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.

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 pass
mem 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 pass
mem 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

Erreurs et conduite à tenir

Messages affichés par mem
MessageCauseQue faire
mem: unknown action '<x>' — expected recall | write | reinforce | observe | outcomesLe premier mot n’est pas l’une des cinq actions.Corrigez le nom de l’action.
mem recall: recall: query must be a non-empty stringrecall a été appelé sans mots à chercher.Ajoutez les mots de recherche après recall.
mem recall: Evidence ranking supports project-local lexical recall only.--ranking evidence combiné avec --scope portfolio.Utilisez la portée projet pour le classement par preuves.
mem recall: An explicit non-empty project scope is required.--ranking evidence sans --context-scope.Passez --context-scope src/auth,src/session (1 à 30 chemins relatifs).
mem write: appendEvent: event.agent is requiredwrite sans --agent.Passez --agent <name>.
mem write: appendEvent: event.outcome must be one of success|failure|partial|abandoned--outcome invalide.Utilisez l’une des quatre valeurs.
mem reinforce: mem reinforce: --pattern <id> is required (the pattern heading in patterns.md)reinforce sans --pattern.Passez le titre ### exact du motif.
mem observe: Outcome source is not an accepted task with current independently verified evidence.La tâche Nexus n’est pas acceptée, sa vérification n’a pas réussi ou sa preuve est périmée.Terminez d’abord nexus verify et nexus accept, puis observez de nouveau.
mem observe: Memory heading must identify exactly one section.Le titre est absent ou apparaît deux fois dans le fichier.Utilisez le texte exact et unique du titre ### .
mem observe: Duplicate outcome: this task attempt already supplied a receipt.Un reçu existe déjà pour cette exécution, cette tâche et cette tentative.Rien à faire ; utilisez supersedes sur une tentative ultérieure si la leçon a changé.
mem observe: Outcome scope exceeds the accepted task scope.Un chemin de scope sort du périmètre déclaré de la tâche.Réduisez scope aux chemins que la tâche possède.
... Memory writer lock is occupied. Inspect writer.lock and its owner; do not remove a live lock.Un autre processus tient .bmad/memory/writer.lock depuis plus de deux secondes environ, ou un plantage l’a laissé.Attendez l’autre écrivain. Ne supprimez le fichier que si vous êtes sûr qu’aucun processus mem ne tourne.
... Memory store is full; archive it explicitly before adding records.Un registre a atteint 2 Mio.Archivez ou élaguez le fichier à la main, puis réessayez.

Exemples

Se rappeler une décision passée

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.

Journaliser un résultat et renforcer un motif

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 obtenir mem 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.

Relier une leçon à un travail accepté

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 obtenir mem 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.