Skip to main content
Glama

YourMemory

На 16 п.п. лучшее запоминание, чем у Mem0 в тесте LoCoMo. 100% точность удаления устаревшей памяти. Биологически вдохновленное затухание памяти для ИИ-агентов.

Постоянная память для Claude и любого ИИ, совместимого с MCP — работает как человеческая память. Важные вещи остаются, забытые — исчезают, устаревшие факты удаляются автоматически. Связанные воспоминания живут дольше благодаря графовому слою, который понимает связи между ними.

Ранняя стадия — отзывы и идеи приветствуются.


Тесты

Сравнение с Mem0 (бесплатная версия) на публичном датасете LoCoMo (Snap Research) — 10 пар диалогов, всего 200 пар «вопрос-ответ».

Метрика

YourMemory

Mem0

Разница

LoCoMo Recall@5 (200 пар QA)

34%

18%

+16 п.п.

Точность удаления устаревшей памяти (5 пар противоречий)

100%

0%

+100 п.п.

Удалено воспоминаний (снижение шума)

20%

0%

Полная методология и результаты по каждому образцу в BENCHMARKS.md. Читайте статью: Я создал затухание памяти для ИИ-агентов, используя кривую забывания Эббингауза


Как это работает

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

base_λ      = DECAY_RATES[category]
effective_λ = base_λ × (1 - importance × 0.8)
strength    = importance × e^(-effective_λ × days) × (1 + recall_count × 0.2)
score       = cosine_similarity × strength

Скорость затухания зависит от категории — воспоминания о неудачах исчезают быстро, стратегии сохраняются дольше:

Категория

Базовая λ

Выживаемость без обращения

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

strategy

0.10

~38 дней

Что сработало — успешные паттерны

fact

0.16

~24 дня

Предпочтения пользователя, личность

assumption

0.20

~19 дней

Выведенный контекст

failure

0.35

~11 дней

Что пошло не так — ошибки среды

Важность дополнительно модулирует скорость затухания внутри каждой категории. Воспоминания, к которым обращаются часто, получают бонусы recall_count, которые противодействуют затуханию. Воспоминания с силой ниже 0.05 удаляются автоматически.

Гибридный векторный + графовый движок (v1.3.0)

Извлечение происходит в два этапа:

Этап 1 — Векторный поиск: косинусное сходство по всем воспоминаниям. Возвращает топ-k выше порога сходства.

Этап 2 — Графовое расширение: обход в ширину (BFS) от результатов Этапа 1. Выводит воспоминания, которые связаны с топовыми результатами, но имеют оценку ниже порога сходства — воспоминания, которые разделяют контекст, но не лексику.

recall("Python backend")
  Round 1 → [1] Python/MongoDB (sim=0.61), [2] DuckDB/spaCy (sim=0.19)
  Round 2 → [5] Docker/Kubernetes (sim=0.29, below cut-off but graph neighbour of [1])
            surfaced via graph even though vector search missed it

Удаление с учетом цепочек: воспоминание сохраняется, если любой из его соседей по графу все еще выше порога удаления. Связанные воспоминания стареют вместе — одно сильное воспоминание защищает весь связанный кластер от удаления.

Распространение обращения: обращение к воспоминанию автоматически увеличивает recall_count его соседей по графу. Часто используемые воспоминания поддерживают свежесть связанного контекста.

Семантические ребра: ребра графа создаются на основе косинусного сходства (порог ≥ 0.4), а не порядка вставки. Вес ребра = similarity × verb_weight из SVO-предиката, извлеченного spaCy.


Установка

Инфраструктура не требуется — использует DuckDB «из коробки». Две команды, и готово.

Поддерживает Python 3.11, 3.12, 3.13 и 3.14.

1. Установка

pip install yourmemory

Все зависимости устанавливаются автоматически. Никаких клонирований, Docker или настройки баз данных.

2. Запуск настройки (один раз)

yourmemory-setup

Загружает языковую модель spaCy и инициализирует базу данных. Запустите это один раз после установки.

3. Получение конфигурации

yourmemory-path

Выводит полный путь к исполняемому файлу и готовую конфигурацию для любого MCP-клиента. Скопируйте её.

4. Подключение к ИИ-клиенту

База данных создается автоматически по пути ~/.yourmemory/memories.duckdb при первом использовании.

Claude Code

Добавьте в ~/.claude/settings.json:

{
  "mcpServers": {
    "yourmemory": {
      "command": "yourmemory"
    }
  }
}

Перезагрузите Claude Code (Cmd+Shift+PDeveloper: Reload Window).

Cline (VS Code)

VS Code не наследует ваш shell PATH. Запустите это в терминале, чтобы получить точную конфигурацию для вставки:

yourmemory-path

Затем в Cline → MCP ServersEdit MCP Settings, вставьте вывод. Он выглядит так:

{
  "mcpServers": {
    "yourmemory": {
      "command": "/full/path/to/yourmemory",
      "args": [],
      "env": {
        "YOURMEMORY_USER": "your_name",
        "DATABASE_URL": ""
      }
    }
  }
}

