YourMemory
Memoria persistente para agentes de IA con decaimiento por curva de olvido de Ebbinghaus, recuperación híbrida BM25 + vectorial + grafo de conocimiento, razonamiento temporal y un panel de control local. 89.4% Recall@5 en LongMemEval.
Documentación

YourMemory
Tu IA tiene la memoria de un pez dorado. Ya no más.
Memoria persistente y automejorable para agentes de IA, basada en la ciencia de cómo recuerdan los humanos.
▶ Prueba la demo interactiva en vivo · Sitio web · Benchmarks
El problema
Cada mañana tu agente de IA te trata como a un extraño. El mismo contexto reexplicado. Las mismas preferencias olvidadas. Cada sesión comienza desde cero.
La mayoría de las herramientas de "memoria" conectan una base de datos vectorial a un agente y lo llaman listo, pero eso es solo almacenamiento. Acumula casi duplicados hasta que la recuperación se ahoga en ruido. Un pez dorado con una pecera más grande.
YourMemory es diferente: memoria que funciona como un cerebro, no como una base de datos.
flowchart LR
A["🧠 You tell your<br/>AI something"] --> B["Extract durable<br/>facts"]
B --> C["Dedup + embed<br/>+ graph-link"]
C --> D[("Memory<br/>store")]
D -->|"related facts pile up"| E["✨ Consolidate<br/>N → 1 summary"]
D -->|"stale + unused"| F["📉 Decay<br/>+ prune"]
D -->|"new session"| G["♻️ Recall<br/>hybrid + graph"]
E --> D
G --> H["🤖 Your agent<br/>picks up where<br/>it left off"]
style D fill:#0a2540,stroke:#19cdff,color:#fff
style E fill:#0c2b3a,stroke:#5eead4,color:#fff
style H fill:#0c2b3a,stroke:#19cdff,color:#fff
✨ Qué lo hace diferente
| Característica | Qué hace | |
|---|---|---|
| 🧠 | Consolidación | Cuando se acumulan suficientes hechos relacionados, se comprimen en un resumen limpio y los originales se archivan. La memoria se vuelve más nítida con el tiempo, no más abultada. |
| 📉 | Decaimiento biológico | Cada memoria envejece según una curva de olvido de Ebbinghaus. Los hechos obsoletos y no utilizados se desvanecen; los importantes y recordados con frecuencia persisten. |
| 🔗 | Grafo de entidades | Las memorias se vinculan por personas, lugares y conceptos compartidos, de modo que la recuperación saca a la luz lo que olvidaste pedir. |
| ♻️ | Sobrevive a los reinicios de contexto | Cuando la ventana de contexto se compacta, YourMemory devuelve el contexto de trabajo, sin necesidad de releer archivos para saber dónde estabas. |
| 🔒 | Registro de auditoría a prueba de manipulaciones | Cada lectura/escritura/eliminación se registra en un libro mayor encadenado por hash. Altera un registro y la cadena se rompe. |
| 👥 | Pools de memoria de equipo | Memoria compartida basada en roles, para que los agentes de todo un equipo se basen en el mismo conocimiento institucional, manteniendo las memorias privadas como privadas. |
| 🛡️ | Derechos de datos integrados | Exportación con un comando (derecho de acceso) y derecho al olvido (purga), además de controles alineados con SOC 2. |
| 🔌 | Nativo MCP y local primero | Funciona con Claude, Cursor, Cline, Windsurf o cualquier cliente MCP. Se ejecuta completamente en tu máquina, sin clave API, nada sale de tu sistema. |
Un comando para instalar. DuckDB por defecto (cero configuración), Postgres + pgvector para equipos.
Tabla de contenidos
- 🏆 Benchmarks
- 🚀 Inicio rápido
- 🧠 Cómo funciona la memoria
- 🔒 Confianza y registro de auditoría
- 👥 Pools de memoria de equipo
- 🛡️ Derechos de datos y cumplimiento
- 🎛️ Paneles
- 🔧 Herramientas MCP
- ⚡ Pregunta sin llamada LLM
- 🔀 Proxy API: memoria garantizada
- 🏗️ Arquitectura y stack
- 🩺 Solución de problemas
- 🤝 Contribuciones
🏆 Benchmarks
Tres conjuntos de datos externos. Cada número es reproducible de forma independiente: el código de benchmark vive en el repositorio. Metodología completa en BENCHMARKS.md.
LoCoMo-10: memoria conversacional de múltiples sesiones
xychart-beta
title "Recall@5 · LoCoMo-10 (higher is better)"
x-axis ["Mem0", "Zep Cloud", "Supermemory", "YourMemory"]
y-axis "Recall@5 percent" 0 --> 70
bar [18, 28, 31, 59]
2× mejor recuperación que Zep Cloud en las 10 muestras. *Supermemory y Mem0 agotaron las cuotas del nivel gratuito a mitad del benchmark; las puntuaciones se calcularon sobre los 1.534 pares completos.
LongMemEval-S: 500 preguntas, ~53 sesiones de distracción cada una
El benchmark estándar más difícil para memoria a largo plazo. Cada pregunta está enterrada en ~53 sesiones.
| Métrica | Puntuación |
|---|---|
| Recall@5 (cualquier sesión dorada en el top-5) | 89,4% |
| Recall-all@5 (todas las sesiones doradas en el top-5) | 84,8% |
| nDCG@5 (calidad de ranking) | 87,4% |
HotpotQA: 200 preguntas de múltiples saltos
| Sistema | BOTH_FOUND@5 |
|---|---|
| YourMemory (vector + BM25 + grafo de entidades) | 71,5% |
| YourMemory (sin aristas de entidades) | 59,5% |
Las aristas del grafo de entidades añaden +12 pp: atraviesan del Hecho 1 al Hecho 2 incluso cuando el Hecho 2 tiene baja similitud de embedding con la consulta.
Escrito: Construí decaimiento de memoria para agentes de IA usando la curva de olvido de Ebbinghaus
🚀 Inicio rápido
Python 3.11–3.14. Sin Docker, sin configuración de base de datos. Toda la memoria se almacena localmente en ~/.yourmemory/.
pip install yourmemory
yourmemory-register <your-token>
yourmemory-setup
Obtén tu token: visita yourmemoryai.xyz → ingresa tu correo → verifica con un código de 6 dígitos → copia tu token.
yourmemory-setup detecta y configura automáticamente Claude Code, Claude Desktop, Cursor, Windsurf y Cline, y luego pregunta qué backend usar:
- DuckDB: cero configuración, un solo archivo local (predeterminado)
- Postgres: compartido / producción; tú proporcionas un
DATABASE_URL(necesita la extensión pgvector)
Opcional: extracción local más inteligente: YourMemory funciona de fábrica con heurísticas integradas. Para una extracción de hechos de mayor calidad y totalmente local, instala Ollama y
yourmemory-setupdescarga el modelo (qwen2.5:7b, ~4,7 GB) automáticamente. ¿Prefieres la nube? ConfiguraYOURMEMORY_EXTRACT_BACKEND=anthropic.
O instala desde un binario: no se requiere Python
¿Prefieres no tocar pip? Toma el binario independiente para tu plataforma desde la última versión:
| Plataforma | Recurso |
|---|---|
| macOS (Apple Silicon) | yourmemory-macos-arm64.tar.gz |
| macOS (Intel) | yourmemory-macos-x86_64.tar.gz |
| Linux (x86-64) | yourmemory-linux-x86_64.tar.gz |
| Windows (x86-64) | yourmemory-windows-x86_64.exe.zip |
# macOS / Linux — download, extract, run
tar -xzf yourmemory-macos-arm64.tar.gz
./yourmemory-macos-arm64 register <your-token>
./yourmemory-macos-arm64 setup
./yourmemory-macos-arm64 # start the server
Un solo ejecutable maneja todos los comandos: register, setup, ask "<question>", path y (sin argumentos) inicia el servidor.
Totalmente autocontenido y sin conexión: el binario incluye Python, cada dependencia y ambos modelos de ML (el modelo de embedding + spaCy). No se descarga nada en la primera ejecución. La contrapartida es el tamaño (~2 GB). Construye el tuyo con un solo comando: ./build-binary.sh — y los binarios de lanzamiento multiplataforma se producen automáticamente mediante el flujo de compilación.
🧠 Cómo funciona la memoria
YourMemory trata la memoria como un sistema vivo: crece, consolida, olvida y conecta, como lo hace un cerebro.
Consolidación — N → 1
La mayoría de las herramientas de memoria solo siguen creciendo. YourMemory observa grupos de hechos relacionados y, una vez que se acumulan suficientes, los comprime en un único resumen limpio, archivando los originales (nunca los elimina, así que nada se pierde).
flowchart LR
subgraph before [Related facts pile up]
A1["Railway uses Nixpacks"]
A2["Railway on Pro plan"]
A3["Railway env vars hold<br/>the Postgres URL"]
A4["Deploys on Railway<br/>with Postgres"]
end
before --> C{"cluster +<br/>LLM summarize"}
C --> S["✨ Summary<br/>Deploys on Railway (Pro,<br/>Nixpacks) with Postgres<br/>via env vars"]
C -.->|"archived, recoverable"| ARC[("archive")]
style S fill:#0a2540,stroke:#5eead4,color:#fff
style C fill:#0c2b3a,stroke:#19cdff,color:#fff
Ejemplo real de un almacén de producción: 444 memorias → 16 resúmenes — el mismo conocimiento, una fracción del ruido. La consolidación es impulsada por eventos (se activa cuando se acumulan memorias relacionadas), no un trabajo nocturno ciego.
Decaimiento: la curva de olvido
La fuerza de la memoria decae exponencialmente. La importancia y la frecuencia de recuperación ralentizan ese decaimiento:
effective_λ = base_λ × (1 − importance × 0.8)
strength = clamp(importance × e^(−effective_λ × active_days) × (1 + recall_count × 0.2), 0, 1)
active_days cuenta solo los días en que estuviste activo: las vacaciones no causan pérdida de memoria. Las memorias por debajo de la fuerza 0.05 se podan automáticamente. Cada categoría envejece a su propio ritmo:
| Categoría | Vida media | Mejor para |
|---|---|---|
strategy | ~38 días | Patrones que funcionaron, decisiones arquitectónicas |
fact | ~24 días | Preferencias, identidad, conocimiento estable |
assumption | ~19 días | Contexto inferido, creencias inciertas |
failure | ~11 días | Errores, enfoques incorrectos, problemas específicos del entorno |
Poda consciente de la cadena: una memoria decaída se mantiene viva si algún vecino del grafo sigue siendo fuerte: el contexto de soporte sobrevive incluso cuando rara vez se consulta directamente.
Recuperación híbrida: vector + BM25 + grafo
La recuperación se ejecuta en dos rondas para que aparezca tanto lo que pediste como lo que olvidaste pedir:
flowchart LR
Q["query"] --> R1["Vector + BM25<br/>hybrid search"]
R1 --> R2["Graph expansion<br/>(what you forgot to ask)"]
R2 --> S["rank by<br/>similarity × strength"]
S --> OUT["🎯 Ranked memories"]
style OUT fill:#0a2540,stroke:#19cdff,color:#fff
Deduplicación consciente del sujeto se ejecuta antes de cada almacenamiento: incorpora el sujeto de cada oración para que "Sachit uses DuckDB" y "YourMemory uses DuckDB" permanezcan separados (entidades diferentes), mientras que "YourMemory uses DuckDB" y "YourMemory stores data in DuckDB" se fusionan (misma entidad). Sin listas de palabras codificadas; se generaliza a cualquier idioma.
🔒 Confianza y registro de auditoría
Las empresas no dejarán que una caja negra opaca almacene sus datos. Por eso, cada operación — lectura, escritura, actualización, eliminación, consolidación — se agrega a un registro de auditoría encadenado por hash y a prueba de manipulaciones.
flowchart LR
E0["GENESIS"] --> E1
subgraph E1 [Event 1]
H1["row_hash =<br/>sha256(prev + data)"]
end
E1 --> E2
subgraph E2 [Event 2]
H2["row_hash =<br/>sha256(#1.hash + data)"]
end
E2 --> E3
subgraph E3 [Event 3]
H3["row_hash =<br/>sha256(#2.hash + data)"]
end
E3 --> V{"GET /audit/verify"}
V -->|chain intact| OK["✅ verified"]
V -->|any row altered| BAD["❌ chain breaks<br/>at that row"]
style OK fill:#0a2540,stroke:#5eead4,color:#fff
style BAD fill:#3a0c14,stroke:#fb7185,color:#fff
Cada fila registra la marca de tiempo, el actor (usuario + agente), la acción, la operación, la memoria objetivo, la fuente (http vs mcp) y el hash de la fila anterior. Cambia cualquier registro histórico y verify_chain() señala exactamente dónde se rompió la cadena.
GET /audit # browse the trail (filter by user / action / operation)
GET /audit/verify # cryptographically verify the chain is untampered
POST /audit/prune # retention-based cleanup (90-day minimum, never lower)
El registro de auditoría es fail-open: nunca bloquea una operación de memoria — y los eventos de lectura/listado del bucle de renderizado del panel se excluyen, para que el rastro siga siendo señal, no ruido.
👥 Pools de memoria de equipo
Dale a los agentes de todo un equipo un cerebro compartido, sin filtrar el contexto privado de nadie. Las memorias son compartidas (visibles para el pool) o privadas (visibles solo para su propietario).
flowchart TB
P(("🧠 Team Pool<br/>shared memory"))
A["Alice's agent"] <-->|shared| P
B["Bob's agent"] <-->|shared| P
C["Carol's agent"] <-->|shared| P
A -. private .-> AP["🔒 Alice-only"]
B -. private .-> BP["🔒 Bob-only"]
style P fill:#0a2540,stroke:#19cdff,color:#fff
style AP fill:#0c1424,stroke:#5a6b80,color:#8294a8
style BP fill:#0c1424,stroke:#5a6b80,color:#8294a8
El acceso basado en roles se aplica por agente: lo que aprende el agente de un ingeniero beneficia al equipo completo al instante; el contexto sensible permanece limitado a su propietario.
POST /pools # create a pool
POST /pools/{id}/members # add a member (with role)
POST /pools/{id}/memories # contribute a shared memory
POST /pools/{id}/retrieve # recall across the pool
🛡️ Derechos de datos y cumplimiento
Porque la memoria que almacena datos reales necesita los controles para que se le confíen:
| Derecho | Endpoint | Qué hace |
|---|---|---|
| Acceso (exportación DSAR) | GET /users/{id}/export | Exportación completa de todo lo almacenado para un usuario |
| Borrado (derecho al olvido) | DELETE /users/{id}/memories | Purga con un comando de las memorias de un usuario |
| Portabilidad | POST /users/{id}/import | Reimportar una exportación anterior |
| Recuperabilidad | GET /users/{id}/archive | Recuperar los originales consolidados |
Combinados con el registro de auditoría encadenado por hash y el piso de retención de 90 días, estos se asignan directamente a los controles documentados en SECURITY.md (alineado con SOC 2).
🎛️ Paneles
Dos interfaces de navegador integradas: sin configuración adicional, se inician automáticamente con el servidor.
Panel de memoria — http://localhost:3033/ui
Una vista completa de lectura/escritura con pestañas Memorias · Auditoría · Pools: barra de estadísticas (Fuerte / Desvaneciéndose / Cerca de poda), pestañas por agente, tarjetas de memoria con barras de fuerza en vivo, filtros de categoría, el registro de auditoría y gestión de pools.
Visualizador de grafos — http://localhost:3033/graph
Un mapa interactivo de fuerza dirigida de cómo se conectan las memorias: memoria raíz como nodo brillante, vecinos codificados por color según categoría, grosor de arista = fuerza de conexión. Arrastra, acerca y haz clic en cualquier nodo para ver el contenido completo.
http://localhost:3033/graph?memoryId=42&userId=alex&depth=2
🔧 Herramientas MCP
Tres herramientas, llamadas por tu IA automáticamente.
| Herramienta | Cuándo la llama tu IA | Qué hace |
|---|---|---|
recall_memory(query, current_path?) | Inicio de cada tarea | Muestra memorias clasificadas por similitud × fuerza de decaimiento; impulso espacial para memorias con coincidencia de ruta |
store_memory(content, importance, category?, context_paths?) | Después de aprender algo nuevo | Incorpora, deduplica, almacena con decaimiento; etiqueta rutas de archivo/directorio opcionales |
update_memory(id, new_content, importance) | Cuando un hecho almacenado está desactualizado | Reincorpora y reemplaza; registra el cambio en el registro de auditoría |
# Store with spatial context
store_memory(
"Alex prefers tabs over spaces in Python",
importance=0.9, category="fact",
context_paths=["/projects/backend"],
)
# Next session — spatial boost fires when working in that directory
recall_memory("Python formatting", current_path="/projects/backend")
# → {"content": "Alex prefers tabs over spaces in Python", "strength": 0.87}
⚡ Pregunta sin llamada LLM
El único sistema de memoria que puede responder preguntas sin hacer ninguna llamada API LLM:
yourmemory ask "what database does this project use"
# → YourMemory uses DuckDB locally and Postgres in production.
yourmemory ask "how do I fix a kubernetes deployment"
# → Not enough memory context to answer without an LLM.
Cuando la memoria es lo suficientemente fuerte, responde al instante: cero tokens, cero costo de nube, cero latencia. Cuando no lo es, declina limpiamente en lugar de alucinar. Tu consulta nunca sale de tu máquina.
🔀 Proxy API: memoria garantizada
Las herramientas MCP se llaman a discreción de la IA. El proxy API elimina esa incertidumbre: intercepta cada llamada LLM, inyecta memorias relevantes automáticamente y maneja store_memory / update_memory sin configuración de modelo.
Inicia el servidor (yourmemory), luego apunta tu cliente a localhost:3033:
from anthropic import Anthropic
client = Anthropic(
api_key="sk-ant-...",
base_url="http://localhost:3033/proxy/anthropic",
default_headers={"X-YourMemory-User": "alex"}, # per-user memory
)
# Memory is injected automatically — no other changes needed
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[{"role": "user", "content": "What database do I use?"}],
)
OpenAI funciona de manera idéntica mediante base_url="http://localhost:3033/proxy/openai".
🏗️ Arquitectura y Stack
flowchart LR
C["Your AI client<br/>Claude · Cursor · any MCP"] <--> Y["🧠 YourMemory"]
Y --> M[("Memory<br/>store")]
Y --> A[("Audit<br/>ledger")]
style Y fill:#0a2540,stroke:#19cdff,color:#fff
style M fill:#0c1a2c,stroke:#5eead4,color:#fff
style A fill:#0c1a2c,stroke:#5eead4,color:#fff
| Componente | Rol |
|---|---|
| DuckDB | Almacén vectorial predeterminado: configuración cero, similitud coseno nativa |
| PostgreSQL + pgvector | Opcional: para equipos o grandes conjuntos de datos |
| NetworkX | Backend de grafo predeterminado (~/.yourmemory/graph.pkl) |
| Neo4j | Backend de grafo opcional |
| sentence-transformers | Embeddings locales (multi-qa-mpnet-base-dot-v1, 768 dimensiones) |
| spaCy | PNL local para deduplicación y extracción de entidades |
| APScheduler | Decaimiento y poda automáticos |
🩺 Solución de problemas
Las escrituras se cuelgan / agotan el tiempo (bloqueo de escritor único de DuckDB). Si el servidor MCP y el servidor HTTP se ejecutan a la vez, compiten por el bloqueo de escritura de DuckDB. Solución:
pkill -f yourmemory 2>/dev/null || true
rm -f ~/.yourmemory/memories.duckdb.wal ~/.yourmemory/memories.duckdb.lock 2>/dev/null || true
# restart your client
¿Ejecutas Claude Desktop (MCP) y Claude Code (hooks) simultáneamente? Usa SQLite en su lugar: maneja lectores/escritores concurrentes de forma limpia:
DATABASE_URL=sqlite:///~/.yourmemory/memories.db
🤝 Contribuciones
Se aceptan PRs — consulta CONTRIBUTORS.md.
📚 Referencias de conjuntos de datos
- LoCoMo — Maharana et al. (2024)
- LongMemEval — Wu et al. (2024)
- HotpotQA — Yang et al. (2018)
📄 Licencia
Copyright 2026 Sachit Misra — Licenciado bajo CC-BY-NC-4.0.
Gratuito para uso personal, educación, investigación académica y proyectos de código abierto. El uso comercial requiere un acuerdo escrito por separado → mishrasachit1@gmail.com
Dale a tu IA una memoria que valga la pena conservar.
pip install yourmemory