Вы дописали правило в .cursor/rules. Агент его прочитал, согласился и через два хода сделал ровно то, что правило запрещает. Иногда с извинением: да, правило было, я его нарушил.

Другой день, другой проект: правило на месте, но в контекст оно не попало вообще, и узнать об этом было неоткуда. Третий случай: попало всё сразу, вместе с вложенными AGENTS.md со всего дерева проекта, и половина окна ушла на инструкции ещё до первой строки кода.

Причины у этих трёх случаев разные: в первом правило конкурирует с задачей внутри промпта, во втором не доходит до модели, в третьем доходит вместе с сотней чужих. Общее одно: вы создали файл в папке проекта, открытой в Cursor, и считаете, что задали агенту дисциплину.

Текст правила не обещает соблюдения

Границу здесь обозначили сами разработчики среды. В треде на форуме Cursor человека спрашивают, как добиться, чтобы агент выполнял требование каждый раз. Отвечает сотрудник Cursor под ником deanrie: “Rules and AGENTS.md get injected into context, but they are a soft constraint”. Правила подмешиваются в контекст, но остаются мягким ограничением.

Механика за этой фразой простая. Правило становится частью промпта и конкурирует там с задачей пользователя, историей чата и системной инструкцией. Модель взвешивает всё это вместе, и «не делай X» проигрывает прямому «сделай Y», особенно когда X выглядит коротким путём к Y. Отсюда и извинения: правило действительно было в контексте, агент его действительно видел, соблюдение из этого не следует.

Запрет, который среда не даст нарушить, живёт не в тексте, а в правах: разрешения инструмента и hooks с deny, где команда просто не выполняется. Деструктивные операции git, удаление файлов, миграции на живой базе. Если у вас на это стоит капсом NEVER в .mdc и больше ничего, у вас пожелание, а не запрет.

Практический вывод: разделить два класса требований. То, что нельзя нарушать никогда, уходит в разрешения. То, что описывает, как работать, остаётся текстом правила и живёт с допущением, что иногда его не соблюдут.

Что реально лежит в этих файлах

Чаще всего чужой текст. Коллекция awesome‑cursorrules собрала больше 40 тысяч звёзд, и пользуются ей просто: нашли файл под свой стек, скопировали в .cursor/rules/, поставили в шапке alwaysApply: true. Привычка старше нынешнего формата: разбор публичных .cursorrules, того самого одного файла в корне проекта, который Cursor уже считает устаревшим, показал 28,7% дословных копий. Формат сменился на .mdc в .cursor/rules/, способ наполнения остался.

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

Своё правило под свой сбой работает. Но писать его руками не нужно: дайте агенту сбой, документацию инструмента и границу, формулировку он выдаст сам.

Ноль срабатываний или шестьсот тысяч токенов

Один и тот же файл ломается в двух противоположных режимах.

Слева: правило лежит рядом с окном контекста и не попадает внутрь, у задачи есть место. Справа: то же окно набито правилами до краёв, задаче места почти не осталось
Слева: правило лежит рядом с окном контекста и не попадает внутрь, у задачи есть место. Справа: то же окно набито правилами до краёв, задаче места почти не осталось

Первый: правило не подмешалось. На форуме Cursor есть аккуратный замер, который легко повторить: два идентичных .mdc, в каждом запуске у агента спрашивают, какое правило активно. С alwaysApply: true правило сработало три раза из трёх, с false ноль из трёх. Сюда же попадает .md без YAML‑шапки в .cursor/rules/: среда такой файл может не читать, а выглядит он как полноценное правило. Часть жалоб «агент игнорирует мои правила» это ровно такой случай: правила в контексте не было.

Второй: подмешалось всё. В монорепозитории Cursor собирает правила и вложенные AGENTS.md со всего дерева, и на простой запрос это выливается в сотни тысяч токенов инструкций, в одном описанном случае около 600k. У Claude Code та же беда по другой причине: правила подмешиваются заново на каждый вызов инструмента, и одни и те же строки уезжают в контекст десятки раз за задачу.

Обе поломки не лечатся спором «.mdc или skills» и «мигрировать ли на AGENTS.md». Первая про загрузку, вторая про бюджет. Формат не отвечает ни на один из этих двух вопросов.

У меня так и устроено: каждый сбой агента я записываю отдельной строкой в файл рядом с проектом, и когда строка повторяется, правило по ней формулирует агент. Замера «копипаст против агента» на одном стеке я не проводил, так что это моя практика, а не результат сравнения. Про блокировки и цикл до merge есть отдельный разбор, здесь я его не повторяю.

Пять проверок в своём проекте