Перезапустите Cline после сохранения.

Cursor

Добавьте в ~/.cursor/mcp.json:

{
  "mcpServers": {
    "yourmemory": {
      "command": "/full/path/to/yourmemory",
      "args": [],
      "env": {
        "YOURMEMORY_USER": "your_name",
        "DATABASE_URL": ""
      }
    }
  }
}

Claude Desktop

Добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) или %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "yourmemory": {
      "command": "yourmemory"
    }
  }
}

Перезапустите Claude Desktop.

Любой MCP-совместимый клиент

YourMemory — это стандартный stdio MCP-сервер. Работает с Claude Code, Claude Desktop, Cline, Cursor, Windsurf, Continue и Zed. Используйте полный путь из yourmemory-path, если клиент не наследует shell PATH.

5. Добавление инструкций по памяти в ваш проект

Скопируйте sample_CLAUDE.md в корень вашего проекта как CLAUDE.md и замените:

  • YOUR_NAME — ваше имя (например, Alice)

  • YOUR_USER_ID — используется для пространства имен воспоминаний (например, alice)

Claude теперь будет автоматически следовать рабочему процессу «извлечение → сохранение → обновление» для каждой задачи.


Общая и приватная память для нескольких агентов

Несколько ИИ-агентов могут использовать один экземпляр YourMemory — каждый со своей личностью, изолированной приватной памятью и контролируемым доступом к общему контексту.

Как это работает

У каждого воспоминания есть два поля, контролирующих видимость:

Поле

Значения

Значение

visibility

shared (по умолчанию)

Любой агент (или пользователь) может извлечь это воспоминание

visibility

private

Только агент, который его сохранил, может его извлечь

agent_id

например, "coding-agent"

Какой агент владеет этим воспоминанием

Агенты проходят аутентификацию с помощью API-ключа (префикс ym_). Без ключа вызывающий рассматривается как пользователь и может только читать/записывать shared воспоминания.

Регистрация агента

from src.services.api_keys import register_agent

result = register_agent(
    agent_id="coding-agent",
    user_id="sachit",
    description="Handles code review and refactoring tasks",
    can_read=["shared", "private"],   # what this agent can read
    can_write=["shared", "private"],  # what it can write
)

print(result["api_key"])  # ym_xxxx — save this, shown once only

Ключ хешируется с помощью SHA-256 перед хранением. Открытый текст никогда не сохраняется — если потеряли, отзовите и зарегистрируйте заново.

Использование API-ключа в вызовах MCP

Передайте api_key в любой вызов инструмента MCP:

# Store a private memory — only this agent can recall it
store_memory(
    content="The auth service on staging uses a self-signed cert — skip SSL verify",
    importance=0.7,
    category="failure",
    api_key="ym_xxxx",
    visibility="private"
)

# Store shared context — any agent can recall it
store_memory(
    content="Production database is on PostgreSQL 16, us-east-1",
    importance=0.8,
    category="fact",
    api_key="ym_xxxx",
    visibility="shared"
)

# Recall — returns shared memories + this agent's private memories
recall_memory(
    query="database production",
    api_key="ym_xxxx"
)

Без api_key извлечение возвращает только общие воспоминания.

Контроль доступа

При регистрации агента can_read контролирует, к каким уровням видимости агент может получить доступ:

# Read-only agent — can see shared context but cannot store private memories
register_agent(
    agent_id="readonly-summarizer",
    user_id="sachit",
    can_read=["shared"],
    can_write=["shared"],
)

# Isolated agent — private memory only, cannot read shared context
register_agent(
    agent_id="isolated-agent",
    user_id="sachit",
    can_read=["private"],
    can_write=["private"],
)

Пример: два агента, разделяющие контекст

coding-agent stores:
  → "Sachit uses pytest for all Python tests"  (shared, importance=0.8)
  → "Staging API key is sk-staging-xxx"         (private, importance=0.9)

review-agent recalls "Python testing":
  ← "Sachit uses pytest for all Python tests"   ✓ (shared — visible)
  ← "Staging API key is sk-staging-xxx"          ✗ (private — hidden)

coding-agent recalls "Python testing":
  ← "Sachit uses pytest for all Python tests"   ✓ (shared)
  ← "Staging API key is sk-staging-xxx"          ✓ (private — owns it)

Отзыв агента

from src.services.api_keys import revoke_agent

revoke_agent(agent_id="coding-agent", user_id="sachit")
# Key is invalidated immediately — all future calls with it return 401

Инструменты MCP

Инструмент

Когда вызывать

recall_memory

В начале каждой задачи — для получения релевантного контекста

store_memory

После изучения нового предпочтения, факта, ошибки или стратегии

update_memory

Когда извлеченное воспоминание устарело или требует объединения

store_memory принимает необязательный параметр category для управления скоростью затухания:

# Failure — decays in ~11 days (environment changes fast)
store_memory(
    content="OAuth for client X fails — redirect URI must be app.example.com",
    importance=0.6,
    category="failure"
)

