Cursor Rules: как задать правила проекту

Cursor Rules: как задать правила проекту

Я учу людей работать с Cursor на разборах. Почти на каждом втором занятии одна и та же сцена: вчера настроили Vitest, сегодня в новом Agent-чате агент чинит тесты через Jest. Или лезет в package.json с правками, которые мы уже запретили. Cursor Rules как раз про это — постоянные инструкции в репозитории, чтобы агент не «забывал» стек между сессиями.

Минимум, с которого я начинаю: один файл `.mdc` в `.cursor/rules/` с `alwaysApply: true` (или globs под ваш стек), затем проверка в новом Agent-чате. Не в продолжении старого — там контекст уже зашумлён.

Что это и где граница

Cursor Rules — текстовые инструкции для Agent Chat: стек, команды lint/test/build, стиль, запреты. Они живут в репозитории (или в настройках аккаунта) и подмешиваются в контекст агента.

Важная граница: rules работают только в Agent Chat. Tab и Inline Edit (Cmd/Ctrl+K) их не читают. Rules не заменяют ESLint, Prettier, CI и code review — они снижают разброс ответов, но не дают «всегда так».

Где хранить

Канон для проекта — `.cursor/rules/*.mdc`: YAML frontmatter сверху, markdown-тело ниже. Plain `.md` без frontmatter Cursor в этой папке игнорирует — на разборе часто вижу скопированный `rules.md`, который «молчит» именно поэтому.

Альтернатива — `AGENTS.md` в корне или подпапке: plain markdown, удобен для Codex/Copilot и nested-правил. Legacy `.cursorrules` в корне — deprecated; я мигрирую содержимое в `.mdc` с `alwaysApply: true`.

Режимы Project Rules (2026): Always Apply, Apply to Specific Files (globs), Apply Intelligently (по description — для критичных запретов я не полагаюсь), Apply Manually (только через @rule).

Нюанс Cursor 2.x: rule с globs подхватывается, когда файл по glob уже в контексте чата, а не просто открыт в табе редактора. Это объясняет половину тикетов «правило молчит».

Минимальный overview

Не тащите чужой GitHub-пак на 40 пунктов. На старте хватает одного alwaysApply на 5–15 строк из вашего package.json:

```

---

description: Базовые соглашения проекта

alwaysApply: true

---

- Стек: Node 20, TypeScript, Vite, React 18

- Проверка: npm run lint && npm run test && npm run build

- Ответы агента — на русском, если задача на русском

- Перед удалением файлов или массовым рефакторингом — спросить

- Не коммитить секреты (.env, ключи API)

- Не менять lockfile без явной задачи

```

Зональные правила (например `frontend-react.mdc` с `globs: src/**/*.tsx`) подключаю отдельно — один файл, одна тема, до ~500 строк по официальной рекомендации.

Как проверить, что сработало

1. Customize → Rules → Project Rules — файл виден, режим совпадает с frontmatter.

2. Новый Agent-чат.

3. Спросить: «Какие project rules сейчас активны?»

4. Тестовая правка в зоне glob + тест запрета (удалить папку / тронуть lockfile).

5. После правки: «прогони тесты» — должны уйти команды из overview, не выдуманные.

6. Закоммитить `.cursor/rules/` (и AGENTS.md, если есть).

Rules ≠ Skills ≠ Agent mode

Rules — текст в контексте. Skills — подключаемые процедуры/скрипты. Agent mode — режим работы с инструментами. Rule сам `npm test` не запускает — он подсказывает, что выполнить.

Типичные ошибки

`.md` вместо `.mdc`; битый YAML; Apply Intelligently на критичный запрет; два alwaysApply по 300+ строк (съедают контекст); дубль AGENTS.md и overview с противоречиями; ожидание, что rules попадут в Tab; glob без файла в контексте чата.

Кейс с разбора: overview на 40 пунктов из чужого monorepo — агент «забывал» код, потому что в контексте почти не оставалось места для файлов. Сократили до 12 пунктов про свой репо — стало стабильнее. 100% соблюдения rules никто не обещает.

Для 1С механика та же: `.mdc` со стеком платформы, командами проверки и запретами. Rules не сделают агента «1С-разработчиком из коробки», но фиксация стиля BSL и границ правок снижает разброс так же, как в JS.

Полная версия: https://vaybkoder.ru/blog/cursor-rules/

Разбор процесса и вопросы — в Telegram: https://t.me/Shield_support_Sotka