Вы спрашиваете Claude Code, прочитал ли он CLAUDE.md. Он отвечает «да», но всё равно пропускает указанные тесты. В такой ситуации важно различать инструкции, которые не попали к модели, и инструкции, которые попали, но не были выполнены. Ответ «я прочитал» не позволяет установить ни то ни другое.

С .cursor/rules в Cursor, .github/copilot-instructions.md в GitHub Copilot и AGENTS.md в Codex CLI ситуация та же: откуда загружаются файлы и когда они применяются, зависит от инструмента. То, что файл загружен, и то, что модель соблюдает его инструкции, — разные вопросы.

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

Ниже по порядку разобраны пять направлений проверки, включая загрузку, восстановление после сжатия контекста и противоречия между инструкциями, затем порядок диагностики и примеры переписывания правил.

КРАТКО

Почему правила не соблюдаются

— и как выстроить проверки

ПРИЧИНА
Условия загрузки
Корневой CLAUDE.md возвращается после сжатия. Решения только из чата обрабатываются иначе
ПРИЧИНА
Неясные приоритеты
При конфликте инструкций проверяйте, кто их задаёт и где они действуют
РЕШЕНИЕ
Проверяемые формулировки
Пишите «когда, что и как проверить», чтобы соблюдение можно было оценить постфактум
РЕШЕНИЕ
Система проверок
Проверяйте измеримые условия через Hooks и CI. ИИ-ревью помогает найти упущения

1. Почему ИИ игнорирует правила: пять направлений проверки

1. Файл слишком длинный, и правила в нём теряются

Документация Claude Code рекомендует держать каждый файл CLAUDE.md короче 200 строк и объясняет это так: длинные файлы расходуют больше контекста и снижают соблюдение инструкций. 200 строк — не точка обрыва загрузки: CLAUDE.md размером до 4 MiB загружается целиком (файлы больше 4 MiB пропускаются). В длинном файле происходит не то, что его перестают читать с середины, а то, что он прочитан, но отдельные правила соблюдаются хуже.

2. Автоматическое сжатие в длинных сессиях

Команда /compact в Claude Code сжимает разговор, но после сжатия CLAUDE.md из корня проекта заново читается с диска и возвращается в контекст. Файлы CLAUDE.md из подкаталогов и правила для отдельных путей загружаются снова при чтении соответствующих файлов. Согласно документации, инструкция, пропавшая после сжатия, либо ① была дана только в разговоре, либо ② находится в CLAUDE.md подкаталога, который ещё не загрузился повторно, либо ③ находится в правиле для пути, к файлам которого агент ещё не обращался. Чтобы сохранить решения из разговора, допишите их в CLAUDE.md.

3. Конфликт инструкций и область действия

Если одновременно действуют «тестировать перед коммитом» и «на этот раз пропустить тесты», выбор применимой инструкции остаётся за моделью. Документация Claude Code предупреждает: если два правила противоречат друг другу, Claude может выбрать одно из них произвольно. Регулярно сопоставляйте общепроектные, личные и локальные для каталога правила и устраняйте противоречия, а если допускаете исключения, пишите, «кто и каким указанием» их разрешает. Если операцию нужно остановить как таковую, используйте не CLAUDE.md, а настройки разрешений или Hooks.

4. Неясные или противоречивые правила

Субъективные и абстрактные указания вроде «пиши вежливо» или «сделай как следует» ИИ интерпретирует самостоятельно, и результат может расходиться с вашими ожиданиями. Сформулируйте требование так, чтобы его соблюдение можно было проверить: например, «не больше трёх строк» или «для отправки через Slack API используй chat.postMessage» (примеры переписывания — в разделе 3).

5. Разросшиеся и разрозненные файлы правил

Обычная ссылка из CLAUDE.md на SPEC.md не обязательно загружает весь связанный файл при запуске. Claude Code раскрывает импорты @path при запуске, но их содержимое тоже расходует контекст. Разделить файлы для удобства и загружать их только при необходимости — разные вещи. Если копии правил расходятся, укажите единый источник истины и область их действия.

Описанное выше поведение Claude Code основано на официальной документации по памяти Claude Code (по состоянию на 21 сентября 2026 года).

2. Как проверить соблюдение правил

Сначала выясните текущее положение. Задайте ИИ следующие вопросы и проверьте ответы:

ВопросЧто проверить
«Перечисли все правила из CLAUDE.md по пунктам».Если какого-то правила не хватает, посмотрите в /context, загружен ли этот файл
«Прежде чем писать код, назови правила CLAUDE.md, которые будешь соблюдать».Напоминает о важных правилах перед работой. Соблюдены ли они, смотрите по diff после работы
«Перечисли действия за последние пять ходов, которые могли нарушить CLAUDE.md».Самоотчёт — лишь подсказка; окончательный вывод делайте, сопоставив его с историей команд, кодами завершения и итоговыми файлами

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