# Strategy — decays in ~38 days (successful patterns stay relevant)
store_memory(
    content="Cursor pagination fixed the 30s timeout on large user queries",
    importance=0.7,
    category="strategy"
)

Пример сессии

User: "I prefer tabs over spaces in all my Python projects"

Claude:
  → recall_memory("tabs spaces Python preferences")   # nothing found
  → store_memory("Sachit prefers tabs over spaces in Python", importance=0.9, category="fact")

Next session:
  → recall_memory("Python formatting")
  ← {"content": "Sachit prefers tabs over spaces in Python", "strength": 0.87}
  → Claude now knows without being told again

Задание по затуханию

Запускается автоматически каждые 24 часа при старте — cron не нужен. Воспоминания с силой ниже 0.05 удаляются.

Удаление с учетом цепочек (v1.3.0): перед удалением затухшего воспоминания задание проверяет его соседей по графу. Если хотя бы один сосед все еще выше порога удаления, воспоминание сохраняется. Это предотвращает изолированное удаление фактов, которые являются частью связанного кластера.


Стек

  • DuckDB — бэкенд по умолчанию, нулевая настройка, нативное векторное сходство (качество как у pgvector)

  • NetworkX — графовый бэкенд по умолчанию, нулевая настройка, сохраняется в ~/.yourmemory/graph.pkl

  • Neo4j — опциональный графовый бэкенд для масштабирования: pip install 'yourmemory[neo4j]', установите GRAPH_BACKEND=neo4j

  • sentence-transformers — локальные эмбеддинги (all-mpnet-base-v2, 768 размерностей, внешний сервис не нужен)

  • spaCy 3.8.13+ — локальный NLP для дедупликации, категоризации и извлечения SVO-троек (совместим с Python 3.11–3.14)

  • APScheduler — автоматическое задание по затуханию каждые 24 часа

  • MCP — интеграция с Claude через Model Context Protocol

  • PostgreSQL + pgvector — опционально, для команд / больших наборов данных


Архитектура

Claude / Cline / Cursor / Any MCP client
    │
    ├── recall_memory(query, api_key?)
    │       └── embed → cosine similarity (Round 1)
    │           → graph BFS expansion (Round 2)
    │           → score = sim × strength → top-k
    │           → recall propagation → boost graph neighbours
    │
    ├── store_memory(content, importance, category?, api_key?, visibility?)
    │       └── is_question? → reject
    │           contradiction check → update existing if conflict
    │           embed() → INSERT memories
    │           → index_memory() → upsert graph node + semantic edges
    │
    └── update_memory(id, new_content, importance)
            └── embed(new_content) → UPDATE memories
                → update graph node strength

Vector DB (Round 1)          Graph DB (Round 2)
DuckDB (default)             NetworkX (default)
  memories.duckdb              graph.pkl
  ├── embedding FLOAT[768]     ├── nodes: memory_id, strength
  ├── importance FLOAT         └── edges: sim × verb_weight ≥ 0.4
  ├── recall_count INTEGER
  ├── visibility VARCHAR     Neo4j (opt-in, GRAPH_BACKEND=neo4j)
  └── agent_id VARCHAR         └── bolt://localhost:7687

Agent Registry
  agent_registrations
  ├── agent_id VARCHAR
  ├── api_key_hash VARCHAR   ← SHA-256, plaintext never stored
  ├── can_read  []           ← ["shared"] | ["private"] | both
  ├── can_write []
  └── revoked_at TIMESTAMP

PostgreSQL (опционально — для команд или больших наборов данных)

Установка с поддержкой Postgres:

pip install yourmemory[postgres]

Затем создайте файл .env:

DATABASE_URL=postgresql://YOUR_USER@localhost:5432/yourmemory

Бэкенд выбирается автоматически — postgresql:// в DATABASE_URL → Postgres + pgvector, все остальное → DuckDB.

macOS

brew install postgresql@16 pgvector && brew services start postgresql@16
createdb yourmemory

Ubuntu / Debian

sudo apt install postgresql postgresql-contrib postgresql-16-pgvector
createdb yourmemory

Ссылки на датасеты

В тестах используется датасет LoCoMo от Snap Research — публичный бенчмарк памяти с длинным контекстом для многосессионных диалогов.

Maharana et al. (2024). LoCoMo: Long Context Multimodal Benchmark for Dialogue. Snap Research.


Лицензия

Copyright 2026 Sachit Misra

Лицензировано по CC-BY-NC-4.0 (Creative Commons Attribution-NonCommercial 4.0).

Бесплатно для: личного использования, образования, академических исследований, open-source проектов.

Не разрешено: коммерческое использование любого рода — включая SaaS, внутренние инструменты в коммерческих компаниях или платные услуги — без отдельного письменного соглашения.

Для коммерческого лицензирования: mishrasachit1@gmail.com

-
security - not tested
F
license - not found
-
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/sachitrafa/cognitive-ai-memory'

If you have feedback or need assistance with the MCP directory API, please join our Discord server