Контекстная амнезия - болезнь, от которой мы лечимся неправильно
Вспомните: вы потратили 40 минут, объясняя Claude архитектуру микросервиса. Расписали эндпоинты, схемы БД, бизнес-логику. А через 20 сообщений он спрашивает: "Какой порт у сервиса payments?" И вы срываетесь.
Я был там. Это бесит. Но дело не в модели - дело в том, что вы используете только один механизм памяти из пяти, которые есть в Claude Code. Большинство разработчиков живут с одним CLAUDE.md и удивляются, почему контекст деградирует. Спойлер: даже контекст-инжиниринг для coding-агентов не сработает, если не понимать, как эти механизмы взаимодействуют.
Давайте разберем каждый по косточкам. Без воды, с реальными примерами и граблями.
1 CLAUDE.md - фундамент, который все кладут криво
CLAUDE.md - это файл с инструкциями, который Claude Code читает при старте сессии. Глобальный (в ~/.claude/) действует для всех проектов, локальный (в корне репо) - для конкретного.
90% разработчиков пишут туда "Я использую Python 3.11 и FastAPI". И всё. Этого хватит на первые 10 сообщений, но для длинной сессии - нет.
Типичная ошибка: класть в CLAUDE.md всё, что должно быть в памяти. Там место для правил, не для данных. Не пишите "база данных называется prod-db-01" - это должен хранить другой механизм.
Правильный CLAUDE.md описывает правила поведения:
# Глобальные правила
- Всегда уточняй, если не уверен в архитектурном решении
- Для генерации тестов используй pytest >= 7.0
- Не меняй версию Python без моего явного разрешения
- При рефакторинге сначала покажи план, потом код
Локальный CLAUDE.md может содержать описание модулей и их зоны ответственности. Но не конкретные значения. Подробнее про настройку CLAUDE.md я писал в статье про Context Engineering для Claude Code на длинных задачах.
2 ~/.claude/memory/ - ваша долгосрочная память на диске
Этот механизм - темная лошадка. Многие не знают, что Claude Code может читать файлы из ~/.claude/memory/ и использовать их как контекст в начале сессии. Но! Claude не ходит туда сам по каждому запросу - он загружает эти файлы при старте.
Структура памяти:
~/.claude/
memory/
project_x/
architecture.md # Схема связей сервисов
credentials.yml # Имена реальных БД, хостов (без паролей!)
recent_decisions.md # Почему вы выбрали MongoDB вместо Postgres
global/
preferences.md # Ваши личные предпочтения по стилю кода
glossary.md # Термины предметной области
claude --memory project_x - он подгрузит только нужное, сэкономив токены.Важный нюанс: Claude читает эти файлы один раз. Если вы изменили файл посередине сессии - он не узнает об этом, пока не сделаете /reload или не перезапустите сессию. Помните об этом, когда работаете с динамическими данными.
3 /memory - сессионная память, которую вы забываете чистить
Команда /memory (или /m) - это временная записная книжка внутри сессии. Вы добавляете факты командой /memory add "payments сервис использует порт 8081".
Но есть подвох: /memory хранится только в текущей сессии. Вы закрыли терминал - всё пропало. Это не замена файлам. Используйте /memory для контекста, который живёт 1-2 дня: "сегодня работаем над веткой feature/x", "текущий баг - таймаут в 30 секунд".
Лучшая практика - в начале дня проговорить /memory add с ключевыми фактами, а вечером перенести важное в ~/.claude/memory/. И обязательно чистите /memory командой /memory clear перед стартом новой задачи, чтобы не засорять контекст.
Ошибка: использовать /memory для хранения 50 фактов. Контекстное окно не резиновое - каждая запись съедает токены. Если заметили, что Claude стал отвечать медленнее или терять нить разговора - проверьте /memory show, скорее всего там бардак.
4 Автоматическое сжатие контекста - невидимая рука, которая режет ваши данные
Когда сессия разрастается, Claude Code начинает сам сжимать старые сообщения в краткие резюме. Это черный ящик. Вы не видите, что именно было выброшено. И часто именно там были важные детали: точные названия переменных, пути к файлам, последовательность действий.
Механизм сжатия встроен в модель Claude (начиная с Claude Sonnet 4.5, а в Claude Opus 4.6 - еще агрессивнее). Вы не можете его отключить полностью, но можете контролировать триггеры:
- Не засоряйте контекст логами и длинными выводом команд - используйте
@readдля чтения файлов. - Периодически делайте
/compact- это принудительно сжимает историю, но вы решаете, что оставить, перенося важное в/memory. - Следите за количеством токенов в сессии:
/tokensпокажет примерную цифру. Если перевалило за 80% окна - пора чистить.
Как узнать, что сжатие сработало? Claude начнет давать общие ответы, переспрашивать то, что уже обсуждали, или использовать фразы "как вы упоминали ранее" - но неверно. Если заметили такое - бейте тревогу.
5 Внешние файлы и @-ссылки - контекст по требованию
Самый недооцененный механизм. Вы можете в любой момент сказать Claude "прочитай файл @src/api/routes.py" или "посмотри доку @docs/architecture.md". Claude загрузит этот файл в контекст.
Но хитрость в том, что каждый @read тратит токены. Если вы подгрузите 10 файлов по 1000 строк каждый - контекст заполнится мгновенно, и сжатие отрежет самое нужное.
Правильная стратегия:
- Никогда не загружайте целые файлы без необходимости. Используйте
@src/api/routes.py:100-120- прочитать только строки 100-120. - Для документации используйте отдельный
CLAUDE_DOCS.md, который подключается черезCLAUDE.md(установкаCLAUDE_DOCS_FILE=docs/guide.mdв переменных окружения). - Если часто подгружаете одни и те же файлы - вынесите их суть в
~/.claude/memory/.
Важно: @-ссылки работают только для файлов внутри проекта. Для внешних ресурсов используйте claude --url или явно скачивайте и передавайте.
Сравнительная таблица механизмов
| Механизм | Долговечность | Затраты токенов | Автоматизация | Когда использовать |
|---|---|---|---|---|
| CLAUDE.md | Постоянная (между сессиями) | Низкие (читается 1 раз) | Автоматически | Правила, конвенции, общие настройки |
| ~/.claude/memory/ | Постоянная (пока не удалите) | Средние (загружается при старте) | По инициативе (флаг --memory) | Долгосрочные факты, архитектура, глоссарий |
| /memory | Только в сессии | Низкие (маленький объем) | Ручная команда | Временный контекст задачи |
| Сжатие контекста | Автоматическое (внутри сессии) | Экономит токены | Автоматически | Когда контекст переполнен - спасает, но ненадежно |
| @-ссылки | Только при запросе | Высокие (весь файл) | Ручная вставка | Точечное чтение файлов, диагностика |
Шестое чувство: как комбинировать и не сойти с ума
Вы не обязаны использовать все пять механизмов одновременно. Но если вы используете только один - вы проигрываете. Вот рабочий пайплайн, который я внедрил для своей команды:
- Утро: запуск сессии с
claude --memory project_x- подгружаем данные из ~/.claude/memory/. - В начале задачи:
/memory addфиксируем цель и ключевые константы (порты, имена веток). - В процессе: точечные @-ссылки на нужные файлы, избегаем чтения лишнего.
- Каждые 30-40 сообщений:
/compact+/memory clear, затем/memory addс самым важным. - Вечером: переносим ключевые факты из /memory в ~/.claude/memory/ и обновляем CLAUDE.md при необходимости.
Подробнее про управление сессиями и горячие клавиши читайте в гайде по горячим клавишам Claude Code.
Топ-3 ошибки, которые превращают память в тыкву
Ошибка 1: Дублирование данных - факт хранится и в CLAUDE.md, и в ~/.claude/memory/, и в /memory. При обновлении забываете где-то поправить. Итог: Claude видит противоречия. Решение: одно место для каждого типа данных.
Ошибка 2: Слишком большой CLAUDE.md - файл на 500 строк. Claude тратит кучу токенов на его чтение, а потом не может вспомнить, что вы просили сделать. Решение: выносите факты в memory, оставляйте только логику поведения.
Ошибка 3: Забываете про /reload - изменили файл в ~/.claude/memory/, а Claude продолжает работать со старой версией. Решение: после изменений в памяти делайте /reload.
Частые вопросы (FAQ)
Может ли Claude Code сам записывать в ~/.claude/memory/?
Нет, это ручное управление. Anthropic не дает модели права писать на диск без вашего ведома. Только через команду /memory write-to-disk (экспериментальная в Claude Code 0.6+, на май 2026).
Как проверить, сколько токенов занимает /memory?
Команда /tokens показывает примерную оценку для всей сессии, включая /memory. Отдельно не подсчитать, но можно сделать /memory show и оценить глазами.
Что будет, если контекстное окно заполнится полностью?
Claude Code автоматически запустит сжатие - старые сообщения будут заменены краткой сводкой. Если сжатие не помогает - сессия может упасть с ошибкой. Всегда следите за /tokens.
Поддерживает ли Claude Code --memory для глобальных файлов?
Да, флаг --memory работает и для глобальных, и для проектных путей. Можно указать несколько папок через запятую: --memory global,project_x.
Финальный совет: не ждите чуда от одного механизма
Самая опасная иллюзия - думать, что если положить всё в CLAUDE.md, то память будет вечной. Контекстное окно - это бюджет. Каждый механизм - это статья расходов. CLAUDE.md - это холодильник, куда вы кладете продукты. ~/.claude/memory/ - это кладовая. /memory - это список покупок на сегодня. @-ссылки - доставка конкретного продукта. А сжатие - это холодильник, который сам выбрасывает просрочку.
Вы - шеф-повар. Только вы решаете, что и когда готовить. Не перекладывайте это на автоматику. Начните с малого: сегодня добавьте один факт в ~/.claude/memory/, завтра попробуйте /compact - и вы увидите, как Claude перестанет тупить.
А если хотите копнуть ещё глубже - загляните в 10 скрытых настроек Claude Code. Там есть флаги, которые дадут вам полный контроль над памятью.