В любом живом проекте инструкции разнородны. Правила именования эндпоинтов нужны, когда вы правите API. Требования к тестам — когда пишете тесты. Соглашения о миграциях — раз в месяц. Если сложить всё это в CLAUDE.md, файл разрастётся, а расплачиваться придётся каждой сессией: инструкции по миграциям займут контекст даже тогда, когда вы верстаете форму.
Отсюда неприятная развилка. Либо вы держите файл коротким и теряете часть договорённостей, либо записываете всё и получаете раздутый CLAUDE.md, из которого агент половину игнорирует.
Правила в .claude/rules/ эту развилку снимают: инструкции раскладываются по темам и привязываются к путям, а в контекст попадают только те, что относятся к файлам, с которыми агент действительно работает. После этого урока вы сможете разгрузить CLAUDE.md, не потеряв ни одной договорённости.
Что уже умеем / что добавим
В прошлом уроке вы разобрались с уровнями CLAUDE.md, вложенными файлами и импортами. Вы знаете ограничение: импорт помогает организации, но контекст не экономит, потому что всё грузится при старте. Теперь добавим механизм, который экономит по-настоящему, — правила с frontmatter-полем paths.
Что вы узнаете в рамках статьи
- Как устроен каталог
.claude/rules/и как раскладывать по нему правила - Как работает поле
pathsво frontmatter и когда правило попадает в контекст - Какие glob-шаблоны применимы и как сопоставлять несколько расширений
- Чем правила отличаются от вложенных CLAUDE.md и когда что выбирать
- Как разделять правила уровня проекта и уровня пользователя
Ключевые термины
- Правило — markdown-файл в
.claude/rules/, содержащий инструкции по одной теме. - Frontmatter — блок YAML в начале файла, отделённый строками из трёх дефисов.
paths— поле frontmatter со списком glob-шаблонов; правило загружается только при работе с подходящими файлами.- Glob-шаблон — образец пути с подстановочными знаками:
*внутри одного сегмента,**— на любую глубину. - Brace expansion — запись вида
{ts,tsx}, разворачивающаяся в несколько шаблонов. - Безусловное правило — файл без поля
paths; загружается при старте наравне с.claude/CLAUDE.md.
Как устроен каталог правил
Правила — это обычные markdown-файлы в .claude/rules/ проекта. Одна тема — один файл с говорящим именем. Файлы находятся рекурсивно, поэтому вложенные каталоги допустимы.
your-project/
├── .claude/
│ ├── CLAUDE.md # основные инструкции проекта
│ └── rules/
│ ├── code-style.md # правила стиля
│ ├── testing.md # соглашения о тестах
│ └── security.md # требования безопасности
Ключевая развилка внутри этого механизма — наличие поля paths. Правило без него загружается безусловно, при старте, с тем же приоритетом, что и .claude/CLAUDE.md. Правило с paths загружается только когда агент читает подходящий файл.
Отсюда простое решение: если инструкция нужна всегда — обходитесь без paths; если только для части кодовой базы — привязывайте.
Привязка к путям через frontmatter
Синтаксис минимален: блок YAML в начале файла, в нём поле paths со списком шаблонов.
---
paths:
- "src/api/**/*.ts"
---
# Правила разработки API
- Все эндпоинты обязаны валидировать входные данные
- Использовать стандартный формат ответа при ошибке
- Добавлять комментарии для документации OpenAPI
Такое правило молчит, пока вы работаете со стилями или конфигурацией, и появляется в контексте ровно тогда, когда агент открывает файл под src/api/.
Важная деталь механики: правило срабатывает при чтении подходящего файла, а не на каждое действие агента. То есть триггером служит именно обращение к файлу.
Шаблонов можно указать несколько, а расширения — свернуть в фигурные скобки:
---
paths:
- "src/**/*.{ts,tsx}"
- "lib/**/*.ts"
- "tests/**/*.test.ts"
---
Соответствие шаблонов и того, что они покрывают:
*/*.ts— все файлы TypeScript в любом каталогеsrc/**/*— всё, что лежит подsrc/.md— markdown-файлы в корне проектаsrc/components/*.tsx— компоненты в конкретном каталоге
Пара ограничений, о которых полезно знать заранее. Фигурные скобки перемножаются: src/*.{ts,tsx} разворачивается в два шаблона, а {a,b}/{c,d}/*.{ts,tsx} — уже в восемь. Весь список paths одного правила делит общий бюджет в 1000 развёрнутых шаблонов; шаблоны без скобок в бюджет не входят. И ещё: символ [ трактуется как начало символьного класса, поэтому имя вида photos [2024/** невалидно — literal-скобку экранируют обратным слешем.
Правила проекта и правила пользователя
Уровней два, и у них разное назначение.
Проектные правила лежат в .claude/rules/ репозитория, коммитятся и действуют для всей команды. Личные — в ~/.claude/rules/ и применяются во всех ваших проектах на этой машине.
~/.claude/rules/
├── preferences.md # личные предпочтения по коду
└── workflows.md # привычные рабочие сценарии
Пользовательские правила загружаются раньше проектных, поэтому у проектных приоритет выше — командная договорённость перевешивает личную привычку, что логично.
Полезная возможность для тех, кто ведёт несколько проектов с общими стандартами: каталог правил поддерживает симлинки. Общий набор можно держать в одном месте и подключать в разные репозитории:
ln -s ~/shared-claude-rules .claude/rules/shared
ln -s ~/company-standards/security.md .claude/rules/security.md
Симлинки разрешаются и загружаются как обычные файлы, а циклические ссылки обрабатываются корректно.
Правила или вложенный CLAUDE.md
Механизмы похожи — оба откладывают загрузку до момента обращения к файлам, — но применяются по-разному.
Вложенный CLAUDE.md привязан к каталогу, где лежит. Он удобен, когда граница совпадает с границей подпроекта: frontend/CLAUDE.md, backend/CLAUDE.md в монорепозитории.
Правило с paths привязано к шаблону и границами каталогов не ограничено. Оно годится, когда критерий — тип файла, а не место: правила для всех тестов, где бы они ни лежали; требования ко всем миграциям; соглашения по TypeScript во всём проекте.
Ещё одно различие — организационное. Правила лежат в одном каталоге и просматриваются одним взглядом; вложенные файлы разбросаны по дереву, и найти их все сложнее.
Отсюда практическая рекомендация: границы подпроектов — вложенные CLAUDE.md, тематические и типовые правила — .claude/rules/.
И ограничение, общее для обоих: это всё ещё инструкции по требованию. Если материал нужен изредка и представляет собой справочник или многошаговую процедуру, ему место не здесь — но об этом в уроке 5.4.
Частые ошибки
- Привязка к путям того, что нужно всегда. Команды сборки или общий стиль кода за
pathsпрятать нельзя: если правило не сработает, агент будет действовать без него. В сомнительных случаях оставляйте правило безусловным. - Слишком узкий шаблон.
src/api/*.tsне покрывает вложенные каталоги — файлsrc/api/users/handler.tsпод него не подпадёт, и правило промолчит. Для рекурсии нужен*. - Ожидание срабатывания на каждое действие. Правило подключается, когда агент читает подходящий файл. Если он до него не добрался, правила в контексте нет — и после
/compactоно вернётся только при новом обращении. - Перенос в правила всей документации. Каталог правил задуман для инструкций, а не для справочников. Раздутое правило ведёт себя ровно так же, как раздутый CLAUDE.md, просто загружается реже.
Наиболее частые вопросы
- Что будет с правилом без поля
paths? — Оно загрузится при старте с тем же приоритетом, что и.claude/CLAUDE.md, то есть станет обычной постоянной инструкцией. - Как понять, применилось ли правило? — Проверьте
/contextпосле того, как агент прочитал подходящий файл: загруженные правила видны там же, где остальные файлы памяти. - Можно ли разложить правила по подкаталогам? — Да, поиск идёт рекурсивно, так что структура вида
rules/frontend/иrules/backend/работает. - Чей приоритет выше — личных правил или проектных? — Проектных. Пользовательские загружаются раньше, и проектные оказываются ближе к концу.
- Сколько правил разумно завести? — Столько, сколько у вас реально разных тем. Один файл — одна тема; дробить дальше смысла нет, объединять разнородное — тем более.
Итоги
Прекрасно: вы освоили механизм, который решает главный конфликт работы с инструкциями — между полнотой и экономией контекста. Теперь вы умеете раскладывать договорённости по темам в .claude/rules/, привязывать их к путям через paths, писать корректные glob-шаблоны и осознанно выбирать между правилом, вложенным CLAUDE.md и безусловной инструкцией.
Обратите внимание, чего вы добились: CLAUDE.md можно держать коротким, ничего при этом не выбрасывая. Дальше нас ждёт механизм совсем другой природы — тот, где инструкции пишете уже не вы. В следующем уроке разберём auto memory: что Claude запоминает о вашей работе самостоятельно и как этим управлять.