Save Knowledge Base — постоянная личная справочная память
Решает проблему: «у меня есть подробная инструкция/документация, я хочу чтобы Claude при любом релевантном запросе выдавал её содержимое, а не забывал». 4 уровня сохранения = триплекс резервирования.
Когда использовать
| Триггер пользователя | Применить |
|---|---|
| «запомни эту инструкцию по Х» | ✅ |
| «сохрани в память на потом» | ✅ |
| «чтобы при запросе „X“ ты сразу выдавал эту инфу» | ✅ |
| «сделай так чтобы не забыл» | ✅ |
| «добавь в постоянную память» | ✅ |
| «запомни мои контакты по проекту Y» | ✅ |
| «вот мой досье по X — сохрани» | ✅ |
| «запомни что я обещал/решил/выбрал» | ❌ — это auto-learning (обычная feedback/project память) |
| «запомни этот код/паттерн» | ❌ — это tg-post-память или CLAUDE.md |
Главный критерий: пользователь хочет, чтобы по конкретным триггерным словам в будущих сессиях я отдавал ему готовое содержимое документа, а не пытался вспомнить «из головы».
Что сохраняется (input)
Пользователь даёт ОДНО из:
- Путь к файлу/папке с инструкцией (md, html, docx, pdf)
- Текст инструкции прямо в чате
- Тему (если документ уже в
~/.claude/projects/.../memory/)
Плюс уточняющие данные (если не дал — спросить):
- Название темы (slug, kebab-case) — для имени файла, например
appliance-manual,tax-guide-2026,car-rental-notes. - Триггеры (5–15 фраз/слов) — что должно срабатывать.
- Путь к полному документу (если есть HTML/PDF) — для прямой ссылки.
4 уровня сохранения
Уровень 1 — Topic-файл (детали)
Создать <memory>/<slug>.md, где <memory> — каталог памяти текущего проекта.
Имя папки Claude Code кодирует из пути проекта, у каждого своё — определи его один раз:
ls -dt ~/.claude/projects/*/memory | head -1. Дальше по тексту <memory> = этот путь.
Первый запуск (памяти ещё нет). На чистой установке команда выше вернёт пустоту:
каталога memory/ в проекте не существует, пока в него не записали первую заметку.
Тогда <memory> собирается вручную — Claude Code кодирует путь проекта, заменяя
\ и / на -, а : выбрасывая (C:\Users\ann\work → C--Users-ann-work):
PROJ=$(pwd | sed 's#:##; s#[\\/]#-#g') # git bash / wsl
mkdir -p ~/.claude/projects/"$PROJ"/memory
touch ~/.claude/projects/"$PROJ"/memory/MEMORY.md
MEMORY.md в первый раз пустой — это нормально, Уровень 2 создаст в нём секцию сам.
---
name: <slug>
description: <одна строка — что это, ссылка на полный документ, ключевые факты>
metadata:
type: reference
---
# <Название темы>
**Полная инструкция:** `<абсолютный путь к HTML/PDF/DOCX>`
**Markdown:** `<путь к .md если есть>`
## Ключевые факты (для быстрых ответов без перечитывания)
- факт 1 (даты, цифры, имена)
- факт 2
- ...
## <Главные разделы — обычно 3-5>
<выжимка из документа>
## Контакты / источники
<тел/email/имена>
## Триггеры (когда применять эту память)
- «триггер 1»
- «триггер 2»
- ...
Когда видишь эти триггеры — открыть `<абсолютный путь>`, отвечать на основе содержимого.
Уровень 2 — индекс MEMORY.md (auto-loaded)
В <memory>/MEMORY.md найти секцию ## REFERENCE (или ## TOOLS & SKILLS для technical, или создать новую) и добавить ОДНУ строку:
### <Название> (<дата YYYY-MM-DD>)
See [<slug>.md](<slug>.md). <Полный путь HTML/PDF>. Ключевые факты в одной строке. Триггеры: «X», «Y», «Z», ...
Ограничение: вся строка ≤ 200 символов после See ... — (MEMORY.md загружается первыми 200 строками).
Уровень 3 — routing.md (жёсткое правило)
В ~/.claude/rules/routing.md сразу после строки |-----------|----------|------------| (или в подходящую секцию) добавить:
| <Категория> | "триггер1", "триггер2", "триггер3", ... | Читать `<абсолютный путь к полному документу>`. Memory: `<slug>.md` |
Это жёсткий route — грузится каждую сессию через rules/.
Уровень 4 — vector_memory.py learn (семантический поиск)
pip install qdrant-client # один раз: скрипт держит базу на Qdrant в local-режиме
python ~/.claude/tools/vector_memory.py learn "<длинное описание 500-1500 слов с ключевыми фактами, цифрами, именами, триггерами>" reference
Для случаев когда триггер не дословный («как почистить прибор» → найдёт нужный раздел мануала).
База создаётся при первом learn в ~/.claude/vector-memory/ — предварительно ничего готовить не надо.
Алгоритм работы скилла
1. Спросить (если не дано):
- Что сохранять? (путь или текст)
- Какой slug? (предложить из контекста)
- Какие триггеры? (предложить 5-10 на основе содержимого)
- Какой путь к полному документу? (если применимо)
2. Прочитать исходный документ (Read), выделить:
- 5-10 ключевых фактов (цифры, даты, имена, контакты)
- Главные разделы (заголовки H2)
- Контакты/источники
- Аварийные ситуации/чек-листы (если есть)
3. Создать Уровень 1: topic-файл с frontmatter
4. Обновить Уровень 2: добавить строку в MEMORY.md (Edit)
5. Обновить Уровень 3: добавить строку в routing.md (Edit)
6. Запустить Уровень 4: vector_memory.py learn (Bash)
7. Сообщить пользователю что сохранено + показать триггеры
Когда нужно ОБНОВЛЯТЬ существующую память
- Если в
<memory>/уже есть<slug>.md— обновляем (Edit), не создаём заново. - Если в MEMORY.md уже есть строка про эту тему — обновляем дату и факты.
- В routing.md — проверяем что триггеры не дублируются (если триггер уже есть в другой строке — предупредить).
- В vector_memory —
learnсоздаёт НОВУЮ запись поверх старой (не страшно, search вернёт самую релевантную).
Авторитетность знания (из Kulaxyz/self-learning-skills)
Сохраняй как проверенное знание только если выполнены все три критерия:
- Реально проверено прогоном — код запущен / команда выполнена / факт подтверждён источником, а не «выглядит правильно».
- Названа неработающая альтернатива — что пробовали и почему оно НЕ сработало (иначе это не знание, а первая попавшаяся опция).
- Описана конкретная проблема, которую решает — без привязки к проблеме заметка не найдётся в нужный момент.
Не прошло все три — сохраняй с пометкой status: pending / «непроверено», не как канон.
Антипаттерны
- ❌ Не сохранять полный документ в memory/.md — это раздует MEMORY.md загрузку. Только выжимку + ссылку на полный путь.
- ❌ Не использовать для эфемерных дел — «я обещал созвон в пятницу» это auto-learning project memory, не reference.
- ❌ Не дублировать триггеры в routing.md — если триггер уже есть в строке одной темы, не добавлять его же в строку смежной темы. Один триггер = одна route.
- ❌ Не делать slug с пробелами и кириллицей — только
kebab-case-ascii.
Пример работы
Пользователь: «Сохрани вот эту инструкцию по налогам вашего региона. Файл ${HOME}/region-taxes.html. Триггеры — налоги, дедлайны, отчётность, ваш бухгалтерский сервис.»
Скилл делает:
- Read
${HOME}/region-taxes.html→ выделяет ключевые факты: ставки, дедлайны, реквизиты, ссылки на бухгалтерский сервис. - Write
<memory>/region-taxes-2026.mdс выжимкой. - Edit MEMORY.md → добавить строку в секцию REFERENCE.
- Edit routing.md → добавить route «налоги, дедлайны, отчётность, ваш бухгалтерский сервис → читать region-taxes.html».
- Bash
vector_memory.py learn "..."reference. - Отвечает: «Сохранил в 4 местах. Триггеры: ... В новой сессии при запросе „налоги“ я открою
region-taxes.htmlи отвечу из него.»
Где находятся файлы памяти (для справки)
~/.claude/
├── rules/
│ └── routing.md ← Уровень 3 (жёсткий route)
└── projects/<проект>/ ← имя кодируется из пути проекта, у каждого своё
└── memory/
├── MEMORY.md ← Уровень 2 (индекс, грузится каждую сессию)
└── <slug>.md ← Уровень 1 (детали топика)
~/.claude/tools/
└── vector_memory.py ← Уровень 4 (семантический поиск на Qdrant local, есть в паке)
Связано
auto-learning— для эфемерной памяти (feedback, project state)memory-search— для проверки что уже сохраненоmemory-stats— статистика по vector memorydream— периодическая консолидация памяти