qvib.pro
EN

~5 мин чтения · всем · Обновлено: 02.07.2026 · Read in English

Правила агента: always / auto / agent / manual

Правила: инструкции, которые агент всегда читает (always / auto / agent / manual)

Коротко

Правило в движке — не абзац в общем промпте, а отдельный типизированный объект с телом и режимом активации, который отвечает на вопрос «когда именно класть инструкцию в контекст модели». Режимов ровно четыре: always — постоянно в контексте (устав, красные линии), auto — подключается по glob-паттернам файлов (например **/locales/*.json), agent — модель сама решает по описанию-триггеру, manual — молчит, пока не позовёте явно. Один набор правил компилируется в нативный механизм каждого таргета: у Claude Code — .claude/rules/, у Cursor — .mdc с фронтматтером, в AGENTS.md — своим блоком. В статье — когда какой режим брать и worked-пример «одно правило → три таргета».

Что это

Правило (rule) — это короткая инструкция для агента: «всегда фильтруй SQL-запрос по organization_id», «не хардкодь строки, добавляй их в обе локали», «спрашивай подтверждение перед миграцией». В движке Quest правило — не абзац в общем промпте, а отдельный типизированный объект с телом и режимом активации. Режим отвечает на один вопрос: когда именно эту инструкцию класть в контекст модели.

1alwaysпостоянно в контексте — устав и инварианты2autoподключается при работе с файлами по маске3agentмодель сама подключает по описанию4manualтолько по явному запросу
Четыре режима активации правила

Режимов ровно четыре (в схеме это ruleActivationEnum):

  • always — правило постоянно в контексте, в каждом запросе. Для фундамента: устав проекта, красные линии, стек.
  • auto — подключается автоматически, когда агент работает с файлами по glob-паттернам (например **/*.ts или **/locales/*.json).
  • agent — модель сама решает, релевантно ли правило, по его description. Вы пишете описание-триггер вроде «когда добавляешь платёжный флоу», и агент подтягивает правило, когда узнаёт задачу.
  • manual — молчит, пока вы явно не позовёте его (в Cursor — через @имя-правила).

Зачем так

Контекст модели — дефицит. Если сложить все правила в always, каждый токен тратится в каждом запросе, важное тонет в шуме, а слабая модель начинает игнорировать инструкции. Отраслевой консенсус прямой: always-правила держи короткими, всё остальное подключай условно (это ровно та же модель, что у Cursor Project Rules — и это честное совпадение, а не наше изобретение). Гранулярность = дисциплина без раздувания: правило про миграции включается только когда трогают миграции, правило про a11y — только на UI.

Когда какой режим

  • Инвариант, нарушение которого ломает продукт (изоляция арендаторов, fail-closed биллинг-гейт, «секреты не в файлах») → always.
  • Правило, привязанное к типу файла (SQL-слой, локали, миграции, компоненты) → auto с точными globs.
  • Правило под класс задач, который не опознать по расширению файла («перед новой зависимостью — проверь reuse-first») → agent с ясным description.
  • Редкий чек-лист, который нужен изредка и по требованию → manual.

Worked-пример: одно правило → три таргета

Вход. В базовом движке Quest есть гранулярное правило tenancy (изоляция организаций), заданное так: activation: 'auto', globs: ['**/*.{ts,py,go,rb,java}'], тело — «каждый запрос фильтрует по тенант-скоупу, включая count/exists; сокеты — через auth; SQL параметризован; нашёл одну cross-tenant дыру → grep класс, чини все».

Что делает движок (компилятор детерминированно раскладывает под таргет):

  1. Cursor → отдельный файл .cursor/rules/tenancy.mdc с обязательным frontmatter под режим auto:
---
description: Multi-tenant изоляция
globs: **/*.{ts,py,go,rb,java}
alwaysApply: false
---

Стоит открыть серверный .ts — Cursor сам подхватывает правило. (Важная деталь из ресёрча, вшитая в компилятор: .mdc без frontmatter Cursor молча игнорирует, а globs должны быть строкой, не массивом — иначе тоже не применятся. Движок это гарантирует.)

  1. Claude Code → файл .claude/rules/tenancy.md, где тело обёрнуто с указанием путей-globs.

  2. AGENTS.md (универсальный таргет для VS Code/Copilot и прочих) → секция правил в одном файле: тела always-правил идут целиком, auto — тело плюс строка «Применяется к файлам: **/*.{ts,py,go,rb,java}», а agent/manual — кратко, чтобы не раздувать всегда-читаемый файл.

Результат. Один объект-правило из спеки превращается в родной механизм каждого редактора. Пишете правило один раз — работает в трёх средах, с правильным режимом активации в каждой.

Одно правило → три таргета: как компилятор раскладывает tenancy
Правило tenancy
activation: auto + globs
Cursor.cursor/rules/tenancy.mdc, frontmatter обязателен, globs строкой
Claude Code.claude/rules/tenancy.md, тело + пути-globs
AGENTS.md — секция правил: тело + строка «Применяется к файлам…»
Worked-пример из базового движка Quest: одна спека — три родных механизма

Честная граница (ENFORCED vs ADVISORY)

Правило — это инструкция, а не физический барьер. Оно советует модели, но само по себе не блокирует нарушение кодом возврата. Жёсткая блокировка (ENFORCED) сегодня есть только в Claude Code через PreToolUse-hook для опасных команд (rm -rf, DROP TABLE, git push --force); на Cursor и в чистом AGENTS.md правила работают как строгая ADVISORY-инструкция. Переносимый git/CI-предохранитель (Portable Safety Floor), который сделал бы инварианты enforced и вне Claude, — в дорожной карте (roadmap), пока не выпущен. Смысл движка — сделать эти инструкции настолько буквальными и проверяемыми, чтобы даже слабая модель их исполняла, а не «догадывалась».

ENFORCED или ADVISORY: как правила действуют в разных средах
Claude Code
ENFORCED — PreToolUse-hook блокирует опасные команды (rm -rf, DROP TABLE, git push --force)
Cursor
ADVISORY — строгая инструкция, но без блокировки кодом возврата
AGENTS.md
ADVISORY — то же: правило советует, а не запрещает физически
Вне Claude
Portable Safety Floor (git/CI-предохранитель) — в roadmap, пока не выпущен
Правило — инструкция, а не физический барьер; жёсткая блокировка сегодня есть только в Claude Code

Sources:

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

Базовый разбор темы — Claude Code: с него удобно начать, если тема новая.