Файл CLAUDE.md: память проекта
Каждая сессия Claude Code начинается с пустого контекста. Всё, что агент должен знать о проекте постоянно — команды сборки, соглашения, ловушки, — приходится либо повторять каждый раз, либо записать один раз в CLAUDE.md. Это самый простой и самый важный инструмент настройки. В уроке разберём, как им пользоваться так, чтобы агент действительно следовал инструкциям.
Что это и где лежит
CLAUDE.md — обычный markdown-файл. Claude Code загружает его в контекст при старте сессии, вместе с системными инструкциями. Расположение определяет область действия:
| Область | Путь | Для чего | С кем делится |
|---|---|---|---|
| Организация | /Library/Application Support/ClaudeCode/CLAUDE.md (macOS), /etc/claude-code/CLAUDE.md (Linux) |
Стандарты компании, политики | Все на машине; управляется IT |
| Пользователь | ~/.claude/CLAUDE.md |
Личные предпочтения для всех проектов | Только вы |
| Проект | ./CLAUDE.md или ./.claude/CLAUDE.md |
Соглашения проекта, команды, архитектура | Команда через git |
| Локально | ./CLAUDE.local.md |
Личные настройки для этого проекта | Только вы; добавьте в .gitignore |
Файлы не переопределяют друг друга, а склеиваются: сначала общие, потом более специфичные, так что инструкции проекта идут после пользовательских. Claude Code также поднимается по дереву папок вверх от рабочей и загружает CLAUDE.md из родительских каталогов — удобно для монорепозиториев. Файлы в подпапках подгружаются, когда агент читает файлы из них.
Проверить, что файл загрузился, можно командой /context: он будет в списке «Memory files». Команда /memory открывает файлы памяти в редакторе.
С чего начать: /init
Команда /init анализирует проект и генерирует стартовый CLAUDE.md с командами сборки, тестов и найденными соглашениями. Если файл уже есть, /init предложит улучшения, а не перезапишет. Она также подхватывает правила из .cursor/rules и .github/copilot-instructions.md, если они есть. Если в репозитории уже используется AGENTS.md для других агентов, достаточно импортировать его: строка @AGENTS.md в CLAUDE.md подставит содержимое.
Сгенерированный файл — черновик. Самое ценное в CLAUDE.md — то, что агент не может вывести из кода: почему что-то сделано именно так, какие ловушки уже встречались, что запрещено.
Что писать, а что нет
Документация даёт понятную таблицу.
Включать:
- команды, которые агент не угадает: как запустить тесты одного модуля, как собрать под staging;
- правила стиля, отличающиеся от умолчаний;
- инструкции по тестированию и предпочитаемый раннер;
- этикет репозитория: именование веток, требования к PR;
- архитектурные решения, специфичные для проекта;
- особенности окружения: обязательные переменные, локальные сервисы;
- неочевидное поведение и типичные ловушки.
Не включать:
- всё, что агент прочитает в коде сам: структуру папок, список зависимостей;
- стандартные соглашения языка, которые модель и так знает;
- подробную документацию API — дайте ссылку;
- то, что часто меняется;
- длинные объяснения и туториалы;
- самоочевидное: «пиши чистый код».
Критерий для каждой строки: «если её убрать, агент начнёт ошибаться?» Если нет — убирайте. Раздутый CLAUDE.md хуже короткого: важные правила теряются в шуме, и агент начинает игнорировать половину. Ориентир из документации — до 200 строк. Команда /doctor для закоммиченного CLAUDE.md предлагает, что вырезать.
Пример для проекта
Файл для Next.js-приложения с Python-бэкендом в одном репозитории может выглядеть так:
# Проект: личный кабинет клиента
## Команды
- Фронтенд: `pnpm dev`, тесты `pnpm test -- <путь>` (не весь набор)
- Бэкенд: `uv run pytest tests/<модуль>`, миграции `uv run alembic upgrade head`
- Перед коммитом: `pnpm typecheck` и `uv run ruff check`
## Соглашения
- Используем pnpm, не npm
- API-обработчики живут в `backend/app/api/`, схемы — в `backend/app/schemas/`
- Компоненты — функциональные, без default export
- Переводы: строки только через `t()`, ключи в `locales/ru.json`
## Ловушки
- Тесты бэкенда требуют локальный Redis: `docker compose up redis`
- Не трогать `legacy/` — ждёт миграции, правки туда не принимаются
## Git
- Ветки `feature/<задача>`, коммиты на русском в повелительном наклонении
- PR без тестов на новую логику не принимаютсяОбратите внимание на конкретность. «Запускай pnpm test -- <путь>» проверяемо; «тестируй изменения» — нет. Если два правила противоречат друг другу, агент выберет любое, поэтому файл стоит перечитывать после каждого крупного изменения в проекте.
Импорты и .claude/rules/
CLAUDE.md может подключать другие файлы синтаксисом @путь:
См. @README для обзора и @package.json для списка команд.
- Git-процесс: @docs/git-instructions.mdИмпорты загружаются вместе с основным файлом, так что контекст они не экономят — только помогают организовать. Путь в обратных кавычках не импортируется, а остаётся текстом.
Для больших проектов есть папка .claude/rules/: по файлу на тему (testing.md, api-design.md, security.md). Правила без дополнительных пометок загружаются при старте наравне с CLAUDE.md. Правила с полем paths в front matter загружаются только когда агент работает с файлами по маске:
---
paths:
- "backend/app/api/**/*.py"
---
# Правила для API
- Каждый эндпоинт валидирует вход через Pydantic-схему
- Ошибки — только через `AppError`, не голые исключенияЭто и есть способ держать CLAUDE.md коротким: общее — в нём, частное — в правилах по маске. Личные правила для всех проектов кладут в ~/.claude/rules/.
Инструкции не равны запретам
Важно понимать, чем CLAUDE.md не является. Это контекст, а не конфигурация. Claude читает его и старается следовать, но гарантий нет — особенно для расплывчатых или противоречивых инструкций. Документация прямо говорит: чтобы заблокировать действие независимо от решения модели, нужен хук PreToolUse или правило deny в правах. «Не редактируй миграции» в CLAUDE.md — пожелание; хук, который возвращает код 2 на правку migrations/, — запрет.
Практическое правило: если инструкция должна срабатывать в определённый момент — перед коммитом, после каждой правки, — это хук. Если агент делает что-то правильно и без инструкции — инструкцию можно удалить. Если раз за разом пропускает одно правило — добавьте к этой строке «IMPORTANT», но только к ней: если выделять всё, не выделяется ничего.
Автоматическая память
Кроме CLAUDE.md есть второй механизм — автоматическая память. По ходу работы Claude сам записывает заметки: ваши поправки, предпочтения, контекст проекта, который не выводится из кода, ссылки на внешние ресурсы. Они хранятся в ~/.claude/projects/<проект>/memory/ с индексом MEMORY.md; первые 200 строк индекса загружаются в каждую сессию. Заметки можно читать и править как обычный markdown, а /memory показывает, что сохранено, и позволяет отключить механизм.
Разница простая: CLAUDE.md пишете вы — это правила; память пишет Claude — это наблюдения. Если вы говорите «всегда используй pnpm», Claude запишет это в память. Если хотите, чтобы правило было в CLAUDE.md, скажите «добавь это в CLAUDE.md» или впишите сами.
Когда пополнять
Документация даёт четыре сигнала: агент повторил одну и ту же ошибку; ревью поймало то, что агент должен был знать о проекте; вы второй раз пишете в чат одну и ту же поправку; новому коллеге понадобился бы тот же контекст. Каждый такой случай — строка в CLAUDE.md. Файл живёт в git, и команда пополняет его вместе; со временем он становится самым честным описанием того, как в проекте принято работать.
Попробуйте сами
10–15 мин на рабочем месте- Запустите
/initв своём проекте. Прочитайте результат и удалите всё, что агент мог бы прочитать в коде. Посмотрите, сколько осталось. - Вспомните три поправки, которые вы давали агенту за последнюю неделю. Превратите каждую в одну конкретную строку CLAUDE.md.
- Вынесите правила для одной подсистемы (например, API или тестов) в
.claude/rules/с маскойpaths. Проверьте через/context, что они не грузятся при старте, и через работу с файлом — что подгружаются при обращении.
Коротко
- CLAUDE.md читается при старте каждой сессии; проект, пользователь, организация и локальный файл склеиваются.
/initгенерирует черновик;/contextпоказывает, что загрузилось;/memoryоткрывает файлы.- Пишите то, что агент не выведет из кода: команды, ловушки, соглашения, отличные от умолчаний. До 200 строк.
.claude/rules/с полемpathsподгружает правила только для нужных файлов.- CLAUDE.md — контекст, не запрет. Запреты — через хуки и правила прав.
- Автоматическую память пишет Claude сам; правила пишете вы.
Видеоверсия
Сценарий озвучки · 546 слов, ≈ 4 мин
Каждая сессия Claude Code начинается с пустого контекста. Всё, что агент должен знать о проекте постоянно, приходится либо повторять, либо записать один раз в файл клод-эм-дэ. Это самый простой и самый важный инструмент настройки. Разберём, как им пользоваться так, чтобы агент действительно следовал инструкциям.
Клод-эм-дэ — обычный markdown-файл, который загружается при старте вместе с системными инструкциями. Расположение задаёт область. Файл в корне проекта — для команды, он живёт в git. Файл в домашней папке — ваши личные предпочтения для всех проектов. Файл с суффиксом «локал» в проекте — личные настройки для этого репозитория, его добавляют в игнор. Есть и уровень организации, которым управляют администраторы. Файлы не заменяют друг друга, а склеиваются: сначала общие, потом специфичные. Проверить, что загрузилось, можно командой «контекст».
С чего начать? Команда «инит» анализирует проект и генерирует черновик с командами сборки, тестов и найденными соглашениями. Если файл уже есть, она предложит улучшения. Но черновик — только начало. Самое ценное — то, что агент не выведет из кода: почему что-то сделано именно так, какие ловушки уже встречались, что запрещено.
Что писать? Команды, которые агент не угадает: как запустить тесты одного модуля, как собрать под staging. Правила стиля, отличающиеся от умолчаний. Этикет репозитория: ветки, требования к pull request'ам. Особенности окружения: локальный Redis для тестов. Ловушки. А чего не писать? Структуру папок и список зависимостей — агент прочитает сам. Стандартные соглашения языка. Подробную документацию — дайте ссылку. И самоочевидное вроде «пиши чистый код».
Критерий для каждой строки: если её убрать, агент начнёт ошибаться? Если нет — убирайте. Раздутый файл хуже короткого: важные правила теряются в шуме. Ориентир — до двухсот строк.
Возьмём пример. Проект с фронтендом на Next и бэкендом на Python. В файле — команды: как запускать тесты одного модуля, а не весь набор, что прогнать перед коммитом. Соглашения: используем pnpm, а не npm; где лежат обработчики API; строки только через функцию перевода. Ловушки: тестам нужен локальный Redis; папку legacy не трогать. И правила git: имена веток, язык коммитов, требование тестов в pull request'е. Всё конкретно и проверяемо.
Для больших проектов есть папка rules внутри папки точка-клод. По файлу на тему: тестирование, API, безопасность. А если указать в заголовке файла маску путей, правило загрузится только когда агент работает с подходящими файлами. Так общее остаётся в основном файле, а частное подгружается по необходимости. Это и есть способ держать файл коротким.
Теперь важное. Клод-эм-дэ — это контекст, а не конфигурация. Claude читает его и старается следовать, но гарантий нет. Чтобы заблокировать действие независимо от решения модели, нужен хук или правило запрета в правах. «Не редактируй миграции» в файле — пожелание. Хук, который блокирует правку папки миграций, — запрет. Правило простое: если инструкция должна срабатывать в определённый момент — это хук. Если агент делает что-то правильно без инструкции — инструкцию можно удалить.
И об автоматической памяти. Кроме файла, который пишете вы, есть заметки, которые Claude пишет сам: ваши поправки, предпочтения, контекст, не выводимый из кода. Они хранятся отдельно, первые строки индекса загружаются в каждую сессию. Разница простая: файл — правила, память — наблюдения. Скажете «всегда используй pnpm» — Claude запомнит. Хотите правило в файле — так и скажите: «добавь это в клод-эм-дэ».
Когда пополнять файл? Агент повторил ошибку. Ревью поймало то, что он должен был знать. Вы второй раз пишете одну поправку. Новому коллеге понадобился бы тот же контекст. Каждый случай — строка в файле. Со временем он становится самым честным описанием того, как в проекте принято работать.
В следующем уроке — субагенты: как выносить часть работы в отдельные контексты.
