Skip to main content
Glama

ERINYS — Рефлексивная память для ИИ-агентов

🇯🇵 日本語版 / Japanese

Из воспоминаний, которые были, он создает даже те, которых никогда не существовало.

Системы памяти ИИ-агентов всегда имитировали человеческую память. Краткосрочная, долгосрочная, эпизодическая, семантическая — категории из учебников, прикрученные напрямую к реализации.

Всегда казалось, что что-то не так.

Люди забывают. Но существующие системы памяти — нет. Они бесконечно растут, выдавая устаревшие факты с тем же весом, что и свежие. Люди замечают: «Постой, разве ты не говорил раньше что-то другое?». Но системы памяти молча перезаписывают данные. Люди связывают два несвязанных опыта и думают: «О, я могу использовать это здесь». Но системы памяти просто сохраняют и извлекают.

Нужно было имитировать не таксономию памяти, а её поведение.

Этот дискомфорт и породил ERINYS.

ERINYS — это сторожевой пес. Он запоминает, забывает, задает вопросы и кусается.

Что отличает ERINYS

Забывание. Большинство систем памяти только накапливают данные. ERINYS постепенно стирает воспоминания со временем, следуя кривой забывания Эббингауза. Старый «шум» оседает. Часто используемые знания всплывают на поверхность. Результаты поиска остаются актуальными без ручной модерации.

Дистилляция. Исправление конкретного бага («отсутствовал флаг JWT httpOnly») автоматически генерирует три уровня: конкретный факт → переиспользуемый паттерн («новые эндпоинты требуют чек-листа безопасности») → универсальный принцип («безопасность по умолчанию должна быть безопасной без необходимости включения»). Ни одна другая система памяти этого не делает.

Цикл сновидений (Dream Cycle). Два воспоминания подаются в LLM: «есть ли между ними связь?». Пары кандидатов выбираются по семантической близости — достаточно близко, чтобы быть связанными (косинус > 0.65), но достаточно далеко, чтобы не быть избыточными (< 0.90). Запускаясь по расписанию ночью через cron, система находит связи, о которых вы бы даже не подумали. Никакой магии — просто автоматическое сравнение заметок в масштабе.

Философия дизайна

У памяти есть уровни

Не вся память одинакова. ERINYS организует знания по уровню абстракции:

  • Конкретный — что произошло. «На /api/auth отсутствовал флаг JWT httpOnly.»

  • Абстрактный — паттерны из фактов. «Новые API-эндпоинты требуют чек-листа заголовков безопасности.»

  • Мета — принципы из паттернов. «Безопасность по умолчанию должна быть безопасной без ручного включения.»

Один багфикс генерирует все три уровня через дистилляцию. Мета-уровень накапливает принципы, которые переносятся между проектами и технологическими стеками.

Забывание — это функция

У каждого воспоминания есть показатель силы, который со временем убывает. Воспоминание, сохраненное 6 месяцев назад, имеет меньший приоритет, чем сохраненное вчера. Часто используемые воспоминания сопротивляются распаду — повторное извлечение подкрепляет их.

Когда сила падает ниже порога, воспоминание становится кандидатом на удаление. База данных остается компактной. Поиск остается релевантным.

Факты меняются. История не должна исчезать

Когда информация обновляется — «мы перешли с AWS на GCP» — ERINYS не перезаписывает её. Он создает цепочку замещения: старый факт помечается как замененный, но сохраняется. Вы можете спросить: «Во что мы верили в марте?» и получить ответ, который был верным тогда.

Противоречия должны выявляться

Если память содержит и «использовать PostgreSQL», и «использовать SQLite», ERINYS обнаруживает конфликт. Вместо того чтобы молча переключаться, агент спрашивает: «Ранее вы выбрали PostgreSQL — требования изменились?»

Поиск находит смысл, а не только ключевые слова

Два поиска выполняются одновременно и объединяют результаты:

  • Поиск по ключевым словам (FTS5) — точное совпадение терминов.

  • Векторный поиск (sqlite-vec) — семантическая близость. «Аутентификация» находит «логин», «JWT», «токены сессии».

Результаты объединяются через Reciprocal Rank Fusion (RRF). Высокий результат в обоих = наивысший балл.

Все остается локально

Один файл SQLite. Никаких облачных API. Никаких API-ключей. Никаких подписок. Работает офлайн. Память вашего агента никогда не покидает вашу машину.

Варианты использования