Четыре шага для поиска причины

  1. Посмотрите на точку входа. В Claude Code проверьте, есть ли нужный CLAUDE.md и правила в разделе Memory files команды /context. Если их нет, проверьте расположение файлов и настройки исключений (claudeMdExcludes). AGENTS.md, загруженный напрямую, в этом списке не отображается. При настройках по умолчанию смотрите, появилась ли при запуске строка no CLAUDE.md found; AGENTS.md loaded: … (AGENTS.md, импортированный из CLAUDE.md, в списке отображается).
  2. Создайте условия применения правила. Для правил, привязанных к пути, попросите агента прочитать подходящий файл. Если после сжатия он ещё не читал этот файл, это правило повторно не загружено. Чтобы фиксировать, что и когда загрузилось, можно записывать загрузку CLAUDE.md и правил в журнал хуком InstructionsLoaded (для AGENTS.md, загруженного напрямую, он не срабатывает).
  3. Попробуйте небольшую безопасную задачу. Попросите агента изменить одноразовый образец с правилами вроде «назови целевой файл перед изменением» и «после работы сообщи команду теста и код завершения». Не проверяйте это удалением рабочих данных или публикацией. Если проверяете контрольной фразой, пишите её только в файл инструкций и не включайте в сам вопрос.
  4. Независимо проверьте результат. Посмотрите, нет ли неожиданных изменений в diff, действительно ли запускались заявленные тесты и достаточно ли объектов было проверено. Запишите настройки, версию инструмента и целевые файлы на момент проверки; если что-то из этого изменится, проверьте снова.

Например, если правило «тестировать перед коммитом» загружено, но тесты не запускались, перенос файла в другое место проблему не решит. Исправлять нужно формулировку правила (примеры переписывания — в следующем разделе) и механизм проверки. Обязательные проверки CI как условие слияния дают основание для вывода, не зависящее от самоотчёта ИИ.

Если нужного CLAUDE.md нет в списке загруженных файлов, сначала исправьте место запуска и настройки, а уже потом усиливайте формулировки. Если после подтверждения загрузки нарушения остаются, уточните инструкции и порядок проверок. Такой подход не сводит каждый сбой к объяснению «ИИ забыл».

3. Быстрые исправления за пять минут

1. Отделите постоянные правила от деталей, читаемых по необходимости

Возьмите официальную рекомендацию Claude Code о длине менее 200 строк за отправную точку, но убирайте повторы и лишние объяснения, а не гонитесь за числом строк. Например:

  • Основные правила (10–20 строк) → начало CLAUDE.md
  • Подробные спецификации сервисов → отдельные файлы SPEC-xxx.md
  • История и обоснования → каталог docs/

Перенеся подробности в другой файл, укажите в точке входа, что читать перед каждым видом работы. Если импортировать всё для каждой сессии, разделение файлов не сократит стартовый контекст. Для загрузки по необходимости используйте правила, привязанные к путям, или навыки.

2. Перепишите правило так, чтобы его соблюдение можно было проверить

Если правило загружено, но не соблюдается, сначала посмотрите, написано ли в нём, «что нужно сделать, чтобы правило считалось соблюдённым». Документация Claude Code тоже советует писать инструкции достаточно конкретно, чтобы их можно было проверить, и приводит пример: не «тестируй изменения», а «запускай npm test перед коммитом». Если сделать ещё шаг и прописать поведение при неудаче и условия исключений, получится следующее.

БылоСталоЧто можно проверить потом
Тестируй перед коммитомПеред коммитом запусти npm test и убедись, что код завершения равен 0. При неудаче не коммить и сообщи названия упавших тестов. Пропускать тесты можно только по явному указанию пользователяВыполненная команда, код завершения, причина пропуска
Оформляй код аккуратноОтступ — 2 пробелаНарушение видно по diff
Держи файлы в порядкеОбработчики API размещай в src/api/handlers/Проверяется по тому, куда лёг новый файл
Пиши понятные сообщения коммитовПервая строка начинается с feat:, fix: или docs: и умещается в 50 символовКаждый коммит проверяется по истории

Соблюдение переписанного правила можно определить по diff, истории команд и кодам завершения. А если правило проверяемо, при переносе в Hooks или CI оно почти без изменений становится условием проверки (раздел 4).

3. Добавьте обозначения приоритета

Метки важности помогают человеку и ИИ понять намерение. Сами по себе метки не обеспечивают исполнение. Например, задайте такие значения:

  • CRITICAL: нарушение может вызвать сбой в рабочей системе
  • MUST: обязательное требование
  • SHOULD: обычно ожидаемое поведение
  • NICE TO HAVE: необязательно, если остаётся время

