ERINYS
ERINYS — Memoria reflexiva para agentes de IA
A partir de recuerdos que existieron, incluso crea recuerdos que nunca existieron.
Los sistemas de memoria para agentes de IA siempre han imitado la memoria humana. A corto plazo, a largo plazo, episódica, semántica: categorías de libro de texto aplicadas directamente a las implementaciones.
Algo siempre se sentía mal.
Los humanos olvidan. Pero los sistemas de memoria existentes no. Crecen sin cesar, sirviendo hechos obsoletos con el mismo peso que los frescos. Los humanos notan: "espera, ¿no dijiste algo diferente antes?". Pero los sistemas de memoria sobrescriben silenciosamente. Los humanos conectan dos experiencias no relacionadas y piensan: "oh, puedo usar eso aquí". Pero los sistemas de memoria solo almacenan y recuperan.
Lo que necesitaba ser imitado no era la taxonomía de la memoria. Era el comportamiento.
Esa incomodidad es lo que invocó a ERINYS.
ERINYS es un perro guardián. Recuerda, olvida, cuestiona y muerde.
Qué hace diferente a ERINYS
Olvido. La mayoría de los sistemas de memoria solo acumulan. ERINYS degrada los recuerdos con el tiempo siguiendo la curva del olvido de Ebbinghaus. El ruido antiguo se hunde. El conocimiento accedido frecuentemente flota. Los resultados de búsqueda se mantienen relevantes sin curación manual.
Destilación. Una corrección de errores específica ("faltaba la bandera JWT httpOnly") genera automáticamente tres capas: el hecho concreto → un patrón reutilizable ("los nuevos endpoints necesitan una lista de verificación de seguridad") → un principio universal ("los valores predeterminados de seguridad deben ser seguros sin necesidad de activación"). Ningún otro sistema de memoria hace esto.
Ciclo de ensueño. Dos recuerdos se envían a un LLM: "¿hay alguna conexión?". Los pares candidatos se seleccionan por similitud semántica: lo suficientemente cerca como para estar relacionados (coseno > 0.65), lo suficientemente lejos como para no ser redundantes (< 0.90). Programado durante la noche mediante cron, encuentra conexiones que nunca pensarías en buscar. Sin magia, solo comparación automatizada de notas a escala.
Filosofía de diseño
La memoria tiene capas
No toda la memoria es igual. ERINYS organiza el conocimiento por nivel de abstracción:
Concreto — lo que sucedió. "Faltaba la bandera JWT httpOnly en
/api/auth."Abstracto — patrones a partir de hechos. "Los nuevos endpoints de API necesitan una lista de verificación de encabezados de seguridad."
Meta — principios a partir de patrones. "Los valores predeterminados de seguridad deben ser seguros sin activación manual."
Una sola corrección de errores genera los tres a través de la destilación. La capa meta acumula principios que se transfieren entre proyectos y pilas tecnológicas.
El olvido es una característica
Cada recuerdo tiene una puntuación de fuerza que decae con el tiempo. Un recuerdo guardado hace 6 meses tiene un rango inferior a uno guardado ayer. Los recuerdos accedidos frecuentemente resisten la degradación: la recuperación repetida los refuerza.
Cuando la fuerza cae por debajo de un umbral, el recuerdo se convierte en un candidato para la poda. La base de datos se mantiene ligera. La búsqueda se mantiene relevante.
Los hechos cambian. La historia no debería desaparecer
Cuando la información se actualiza ("nos mudamos de AWS a GCP"), ERINYS no sobrescribe. Crea una cadena de reemplazo: el hecho antiguo se marca como reemplazado pero se conserva. Puedes preguntar "¿qué creíamos en marzo?" y obtener la respuesta que era cierta entonces.
Las contradicciones deben ser detectadas
Si la memoria contiene tanto "usar PostgreSQL" como "usar SQLite", ERINYS detecta el conflicto. En lugar de cambiar silenciosamente, el agente pregunta: "anteriormente elegiste PostgreSQL, ¿ha cambiado el requisito?".
La búsqueda encuentra significado, no solo palabras clave
Dos búsquedas se ejecutan simultáneamente y fusionan los resultados:
Búsqueda por palabras clave (FTS5) — coincidencia exacta de términos.
Búsqueda vectorial (sqlite-vec) — similitud semántica. "autenticación" encuentra "inicio de sesión", "JWT", "tokens de sesión".
Los resultados se fusionan mediante Reciprocal Rank Fusion (RRF). Alto en ambos = puntuación más alta.
Todo permanece local
Archivo SQLite único. Sin APIs en la nube. Sin claves de API. Sin suscripciones. Capaz de funcionar sin conexión. La memoria de tu agente nunca sale de tu máquina.
Casos de uso
1. Memoria entre sesiones para agentes de codificación
# Agent saves a learning after fixing a bug
erinys_save(
title="Fixed JWT httpOnly flag missing",
content="Cookie was accessible via JS. Added httpOnly: true, secure: true, sameSite: strict.",
type="bugfix",
project="my-app"
)
# Next week, similar task — agent searches memory
erinys_search(query="authentication cookie security", project="my-app")
# → Returns the JWT fix with relevance score2. Detección de contradicciones
erinys_save(title="Database choice", content="Using SQLite for simplicity", project="my-app")
erinys_conflict_check(observation_id=42)
# → "⚠️ Conflicts with #18: 'Using PostgreSQL for production reliability'"3. Ciclo de ensueño — Síntesis de conocimiento nocturna
erinys_dream(max_collisions=10)
# Picks memory pairs in the "sweet spot" (cosine 0.65–0.90)
# Memory A: "RTK reduces token usage by 60-90%"
# Memory B: "Bootstrap Gate takes 3 seconds due to multiple script calls"
# → Insight: "Apply RTK prefix to Bootstrap Gate scripts to reduce overhead"4. Consultas temporales
erinys_timeline(query="deployment target", as_of="2026-03-01")
# → "AWS EC2 (decided 2026-02-15)"
erinys_timeline(query="deployment target", as_of="2026-04-01")
# → "GCP Cloud Run (superseded AWS on 2026-03-20)"5. Destilación de conocimiento
erinys_save(title="Forgot CORS headers on new endpoint", type="bugfix", ...)
erinys_distill(observation_id=50, level="meta")
# → concrete: "CORS headers missing on /api/v2/users endpoint"
# → abstract: "New API endpoints need a CORS review checklist"
# → meta: "Security concerns should be opt-out, not opt-in"6. Exportación a Obsidian
erinys_export(format="markdown")
# → Generates .md files with [[wikilinks]]
# Drop into Obsidian → instant knowledge graphInicio rápido
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# Run as MCP server (stdio)
python -m erinys_memory.server
# Run tests
PYTHONPATH=src pytest tests/ -vConfiguración de MCP
Claude Desktop / Claude Code
{
"mcpServers": {
"erinys": {
"command": "/path/to/ERINYS-mem/.venv/bin/python3",
"args": ["-m", "erinys_memory.server"],
"env": {
"ERINYS_DB_PATH": "~/.erinys/memory.db"
}
}
}
}Gemini (Antigravity)
Añadir a ~/.gemini/antigravity/settings.json bajo mcpServers:
{
"erinys": {
"command": "/path/to/ERINYS-mem/.venv/bin/python3",
"args": ["-m", "erinys_memory.server"],
"env": {
"ERINYS_DB_PATH": "~/.erinys/memory.db"
}
}
}Variables de entorno
Variable | Predeterminado | Descripción |
|
| Ruta de la base de datos SQLite |
|
| Modelo fastembed |
Herramientas (25)
Núcleo
erinys_save— Guardar observación (con upsert de topic_key)erinys_get— Obtener por ID (contenido completo, sin truncar)erinys_update— Actualización parcialerinys_delete— Eliminar con cascada FKerinys_search— Búsqueda híbrida RRF (FTS5 + vector)erinys_save_prompt— Guardar prompt del usuarioerinys_recall— Observaciones recienteserinys_context— Recuperación de contexto de sesiónerinys_export— Exportación markdown compatible con Obsidianerinys_backup— Copia de seguridad de SQLiteerinys_stats— Estadísticas de la base de datos
Grafo
erinys_link— Crear borde tipadoerinys_traverse— Recorrido de grafo BFSerinys_prune— Podar bordes débiles/degradados
Temporal
erinys_reinforce— Aumentar la fuerza de la observaciónerinys_supersede— Versionar una observaciónerinys_timeline— Consultar según marca de tiempoerinys_conflict_check— Detectar contradicciones
Ciclo de ensueño
erinys_collide— Colisionar dos observaciones mediante LLMerinys_dream— Ciclo de colisión por lotes
Destilación
erinys_distill— Abstracción de 3 granularidades (concreto → abstracto → meta)
Lotes y Evaluación
erinys_batch_save— Guardado masivo con enlace automáticoerinys_eval— Métricas de calidad inspiradas en LOCOMO
Sesión
erinys_session_start— Iniciar sesiónerinys_session_end— Finalizar sesión con resumenerinys_session_summary— Guardar resumen estructurado
Cómo se compara ERINYS
Característica | ERINYS | Mem0 | Memoria MCP oficial |
Búsqueda híbrida (palabra clave + vector) | ✅ FTS5 + sqlite-vec RRF | ✅ Vector + grafo | ❌ Solo grafo de conocimiento |
Olvido por decaimiento temporal | ✅ Curva de Ebbinghaus | ⚠️ Puntuación de prioridad | ❌ |
Destilación de 3 niveles (concreto → abstracto → meta) | ✅ | ❌ | ❌ |
Ciclo de ensueño (perspectiva basada en colisión) | ✅ | ❌ | ❌ |
Detección de contradicciones | ✅ | ⚠️ Sobrescribe mediante resolvedor | ❌ |
Consultas temporales ("¿qué creíamos en marzo?") | ✅ Cadena de reemplazo | ⚠️ Invalidación de grafo | ❌ |
Local-first (sin API en la nube) | ✅ Archivo único SQLite | ❌ Predeterminado en la nube | ✅ |
Exportación a Obsidian | ✅ [[wikilinks]] | ❌ | ❌ |
Auto-destilación al guardar | ✅ | ❌ | ❌ |
Nativo MCP | ✅ 25 herramientas | ✅ | ✅ |
Autoevaluación (métricas LOCOMO) | ✅ | ❌ | ❌ |
TL;DR — La mayoría de los servidores de memoria almacenan y recuperan. ERINYS también olvida, destila y sueña.
Arquitectura
┌──────────────────────────┐
│ FastMCP Server │ 25 tools, unified envelope
├──────────────────────────┤
│ search.py │ graph.py │ RRF hybrid │ typed edges
│ decay.py │ session.py │ Ebbinghaus │ lifecycle
│ temporal.py│collider.py │ versioning │ cross-pollination
│ distill.py │ db.py │ abstraction│ SQLite + vec
├──────────────────────────┤
│ embedding.py │ fastembed (BAAI/bge-small-en-v1.5)
├──────────────────────────┤
│ SQLite + FTS5 + vec0 │ Local-first, no network at runtime
└──────────────────────────┘Hoja de ruta
[ ] Demonio de ensueño — Ejecución automática en segundo plano del Ciclo de ensueño
[x] Auto-destilación al guardar — Activar destilación de 3 granularidades en cada guardado
[ ] Auto-poda — GC de observaciones degradadas cuando la BD excede el umbral de tamaño
[ ] CLI lista para Cron —
erinys dream --max 10para síntesis nocturna programada[ ] Paquete PyPI —
pip install erinys-memory[ ] Soporte multi-agente — Memoria con alcance por identidad de agente
Licencia
MIT
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/GhostyAI-HA/ERINYS-mem'
If you have feedback or need assistance with the MCP directory API, please join our Discord server