Плоский файл .cursorrules был первым форматом инструкций Cursor, но со временем уступил место папке .cursor/rules с отдельными .mdc файлами. Формат по-прежнему работает для обратной совместимости, но считается legacy — новую функциональность вроде точного скоупинга по путям файлов старый формат не поддерживает вообще.
Проблема одного большого файла
Правило про стиль кода фронтенда не должно загружаться в контекст, когда агент правит миграцию базы данных бэкенда — но именно так происходит с одним монолитным .cursorrules, где всё смешано без разбора по области применения.
## Stack
Next.js, TypeScript strict
## Frontend conventions
Use functional components, named exports
## Testing
Run npm test before committing
Как выглядит новая структура
Вместо одного файла — папка с несколькими .mdc, каждый со своим frontmatter:
---
description: Frontend conventions
globs: src/components/**/*.tsx, src/pages/**/*.tsx
alwaysApply: false
---
Use functional components, named exports.
Практический алгоритм миграции
Разбейте старый файл по логическим темам — обычно это уже естественные markdown-заголовки. Для каждой темы определите, привязана ли она к конкретной части кодовой базы (тогда нужен glob) или применима ко всему проекту сразу (тогда alwaysApply true без ограничения путей).
| Секция старого файла | Куда переносится | Настройка |
|---|---|---|
| Общий стек и общие принципы | Отдельный .mdc | alwaysApply: true |
| Frontend-специфичные конвенции | Отдельный .mdc | globs по путям фронтенда |
| Backend-специфичные конвенции | Отдельный .mdc | globs по путям бэкенда |
| Правила тестирования | Отдельный .mdc | alwaysApply: true или свой glob |
Частая ошибка при миграции
Скопировать содержимое каждой секции в отдельный файл, но забыть указать glob или alwaysApply вообще — тогда поведение по умолчанию непредсказуемо и может отличаться между версиями Cursor. Явно решите для каждого нового файла, к чему он применяется, а не оставляйте это на волю умолчания.
Автоматизация первого прохода
Разбивать текст руками по секциям и придумывать имена файлов утомительно для сколько-нибудь длинного .cursorrules. .cursorrules to .cursor/rules Migration Splitter делает первый черновой проход автоматически по markdown-заголовкам, glob-паттерны в результате всё равно стоит вручную сверить под структуру конкретного проекта.
Итоговый чеклист
.cursorrules продолжает работать для обратной совместимости, но не поддерживает точный скоупинг по путям файлов — новую функциональность стоит проектировать сразу под .cursor/rules.
Каждый новый .mdc файл должен явно указывать либо glob, либо alwaysApply true — не полагайтесь на неявное поведение по умолчанию.
Автоматическое разбиение по заголовкам — хорошая отправная точка, но glob-паттерны в результате практически всегда требуют ручной доводки.