К содержимому
Claude Code с 0:полный курс
Claude CodeАвтор: Михаил Кузьмицкий

Память Claude Code: CLAUDE.md, @импорты и правила для папок

Коротко

Когда CLAUDE.md разрастается, каждая его строка загружается в каждую сессию. Разбираем импорты @path, правила в .claude/rules с полем paths, связку с AGENTS.md и два способа проверить, что инструкция вообще загрузилась.

В начале проекта CLAUDE.md — это десяток строк: как запускать тесты, как называть ветки. Через пару месяцев в нём правила для API, для тестов, для вёрстки, для миграций базы и ещё абзац про то, почему мы не используем одну библиотеку. И вся эта простыня загружается в каждую сессию — даже когда ты просто правишь опечатку в README.

У Claude Code есть два инструмента, чтобы навести порядок: импорт и правило. Они решают разные задачи, и путать их дорого.

Раскрытый блокнот на столе рядом с аккуратной полкой папок

Импорт @path: порядок, но не экономия

Строка с @ и путём подгружает другой файл вместе с CLAUDE.md:

# Проект linkcheck

@AGENTS.md

- Команды npm: @package.json
- Архитектура: @docs/architecture.md

Импорт удобен, когда хочется разложить память по тематическим файлам. Но запомни главное: контекст он не экономит. Импортированный файл загружается всегда, вместе с тем файлом, который его импортирует. Это способ упорядочить, а не способ облегчить.

Две мелочи, на которых спотыкаются чаще всего:

  • путь тянется до первого пробела, поэтому не ставь точку сразу после него;
  • путь считается от файла, где стоит импорт, а не от папки, в которой ты запустил Claude.

Если импортировать файл вне рабочей папки, например @~/notes.md, при первом использовании в проекте Claude Code попросит одобрения. Откажешь — импорт так и останется выключенным.

Ловушка с AGENTS.md

Многие проекты уже держат инструкции для ИИ-агентов в AGENTS.md. Тут важная деталь: если в проекте есть CLAUDE.md, Claude читает его вместо AGENTS.md. Правила из AGENTS.md молча пропадают.

Лечится одной строкой. Поставь первой строкой CLAUDE.md импорт:

@AGENTS.md

Теперь правила живут в одном месте, и их видят и Claude, и другие агенты.

Правило для папки: загружается, только когда нужно

Вот что действительно экономит контекст. Правило — это Markdown-файл в папке .claude/rules/. Без заголовка paths оно загружается при старте, как обычный CLAUDE.md. А с заголовком — только когда Claude работает с подходящим файлом:

---
paths:
  - "test/**/*.js"
---

# Тесты

- Используй node:test и node:assert/strict, других библиотек не подключай.

Правила про тесты больше не занимают место, пока ты правишь вёрстку. Шаблоны считаются от корня проекта: * не выходит за пределы одной папки, **/ проходит через любое число папок, а фигурные скобки вроде src/**/*.{ts,tsx} тоже работают.

И главная тонкость, из-за которой правило «не работает»: оно срабатывает, когда Claude читает подходящий файл своим инструментом Read. Если Claude посмотрел файл командой cat в оболочке, правило не подгрузится.

Что и когда попадает в контекст

Файл инструкцийКогда загружается
CLAUDE.md в корне и правило без pathsпри старте сессии
файл из импорта @pathвместе с файлом, который его импортирует
правило с pathsкогда Claude читает подходящий файл инструментом Read
автопамять — заметки, которые Claude ведёт сампри старте: первые 200 строк или 25 КБ индекса MEMORY.md

Для личных инструкций к проекту, которые не нужны команде, есть CLAUDE.local.md: его создают руками и не коммитят.

Claude не слушается? Сначала проверь загрузку

Когда инструкцию игнорируют, рука тянется переписать её жирным и заглавными. Но половина такого «непослушания» — это файл, который просто не загрузился: правило с опечаткой в шаблоне, AGENTS.md без импорта, правка посреди сессии. Поэтому порядок такой: сначала убедись, что файл в контексте, и только потом работай над формулировкой.

Способ 1: /context all. Обычный /context может свернуть список, а all раскрывает его. В разделе Memory files видно, что загружено при старте. Правила с paths появятся там только после того, как Claude прочитает подходящий файл.

Способ 2: хук InstructionsLoaded. Он срабатывает при каждой загрузке CLAUDE.md, правила или импорта и сообщает причину. Положи его в отдельный файл, например .practice/loaded-hook.json:

{
  "hooks": {
    "InstructionsLoaded": [
      { "hooks": [ { "type": "command", "command": "jq -r '[.load_reason, .file_path] | @tsv' >> \"$CLAUDE_PROJECT_DIR/.practice/loaded.txt\"" } ] }
    ]
  }
}

Запусти сессию с ним: claude --settings .practice/loaded-hook.json. В логе у каждой строки будет причина: session_start — загружено при старте, include — подтянуто импортом, path_glob_match — правило сработало по шаблону.

Нет строки path_glob_match для твоего правила? Сравни шаблон с реальными файлами через git:

git ls-files ':(glob)src/api/**/*.js'

Пустой вывод — шаблон ни с чем не совпадает. Классика жанра: правило для source/** в проекте, где код лежит в src/.

Правка посреди сессии

Claude Code читает CLAUDE.md проекта один раз, при старте. Поправил файл — правка дойдёт до сессии после /clear, /compact или перезапуска. А чтобы найти инструкции, которые противоречат друг другу или ссылаются на удалённые файлы, запусти /doctor prompt-audit: он предложит правки и ничего не изменит, пока ты не попросишь.

Что не стоит класть в память

CLAUDE.md — это контекст, а не настройка, которую Claude обязан исполнить. Правило, которое нельзя нарушать никогда, оформляй хуком, а не строчкой в памяти. А длинные процедуры для редких задач выноси в навыки: каждая строка CLAUDE.md загружается в каждую сессию, и короткий файл работает лучше длинного.

Частые вопросы

Экономит ли импорт @path место в контексте?

Нет. Импортированный файл загружается всегда, вместе с файлом, который его импортирует. Импорт помогает разложить память по файлам, а экономят контекст правила в .claude/rules с полем paths.

Читает ли Claude Code файл AGENTS.md?

Если в проекте есть CLAUDE.md, Claude читает его вместо AGENTS.md. Чтобы использовать правила из AGENTS.md, поставь в первую строку CLAUDE.md импорт @AGENTS.md.

Почему правило из .claude/rules не загрузилось?

Правило с paths загружается, только когда Claude читает подходящий файл инструментом Read, — не командой cat. Если и после этого его нет в /context all, проверь шаблон через git ls-files: скорее всего, он не совпадает с настоящими путями.

Потренируйся

Всё это — тема урока «Память проекта по-взрослому» пятого уровня курса «Claude Code: уровень профи». В тренажёре нужно собрать CLAUDE.md с импортом и выбрать черновик правила, чей шаблон совпадает с настоящей папкой. Если CLAUDE.md для тебя пока в новинку, начни с нашего вводного гайда по CLAUDE.md, а команды под рукой — в шпаргалке по Claude Code.

Читайте также

Попробуй на практике

Бесплатные интерактивные курсы по теме — прямо в браузере, с нуля.