Память для Claude Code, которая выглядит как папка с Markdown.
Ни векторной БД, ни демонов на портах, ни телеметрии. Открыл репозиторий — через минуту агент знает то, что нужно знать о проекте. Через неделю работы — wiki сама пухнет от того, чему ты научил агента в боях.
curl -sSL https://raw.githubusercontent.com/evkorzhavin/claude-wiki-memory/main/install.sh | bashБольшинство «памяти для агента» работают так: захватываем всё, что агент делает, кладём в векторную БД, на следующей сессии достаём похожее. Это удобно ровно до тех пор, пока ты не открываешь дамп памяти и не видишь там 14 000 записей, половина — мусор, искать в этом нельзя, доверять — тем более.
Эта система устроена иначе. Она исходит из того, что понимание проекта — это написанный артефакт, а не куча захваченных событий. У тебя в репозитории есть папка knowledge/ с Markdown-статьями про архитектуру, биллинг, мобилку, gotchas. Этот wiki целиком грузится в каждую сессию агента — гарантированно, без эвристик. Сверху над этим — фоновый компилятор, который сам пишет статьи из накопленных дневных логов разговоров. И отдельный слой — формализация встроенной auto-memory Claude Code (тот самый каталог ~/.claude/projects/<id>/memory/, который харнес уже использует), но с понятной структурой, командой /learn и нормальным гайдом по тому, что куда писать.
Получается двухслойная система: командный wiki в git + личная auto-memory харнеса. Они не конкурируют — у них разная аудитория и разный жизненный цикл.
Я знаю две похожих системы:
claude-mem— авто-захват каждого действия, SQLite + Chroma, worker на:37777.agentmemory— авто-захват через 12 хуков, BM25 + векторы + knowledge graph, ~21k строк кода, REST API на:3111.
Обе хороши в том, в чём они сильны. У них разные ставки.
claude-mem |
agentmemory |
claude-wiki-memory |
|
|---|---|---|---|
| Хранение | SQLite + Chroma | iii-engine + vector index | Markdown в твоём репо |
| Поиск | embeddings | BM25 + vectors + KG | grep + LLM-контекст |
| Захват | авто, каждый PostToolUse | авто, 12 хуков | на границах сессии + руками |
| Фоновые сервисы | worker на порту | сервисы на портах | нет |
| Зависимости | Bun + uv + Chroma | iii-engine + embedding-модель | python3 + (опц.) claude-agent-sdk |
| Артефакты в git | нет | нет | да — wiki это и есть артефакт |
| Размер кодовой базы | ~? | ~21k строк | ~1.5k строк |
| Лицензия | AGPL-3.0 | unspecified | MIT |
| Подходит когда | «помни всё» | «помни всё, локально» | «помни нужное, осознанно» |
Если веришь, что LLM сам отфильтрует тебе релевантное из тысяч событий — выбирай одну из тех двух. Если хочешь, чтобы то, что в памяти, проходило ревью в PR и читалось коллегой без специального инструмента — это сюда. Полное сравнение и честный список ситуаций, когда эту систему брать не стоит, в docs/vs-claude-mem-and-agentmemory.md.
Два слоя живут параллельно, оба грузятся каждую сессию автоматически:
┌─────────────────────────────────────────────┬─────────────────────────────────────────┐
│ СЛОЙ 1 — WIKI (в репо) │ СЛОЙ 2 — AUTO-MEMORY (в харнесе) │
├─────────────────────────────────────────────┼─────────────────────────────────────────┤
│ <project>/knowledge/ │ ~/.claude/projects/<id>/memory/ │
│ index.md ← навигация │ MEMORY.md ← индекс │
│ concepts/ │ feedback_*.md │
│ connections/ │ project_*.md │
│ daily/ ← сырые транскрипты │ user_*.md │
│ │ reference_*.md │
│ │ │
│ Грузит: SessionStart hook → index.md │ Грузит: сам Claude Code (см. ниже) │
│ Пишет: flush.py → daily/, compile.py → │ Пишет: /learn (или ты руками) │
│ concepts/ │ │
│ Хранит: архитектура, паттерны, фиксы │ Хранит: предпочтения, статус, кто ты │
│ В git: да │ В git: нет (per-machine) │
└─────────────────────────────────────────────┴─────────────────────────────────────────┘
Важно про Слой 2. Каталог
~/.claude/projects/<id>/memory/— это встроенный механизм Claude Code, не наше изобретение. Харнес сам грузитMEMORY.mdв системный промпт. Что предлагает claude-wiki-memory: понятную структуру (4 типа файлов), команду/learnдля записи и гайдdocs/memory-types.mdпро то, что туда класть. Если у тебя там уже что-то есть — система не сломает; шаблоны идут как примеры в.claude/memory-examples/, без перезаписи.
Полная архитектура, со всеми «почему именно так» — в ARCHITECTURE.md. Pipeline пошагово с диаграммами — в docs/how-it-works.md.
Сессия Claude Code
│
├─ SessionStart ──► читает knowledge/index.md, инжектит в systemPrompt
│ (если индекс перерос лимит — добавляет видимое
│ WARNING с инструкцией, как починить)
│
├─ [ты работаешь]
│
└─ SessionEnd ──► сохраняет последние 30 turns во временный файл,
запускает flush.py в фоне (detached)
│
├─ LLM решает: есть что запоминать или FLUSH_OK
├─ если есть — дописывает в knowledge/daily/<дата>.md
├─ пишет одну строку в .state/flush.log (наблюдаемость)
└─ если 22:00 ИЛИ накопилось ≥3 нескомпилированных лога
→ запускает compile.py в фоне
│
└─ переписывает knowledge/concepts/*.md
(курируемые блоки <!-- curated:start --> ...
сохраняются дословно)
Самое опасное место в системе — compile.py, который трогает уже написанные статьи. Поэтому:
- Курируемые блоки. Заверни любые куски статьи в
<!-- curated:start -->...<!-- curated:end -->— компилятор их не тронет. Восстановит дословно после прогона. - Режим pending. Запусти
compile.py --pending(илиCWM_COMPILE_PENDING=1) — драфты пишутся вknowledge/_pending/. Лог не помечается как обработанный. Ты смотришь дифф и сливаешь руками. - Бэкап-снимок. Если LLM попытается записать что-то вне
knowledge/— это попадёт вknowledge/compile-errors.logкак SECURITY-запись.
cd /твой/проект
curl -sSL https://raw.githubusercontent.com/evkorzhavin/claude-wiki-memory/main/install.sh | bashЧто произойдёт:
- Хуки →
~/.claude/hooks/cwm-*.py - Скрипты движка →
~/.claude/memory-scripts/ - Слэш-команды →
~/.claude/commands/{learn,remember,compile,flush-status}.md - В текущей директории появятся
knowledge/,daily/и (если нет).claude/settings.jsonс прописанными хуками - Если
.claude/settings.jsonуже был — хуки примерджатся в него аккуратно, остальные настройки не пострадают
Идемпотентно. Перезапуск обновит код, но твой контент не тронет.
Опционально: pip install claude-agent-sdk — без него хуки и сама wiki-загрузка работают, но фоновый flush откатится к сохранению сырого транскрипта вместо LLM-суммаризации.
Полный гайд (ручная установка, кастомные пути, верификация) — INSTALL.md.
| Что | Команда |
|---|---|
| Записать урок из текущей сессии | /learn |
| Найти что-то в памяти (grep + LLM-fallback) | /remember <тема> |
| Принудительно скомпилировать | /compile (или /compile --pending для ревью) |
| Посмотреть, как отрабатывает фоновый flush | /flush-status |
| Спросить wiki из терминала | python3 ~/.claude/memory-scripts/query.py "вопрос" |
| Health-check | python3 ~/.claude/memory-scripts/lint.py --structural-only |
Что писать руками: knowledge/index.md — главный файл, ≤8000 символов, видит каждая сессия. Замени scaffold на описание твоего проекта. Если индекс перерастёт лимит — на следующей же сессии увидишь WARNING прямо в контексте, с инструкцией.
Подробный гайд по тому, что сохранять и что не — docs/writing-good-memories.md. Про четыре типа auto-memory (feedback / project / user / reference) — docs/memory-types.md.
Всё через переменные окружения. Дефолты разумные.
| Переменная | По умолчанию | Что делает |
|---|---|---|
CWM_PROJECT_ROOT |
текущая папка | Корень проекта |
CWM_KNOWLEDGE_DIR |
$root/knowledge |
Где живёт wiki |
CWM_DAILY_DIR |
$root/daily |
Куда писать сырые daily-логи |
CWM_SCRIPTS_DIR |
~/.claude/memory-scripts |
Где живёт движок |
CWM_MAX_INDEX_CHARS |
8000 |
Лимит инжекта индекса. Превышение видно агенту |
CWM_COMPILE_AFTER_HOUR |
22 |
После какого часа разрешено авто-compile |
CWM_COMPILE_BACKLOG_THRESHOLD |
3 |
Сколько накопленных daily-логов запускают compile независимо от часа |
CWM_COMPILE_PENDING |
unset | 1 → compile пишет в _pending/, не в основную wiki |
CWM_FLUSH_DEDUP_SECONDS |
60 |
Окно дедупа повторных flush'ей одной сессии |
CWM_MIN_TURNS_SESSION_END |
1 |
Порог запуска flush из SessionEnd |
CWM_MIN_TURNS_PRE_COMPACT |
5 |
То же для PreCompact |
CWM_MAX_FLUSH_TURNS |
2 |
Бюджет turns LLM на flush |
CWM_MAX_COMPILE_TURNS |
30 |
Бюджет turns LLM на compile |
CWM_LANGUAGE |
en |
Язык LLM-промптов; ru для русского |
- Не обещает «помнить всё». Авто-захват срабатывает на границах сессии (close или PreCompact), а не на каждом tool call. Внутри прогоняется через LLM-фильтр, который чаще, чем нет, отвечает «нечего сохранять».
- Не векторизует. Никаких embeddings, никакого BM25. Wiki целиком влезает в LLM-контекст; ranking делает сам LLM.
- Не имеет фоновых демонов. Нет worker'а на порту, нет процесса-сторожа. Хуки срабатывают на события Claude Code; скрипты — по требованию или spawned-and-detached.
- Не пишет в репо ничего, кроме
knowledge/иdaily/. Compile запускается сcwd=knowledge/, любая запись наружу логируется как SECURITY и подсвечивается.
Если тебе нужны embeddings и автозахват тысяч событий — agentmemory или claude-mem делают это лучше. См. docs/vs-claude-mem-and-agentmemory.md.
Признаю честно: эта система требует, чтобы ты читал и поддерживал свой wiki. Не часто — раз в месяц триаж проблем от lint.py и пять минут на удаление протухших записей. Но если хочешь полностью «всё само и забыли» — это не оно. Авто-захват тут есть, но он намеренно консервативный, и финальное слово за человеком.
Платишь дисциплиной — получаешь читаемую базу знаний в git, у которой нет тёмных уголков, и каждая сессия начинается с гарантированно полного контекста.
ARCHITECTURE.md— что и почемуINSTALL.md— все варианты установки + верификацияdocs/how-it-works.md— pipeline пошаговоdocs/memory-types.md—feedback/project/user/referencedocs/writing-good-memories.md— что записывать, чего не надоdocs/troubleshooting.md— что делать когда сломалосьdocs/vs-claude-mem-and-agentmemory.md— сравнение
v0.2. Это очищенная и обобщённая версия системы, которая несколько месяцев работает на боевом русскоязычном SaaS. Паттерны оплачены реальными багами; ограничения, упомянутые выше, — найдены, не предположены.
Это намеренно не фреймворк. Это горка Python в полторы тысячи строк и три хука Claude Code — читается за один заход.
MIT. См. LICENSE.