# bmad-plus mem

> Entscheidungen und Ereignisse abrufen, Agentenarbeit festhalten, ein Muster mit Belohnungssignalen verstärken, eine Erkenntnis an abgenommene Nexus-Arbeit binden. Optionen, Ausgabe, Fehler.

Canonical: https://bmad-plus.rochetta.fr/de/docs/reference/cli-mem/
Language: de
BMAD+ version: 0.23.1
Documentation reviewed: 2026-10-19
Author: Laurent Rochetta
License: MIT

BMAD+ Dokumentation › [Referenz](https://bmad-plus.rochetta.fr/de/docs/reference/) › bmad-plus mem

Das Pack Memory legt in Markdown-Dateien ab, was ein Projekt gelernt hat: Entscheidungen, Erkenntnisse und Muster. `bmad-plus mem` ist der kleine, deterministische Werkzeugkasten, mit dem jeder Assistent diese Dateien gleich nutzt, ob in Claude Code, Gemini CLI, Codex CLI, Cursor, OpenCode, Aider oder Antigravity. Er hat fünf Aktionen: `recall` findet passende frühere Notizen und Ereignisse, `write` hängt ein Ereignis an ein Journal an, `reinforce` hebt oder senkt den Wert eines Musters, `observe` bindet eine Erkenntnis an unabhängig geprüfte und abgenommene Arbeit, und `outcomes` listet diese Bindungen. Er stellt keine Fragen im Terminal und ruft nie ein Modell auf, ein Agent kann ihn also starten und das Ergebnis auswerten. Die Seite ist für alle, die wollen, dass sich ein Agent mit Belegen erinnert, und für alle, die dieses Gedächtnis prüfen.

<a id="synopsis"></a>
## Syntax

**Im Terminal deines Projekts**

```sh
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]
```

**Argumente und Optionen von mem**

| Option | Argument | Standard | Wirkung |
| --- | --- | --- | --- |
| `<action>` | `recall`, `write`, `reinforce`, `observe`, `outcomes` | Pflicht | Die auszuführende Aktion. |
| `[query...]` | Wörter | keiner | Der Suchtext von `recall`. Mehrere Wörter werden mit Leerzeichen verbunden. |
| `-d, --directory <path>` | Pfad | aktuelles Verzeichnis | Projektordner mit `.agents/memory/` und `.bmad/memory/`. |
| `--scope <scope>` | `project` oder `portfolio` | `project` | Nur `recall`. `portfolio` durchsucht zusätzlich den Memory-Ordner eines Portfolio-Brains. |
| `--portfolio <path>` | Pfad | keiner | Ordner des Portfolio-Brains; sein Unterordner `memory/` wird mit `--scope portfolio` durchsucht. |
| `--limit <n>` | Zahl | `8` | `recall`: wie viele Treffer behalten werden. |
| `--ranking <mode>` | `lexical` oder `evidence` | `lexical` | `recall`: `evidence` bevorzugt Notizen mit einem abgenommenen Ergebnis als Beleg. Nur Projektumfang. |
| `--context-scope <paths>` | relative Pfade, durch Kommas getrennt | keiner | Pflicht bei `--ranking evidence`: die Projektpfade, um die es in der Frage geht. |
| `--input <file>` | projektrelativer Pfad | keiner | `observe`: JSON-Datei, die das Ergebnis beschreibt. |
| `--agent <name>` | Text | keiner | `write`: der Agent, der das Ereignis erzeugt hat. Pflicht. |
| `--cli <name>` | Text | keiner | `write`: der Assistent, der ihn gesteuert hat (zum Beispiel `claude-code`, `gemini-cli`, `codex-cli`, `cursor`, `opencode`, `aider`, `antigravity`). Wird unverändert gespeichert. |
| `--model <id>` | Text | keiner | `write`: Modellkennung, unverändert gespeichert. |
| `--task <text>` | Text | leer | `write`: was versucht wurde. |
| `--outcome <outcome>` | `success`, `failure`, `partial`, `abandoned` | keiner | `write`: Ergebnis des Versuchs. |
| `--pattern <id>` | Text | keiner | `reinforce`: die Überschrift des Musters in `patterns.md`. Pflicht. |
| `--eval <score>` | Zahl von 0 bis 1 | keiner | Belohnungssignal: Ergebnis einer Evaluierungssuite. |
| `--accept <bool>` | `true`, `false` (oder `yes`, `no`) oder eine Zahl von 0 bis 1 | keiner | Belohnungssignal: ob die Person das Ergebnis akzeptiert hat. |
| `--ci <result>` | `pass`, `fail` oder eine Zahl von 0 bis 1 | keiner | Belohnungssignal: Ergebnis der kontinuierlichen Integration. |
| `--evidence <ids>` | Ereignis-IDs, durch Kommas getrennt | keiner | `reinforce`: Journal-Ereignisse, die die Verstärkung belegen; werden in einen Übernahmevorschlag kopiert. |
| `--json` | keiner | aus | Gibt JSON statt Text aus. Fehler werden zu `{"error": "..."}`. |

<a id="reads-writes"></a>
## Was gelesen und geschrieben wird

**Von mem genutzte Dateien**

| Datei | Aufgabe | Geschrieben von |
| --- | --- | --- |
| `.bmad/memory/journal.ndjson` | Nur anhängbares Ereignisjournal, ein JSON-Objekt pro Zeile. | `write` |
| `.bmad/memory/pattern-scores.json` | Wert jedes verstärkten Musters (eine Elo-Zahl und eine Beta-Verteilung). | `reinforce` |
| `.bmad/memory/promotions.ndjson` | Übernahmevorschläge. Immer Status `PROPOSED`. | `reinforce` |
| `.bmad/memory/outcomes.ndjson` | Belege, die einen Memory-Abschnitt an abgenommene Nexus-Arbeit binden. | `observe` |
| `.bmad/memory/writer.lock` | Kurzlebige Sperre, die Schreibzugriffe nacheinander ordnet. | jede schreibende Aktion |
| `decisions.md`, `lessons.md`, `patterns.md` in `.agents/memory/` und `.bmad/memory/` | Menschliche Notizen, an jeder Überschrift `### ` in Abschnitte geteilt. Nur lesen. | du und deine Agenten |

Jeder Speicher ist auf 2 MiB begrenzt, der Ergebnisspeicher auf 1000 Belege, und Pfade müssen im Projekt bleiben, ohne symbolischen Links zu folgen. Eine beschädigte Journalzeile wird beim Lesen übersprungen, nie ein Abbruch.

<a id="actions"></a>
## Die fünf Aktionen

<a id="recall"></a>
### recall

Durchsucht die Journalereignisse und die `### `-Abschnitte von `decisions.md`, `lessons.md` und `patterns.md`, sowohl in `.agents/memory/` als auch in `.bmad/memory/`. Das Ranking ist lexikalisch: Wörter der Anfrage in einem Eintrag, mit abnehmendem Ertrag bei Wiederholungen, einem Bonus für den abgedeckten Anteil der Anfrage und einer Längennormierung. Journalereignisse verlieren alle 30 Tage die Hälfte ihres Gewichts. Ein Suchdienst oder Python ist nicht nötig. Mit `--scope portfolio --portfolio <path>` wird auch der Ordner `memory/` eines Portfolio-Brains durchsucht. Mit `--ranking evidence` (nur Projektumfang, dann ist `--context-scope` Pflicht) wird der Wert einer Notiz mit gültigem Beleg eines abgenommenen Ergebnisses für die angegebenen Pfade mit 1,25 multipliziert; eine Notiz, deren Belege alle veraltet, ersetzt oder widersprochen sind, entfällt, statt stillschweigend zurückzufallen; Notizen ganz ohne Beleg bleiben, markiert als `unverified`.

<a id="write"></a>
### write

Hängt ein Ereignis an `.bmad/memory/journal.ndjson` an, mit der Zeit des Aufrufs, dem Agenten und, falls angegeben, Assistent, Modell, Aufgabe, Ergebnis und den übergebenen Belohnungssignalen. Die Ereignis-ID leitet sich aus Zeit, Agent und Aufgabe ab und ist daher reproduzierbar. Nichts im Ereignis ist eine Messung von BMAD+: Die Signale sind das, was der Aufrufer meldet.

<a id="reinforce"></a>
### reinforce

Faltet die Signale zu einer Belohnung zwischen 0 und 1 zusammen: `--eval` wiegt 0,5, `--accept` 0,3 und `--ci` 0,2, weggelassene Signale werden mit neu normierten Gewichten ignoriert, sodass auch ein Aufruf nur mit CI eine brauchbare Belohnung liefert. Die Belohnung bewegt die Elo-Zahl des Musters (Start 1200, K-Faktor 32) und seine Beta-Verteilung (Start 1 und 1, mit Vergessen, damit alte Belege verblassen). Erreicht der Beta-Mittelwert 0,7 bei mindestens 3 Aktualisierungen, wird eine Übernahme von `candidate` auf `validated` in `promotions.ndjson` geschrieben, stets mit Status `PROPOSED`. Sie anzuwenden verlangt eine Freigabe durch einen Menschen oder Shield, die dieser Befehl nie festhalten kann. Das Ergebnis nennt `evidenceStatus: self-reported` und `rankingEligible: false`: Eine Verstärkung ist die Behauptung des Aufrufers, kein abgenommener Beleg.

<a id="observe"></a>
### observe und outcomes

`observe` ist der einzige Weg, wie eine Erkenntnis einen Beleg bekommt. Es liest eine JSON-Datei und schreibt nur dann einen Beleg, wenn die genannte Nexus-Aufgabe abgenommen ist, ihr letzter Versuch abgeschlossen, ihre unabhängige Prüfung bestanden und ihr Nachweis noch aktuell ist, und nur wenn der genannte Memory-Abschnitt genau einmal existiert. Der Beleg hält den Hash dieses Abschnitts und die Aufgabe fest und nennt `lessonCausality: unmeasured`: BMAD+ behauptet nicht, die Erkenntnis habe den Erfolg verursacht. `outcomes` prüft jeden Beleg gegen die heutigen Dateien neu und gibt `accepted-current` aus oder den Grund, warum er nicht mehr zählt: `superseded`, `contradictory`, `stale-memory-section` (der Abschnittstext hat sich geändert), `stale-outcome-source` (die Nexus-Aufgabe hat sich geändert) oder `unavailable-or-ineligible-source`.

**Eingabedatei von observe**

```json
{
  "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` muss `decisions.md`, `lessons.md` oder `patterns.md` unter `.agents/memory/` oder `.bmad/memory/` sein. `scope` listet 1 bis 30 relative Pfade und muss im Umfang der abgenommenen Aufgabe bleiben. `supersedes` und `contradicts` nennen frühere Beleg-IDs, die denselben Umfang überlappen; keine ID darf in beiden stehen. Ein Aufgabenversuch kann nur einen Beleg erzeugen.

<a id="exit-codes"></a>
## Exit-Codes

**Exit-Codes von mem**

| Code | Bedeutung |
| --- | --- |
| 0 | Die Aktion lief. Ein `recall` ohne Treffer bleibt 0. |
| 1 | Unbekannte Aktion, fehlende Pflichtoption, ungültiger Wert, gesperrter Speicher oder jeder andere Fehler. Mit `--json` erscheint der Fehler auf der Standardausgabe als `{"error": "..."}`, sonst auf dem Fehlerstrom als `mem <action>: <message>`. |

<a id="real-output"></a>
## Die Ausgabe lesen

**recall (Werte und Notiz beispielhaft)** (Simuliert)

```text
$ 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.
```

Beispielhafter Ablauf, nicht bei einem echten Lauf aufgezeichnet. Quelle: tools/cli/commands/memory-journal-cmd.js (Meldungsvorlagen von runRecall); Punktzahlen und Text sind erfunden

**write, dann reinforce (aus den Formeln berechnet, IDs beispielhaft)** (Simuliert)

```text
$ 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)
```

Beispielhafter Ablauf, nicht bei einem echten Lauf aufgezeichnet. Quelle: tools/cli/commands/memory-journal-cmd.js (runWrite, runReinforce) und lib/memory-journal.js (computeReward, updatePatternScore); Ereignis-ID und Zeit sind erfunden

<a id="errors"></a>
## Fehler und was zu tun ist

**Von mem ausgegebene Meldungen**

| Meldung | Ursache | Was tun |
| --- | --- | --- |
| `mem: unknown action '<x>' — expected recall \| write \| reinforce \| observe \| outcomes` | Das erste Wort ist keine der fünf Aktionen. | Den Namen der Aktion korrigieren. |
| `mem recall: recall: query must be a non-empty string` | `recall` wurde ohne Suchwörter aufgerufen. | Suchwörter nach `recall` ergänzen. |
| `mem recall: Evidence ranking supports project-local lexical recall only.` | `--ranking evidence` zusammen mit `--scope portfolio`. | Für das Beleg-Ranking den Projektumfang verwenden. |
| `mem recall: An explicit non-empty project scope is required.` | `--ranking evidence` ohne `--context-scope`. | `--context-scope src/auth,src/session` angeben (1 bis 30 relative Pfade). |
| `mem write: appendEvent: event.agent is required` | `write` ohne `--agent`. | `--agent <name>` angeben. |
| `mem write: appendEvent: event.outcome must be one of success\|failure\|partial\|abandoned` | Ungültiges `--outcome`. | Einen der vier Werte verwenden. |
| `mem reinforce: mem reinforce: --pattern <id> is required (the pattern heading in patterns.md)` | `reinforce` ohne `--pattern`. | Die genaue `### `-Überschrift des Musters angeben. |
| `mem observe: Outcome source is not an accepted task with current independently verified evidence.` | Die Nexus-Aufgabe ist nicht abgenommen, ihre Prüfung nicht bestanden oder ihr Nachweis veraltet. | Zuerst `nexus verify` und `nexus accept` abschließen, dann erneut beobachten. |
| `mem observe: Memory heading must identify exactly one section.` | Die Überschrift fehlt oder kommt zweimal in der Datei vor. | Den genauen, eindeutigen Text der `### `-Überschrift verwenden. |
| `mem observe: Duplicate outcome: this task attempt already supplied a receipt.` | Für diesen Lauf, diese Aufgabe und diesen Versuch gibt es schon einen Beleg. | Nichts zu tun; bei geänderter Erkenntnis `supersedes` bei einem späteren Versuch nutzen. |
| `mem observe: Outcome scope exceeds the accepted task scope.` | Ein Pfad in `scope` liegt außerhalb des deklarierten Umfangs der Aufgabe. | `scope` auf Pfade beschränken, die die Aufgabe besitzt. |
| `... Memory writer lock is occupied. Inspect writer.lock and its owner; do not remove a live lock.` | Ein anderer Prozess hält `.bmad/memory/writer.lock` länger als etwa zwei Sekunden, oder ein Absturz hat sie hinterlassen. | Auf den anderen Schreiber warten. Die Datei nur löschen, wenn sicher kein `mem`-Prozess läuft. |
| `... Memory store is full; archive it explicitly before adding records.` | Ein Speicher hat 2 MiB erreicht. | Die Datei von Hand archivieren oder kürzen und erneut versuchen. |

<a id="examples"></a>
## Beispiele

<a id="example-cli-mem-recall"></a>
### Sich an eine frühere Entscheidung erinnern

Bevor du die Authentifizierung anfasst, soll der Agent prüfen, was das Projekt schon entschieden hat.

**In deinem KI-Assistenten**

```text
Führe `bmad-plus mem recall auth strategy --json` aus und zitiere die drei besten Treffer mit Quelldatei und Abschnitt.
```

**Das solltest du erhalten** Der Befehl gibt ein JSON-Objekt mit `query`, `scope`, `ranking`, `count` und einem nach Wert sortierten Array `results` aus. Jedes Ergebnis ist entweder eine `note` (mit `source` wie `decisions.md`, `ref` als `### `-Überschrift und dem Abschnittstext) oder ein `event` aus dem Journal. Ohne Treffer ist `count` 0 und der Exit-Code bleibt 0.

<a id="example-cli-mem-journal"></a>
### Ein Ergebnis festhalten und ein Muster verstärken

Eine Änderung wurde akzeptiert, und die CI ist grün. Das Gedächtnis soll das festhalten und das leitende Muster stärken.

**In deinem KI-Assistenten**

```text
Schreibe ein Journalereignis für den Agenten forge, Aufgabe „Add login rate limit“, Ergebnis success, CI pass, und verstärke dann das Muster „Rate limit on auth routes“ mit Akzeptanz true und CI pass.
```

**Das solltest du erhalten** `mem write` hängt eine Zeile an `.bmad/memory/journal.ndjson` an und gibt ihre ID aus. `mem reinforce` berechnet eine Belohnung von 1,000 (Akzeptanz 0,3 und CI 0,2, neu normiert), hebt das Elo des Musters bei der ersten Aktualisierung von 1200,0 auf 1216,0 und zeigt einen Mittelwert von 0,667. Eine Übernahme wird erst vorgeschlagen, wenn der Mittelwert bei mindestens 3 Aktualisierungen 0,7 erreicht, und ein Vorschlag wird nur als `PROPOSED` gespeichert.

<a id="example-cli-mem-observe"></a>
### Eine Erkenntnis an abgenommene Arbeit binden

Eine Nexus-Aufgabe, die ein Ratenlimit einführt, wurde geprüft und abgenommen. Die passende Erkenntnis soll diesen Beleg tragen.

**In deinem KI-Assistenten**

```text
Schreibe die Ergebnisdatei für die abgenommene Nexus-Aufgabe T-12 des Laufs <run id>, verknüpft mit der Erkenntnis „Rate limit on auth routes“ in .agents/memory/lessons.md mit Umfang src/auth, und führe dann `bmad-plus mem observe --input` darauf aus sowie `bmad-plus mem outcomes`.
```

**Das solltest du erhalten** `mem observe` gibt `mem observe: <receipt id> recorded; lesson causality remains unmeasured.` aus und hängt den Beleg an `.bmad/memory/outcomes.ndjson` an. `mem outcomes` gibt danach `<receipt id>: accepted-current` aus. Ist die Aufgabe nicht abgenommen, fehlt der Abschnitt oder ist mehrdeutig oder verlässt der Umfang den der Aufgabe, lehnt `observe` mit der Meldung aus der Fehlertabelle ab und schreibt nichts.

**Siehe auch**

- [memory: Zustandsbericht und Export](https://bmad-plus.rochetta.fr/de/docs/reference/cli-memory/)
- [nexus: woher abgenommene Aufgaben kommen](https://bmad-plus.rochetta.fr/de/docs/reference/cli-nexus/)
- [scan: deine Projekte indizieren](https://bmad-plus.rochetta.fr/de/docs/reference/cli-scan/)
- [Projektstruktur](https://bmad-plus.rochetta.fr/de/docs/reference/project-layout/)
- [Fehlerbehebung](https://bmad-plus.rochetta.fr/de/docs/faq/troubleshooting/)

[BMAD+ Dokumentation](https://bmad-plus.rochetta.fr/de/docs/) · [Referenz](https://bmad-plus.rochetta.fr/de/docs/reference/)

[Quellcode auf GitHub](https://github.com/lrochetta/BMAD-PLUS)
