#Организуйте память проекта и посмотрите, что загрузилось
Средний уровень · Урок 2 из 8 · около 20 минут · Нужно: Превратите повторяющийся процесс в скилл · Сверено с Claude Code v2.1.285 (stable) 06.10.2026
#Цель
К концу урока вы сможете разбить инструкции проекта на импорты и правила с областью действия, а также выяснить, какие файлы инструкций загрузились, если Claude какой-то из них не следует.
#Что понадобится
- Один из ваших репозиториев с закоммиченным
CLAUDE.md— в том виде, в каком его оставляет урок 5 Начального уровня, — и ваша копия шаблона для практики с Node.js LTS: проверка запускается из копии. Если хотите практиковаться в копии шаблона, используйте её в обеих ролях. Подготовьте в репозитории папку.practice/, как описано в уроке 1 Начального уровня, если ещё не сделали этого. jq— для журнала загрузок в разборе примера.- Расход лимита: небольшой.
#Идея
Длинный CLAUDE.md трудно поддерживать, и каждая его строка загружается в каждую сессию. Разбить его помогают два инструмента (How Claude remembers your project):
- Импорт — строка вроде
@docs/conventions.mdвCLAUDE.md— загружает вместе с ним ещё один файл. Он упорядочивает файл, но контекст не экономит. - Правило — Markdown-файл в
.claude/rules/. Если во фронтматтере естьpaths:, правило загружается, только когда Claude работает с подходящим файлом.
| Файл инструкций | Когда загружается |
|---|---|
CLAUDE.md в корне проекта и правило без paths: |
При старте сессии |
Файл, указанный в импорте @path |
Вместе с файлом, который его импортирует |
Правило с paths: |
Когда Claude читает подходящий файл своим инструментом Read |
| Автопамять — заметки, которые Claude ведёт для себя | При старте сессии: первые 200 строк или 25 КБ её индекса MEMORY.md |
Если Claude игнорирует инструкцию, сначала выясните, загрузился ли её файл. Если загрузился, проблема, скорее всего, в формулировке: сделайте её конкретной и уберите противоречащие ей инструкции (Debug your configuration).
#Разбор примера
- Добавьте в
CLAUDE.mdсвоего репозитория импорт. В шаблоне для практики импортируйтеpackage.json; в своём репозитории — документ, который ведёт ваша команда, например@docs/architecture.md:
- npm scripts: @package.json
Путь импорта продолжается до первого пробела, поэтому не ставьте точку сразу после него.
2. Сохраните правило для тестовых файлов как .claude/rules/testing.md. Поменяйте шаблон пути так, чтобы он совпадал с расположением ваших тестов:
---
paths:
- "test/**/*.js"
---
# Testing
- Use `node:test` and `node:assert/strict`; no other test libraries.
- Сохраните этот журнал загрузок в
.practice/i-2-hook.json. Это хукInstructionsLoaded: каждый раз, когда загружаетсяCLAUDE.md, правило или импортированный файл, он дописывает причину загрузки и путь файла в.practice/i-2-loaded.txt. Больше он ничего не записывает и работает только в сессиях, которые вы запускаете с ним:
{
"hooks": {
"InstructionsLoaded": [
{ "hooks": [ { "type": "command", "command": "jq -r '[.load_reason, .file_path] | @tsv' >> \"$CLAUDE_PROJECT_DIR/.practice/i-2-loaded.txt\"" } ] }
]
}
}
- Запустите сессию с журналом —
claude --settings .practice/i-2-hook.json(CLI reference) — и выполните/context all: обычный/contextможет свернуть список, аallего разворачивает (Commands). В разделе Memory files перечислены файлы инструкций, загруженные при старте, напримерCLAUDE.md(Set up a project CLAUDE.md). Правила с областью действия среди них нет: ни один тестовый файл ещё не читали. - Попросите Claude прочитать тестовый файл инструментом Read. Назовите инструмент явно: иногда Claude читает файл через команду оболочки, а она правила с областью действия не загружает.
Use your Read tool to read test/config.test.js, then tell me in one sentence what it checks.
Во втором терминале cat .practice/i-2-loaded.txt покажет каждую загрузку с причиной: session_start для CLAUDE.md, include для package.json и теперь path_glob_match для правила.
#Ваша очередь
Правило коллеги никогда не срабатывает. Выясните почему и исправьте.
- Сохраните это правило как
.claude/rules/cli.md. В своём репозитории напишите правило для одной из папок с исходниками и сделайте опечатку в имени папки в шаблоне пути:
---
paths:
- "source/**/*.js"
---
# CLI output
- Print errors to stderr, starting with `linkcheck:`.
- Запустите сессию с журналом,
claude --settings .practice/i-2-hook.json, и попросите Claude применить инструмент Read кsrc/cli.jsили к файлу из вашей папки. - Прочитайте журнал: правило так и не загрузилось. Сравните его шаблон пути с реально существующими файлами —
git ls-files src. - Исправьте шаблон, запустите новую сессию с журналом и повторите шаг 2. Теперь в журнале есть строка
path_glob_matchдляcli.md. - Закоммитьте
CLAUDE.mdи.claude/rules/. Удалите.practice/i-2-hook.json, когда журнал больше не нужен.
#Проверка
Урок пройден, когда выполнено всё это:
- Закоммиченный
CLAUDE.mdимпортирует существующий файл:git show HEAD:CLAUDE.md | grep '@'показывает импорт. - Каждое закоммиченное правило с
paths:совпадает хотя бы с одним файлом: для каждого шаблонаgit ls-files ':(glob)<pattern>'выводит минимум один файл. С префиксом:(glob)звёздочка*в git не выходит за пределы одной папки, а**/совпадает с любым числом папок — как в правилах (gitglossary: pathspec). Фигурные скобки git не раскрывает, а правила раскрывают (Path-specific rules), поэтому шаблон вродеsrc/**/*.{ts,tsx}проверяйте по одному расширению. - Журнал показывает загрузку импорта и правила с областью действия:
grep -E '^(include|path_glob_match)' .practice/i-2-loaded.txtвыводит хотя бы по одной строке каждого вида. - Самопроверка (не тестируется): вы можете сказать, какие из ваших файлов инструкций загружаются при старте, а какие позже, и как вы увидели загрузку каждого.
Запустите npm run check -- i-2 --dir <your repo> из своей копии для практики или npm run check -- i-2 в самой копии.
Если не проходит проверка импорта, поищите знак препинания сразу после пути или путь, записанный относительно не той папки: импорт разрешается относительно файла, в котором он стоит. Если правило не совпадает ни с одним файлом, вспомните, что его шаблон отсчитывается от корня проекта, поэтому source/** ничего не найдёт в проекте, где код лежит в src/. Если в журнале нет строки path_glob_match, запустите сессию с --settings .practice/i-2-hook.json и попросите инструмент Read по имени.
#Осторожно
- Импорт, указывающий за пределы рабочей папки, например
@~/notes.md, при первом использовании в проекте запрашивает ваше одобрение; если отказать, он останется выключенным (Import additional files). - Claude Code читает
CLAUDE.mdпроекта один раз, при старте. Правка в нём попадёт в сессию после/clear,/compactили перезапуска (Editing CLAUDE.md mid-session). - Чтобы найти противоречащие друг другу инструкции или упоминания файлов, которых больше нет, выполните
/doctor prompt-audit(Audit your instruction files). Команда предлагает правки и ничего не меняет, пока вы не попросите.
#Что дальше
- Explore the .claude directory: файлы, которые вы пишете в
.claude/и~/.claude, и когда Claude Code загружает каждый из них. - Debug your configuration: что проверить, если настройка, хук или сервер не действует.
- Auto memory: что Claude сохраняет для себя, где и как это отключить.
Источники: How Claude remembers your project · Hooks reference · Debug your configuration · How Claude Code uses prompt caching · CLI reference · Commands · gitglossary
← Превратите повторяющийся процесс в скилл · Оглавление Среднего уровня · Выбор модели и уровня усилий → · Тема: Память и контекст · Застряли на уроке?