Часть II · Контекст и конфигурация · Глава 02
02

Память: CLAUDE.md и rules

Самый дешёвый способ поднять качество вывода — не лучший промпт, а хорошо написанный CLAUDE.md. Разберём, как он грузится (особенно в монорепо), чем от него отличаются правила по путям, и какие вообще бывают виды памяти у Claude Code.

~15 минут источник: best-practice/claude-memory · reports/claude-agent-memory Claude Code v2.1.179
§1 · CLAUDE.md

Самый сильный рычаг на проект

CLAUDE.md — это файл проектных инструкций, который харнесс подмешивает в контекст автоматически. Конвенции кода, формат коммитов, что делать и чего не делать. Один хорошо написанный файл влияет на каждый ответ сильнее, чем любой разовый промпт, потому что он попадает в тот самый «эффективный контекст» из Главы 00.

Главное правило по объёму простое: держи каждый файл короче 200 строк. Длинный CLAUDE.md модель соблюдает хуже, чем короткий и резкий. Лучшее, что с ним можно сделать, — относиться как к общему документу команды, а не к личной шпаргалке.

Держите один CLAUDE.md на репозиторий. Закоммитьте в git, и пусть вся команда дополняет его несколько раз в неделю. Как только Claude делает что-то не так, добавьте это в CLAUDE.md, чтобы в следующий раз он так не делал.
Boris Cherny · создатель Claude Code

Отсюда вырастает «компаундная инженерия»: при ревью можно тегнуть @claude на чужом PR и попросить занести правило в CLAUDE.md прямо в составе пул-реквеста. Файл становится живой памятью команды, а не мёртвой документацией.

Пример структуры CLAUDE.md: разделы с конвенциями проекта, командами сборки и правилами, которые Claude подмешивает в контекст.
Плашка 1.1 · CLAUDE.md — проектные инструкции, попадающие в контекст автоматически. Из презентационных материалов репозитория.
Где живут файлы

./CLAUDE.md — проектный, в git. ~/.claude/CLAUDE.md — глобальный, для всех сессий. CLAUDE.local.md — личные правки, в .gitignore, не шарятся с командой.

§2 · Загрузка в монорепо

Вверх — сразу, вниз — лениво, вбок — никогда

В монорепо CLAUDE.md можно положить в каждый компонент. Чтобы это не раздувало контекст, Claude Code грузит их по двум разным механизмам.

Практический вывод: общие конвенции — в корневой CLAUDE.md (они доедут вниз ко всем), специфику компонента — в его CLAUDE.md (она не будет мусорить в чужих сессиях). Оригинальная схема, с которой Борис это пояснял:

Схема Бориса Черни: как CLAUDE.md загружается в монорепо вверх по дереву при старте и лениво вниз при чтении файлов.
Плашка 2.1 · Оригинальное пояснение загрузки CLAUDE.md в монорепо. Boris Cherny на X.
§3 · Правила по путям

.claude/rules: грузить только когда нужно

CLAUDE.md из корня сидит в контексте всегда. Иногда это лишнее: инструкция про SQL-миграции не нужна, пока ты не трогаешь миграции. Для этого есть .claude/rules/*.md с полем paths: во frontmatter. Такое правило подгружается только когда Claude касается подходящих файлов.

.claude/rules/migrations.mdrule
---
paths:
  - "**/migrations/**"
  - "**/*.sql"
---
# Правила миграций
Каждая миграция обратима. Никаких DROP без бэкапа.
Имя файла: YYYYMMDD_описание.sql
Без paths: правило грузится в каждую сессию, как CLAUDE.md. С paths: — лениво, только при работе с миграциями. Это та самая ленивая загрузка из Главы 00, только под твоим контролем.
Когда что брать

CLAUDE.md — то, что нужно почти всегда (стиль, сборка, общие табу). rules с paths: — узкие инструкции под конкретные зоны кода. rules без paths: — то же, что CLAUDE.md, грузится всегда. Бюджет контекста не бесконечен: чем больше лениво, тем чище окно.

§4 · Четыре вида памяти

Кто пишет, кто читает, какой охват

«Память» в Claude Code — это не одна штука, а четыре разных механизма. Путаница между ними — частый источник вопросов «почему он это забыл». Они дополняют друг друга.

Четыре системы памяти
СистемаКто пишетКто читаетОхват
CLAUDE.mdты, вручнуюглавный Claude + все агентыпроект
Авто-памятьглавный Claude, самтолько главный Claudeпроект × пользователь
/memoryты, через редактортолько главный Claudeпроект × пользователь
Память агентасам агенттолько этот агентнастраивается

Ключевое различие: CLAUDE.md ты ведёшь руками для всей команды, а память агента агент ведёт сам для себя. Агент при этом читает и то, и другое: проектный CLAUDE.md как общий контекст и свою память как личные накопления.

§5 · Память агента

Субагент, который учится со временем

До версии v2.1.33 (февраль 2026) каждый вызов агента начинался с чистого листа. Поле memory во frontmatter дало каждому субагенту свой markdown-склад знаний. Мы уже видели его в Главе 01 у weather-agent (memory: project для истории замеров).

Три скоупа памяти агента (зеркалят иерархию настроек)
СкоупГде лежитВ gitДля чего
user~/.claude/agent-memory/<name>/нетЗнание между проектами (дефолт по рекомендации).
project.claude/agent-memory/<name>/даПроектное знание, которое команда шарит.
local.claude/agent-memory-local/<name>/нет (gitignore)Проектное, но личное.

Механика простая: на старте первые 200 строк файла MEMORY.md вшиваются в системный промпт агента, инструменты Read/Write/Edit включаются автоматически, и агент сам ведёт свой каталог. Перерастёт 200 строк — выносит детали в тематические файлы.

.claude/agents/api-developer.md + складagent + memory
---
name: api-developer
model: sonnet
memory: project
skills: [api-conventions, error-handling-patterns]
---
Реализуй эндпоинты. Перед стартом просмотри свою память,
после завершения запиши архитектурные решения и паттерны.

# на диске:
.claude/agent-memory/api-developer/
├── MEMORY.md           # первые 200 строк грузятся на старте
├── auth-patterns.md     # тематический файл
└── pagination.md        # тематический файл
Связка skills (статичное знание на старте) + memory (динамичное, копится со временем). Память не сработает сама: попроси агента в промпте читать и обновлять её.
Совет по скоупу

user — кросс-проектное знание (рекомендованный дефолт). project — то, что команда должна видеть в git. local — личное и непушимое. Те же три уровня, что и у настроек.

Шпаргалка главы

Шесть тезисов на вынос

  1. CLAUDE.md — сильнейший рычаг на проект. Держи короче 200 строк, коммить в git, дополняй командой, заноси туда каждую ошибку Claude.
  2. Загрузка: вверх — сразу, вниз — лениво, вбок — никогда. Предки грузятся на старте, потомки при чтении файлов, соседи не грузятся.
  3. Раскладка в монорепо: общее в корень, специфику в компонент, личное в CLAUDE.local.md.
  4. rules с paths: — узкие правила, что подгружаются лениво только на нужных файлах. Экономят окно.
  5. Четыре памяти: CLAUDE.md (ты → все), авто-память и /memory (главный Claude), память агента (агент → себе).
  6. Память агента (v2.1.33): скоупы user/project/local, 200 строк MEMORY.md на старте. Попроси агента ей пользоваться явно.