YourMemory
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Скорость затухания зависит от категории — воспоминания о неудачах исчезают быстро, стратегии сохраняются дольше:
Категория | Базовая λ | Выживаемость без обращения | Вариант использования |
| 0.10 | ~38 дней | Что сработало — успешные паттерны |
| 0.16 | ~24 дня | Предпочтения пользователя, личность |
| 0.20 | ~19 дней | Выведенный контекст |
| 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+P → Developer: Reload Window).
Cline (VS Code)
VS Code не наследует ваш shell PATH. Запустите это в терминале, чтобы получить точную конфигурацию для вставки:
yourmemory-pathЗатем в Cline → MCP Servers → Edit 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 — каждый со своей личностью, изолированной приватной памятью и контролируемым доступом к общему контексту.
Как это работает
У каждого воспоминания есть два поля, контролирующих видимость:
Поле | Значения | Значение |
|
| Любой агент (или пользователь) может извлечь это воспоминание |
|
| Только агент, который его сохранил, может его извлечь |
| например, | Какой агент владеет этим воспоминанием |
Агенты проходят аутентификацию с помощью 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
Инструмент | Когда вызывать |
| В начале каждой задачи — для получения релевантного контекста |
| После изучения нового предпочтения, факта, ошибки или стратегии |
| Когда извлеченное воспоминание устарело или требует объединения |
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.pklNeo4j — опциональный графовый бэкенд для масштабирования:
pip install 'yourmemory[neo4j]', установитеGRAPH_BACKEND=neo4jsentence-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 TIMESTAMPPostgreSQL (опционально — для команд или больших наборов данных)
Установка с поддержкой 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 yourmemoryUbuntu / 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
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