1. Память между сессиями для агентов-кодеров

# 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. Обнаружение противоречий

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. Цикл сновидений — ночной синтез знаний

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. Временные запросы

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. Дистилляция знаний

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. Экспорт в Obsidian

erinys_export(format="markdown")
# → Generates .md files with [[wikilinks]]
# Drop into Obsidian → instant knowledge graph

Быстрый старт

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

Конфигурация 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)

Добавьте в ~/.gemini/antigravity/settings.json в раздел mcpServers:

{
  "erinys": {
    "command": "/path/to/ERINYS-mem/.venv/bin/python3",
    "args": ["-m", "erinys_memory.server"],
    "env": {
      "ERINYS_DB_PATH": "~/.erinys/memory.db"
    }
  }
}

Переменные окружения

Переменная

По умолчанию

Описание

ERINYS_DB_PATH

~/.erinys/memory.db

Путь к базе данных SQLite

ERINYS_EMBEDDING_MODEL

BAAI/bge-small-en-v1.5

Модель fastembed

Инструменты (25)

Основные

  • erinys_save — Сохранить наблюдение (с upsert по topic_key)

  • erinys_get — Получить по ID (полное содержимое, без сокращений)

  • erinys_update — Частичное обновление

  • erinys_delete — Удаление с каскадом FK

  • erinys_search — Гибридный поиск RRF (FTS5 + вектор)

  • erinys_save_prompt — Сохранить промпт пользователя

  • erinys_recall — Недавние наблюдения

  • erinys_context — Извлечение контекста сессии

  • erinys_export — Экспорт в Markdown, совместимый с Obsidian

  • erinys_backup — Резервное копирование SQLite

  • erinys_stats — Статистика базы данных

Граф

  • erinys_link — Создать типизированную связь

  • erinys_traverse — Обход графа в ширину (BFS)

  • erinys_prune — Удалить слабые/распадающиеся связи

Временные

  • erinys_reinforce — Усилить значимость наблюдения

  • erinys_supersede — Версионировать наблюдение

  • erinys_timeline — Запрос на момент времени

  • erinys_conflict_check — Обнаружение противоречий

Цикл сновидений

  • erinys_collide — Столкнуть два наблюдения через LLM

  • erinys_dream — Пакетный цикл столкновений

Дистилляция

  • erinys_distill — 3-уровневая абстракция (конкретный → абстрактный → мета)

Пакетная обработка и оценка

  • erinys_batch_save — Массовое сохранение с авто-связыванием

  • erinys_eval — Метрики качества, вдохновленные LOCOMO

Сессия

  • erinys_session_start — Начать сессию

  • erinys_session_end — Завершить сессию с кратким содержанием

  • erinys_session_summary — Сохранить структурированное резюме

Сравнение ERINYS

Функция

ERINYS

Mem0

Официальная память MCP

Гибридный поиск (ключевые слова + вектор)

✅ FTS5 + sqlite-vec RRF

✅ Вектор + граф

❌ Только граф знаний

Забывание по времени

✅ Кривая Эббингауза

⚠️ Приоритетная оценка

3-уровневая дистилляция

Цикл сновидений (инсайты через столкновения)

Обнаружение противоречий

⚠️ Перезаписывает через резолвер

Временные запросы («во что мы верили в марте?»)

✅ Цепочка замещения

⚠️ Инвалидация графа

Локальность (без облачных API)

✅ Один файл SQLite

❌ Облако по умолчанию

Экспорт в Obsidian

✅ [[wikilinks]]

Авто-дистилляция при сохранении

Нативный MCP

✅ 25 инструментов

Самооценка (метрики LOCOMO)

TL;DR — Большинство серверов памяти просто хранят и извлекают. ERINYS также забывает, дистиллирует и видит сны.

Архитектура

┌──────────────────────────┐
│     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
└──────────────────────────┘

Дорожная карта

  • [ ] Демон сновидений — Фоновое автоматическое выполнение цикла сновидений

  • [x] Авто-дистилляция при сохранении — Запуск 3-уровневой дистилляции при каждом сохранении

  • [ ] Авто-очистка — Сборка мусора (GC) для распавшихся наблюдений, когда БД превышает порог размера

  • [ ] CLI с поддержкой Cron — erinys dream --max 10 для запланированного ночного синтеза

  • [ ] Пакет PyPI — pip install erinys-memory

  • [ ] Поддержка нескольких агентов — Память с областью видимости для каждого агента

Лицензия

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