Skip to content

evkorzhavin/claude-wiki-memory

Repository files navigation

claude-wiki-memory

Память для 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.

Pipeline в одной картинке

Сессия 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

Что произойдёт:

  1. Хуки → ~/.claude/hooks/cwm-*.py
  2. Скрипты движка → ~/.claude/memory-scripts/
  3. Слэш-команды → ~/.claude/commands/{learn,remember,compile,flush-status}.md
  4. В текущей директории появятся knowledge/, daily/ и (если нет) .claude/settings.json с прописанными хуками
  5. Если .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, у которой нет тёмных уголков, и каждая сессия начинается с гарантированно полного контекста.

Документация

Статус

v0.2. Это очищенная и обобщённая версия системы, которая несколько месяцев работает на боевом русскоязычном SaaS. Паттерны оплачены реальными багами; ограничения, упомянутые выше, — найдены, не предположены.

Это намеренно не фреймворк. Это горка Python в полторы тысячи строк и три хука Claude Code — читается за один заход.

Лицензия

MIT. См. LICENSE.

About

No description, website, or topics provided.

Resources

License

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors