Skip to main content
Glama

ERINYS — Memoria reflexiva para agentes de IA

🇯🇵 日本語版 / Japanese

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 score

2. 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 graph

Inicio 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/ -v

Configuració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

ERINYS_DB_PATH

~/.erinys/memory.db

Ruta de la base de datos SQLite

ERINYS_EMBEDDING_MODEL

BAAI/bge-small-en-v1.5

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 parcial

  • erinys_delete — Eliminar con cascada FK

  • erinys_search — Búsqueda híbrida RRF (FTS5 + vector)

  • erinys_save_prompt — Guardar prompt del usuario

  • erinys_recall — Observaciones recientes

  • erinys_context — Recuperación de contexto de sesión

  • erinys_export — Exportación markdown compatible con Obsidian

  • erinys_backup — Copia de seguridad de SQLite

  • erinys_stats — Estadísticas de la base de datos

Grafo

  • erinys_link — Crear borde tipado

  • erinys_traverse — Recorrido de grafo BFS

  • erinys_prune — Podar bordes débiles/degradados

Temporal

  • erinys_reinforce — Aumentar la fuerza de la observación

  • erinys_supersede — Versionar una observación

  • erinys_timeline — Consultar según marca de tiempo

  • erinys_conflict_check — Detectar contradicciones

Ciclo de ensueño

  • erinys_collide — Colisionar dos observaciones mediante LLM

  • erinys_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ático

  • erinys_eval — Métricas de calidad inspiradas en LOCOMO

Sesión

  • erinys_session_start — Iniciar sesión

  • erinys_session_end — Finalizar sesión con resumen

  • erinys_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 10 para síntesis nocturna programada

  • [ ] Paquete PyPI — pip install erinys-memory

  • [ ] Soporte multi-agente — Memoria con alcance por identidad de agente

Licencia

MIT

-
security - not tested
A
license - permissive license
-
quality - not tested

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