Как задать Cursor Rules за час — чтобы агент не путал Jest с Vitest
На разборах почти каждую вторую сессию одна и та же сцена: вчера настроили Vitest, сегодня в новом Agent-чате агент чинит тесты через Jest. Или лезет в package.json с правками, которые уже запретили.
Cursor Rules — постоянные текстовые инструкции для Agent Chat: стек, команды lint/test/build, стиль и запреты. Они живут в репозитории и подмешиваются в контекст, чтобы не копировать одни и те же абзацы в каждый чат.
Ниже — рабочий минимум, которым пользуюсь сам. Не серебряная пуля: rules снижают разброс, но не заменяют ESLint, CI и code review. И работают только в Agent Chat — Tab и Inline Edit (Cmd/Ctrl+K) их не читают.
Проектные правила — в .cursor/rules/ в корне workspace. Формат — .mdc: YAML frontmatter сверху, markdown-тело ниже.
Plain .md без frontmatter Cursor в этой папке игнорирует. Часто вижу скопированный rules.md, который «молчит» именно поэтому.
Альтернатива — AGENTS.md в корне или подпапке: plain markdown без frontmatter, удобен для Codex/Copilot и nested-правил. Nested AGENTS.md применяется к файлам в каталоге и ниже.
Legacy .cursorrules в корне — deprecated. Если ещё лежит — переношу содержимое в .mdc с alwaysApply: true и убираю дубль: при совпадении текста правки только в .cursorrules часто «не срабатывают».
Уровни коротко:
Уровень — Где — В git?
Team Rules — Dashboard Cursor — Нет
Project Rules — `.cursor/rules/*.mdc` — Да
User Rules — Customize → Rules — Нет
AGENTS.md — Корень / подпапки — Да
При конфликте приоритет: Team — Project — User.
Четыре режима Project Rules (2026):
Режим в UI — Frontmatter — Поведение
Always Apply — `alwaysApply: true` — В каждый Agent-чат
Apply to Specific Files — `globs: [...]`, `alwaysApply: false` — Когда файлы по glob уже в контексте чата
Apply Intelligently — `description: "..."`, без globs — Агент решает сам — для критичных запретов не полагаюсь
Apply Manually — без description/globs/alwaysApply — Только через `@Rule-name`
Нюанс Cursor 2.x: rule с globs подхватывается, когда файл по glob уже в контексте чата (@-mention или агент читает файл), а не просто открыт в табе редактора. Это объясняет половину тикетов «правило молчит».
В монорепо отдельная packages/api/.cursor/rules/ по сообщениям с форума часто не сканируется. Практический обход — AGENTS.md внутри пакета.
Не тащите готовый GitHub-пак «на все случаи». На старте хватает одного alwaysApply на 5–15 строк из вашего package.json.
Типовая раскладка:
project/
Базовый 00-project-overview.mdc:
description: Базовые соглашения проекта
Зональное правило — отдельно, одна тема на файл:
description: React/TSX в src/
Официальный ориентир: до ~500 строк на файл, одна тема — один файл. Длинный код лучше давать через @filename в rule, а не копипастой.
Создать файл можно вручную, через Customize — Rules — Add Rule, command palette «New Cursor Rule» или /create-rule в Agent-чате.
Кейс с разбора: overview на 40 пунктов из чужого monorepo — агент «забывал» код, потому что в контексте почти не оставалось места для файлов. Сократили до 12 пунктов про свой репо — стало стабильнее. полного соблюдения rules никто не обещает.
Без проверки легко жить с молчащим frontmatter. Чеклист, который прохожу сам:
1. Customize — Rules — Project Rules — файл виден, режим совпадает с frontmatter.
2. Новый Agent-чат — не продолжение старого (там контекст уже зашумлён).
3. Спросить: «Какие project rules сейчас активны?»
4. Тестовая правка в зоне glob + @-mention файла под globs.
5. Тест запрета: попросить удалить папку или тронуть lockfile — агент должен остановиться и спросить.
6. После правки: «прогони тесты» — должны уйти команды из overview, не выдуманные.
7. Закоммитить .cursor/rules/ (и AGENTS.md, если есть), чтобы коллега в новом клоне получил те же rules.
Если glob-rule не срабатывает: расширение .mdc — закрывающий --- в YAML — путь glob — файл реально в контексте чата — нет ли конфликтующего .cursorrules.
Rules — Skills — Agent mode
Что это — Текст в `.mdc` / AGENTS.md — Навыки со SKILL.md и скриптами — Режим Agent Chat с правкой файлов
Когда — Каждый чат / по glob / @ — Когда агент вызывает skill — Когда вы в Agent и даёте задачу
Не заменяет — CI, linter, hooks — Rules (дополняет) — Rules (читает их)
Rule сам npm test не запускает — он подсказывает, что выполнить. Skills — отдельные процедуры. Agent mode — режим работы с инструментами, не «магический rule».
Механика та же: .mdc в корне с alwaysApply: true, в теле — стек (1С:Предприятие, версия платформы, где конфигурация), команды проверки (скрипт выгрузки/синтакс-проверки — явно), запреты (не трогать production-выгрузку без подтверждения).
Rules не сделают агента «1С-разработчиком из коробки». Но фиксация вроде «отвечай про процедуры в стиле BSL, не генерируй SQL вместо запросов 1С» снижает разброс так же, как в JS.
### Типичные грабли
Симптом — Что проверить
Правило «молчит» — `.md` вместо `.mdc`; битый YAML; нет закрывающего `---`
Glob не цепляется — Файл по glob в контексте чата, не только открыт в табе
Агент игнорит запрет — Apply Intelligently на критичный пункт → Always Apply или globs + тест
Агент «забывает» код — Два alwaysApply по 300+ строк — съели контекст; дроблю на темы
Противоречия в ответах — Дубль AGENTS.md и overview с разными правилами
Rules не влияют на Tab — Так и задумано — только Agent Chat
Скопированный пак с GitHub — Frontmatter чужой/битый; сократить до своего стека
Монорепо: rule в пакете не виден — Nested `.cursor/rules` ненадёжен; workaround — AGENTS.md в пакете
• Создать .cursor/rules/00-project-overview.mdc с alwaysApply: true
• Вписать свой стек и реальные npm run lint/test/build из package.json
• Добавить 2–3 запрета: .env/ключи API, lockfile, «спросить перед удалением»
• При необходимости — одно зональное правило с globs
• Убрать или смигрировать legacy .cursorrules
• Проверить в Customize — Rules: файл виден, режим верный
• Открыть новый Agent-чат и спросить активные project rules
• Прогнать тест запрета и «прогони тесты»
• Закоммитить .cursor/rules/ в git
У кого какой обход сработал на «молчащем» rule — YAML, glob в контексте или сокращение overview? Напишите в комменты, что именно починили.




















