Memoria del espacio de trabajo v2 (offline): notas de investigación
Objetivo: espacio de trabajo estilo Clawd (agents.defaults.workspace, predeterminado ~/.openclaw/workspace) donde la “memoria” se almacena como un archivo Markdown por día (memory/YYYY-MM-DD.md) más un pequeño conjunto de archivos estables (p. ej., memory.md, SOUL.md).
Este documento propone una arquitectura de memoria offline-first que mantiene Markdown como la fuente de verdad canónica y revisable, pero agrega recuerdo estructurado (búsqueda, resúmenes de entidades, actualizaciones de confianza) mediante un índice derivado.
¿Por qué cambiar?
La configuración actual (un archivo por día) es excelente para:- registro “append-only”
- edición humana
- durabilidad y auditabilidad respaldadas por git
- captura de baja fricción (“solo escríbalo”)
- recuperación de alto recuerdo (“¿qué decidimos sobre X?”, “¿la última vez que intentamos Y?”)
- respuestas centradas en entidades (“hábleme de Alice / The Castle / warelay”) sin releer muchos archivos
- estabilidad de opiniones/preferencias (y evidencia cuando cambia)
- restricciones temporales (“¿qué era cierto durante nov de 2025?”) y resolución de conflictos
Objetivos de diseño
- Offline: funciona sin red; puede ejecutarse en laptop/Castle; sin dependencia de la nube.
- Explicable: los elementos recuperados deben ser atribuibles (archivo + ubicación) y separables de la inferencia.
- Baja ceremonia: el registro diario sigue siendo Markdown, sin trabajo pesado de esquemas.
- Incremental: v1 es útil solo con FTS; semántica/vector y grafos son mejoras opcionales.
- Amigable para agentes: facilita el “recuerdo dentro de presupuestos de tokens” (devuelve pequeños conjuntos de hechos).
Modelo norte (Hindsight × Letta)
Dos piezas a combinar:- Bucle de control estilo Letta/MemGPT
- mantener un pequeño “núcleo” siempre en contexto (persona + hechos clave del usuario)
- todo lo demás queda fuera de contexto y se recupera mediante herramientas
- las escrituras de memoria son llamadas explícitas a herramientas (append/replace/insert), se persisten y luego se reinyectan en el siguiente turno
- Sustrato de memoria estilo Hindsight
- separar lo observado vs lo creído vs lo resumido
- admitir retener/recordar/reflexionar
- opiniones con confianza que pueden evolucionar con evidencia
- recuperación consciente de entidades + consultas temporales (incluso sin grafos de conocimiento completos)
Arquitectura propuesta (Markdown como fuente de verdad + índice derivado)
Almacén canónico (amigable con git)
Mantener~/.openclaw/workspace como memoria canónica legible por humanos.
Diseño sugerido del espacio de trabajo:
- El registro diario sigue siendo registro diario. No es necesario convertirlo a JSON.
- Los archivos
bank/son curados, producidos por trabajos de reflexión, y aún pueden editarse a mano. memory.mdpermanece “pequeño + tipo núcleo”: las cosas que quiere que Clawd vea en cada sesión.
Almacén derivado (recuerdo de máquina)
Agregar un índice derivado bajo el espacio de trabajo (no necesariamente con seguimiento en git):- esquema SQLite para hechos + enlaces de entidades + metadatos de opiniones
- SQLite FTS5 para recuerdo léxico (rápido, pequeño, offline)
- tabla opcional de embeddings para recuerdo semántico (aún offline)
Retener / Recordar / Reflexionar (bucle operativo)
Retener: normalizar registros diarios en “hechos”
La visión clave de Hindsight que importa aquí: almacene hechos narrativos y autosuficientes, no pequeños fragmentos. Regla práctica paramemory/YYYY-MM-DD.md:
- al final del día (o durante), agregue una sección
## Retaincon 2–5 viñetas que sean:- narrativas (se preserva el contexto entre turnos)
- autocontenidas (tienen sentido por sí solas más adelante)
- etiquetadas con tipo + menciones de entidades
- Prefijo de tipo:
W(mundo),B(experiencia/biográfico),O(opinión),S(observación/resumen; normalmente generado) - Entidades:
@Peter,@warelay, etc. (los slugs mapean abank/entities/*.md) - Confianza de opinión:
O(c=0.0..1.0)opcional
## Retain es la palanca de calidad más sencilla.
Recordar: consultas sobre el índice derivado
El recuerdo debe admitir:- léxico: “encontrar términos/nombres/comandos exactos” (FTS5)
- entidades: “hábleme de X” (páginas de entidades + hechos vinculados a entidades)
- temporal: “qué pasó alrededor del 27 de nov” / “desde la semana pasada”
- opinión: “¿qué prefiere Peter?” (con confianza + evidencia)
kind(world|experience|opinion|observation)timestamp(día fuente, o rango temporal extraído si existe)entities(["Peter","warelay"])content(el hecho narrativo)source(memory/2025-11-27.md#L12etc.)
Reflexionar: producir páginas estables + actualizar creencias
La reflexión es un trabajo programado (diario o latidoultrathink) que:
- actualiza
bank/entities/*.mda partir de hechos recientes (resúmenes de entidades) - actualiza la confianza de
bank/opinions.mdsegún refuerzo/contradicción - opcionalmente propone ediciones a
memory.md(hechos duraderos “tipo núcleo”)
- cada opinión tiene:
- enunciado
- confianza
c ∈ [0,1] - last_updated
- enlaces de evidencia (IDs de hechos que apoyan + contradicen)
- cuando llegan nuevos hechos:
- encontrar opiniones candidatas por solapamiento de entidades + similitud (primero FTS, luego embeddings)
- actualizar la confianza con pequeños deltas; los saltos grandes requieren contradicción fuerte + evidencia repetida
Integración de la CLI: independiente vs integración profunda
Recomendación: integración profunda en OpenClaw, pero mantener una biblioteca central separable.¿Por qué integrar en OpenClaw?
- OpenClaw ya conoce:
- la ruta del espacio de trabajo (
agents.defaults.workspace) - el modelo de sesión + latidos
- patrones de registro + solución de problemas
- la ruta del espacio de trabajo (
- Quiere que el propio agente llame a las herramientas:
openclaw memory recall "…" --k 25 --since 30dopenclaw memory reflect --since 7d
¿Por qué aun así separar una biblioteca?
- mantener la lógica de memoria testeable sin gateway/runtime
- reutilizarla desde otros contextos (scripts locales, futura app de escritorio, etc.)
“S-Collide” / SuCo: cuándo usarlo (investigación)
Si “S-Collide” se refiere a SuCo (Subspace Collision): es un enfoque de recuperación ANN que apunta a buenos compromisos de recuerdo/latencia usando colisiones aprendidas/estructuradas en subespacios (paper: arXiv 2411.14754, 2024). Postura pragmática para~/.openclaw/workspace:
- no empiece con SuCo.
- comience con SQLite FTS + (opcional) embeddings simples; obtendrá la mayoría de las mejoras de UX de inmediato.
- considere soluciones de la clase SuCo/HNSW/ScaNN solo cuando:
- el corpus sea grande (decenas/cientos de miles de fragmentos)
- la búsqueda de embeddings por fuerza bruta sea demasiado lenta
- la calidad de recuerdo esté significativamente limitada por la búsqueda léxica
- SQLite FTS5 + filtros de metadatos (cero ML)
- Embeddings + fuerza bruta (funciona sorprendentemente lejos si el número de fragmentos es bajo)
- Índice HNSW (común, robusto; requiere un binding de biblioteca)
- SuCo (nivel investigación; atractivo si hay una implementación sólida que pueda incrustar)
- ¿cuál es el mejor modelo de embeddings offline para “memoria de asistente personal” en sus máquinas (laptop + escritorio)?
- si ya tiene Ollama: incruste con un modelo local; de lo contrario, incluya un modelo pequeño de embeddings en la cadena de herramientas.
Piloto útil más pequeño
Si quiere una versión mínima, pero aún útil:- Agregue páginas de entidades
bank/y una sección## Retainen los registros diarios. - Use SQLite FTS para el recuerdo con citas (ruta + números de línea).
- Agregue embeddings solo si la calidad de recuerdo o la escala lo exigen.
Referencias
- Conceptos de Letta / MemGPT: “bloques de memoria núcleo” + “memoria de archivo” + memoria autoeditable impulsada por herramientas.
- Informe técnico de Hindsight: “retener / recordar / reflexionar”, memoria de cuatro redes, extracción de hechos narrativos, evolución de la confianza en opiniones.
- SuCo: arXiv 2411.14754 (2024): “Subspace Collision”, recuperación de vecinos más cercanos aproximada.