Recordar decisiones y eventos, anotar el trabajo de un agente, reforzar un patrón con señales de recompensa, vincular una lección a trabajo de Nexus aceptado. Opciones, salida, errores.
El pack Memory guarda lo que un proyecto ha aprendido en archivos Markdown: decisiones, lecciones y patrones. bmad-plus mem es la pequeña caja de herramientas determinista que permite a cualquier asistente usar esos archivos de la misma manera, ya se ejecute en Claude Code, Gemini CLI, Codex CLI, Cursor, OpenCode, Aider o Antigravity. Tiene cinco acciones: recall encuentra notas y eventos relevantes, write añade un evento a un diario, reinforce sube o baja la puntuación de un patrón, observe vincula una lección a un trabajo verificado de forma independiente y aceptado, y outcomes lista esos vínculos. No hace preguntas en la terminal ni llama nunca a un modelo, así que un agente puede ejecutarla y analizar el resultado. Esta página es para quien quiere que un agente recuerde con evidencias y para quien audita esa memoria.
Diario de eventos de solo adición, un objeto JSON por línea.
write
.bmad/memory/pattern-scores.json
Puntuación de cada patrón reforzado (una valoración Elo y una distribución Beta).
reinforce
.bmad/memory/promotions.ndjson
Propuestas de promoción. Siempre con estado PROPOSED.
reinforce
.bmad/memory/outcomes.ndjson
Recibos que vinculan una sección de memoria con trabajo de Nexus aceptado.
observe
.bmad/memory/writer.lock
Bloqueo de corta duración que pone en fila a quienes escriben.
toda acción que escribe
decisions.md, lessons.md, patterns.md en .agents/memory/ y .bmad/memory/
Notas humanas, divididas en secciones en cada título ### . Solo lectura.
tú y tus agentes
Cada almacén está limitado a 2 MiB, el de resultados a 1000 recibos, y las rutas deben quedarse dentro del proyecto sin seguir enlaces simbólicos. Una línea dañada del diario se omite al leer, nunca es fatal.
Busca en los eventos del diario y en las secciones ### de decisions.md, lessons.md y patterns.md, tanto en .agents/memory/ como en .bmad/memory/. El ranking es léxico: palabras de la consulta halladas en una entrada, con rendimientos decrecientes para las repeticiones, un bonus por la parte de la consulta cubierta y una normalización por longitud. Los eventos del diario pierden la mitad de su peso cada 30 días. No hace falta ningún servicio de búsqueda ni Python. Con --scope portfolio --portfolio <path> también se busca en la carpeta memory/ de un cerebro de portafolio. Con --ranking evidence (solo ámbito de proyecto, y entonces --context-scope es obligatorio) una nota con un recibo de resultado aceptado válido para las rutas dadas ve su puntuación multiplicada por 1,25; una nota cuyos recibos están todos obsoletos, sustituidos o contradichos se descarta en lugar de volver en silencio; las notas sin ningún recibo se quedan, marcadas unverified.
Añade un evento a .bmad/memory/journal.ndjson con la hora de la llamada, el agente y, si se dan, el asistente, el modelo, la tarea, el resultado y las señales de recompensa pasadas. El id del evento se deriva de la hora, el agente y la tarea, así que es reproducible. Nada del evento es una medición hecha por BMAD+: las señales son lo que declara quien llama.
Reduce las señales a una recompensa entre 0 y 1: --eval pesa 0,5, --accept 0,3 y --ci 0,2, y las señales omitidas se ignoran renormalizando los pesos, de modo que una llamada solo con CI da igualmente una recompensa utilizable. La recompensa mueve la valoración Elo del patrón (empieza en 1200, factor K de 32) y su distribución Beta (empieza en 1 y 1, con olvido para que la evidencia antigua se desvanezca). Cuando la media Beta llega a 0,7 con al menos 3 actualizaciones, se escribe en promotions.ndjson una promoción de candidate a validated, siempre con estado PROPOSED. Aplicarla exige una aprobación humana o de Shield que este comando nunca puede registrar. El resultado indica evidenceStatus: self-reported y rankingEligible: false: un refuerzo es la afirmación de quien llama, no evidencia aceptada.
observe es la única manera de que una lección obtenga evidencia. Lee un archivo JSON y solo escribe un recibo si la tarea de Nexus que nombra está aceptada, su último intento completado, su verificación independiente superada y su evidencia aún vigente, y solo si la sección de memoria que nombra existe exactamente una vez. El recibo guarda la huella de esa sección y la tarea, e indica lessonCausality: unmeasured: BMAD+ no afirma que la lección causara el éxito. outcomes vuelve a comprobar cada recibo con los archivos de hoy e imprime accepted-current o la razón por la que ya no cuenta: superseded, contradictory, stale-memory-section (el texto de la sección cambió), stale-outcome-source (la tarea de Nexus cambió) o unavailable-or-ineligible-source.
Archivo de entrada 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 debe ser decisions.md, lessons.md o patterns.md bajo .agents/memory/ o .bmad/memory/. scope lista de 1 a 30 rutas relativas y debe quedarse dentro del alcance de la tarea aceptada. supersedes y contradicts nombran ids de recibos anteriores que se solapan con el mismo alcance; un id no puede estar en ambos. Un intento de tarea solo puede producir un recibo.
La acción se ejecutó. Un recall sin resultados sigue siendo 0.
1
Acción desconocida, opción obligatoria ausente, valor inválido, almacén bloqueado o cualquier otro fallo. Con --json el error sale por la salida estándar como {"error": "..."}; si no, por el flujo de error como 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
Transcripción ilustrativa, no capturada de una ejecución real. Fuente: tools/cli/commands/memory-journal-cmd.js (plantillas de mensajes de runRecall); las puntuaciones y el texto son inventados
write y luego reinforce (calculado con las fórmulas, ids ilustrativos)Simulado
$ 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)
Transcripción ilustrativa, no capturada de una ejecución real. Fuente: tools/cli/commands/memory-journal-cmd.js (runWrite, runReinforce) y lib/memory-journal.js (computeReward, updatePatternScore); el id y la hora del evento son inventados
Antes de tocar la autenticación quieres que el agente compruebe lo que el proyecto ya decidió.
En tu asistente de IA
Ejecuta `bmad-plus mem recall auth strategy --json` y cita las tres mejores coincidencias con su archivo de origen y su sección.
Lo que deberías obtener El comando imprime un objeto JSON con query, scope, ranking, count y un array results ordenado por puntuación. Cada resultado es una note (con source como decisions.md, ref igual al título ### y el texto de la sección) o un event del diario. Sin coincidencias, count es 0 y el código de salida sigue siendo 0.
Un cambio fue aceptado y la CI está en verde. Quieres que la memoria lo registre y empuje el patrón que lo guio.
En tu asistente de IA
Escribe un evento de diario para el agente forge, tarea «Add login rate limit», resultado success, CI pass, y luego refuerza el patrón «Rate limit on auth routes» con aceptación true y CI pass.
Lo que deberías obtenermem write añade una línea a .bmad/memory/journal.ndjson e imprime su id. mem reinforce calcula una recompensa de 1,000 (aceptación 0,3 y CI 0,2, renormalizados), lleva el Elo del patrón de 1200,0 a 1216,0 en su primera actualización y muestra una media de 0,667. No se propone ninguna promoción hasta que la media llegue a 0,7 con al menos 3 actualizaciones, y una propuesta solo se guarda como PROPOSED.
Una tarea de Nexus que añade un límite de peticiones ha sido verificada y aceptada. Quieres que la lección correspondiente lleve esa evidencia.
En tu asistente de IA
Escribe el archivo de resultado de la tarea de Nexus aceptada T-12 del run <run id>, vinculado a la lección «Rate limit on auth routes» en .agents/memory/lessons.md con alcance src/auth, y luego ejecuta `bmad-plus mem observe --input` sobre él y `bmad-plus mem outcomes`.
Lo que deberías obtenermem observe imprime mem observe: <receipt id> recorded; lesson causality remains unmeasured. y añade el recibo a .bmad/memory/outcomes.ndjson. Después mem outcomes imprime <receipt id>: accepted-current. Si la tarea no está aceptada, la sección falta o es ambigua, o el alcance sale del de la tarea, observe se niega con el mensaje de la tabla de errores y no escribe nada.