Всё это делается в открытом окне, минут за десять.

  1. Спросите агента в новом чате, какие правила у него сейчас активны. Файла нет в списке — дальше разбираться незачем, правило до модели не доходит.

  2. Откройте шапку каждого файла. alwaysApply: true грузится всегда, false только при совпадении globs. Во втором случае проверьте, что маска попадает в те файлы, которые агент действительно правит.

  3. Сложите строки всех файлов с alwaysApply: true. Это ваш постоянный расход на каждый запрос, до первой строки задачи.

  4. Если у вас монорепозиторий, посмотрите, сколько вложенных AGENTS.md подтянулось на обычный вопрос. Ответ обычно неприятный.

  5. Прочитайте своё правило, подставив вместо одного проекта другой. Смысл рассыпался — вы описали частность, а не правило.

Дальше начинается то, ради чего проверки и нужны: переписать правило по своим сбоям. У меня для этого есть рецепт, папка recipes/rule-under-a-job/. Там разобрано, из чего состоит правило, как убедиться, что оно срабатывает, и лежат готовые промпты. Их копируете в чат, а текст правила пишет агент из вашего сбоя и документации вашего инструмента. Готовых правил там нет, и это не упущение: моё правило подошло бы вам ровно так же, как файл из коллекции. Рецепт даёт способ, а не текст.

Цифры и цитаты сняты с публичных URL в августе 2026, ваша версия Cursor или Claude Code может вести себя иначе.

Что вы проверяли первым: подмешивание, объём того, что грузится всегда, или нарушение после извинения? И отдельно любопытно: копируете готовые правила с GitHub или поручаете их агенту?

Источники

Мягкое ограничение, hooks и разрешения:

Формат, загрузка, бюджет:

Что кладут в правила:

Моё:

Комментарии (5)


  1. alexboo86
    26.08.2026 13:24

    все что перечислено в правилах является рекомендацией
    агент не обязан его исполнять, он может их забыть при накоплении контекста
    у меня все захукано и загейчено, на все есть сенсоры
    чужие правила не беру
    раз в 3 дня заставляю клода перечитывать свои же транскрипты и вычищать нарушения
    придумал систему уроков по каждому домену в проекте, уроки склаыдваются в инбокс, при последующем промоуте якорятся куда надо, при работе над определенным доменом агент ОБЯЗАН прочитать оглавление списка уроков
    хук не дает начать редактирование кода пока оглавление не прочитано
    сейчас клод сам цитирует уроки, когда находит ошибки
    это все я к тому, что нужно заставлять соблюдать правила, а не просто писать их в CLAUDE.md


    1. andreyilin Автор
      26.08.2026 13:24

      Да, в файле это рекомендация. Агент не обязан и может забыть, когда контекст раздувается.

      У вас как раз жёсткая часть: хук не пускает к коду, пока оглавление уроков не прочитано. Это уже не CLAUDE.md.

      Как хук понимает, что оглавление реально прочитано, а не просто открыт файл?


      1. alexboo86
        26.08.2026 13:24

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


        1. andreyilin Автор
          26.08.2026 13:24

          Ого. Это огонь. Именно на вашей сборке. Расскажите чуть-чуть подробне.
          Хук теперь смотрит в панель или всё ещё ждёт, пока оглавление просто откроют?
          «Использовали» откуда: живой лог вызова или потом из транскрипта?
          Скил висит, агент молчит. Стоп или запись?


          1. alexboo86
            26.08.2026 13:24

            1. Хук и панель. Хук стоит на редактировании кода домена: он не «смотрит в панель» напрямую, он проверяет флаг «оглавление уроков по этому домену прочитано в текущей сессии» — этот флаг выставляется, когда агент реально дергает команду чтения оглавления (не когда файл просто открыт редактором). Панель — это отдельная вещь, она визуализирует то же самое состояние для человека: какие скилы/уроки загружены, какие инструменты использовались. То есть источник правды один — событие вызова, а панель и хук оба читают из него, каждый по-своему.

            2. «Использовали» откуда. Из живого лога вызовов, не из транскрипта задним числом. Транскрипт мы читаем раз в несколько дней — это ретроспектива для чистки правил и поиска системных нарушений, а не источник для гейта в моменте. Гейт должен решать синхронно, до того как агент тронул код, так что ему нужен живой сигнал: был вызов чтения оглавления в этой сессии или нет.

            3. Скил висит, агент молчит. Стоп, не запись. Если хук требует прочитать оглавление перед правкой, а вызова не было — редактирование просто не проходит, это блокирующая проверка, а не пассивная запись в лог для последующего разбора. Молчание агента в этом месте расценивается как невыполненное условие, а не как «ну потом посмотрим».

            отвечал клод)