agentmem
agentmem
Общая память для Claude Code, Cursor и Codex, которая знает, что все еще актуально. Сохраняйте сессии, находите устаревшие и противоречивые правила и не позволяйте вашему агенту повторять старые ошибки.
Проблема
Ваш ИИ-ассистент по программированию забывает все между сессиями. Он повторяет старые ошибки. Он не может отличить текущие правила от устаревших. Контекст сжимается, а восстановление — болезненный процесс.
Большинство инструментов памяти решают задачу хранения. agentmem решает задачу доверия.
Начало работы (Claude Code / Cursor / Codex)
pip install quilmem[mcp]
agentmem init --tool claude --project myappВот и все. Перезапустите редактор. Теперь у вашего агента есть 13 инструментов памяти. Запустите memory_health для проверки.
Только Python?
pip install quilmemработает без дополнения MCP. См. Python API ниже.
60-секундная демонстрация
from agentmem import Memory
mem = Memory()
# Store typed memories
mem.add(type="bug", title="loudnorm undoes SFX levels",
content="Never apply loudnorm to final mix. It re-normalizes everything.",
status="validated")
mem.add(type="decision", title="Use per-line atempo",
content="Bake speed into per-line TTS. No global pass.",
status="active")
# Something you're not sure about yet
hypothesis = mem.add(type="decision", title="Maybe try 2-second gaps before CTA",
content="Hypothesis from last session. Needs testing.",
status="hypothesis")
# Search — validated and active memories rank highest.
# Deprecated and superseded memories are excluded automatically.
results = mem.search("audio mixing")
# Context-budgeted recall — fits the best memories into your token limit
context = mem.recall("building a narration track", max_tokens=2000)
# Lifecycle — promote what's proven, deprecate what's not
mem.promote(hypothesis.id) # hypothesis -> active -> validated
mem.deprecate(hypothesis.id, reason="Disproven by data")
# Supersede: replace an outdated memory with a newer one
replacement = mem.add(type="decision", title="Use 1-second gaps before CTA",
content="Confirmed by A/B test.", status="active")
mem.supersede(hypothesis.id, replacement.id) # old points to replacement
# Health check — is your memory system trustworthy?
from agentmem import health_check
report = health_check(mem._conn)
# Health: 85/100 | Conflicts: 0 | Stale: 2 | Validated: 14Что отличает этот инструмент
Другие инструменты памяти просто хранят данные. agentmem знает, что все еще актуально.
Mem0 | Letta | Mengram | agentmem | |
Хранение памяти | Да | Да | Да | Да |
Полнотекстовый поиск | Векторный | Агентный | Граф знаний | FTS5 |
Статусы жизненного цикла | Нет | Частично | Нет | гипотеза -> активна -> подтверждена -> устарела -> заменена |
Обнаружение конфликтов | Нет | Нет | Частично | Встроено |
Обнаружение устаревания | Нет | Нет | Нет | Встроено |
Оценка состояния | Нет | Нет | Нет | Встроено |
Отслеживание происхождения | Нет | Нет | Нет | source_path + source_hash |
Поиск с учетом доверия | Нет | Нет | Нет | Подтвержденные > активные > гипотезы |
Читаемые человеком файлы | Нет | Нет | Нет | Каноничный markdown |
Локально, без инфраструктуры | Нет | Опция self-host | Опция self-host | Да, всегда |
MCP сервер | Отдельно | Отдельно | Да | Встроено |
Управление истинностью
Основная идея: каждая запись в памяти имеет статус, который определяет уровень доверия к ней.
hypothesis New observation. Not yet confirmed. Lowest trust in recall.
|
active Default. Currently believed true. Normal trust.
|
validated Explicitly confirmed. Highest trust in recall.
deprecated Was true, no longer. Excluded from recall. Kept for history.
superseded Replaced by a newer memory. Points to replacement.Почему это важно: Без управления память агента накапливает устаревшие правила, противоречия и неактуальные решения. Он не знает, что настройка голоса из января была изменена в марте. Он извлекает оба варианта, и LLM выбирает случайно. Управляемая память решает эту проблему.
Обнаружение конфликтов
from agentmem import detect_conflicts
conflicts = detect_conflicts(mem._conn)
# Found 2 conflict(s):
# !! [decision] "Always apply loudnorm to voice"
# vs [decision] "NEVER apply loudnorm to voice"
# Contradiction on shared topic (voice, loudnorm, audio)agentmem находит противоречащие друг другу записи:
Обнаруживает пересечение тем (коэффициент Жаккара)
Отделяет дубликаты от противоречий
Сопоставление отрицаний на уровне предложений (а не просто поиск по ключевым словам)
Уровень серьезности:
critical(обе активны) противwarning(одна устарела)
Обнаружение устаревания
from agentmem import detect_stale
stale = detect_stale(mem._conn, stale_days=30)
# [decision] "Use atempo 0.90" — Source changed since import (hash mismatch)
# [bug] "Firewall blocks port" — Not updated in 45 daysНаходит устаревшие записи по:
Возрасту (не обновлялись N дней)
Отсутствию исходного файла (ссылочный файл был удален)
Изменению хеша (содержимое файла изменилось, но память не была обновлена)
Проверка состояния
from agentmem import health_check
report = health_check(mem._conn)
print(f"Health: {report.health_score}/100")
print(f"Conflicts: {len(report.conflicts)}")
print(f"Stale: {len(report.stale)}")Оценивает вашу систему памяти по шкале 0-100 на основе: конфликтов, процента устаревших данных, потерянных ссылок, веса устаревших записей и наличия подтвержденных записей.
Синхронизация с учетом происхождения
Синхронизируйте каноничные markdown-файлы в БД с отслеживанием источника:
# Each memory tracks where it came from
mem.add(type="bug", title="loudnorm lifts noise",
content="...",
source_path="/docs/errors.md",
source_section="Audio Bugs",
source_hash="a1b2c3d4e5f6")Механизм синхронизации:
Тот же хеш = пропустить (идемпотентность, повторный запуск ничего не меняет)
Другой хеш = обновить (исходный файл изменился)
Раздел удален = устарело (с указанием причины)
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/Thezenmonster/agentmem'
If you have feedback or need assistance with the MCP directory API, please join our Discord server