Фраза «CRITICAL: разрушающие запросы к рабочей базе данных требуют предварительного согласования» определяет операцию и условие согласования. Для фактической блокировки неразрешённых действий нужны также настройки разрешений или проверки перед выполнением.

4. Напомните о правилах в чате

В начале сессии добавьте: «Перед работой назови три самых важных правила». Такое объявление напоминает о правилах, а соблюдены ли они, смотрите по результатам после работы.

5. Включите условия завершения в план

Добавьте «проверить правила» в учёт задач ИИ-агента и явно укажите условия завершения каждого этапа. Просите команду, код завершения и непроверенную область вместо одного слова «проверено». Если отметка о завершении стоит, а поле с подтверждением пустое, не считайте этап завершённым.

4. Системные меры: Hooks, ревью и навыки

Переносите вычислимые условия в скрипты, а разрешения на операции задавайте настройками. Hooks, CI, ИИ-ревью и навыки решают разные задачи. Если называть всё это «автоматическим принуждением», за формулировкой теряются непроверенные области.

1. Обязательные проверки через Claude Code Hooks

Механизм Hooks в Claude Code запускает скрипты до или после определённых вызовов инструментов. С его помощью можно сделать так, чтобы система остановила операцию, даже если ИИ забыл правило.

Например, хук PreToolUse может:

  • Обнаруживать опасные команды (rm -rf, git push --force) до запуска инструмента Bash и запрещать их
  • Проверять разрешения или блокировку целевого файла до запуска инструмента Edit
  • Запускать тесты проекта перед коммитом и блокировать его при неудаче

Если хук PreToolUse должен заблокировать операцию, он должен вернуть код завершения 2 или соответствующий JSON с отказом. Если неудачный тест возвращает 1 только с обычным текстовым выводом, это неблокирующая ошибка: операция продолжится. PostToolUse срабатывает после выполнения и не служит механизмом отмены уже совершённой операции.

Хук может блокировать лишь то, что его скрипт проверяет в настроенном событии. Контроль одного Edit не охватывает запись через оболочку. Простого поиска опасных строк тоже недостаточно для полного покрытия. Сочетайте хуки с разрешениями, песочницей и CI; проверяйте как допустимые, так и запрещаемые входные данные.

2. Разделите обязанности между субагентами

Возможности субагентов в Claude Agent SDK или Cursor позволяют создать отдельного агента для проверки правил. Проверка кода основного агента другим агентом помогает заметить упущения с иной точки зрения. Но оба всё ещё могут допустить одну ошибку или не заметить одну проблему.

Передайте проверяющему правила, которые нужно проверить, diff и ожидаемые подтверждения (названия тестов, коды завершения). Сверяйте полученные замечания с реальными файлами или результатами тестов, а области за пределами порученной проверки считайте непроверенными.

3. Вызывайте повторяемые процедуры через навыки

В Claude Code повторяемую процедуру можно записать в .claude/skills/precommit/SKILL.md и вызывать как собственный /precommit. Это пример, который вы создаёте сами, а не встроенная команда. Файлы в прежнем каталоге .claude/commands/ продолжают работать, но актуальная документация включает их в систему навыков. Вызвать процедуру и успешно пройти все проверки — не одно и то же, поэтому в конце посмотрите на результаты проверок.

Расположение файлов и способы вызова описаны в официальной документации по навыкам. Включайте в навык и процедуру, и условия прохождения, а затем запрашивайте подтверждение выполнения шагов.

4. Выявляйте нарушения автоматическими скриптами

Используйте grep в CI или хуке pre-commit для поиска запрещённых шаблонов. Например:

  • Оставленный в рабочем коде console.log
  • API-ключи, прописанные в коде
  • Отсутствие комментария об авторских правах в начале файла

Скрипт не проверяет правила, которые в нём не реализованы, и файлы за пределами своей области. Проверяйте корректные примеры, нарушения и ошибки чтения; показывайте число проверенных и пропущенных объектов. Например, если два файла из десяти не удалось прочитать, успех остальных восьми не означает «все файлы прошли проверку».

5. Практики для разных инструментов

Как проектировать правила для популярных ИИ-агентов

