Ir al contenido

Memoria del agente

La IA es buena leyendo código y conversaciones, pero cuando termina la sesión olvida «qué puede hacer en este banco de trabajo». Por eso, una tarea que ya logró una vez (desplegar·compilar·conectarse a la BD) la vuelve a juzgar erróneamente en la siguiente sesión como «no puedo, no tengo credenciales».

La memoria del agente hace que la IA almacene los hechos que ha verificado en un cajón de coincidencia exacta y los recupere automáticamente en la siguiente sesión. No compite con RAG (búsqueda por aproximación semántica), sino que reparte roles: el juicio sobre hechos al cajón, la exploración aproximada a la biblioteca.

Por qué es necesario — partiendo de un incidente real

Sección titulada «Por qué es necesario — partiendo de un incidente real»

El despliegue de Blyck era posible directamente desde este PC (el CLI aws estaba configurado, había historial de despliegues directos) y el procedimiento estaba documentado. Sin embargo, el agente juzgaba erróneamente de forma repetida en cada sesión que «no podía desplegar por falta de credenciales». La causa fue que, mirando solo los comentarios del código, dedujo «paso adicional = yo no puedo».

Al diagnosticarlo, el eslabón débil no era el recuerdo, sino el almacenamiento.

EtapaEstadoFundamento
Recuerdo (recall)CorrectoSi hubiera estado almacenado, se habría leído sin duda
Almacenamiento (capture)Fallo«despliegue posible desde este PC» nunca se persistió

Es decir, no es que no recordara, sino que nunca creó el elemento a recordar. La acción (un s3 cp) parece volátil, pero la capacidad que demuestra («despliegue posible») es un hecho persistente y reutilizable. El fallo en esta distinción era el punto ciego.

  1. La memoria no se mete en la sopa de RAG. Los recuerdos de hechos/capacidades se recuperan por coincidencia exacta, no por búsqueda por aproximación semántica.
  2. El almacenamiento no depende de la consciencia propia. Las acciones exitosas se ascienden automáticamente a candidatas a capacidad (con compuerta de aprobación).
  3. El recuerdo se inyecta automáticamente. Los recuerdos relevantes entran en el contexto sin necesidad de invocación.
  4. Verificar antes de declararse incapaz. Antes de decir «no puedo», consulta la memoria y verifica con una sonda barata.

Analogía — la biblioteca y el cajón del escritorio

Sección titulada «Analogía — la biblioteca y el cajón del escritorio»
  • 📚 Búsqueda en la biblioteca (RAG): acumula todo —código, conversaciones, logs— y «busca cosas parecidas». Es voluminoso y aproximado, por lo que se cuela basura. → Para «¿dónde estaba aquel código parecido de antes?».
  • 🗂️ Cajón de notas sobre el escritorio (memoria): solo unos pocos hechos clave verificados, ordenados. Es exacto y siempre está a la vista. → Para «despliegue posible desde este PC», «no tocar la BD de PROD».

RAG y la memoria no compiten, sino que se reparten el trabajo. El juicio sobre hechos al cajón (primera prioridad), la exploración aproximada a la biblioteca (apoyo).

Los recuerdos se almacenan como registros tipados en una tabla dedicada de workspace.sqlite.

CampoDescripción
typecapability · decision · rule · procedure · fact
scopeworkspace (predeterminado) · global
keyIdentificador de coincidencia exacta (p. ej. deploy:blyck)
bodyCuerpo del hecho legible por humanos
confidence0~1 (verificado=1.0)
proofFundamento (p. ej. «aws sts pasó; s3 cp con éxito»)
statusactive · stale · retired

Almacenamiento (capture) — el eslabón débil por triplicado

Sección titulada «Almacenamiento (capture) — el eslabón débil por triplicado»
MétodoDisparadorBloqueo de basura
ExplícitoHerramienta MCP memory_write(key, body, type, scope)Solo invocación intencional
Ascenso automáticoDetecta eventos de éxito (despliegue·compilación·autenticación·conexión a BD) en el registro de actividad → genera candidataCompuerta de aprobación
Pase de reflexiónAl cerrar el chat / en hitos, resumen de la sesión → extrae candidatas de «¿hechos persistentes aprendidos?»Compuerta de aprobación

Las tres vías entran en el cajón solo tras la aprobación, por lo que no hay ruido de absorción automática al estilo RAG.

Ejemplos de eventos de éxito que el clasificador de ascenso automático eleva a candidatos de capacidad:

  • Autenticación/despliegue externo con éxito (aws … con éxito, gh auth, deploy/publish) → capability
  • Compilación/empaquetado con éxito (npm run dist, tests aprobados) → capability/procedure
  • Conexión a BD/SSH con éxito (credenciales verificadas) → capability
  • Regla dada por el usuario en imperativo («no toques PROD») → rule
  • Lo demasiado trivial o puntual (simple lectura de archivos, etc.) se excluye — para evitar la fatiga de aprobaciones

