~/guides/cursor-rules-mdc-frontmatter-glob

AI Agents

Frontmatter в .mdc: как работают globs и alwaysApply, и почему правило Cursor иногда не срабатывает

Разбор синтаксиса YAML frontmatter в Cursor Rules и самая частая причина, по которой правило молча не применяется к нужным файлам.

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

Структура файла .mdc

Формат состоит из двух частей: YAML frontmatter между двумя строками из трёх дефисов, и markdown-тело с самими инструкциями.

---
description: Frontend conventions
globs: src/**/*.tsx, src/**/*.ts
alwaysApply: false
---

Use functional components with hooks, not class components.
Prefer named exports over default exports.

Три поля, которые определяют, применится ли правило

Поле Назначение Частая ошибка
description Краткое описание правила для навигации Не влияет на применение, только справочная информация
globs Список путей, к которым применяется правило Опечатка в паттерне — правило не сработает без явной ошибки
alwaysApply Применять правило ко всем файлам без ограничения true игнорирует globs полностью, false без globs может не применяться нигде

Как работает синтаксис glob-паттернов

Одна звёздочка совпадает с любым количеством символов внутри одного сегмента пути, а двойная звёздочка — рекурсивно на любую глубину вложенности директорий:

src/*.ts        — файлы .ts прямо в src, не глубже
src/**/*.ts     — файлы .ts в src и любой вложенной директории

Путаница между этими двумя паттернами — вторая по частоте причина, почему правило применяется не там, где ожидалось: разработчик пишет src/*.ts, ожидая покрыть весь проект, а на деле паттерн ловит только файлы прямо в корне src.

Главная ловушка: отсутствие и globs, и alwaysApply

Если frontmatter не содержит ни одного, ни другого поля, поведение зависит от конкретной версии Cursor и может измениться между релизами — самый надёжный способ не гадать: явно указать alwaysApply true для универсальных правил, или явно прописать globs для правил, ограниченных конкретной частью проекта.

Как проверить, не дожидаясь реального использования агентом

Открывать десяток файлов и смотреть, применяется ли к ним правило, — медленный и ненадёжный способ отладки. Cursor Rules (.mdc) Frontmatter Validator разбирает frontmatter и сразу показывает на списке тестовых путей, какие из них реально попадут под правило.

Итоговый чеклист

Ошибка в glob-паттерне не выдаёт explicit ошибку — правило просто молча не применяется, и это стоит проверять отдельно, а не полагаться на отсутствие сообщений об ошибках.

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

alwaysApply true полностью отменяет проверку globs — если оба поля заданы одновременно и противоречат друг другу по смыслу, победит alwaysApply.