Claude Code
Anthropic
Файлы настроек
CLAUDE.md + ~/.claude/CLAUDE.md
Объём и загрузка
Официальный ориентир: менее 200 строк. Чем длиннее, тем хуже соблюдение
Средства контроля
Hooks / субагенты / Skills
Cursor
Anysphere
Файлы настроек
.cursor/rules/*.mdc
Объём и загрузка
Официальный ориентир: менее 500 строк. Разделяйте по назначению
Средства контроля
Область через globs / ссылки через @-упоминания
GitHub Copilot
GitHub
Файлы настроек
.github/copilot-instructions.md
Объём и загрузка
Короткие самостоятельные инструкции. Проверяйте поддержку нужной функции
Средства контроля
Правила для файлов в .github/instructions/*.instructions.md
Codex CLI
OpenAI
Файлы настроек
AGENTS.md
Объём и загрузка
Общий предел загрузки по умолчанию — 32 KiB, а не число строк
Средства контроля
Режимы согласования / ограничения песочницы

Условия отдельных инструментов описаны в документации правил Cursor, инструкциях по настройке GitHub Copilot и руководстве OpenAI по AGENTS.md. Для правил Copilot, привязанных к пути, используется *.instructions.md; какие функции их читают, зависит от функции. Предел Codex в 32 KiB — общий объём в байтах по умолчанию, а не число символов или строк.

Общий принцип: «кратко, конкретно, с понятными приоритетами». Имена файлов и их расположение зависят от инструмента, но принципы формулировки остаются общими.

6. Три ошибки проектирования правил

1. «Пожалуйста, следуй лучшим практикам»

Сама просьба не определяет «лучшие практики». Укажите принятые в проекте подходы и способы их проверки. Вместо «проверь как следует» назовите команды тестов и этап работы, который должен остановиться при их неудаче (примеры переписывания в разделе 3).

2. Одно правило дублируется в нескольких файлах

Если одни соглашения о коммитах записаны в CLAUDE.md, SPEC.md и README.md, при обновлении три копии могут разойтись. Выберите один источник истины, а из остальных файлов ссылайтесь на него.

3. Повсюду написано «категорически обязательно»

Одинаковое выделение всех условий мешает передать приоритеты. Оставьте «CRITICAL» для требований, нарушение которых имеет действительно тяжёлые последствия, а остальные формулируйте обычным языком. Помните: при чрезмерном использовании выделение теряет смысл.

Итоги

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

  • Не загружается: исправьте расположение, настройки исключений и условия загрузки AGENTS.md
  • Загружается, но не соблюдается: перепишите правило так, чтобы потом можно было проверить его соблюдение
  • Должно выполняться обязательно и каждый раз: проверяйте через Hooks или CI, а доступные операции определяйте настройками разрешений

Подтверждение завершения дают результаты выполнения и артефакты, а не ответ «я прочитал».

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

Вопрос 1. Какова идеальная длина CLAUDE.md?

Официальный ориентир — менее 200 строк на файл: документация объясняет, что чем длиннее файл, тем больше он расходует контекста и тем хуже соблюдаются инструкции. При превышении 200 строк загрузка не обрывается на середине (до 4 MiB файл загружается целиком). Оставляйте только правила, нужные каждый раз, а правила, относящиеся к определённым файлам, переносите в правила для путей. Файлы, вынесенные через импорт @path, тоже загружаются при запуске, поэтому контекст не уменьшится.

Вопрос 2. Что использовать в Cursor: .cursorrules или .cursor/rules/*.mdc?

Для новой настройки используйте .cursor/rules/*.mdc. Держите одно правило в одном файле, а область действия задавайте glob-шаблонами. Устаревший .cursorrules — один файл, который легко разрастается.

Вопрос 3. Чем длиннее правила, тем строже они исполняются?

Длина сама по себе не делает правила строже. Документация тоже говорит, что длинные файлы снижают соблюдение. Если что-то добавлять, то проверяемые условия и конкретные примеры, а повторы и противоречия удаляйте.

Вопрос 4. Как работать с несколькими ИИ-инструментами, например Claude Code и Cursor, в одном проекте?

Соберите общие правила в AGENTS.md как единый источник истины, а настройки, специфичные для инструментов, разнесите по их точкам входа. Codex и Cursor поддерживают AGENTS.md. Claude Code начиная с v2.1.277 тоже читает AGENTS.md напрямую, если ни в рабочем каталоге, ни выше нет ни CLAUDE.md, ни .claude/CLAUDE.md, ни CLAUDE.local.md. Если любой из них есть, по умолчанию читается только он, и даже одного личного CLAUDE.local.md достаточно, чтобы AGENTS.md перестал читаться. В проектах, где используется и CLAUDE.md, добавьте в CLAUDE.md строку @AGENTS.md для импорта (можно также задать в /config для Project instructions значение claude-md-and-agents-md, чтобы читались оба файла). В сессиях через внешних провайдеров вроде Amazon Bedrock или с отключённой телеметрией, в первой сессии сразу после установки или обновления, а также в средах, где хуки отключены через disableAllHooks и т. п., прямая загрузка не работает, поэтому используйте импорт. По какому пути загружен файл, можно различить по шагу 1 из раздела 2.

Вопрос 5. Если ИИ говорит «я прочитал», файл всё равно мог остаться непрочитанным?

Ответ не доказывает ни чтение файла, ни его отсутствие. Пройдите диагностические шаги из раздела 2: посмотрите отображение загрузки и сопоставьте его с diff, результатами тестов и историей выполнения.