Recuerdo (recall) — inyección automática

Sección titulada «Recuerdo (recall) — inyección automática»

Cada turno, al ensamblar el contexto, se intercala una etapa de recuperación de memoria.

  1. Coincidencia exacta de key + coincidencia semántica ligera con la consulta actual·panel activo·proyecto.
  2. Los k recuerdos active principales se inyectan automáticamente en el prompt del sistema (sin invocación aparte).
  3. Ponderación por recency·importance + decay → los recuerdos sin uso prolongado pasan de stale a retired.
HerramientaPermisoRol
memory_write(key, body, type, scope)ConfirmaciónAlmacena explícitamente un hecho en el cajón (sobrescribe la misma key)
memory_read(key?/query?)Lectura (auto)Recupera recuerdos por coincidencia exacta de key o coincidencia semántica ligera

Como la mayoría de los recuerdos se gestionan por inyección automática, no es necesario invocar memory_read uno a uno. Se usa para reforzar la consulta de elementos que la inyección automática haya pasado por alto.

Para que el cajón no se hinche, se limpian los recuerdos sin uso prolongado a partir de last_seen.

  • capability · rule · procedure están exentos del decay automático — el objetivo es evitar la recaída del §incidente anterior. Una capacidad verificada una vez no desaparece aunque no se use.
  • Solo decision · fact pasan a stale a los 90 días y a retired a los 180 días.
  • En una consulta explícita, stale revive a active.
[Captura] primer despliegue con éxito → registro de actividad "s3 cp blyck-releases con éxito"
→ el clasificador de ascenso lo detecta → candidata {capability, key:"deploy:blyck",
body:"Este PC puede desplegar directamente: npm run dist → s3 cp → cloudfront invalidate",
proof:"aws sts pasó; s3 cp con éxito"} → [aprobar] → fijada en el cajón
[Recuerdo] siguiente sesión "despliega" → el ensamblaje de contexto inyecta "deploy:blyck" automáticamente
→ inferir "sin credenciales" se vuelve imposible → cero reincidencias

Relación con la memoria de archivos de Claude

Sección titulada «Relación con la memoria de archivos de Claude»

Esta función toma prestada la exactitud y el recuerdo automático de la memoria de archivos de Claude Code (MEMORY.md + *.md, carga automática en cada sesión), pero subsana sus debilidades.

AspectoMemoria de archivos de ClaudeCajón asentado de Blyck
Ubicación de almacenamientoArchivos markdownTabla workspace.sqlite
Disparador de almacenamientoJuicio del agente (manual)Manual + ascenso automático por acción + pase de reflexión
Almacenamiento automático✓ (ascenso por eventos de éxito)
BasuraPocaCasi 0 (UNIQUE key + aprobación)
Prevención de duplicadosEl humano gestiona el índiceUNIQUE(scope, key) automático
decay/limpiezaManualstale/retire basado en last_seen
Conciencia del dominioGenéricaEspecializada en la actividad de Blyck (despliegue·BD·SSH)

La diferencia decisiva es el almacenamiento automático. El incidente anterior ocurrió con la memoria de archivos de Claude activada: el recuerdo funcionaba bien y el eslabón débil era que «el almacenamiento depende del juicio». Blyck dispone de un registro de acciones, el registro de actividad, que le permite ascender automáticamente los eventos de éxito a candidatos de capacidad, algo estructuralmente imposible solo con la memoria de archivos.

  • Los recuerdos entre chats tienen por defecto scope=workspace + filtro de información sensible, por lo que no chocan con el principio de no transferencia entre sesiones globales y de solo lectura.
  • Los secretos no se almacenan en el cuerpo de la memoria (el almacén cifrado del SO + el enmascarado automático son una vía aparte).

P. Si ya hay RAG, ¿por qué hace falta también la memoria? → RAG es aproximación semántica, por lo que se cuela basura en el juicio sobre hechos. Un hecho verificado como «despliegue posible desde este PC» debe recuperarse 1:1 desde el cajón de coincidencia exacta para que sea seguro. Ambos se reparten el trabajo.

P. ¿Tengo que decir «recuerda esto» uno por uno? → No. Puedes almacenar explícitamente con memory_write, pero los eventos de éxito surgen como candidatos de ascenso automático y basta con aprobarlos. Al cerrar el chat, el pase de reflexión también extrae reglas automáticamente.

P. ¿Un recuerdo mal almacenado me va a perseguir para siempre? → La misma key se sobrescribe, y decision/fact se limpian por decay. Un recuerdo de capacidad erróneo puedes actualizarlo con memory_write o retirarlo.

P. Si una capacidad verificada desaparece por falta de uso, ¿no volverá a ocurrir el incidente? → Por eso capability·rule·procedure están exentos del decay automático. Una capacidad verificada una vez permanece en el cajón aunque no se use.