Зачем разделять память на уровни
Полгода назад у меня был один CLAUDE.md на 600 строк. Туда стекалось всё: стек проекта, мои предпочтения, незавершённые задачи, факты о клиентах, фидбек от прошлых сессий. Через месяц этот файл стал бесполезен — Claude в каждой сессии читал его, тратил контекст на ненужные детали, путался в активных и старых задачах.
Я разнёс это по четырём уровням. Каждый отвечает за своё, каждый загружается в нужный момент, ничего не дублируется. CLAUDE.md съёжился до 200 строк, и при этом проекту стало известно про меня в разы больше.
Расскажу систему, которая у меня сейчас работает на ErgonLab, SkandiKlubb, HealthCompanion и десятке других проектов.
Уровень 1: CLAUDE.md — то, что НЕ меняется
CLAUDE.md — главный файл проекта в его корне. Тут живёт всё, что верно всегда для этого проекта:
- Стек (точные версии).
- Структура папок со смыслами.
- Конвенции (именование, тон документов, язык).
- Ключевые файлы, которые нельзя трогать.
- Запреты (НИКОГДА).
Это не дневник. Это паспорт проекта. Открыл — понял, куда попал.
Пример из моего ErgonLab CLAUDE.md:
## Стек
- Сайт: Next.js 14+, TypeScript strict, Tailwind 4, shadcn/ui
- Боты: Python 3.13+, aiogram 3.22+, aiosqlite
- AI: Claude Sonnet 4 через OpenRouter
## Ключевые файлы — НЕ менять
- ИДЕЯ.md — исходная стратегия
- CLAUDE.md — этот файл
- archive/ — историческая ценность
Этот блок не меняется месяцами. Если стек переехал на Next.js 15 — обновлю. Если архив переименовали — обновлю. Но активные клиенты, текущие задачи, что сегодня сломалось — сюда не пишу.
Уровень 2: MEMORY.md — то, что НЕ закончено
MEMORY.md — это файл «что я сейчас не дописал». Короткие записи о незавершённых сессиях, текущих задачах, где-то на середине.
У меня MEMORY.md лежит в ~/.claude/projects/<project-slug>/memory/MEMORY.md. Структура:
# ErgonLab Memory Index
## Незавершённые сессии
- [Клиент A — контент-аудит готов](session_client_a_audit.md)
- [Клиент B — отправлена гипотеза](session_client_b_hypothesis.md)
- [Avito Sprint — приостановлен](session_avito_sprint.md)
## Критичные правила
- [НИКОГДА не отправлять без одобрения](feedback_never_send_without_approval.md)
- [Лана — изоляция чатов](feedback_lana_chat_isolation.md)
Сам MEMORY.md — это только индекс. По строке на запись, ссылка на детальный файл. Через 3 месяца работы у меня там сейчас около 60 записей, и файл всё равно читается за минуту.
Зачем нужен такой индекс отдельно: когда Claude открывает проект, он первым делом подтягивает MEMORY.md и видит карту. Если ему нужна деталь — переходит по ссылке к конкретному файлу. Если не нужна — не тратит контекст.
Что попадает в MEMORY.md:
- Незавершённая сессия (что доделал, что нет, какие следующие шаги).
- Свежий фидбек от меня (правило, которое я выдал во время работы).
- Активный клиентский кейс с открытыми вопросами.
Что НЕ попадает:
- Стек проекта (это в CLAUDE.md).
- Полный лог за день (это плагин claude-mem или git log).
- Подробности — только индексная строка, детали в отдельном файле.
Уровень 3: Persistent memory — накопленные факты
Это папка ~/.claude/projects/<project-slug>/memory/ — там лежат отдельные .md файлы, по одной теме на файл.
У меня структура такая:
memory/
MEMORY.md ← индекс
feedback_never_send_without_approval.md
feedback_lana_chat_isolation.md
feedback_lana_professional_tone.md
client_a.md
client_b.md
session_client_a_breakthrough.md
research_avito_march2026.md
research_mcp_servers_march2026.md
project_vps_migration_apr2026.md
...
Префиксы — это категории:
feedback_*— правила, которые я выдал во время работы. Например, «Лана — без наигранной заботы о времени» (после случая, когда она написала «понимаю что вы занятой человек»).client_*— карточка клиента. Кто, на каком этапе, что обсуждали.session_*— итог одной рабочей сессии. Что сделано, где остановились, что дальше.research_*— собранное исследование (рынок, конкуренты, инструменты).project_*— крупный кусок проекта, который тянется через несколько сессий.contact_*— люди, которые не клиенты, но важны (партнёры, друзья, кураторы).tool_*— заметка про инструмент или интеграцию.
Один факт — один файл. Не сваливаю «всё про клиента» в один разросшийся файл — у клиента свой client-файл (общий контекст), отдельные session-файлы по каждой проведённой сессии, project-файлы по крупным задачам (контент-аудит, архитектура воронки).
Почему это работает лучше, чем один большой файл:
- Когда Claude нужен факт по клиенту — он подтягивает client-файл и нужный session-файл. Не тащит всю историю.
- Когда я выдаю новый фидбек — создаю новый feedback-файл, не редактирую старый.
- Когда работа закончена — переношу запись из «Незавершённые» в архив или удаляю.
Уровень 4: settings.json — что Claude может делать сам
Это не память про факты, а конфиг поведения. Что AI может делать без подтверждения, какие хуки срабатывают автоматически, какие переменные среды доступны.
В settings.json я кладу:
- Разрешения на bash-команды (
npm install,git status,gh pr list— без подтверждения). - Хуки на события (форматирование при сохранении, security-warning на опасные команды).
- Переменные среды для текущего проекта.
Это другой уровень мышления. CLAUDE.md и MEMORY.md — про «что я знаю». settings.json — про «что я могу делать сам, без спроса».
Пример: если у меня в settings.json разрешено git status, Claude его выполнит, не спрашивая. Если нет — каждый раз будет «можно ли запустить?». На активных проектах разрешённый список из 20-30 команд экономит огромное количество кликов.
Главные антипаттерны
1. Свалить всё в CLAUDE.md
Самая частая ошибка. Симптомы:
- CLAUDE.md > 500 строк.
- В нём смешаны стек, активные задачи, фидбек, имена клиентов с переписками.
- Через месяц работы там устаревшая информация, которую боишься удалить.
Лечение: вынеси активное в MEMORY.md, факты в memory/
2. Тащить ежедневный лог в memory
Memory — это не дневник. Если я каждый день буду писать «сегодня сделал X, Y, Z» — через месяц там будет 30 файлов с похожими названиями, и я в них утону.
Для логов есть плагин claude-mem (он хранит timeline отдельно от persistent memory) и git log (что коммитил — то и сделал).
В memory попадает только то, что нужно помнить дольше одной сессии: правило, факт, контекст клиента, незакрытый вопрос.
3. Дублировать факт в 2-3 местах
Если правило «не отправляй без одобрения» написано:
- В глобальном
~/.claude/CLAUDE.md, - В проектном
CLAUDE.md, - И в
feedback_never_send_without_approval.mdв memory —
то через полгода ты не вспомнишь, где источник истины. Поменял в одном — забыл в двух других. AI читает все три и в каком-то моменте видит противоречие.
Правило: один факт — одно место. В остальных — ссылка.
Личные правила работы → глобальный CLAUDE.md. Конвенции проекта → проектный CLAUDE.md. Конкретный фидбек по конкретной ситуации → отдельный feedback-файл в memory.
Между уровнями — ссылки, не копии.
4. Не чистить memory
Через 3 месяца у меня было 80+ записей. Половина — про задачи, которые давно закрыты. Они отвлекали Claude — он подтягивал старые контексты к новым задачам.
Я завёл протокол: раз в две недели открываю MEMORY.md и прохожусь по списку. Записи старше 4 недель из категории «незавершённые сессии» — либо архивирую, либо удаляю.
В моём глобальном CLAUDE.md есть правило: «если в MEMORY.md больше 15 записей в одном проекте — предложи очистку». Это срабатывает само, мне не нужно помнить.
Как это работает на ErgonLab
Покажу на своём примере. У меня сейчас:
Глобальный ~/.claude/CLAUDE.md — 250 строк. Правила работы (язык, тон, запреты), модель партнёрства с AI, иерархия инструментов, список MCP-серверов с триггерами.
Проектный ErgonLab/CLAUDE.md — 300 строк. Концепция, команда (Лана, Саша), стек, структура папок, активные клиенты с их статусами, конвенции для файлов клиентов и кейсов.
memory/MEMORY.md (индекс) — 60 строк. Список незавершённых сессий, критичных правил, продуктовых исследований, инфраструктуры, клиентов.
memory/*.md (60+ файлов) — каждый про одну вещь. От правила «Лана — длинные тексты с абзацами» до полного отчёта по миграции VPS в апреле.
settings.json — разрешения на типичные bash-команды, хук на конвертацию excalidraw в PNG, хук на палитру SkandiKlubb.
Когда я открываю Claude Code в этом проекте — за две секунды загружается всё нужное. Я могу с порога сказать «доделай контент-аудит клиента» — и Claude знает, кто это, что такое контент-аудит, что было сделано в прошлой сессии, какой следующий шаг, какие правила для общения с ним, какой тон в карточке клиента.
Ни одного «а что это за проект?» больше.
Чек-лист для своей системы
- Открой свой CLAUDE.md. Если он > 400 строк — пора разносить.
- Есть ли у тебя
MEMORY.mdкак индекс? Если нет — создай. Если есть, но в нём детали, а не ссылки — переноси детали в отдельные файлы. - Есть ли в твоей системе категории через префиксы (
client_*,feedback_*,session_*)? Если нет — заведи. Через 50 файлов это спасёт. - Когда последний раз чистил MEMORY.md? Если «не помню» — пора.
- Дублируются ли правила между глобальным и проектным CLAUDE.md? Если да — выбери одно место.
Что сделать прямо сейчас
- Создай папку
memory/рядом со своим CLAUDE.md (или используй стандартный путь Claude Code). - Заведи
MEMORY.mdкак индекс — пока на 5 строк. - Возьми из своего раздутого CLAUDE.md один блок «текущие задачи» — вынеси в
memory/MEMORY.mdсо ссылками на детальные файлы. - Через неделю — повтори для блока «фидбек».
Через месяц у тебя будет система, которая помнит про твой проект больше, чем ты сам. И при этом не тонет в собственной памяти.