Cursor Allowed Extensions — это контроль, какие расширения можно ставить в Cursor на устройстве. Политика MDM называется AllowedExtensions, пользовательский setting — extensions.allowed. Значение — JSON-объект: ключ = publisher или полный extension ID, значение = boolean (плюс варианты pin version / channel в admin-конфиге). Канон: Identity and access management (Allowed Extensions), Deployment Patterns.
Связка: Cursor MDM, Allowed Team ID, Plugins. Pillar: n8n для начинающих.
Для кого этот разбор
- SecOps боится случайных workspace-расширений с доступом к коду.
- Нужен allowlist 3-5 издателей, а не «всё с Marketplace».
- Уже катите Cursor через Jamf/Intune и хотите вторую политику после Team ID.
- Нужно понять, почему после
{"badpub": false}внезапно отвалились все остальные extensions.
Модель: allowlist, не «запретить одного»
По IAM docs extensions.allowed работает как allowlist. Как только вы добавили любую запись, разрешено только явно перечисленное. Пример из docs: {"anysphere": false} не означает «только заблокировать Anysphere» — он блокирует и всех остальных, потому что их нет в allowlist.
Чтобы оставить всё разрешённым и точечно запретить издателя, нужен wildcard:
{
"*": true,
"untrusted-publisher": false
}
Wildcard — наименее специфичный match: publisher и полный ID перекрывают его.
| Цель | Пример JSON | Результат |
|---|---|---|
| Только доверенные издатели | {"anysphere": true, "github": true} |
Всё остальное запрещено |
| Почти всё + denylist | {"*": true, "untrusted-publisher": false} |
Все кроме запрещённого издателя |
| Pin / channel (portal) | {"dbaeumer.vscode-eslint": ["3.0.0"]} или "stable" |
Ограничение версии/канала по docs |
| Сброс к «allow all» | Сначала {"*": true}, потом очистить portal field |
Клиенты снимают старый allowlist |
Сверка: IAM Allowed Extensions + Deployment Patterns (проверка 2026-09-15). Не выдумывайте цены Marketplace — здесь только policy semantics.
Три слоя enforcement
- User / workspace setting
extensions.allowed— легко снять. - Admin portal (Security and Identity) — пушит значение на клиенты Cursor 2.1+; пустое поле = перестать пушить новое, но локально уже полученный allowlist сам не исчезает.
- MDM policy
AllowedExtensions— перекрывает portal и user settings на устройстве.
Порядок для флота: сначала whitelist team (Allowed Team ID), затем extensions allowlist, затем update mode и permissions.json.
Как выкатить
- macOS: ключ
AllowedExtensionsв configuration profile, значение — JSON-строка, например{"anysphere": true, "github": true}.PayloadType= production Bundle IDcom.todesktop.230313mzl4w4u92(по Deployment Patterns). - Windows: ADMX/Intune policy AllowedExtensions; Computer-level сильнее User-level, если заданы оба.
- Linux: в
~/.cursor/policy.jsonключAllowedExtensionsкак JSON-строка с экранированными кавычками:"AllowedExtensions": "{\"anysphere\": true, \"github\": true}".
Sample .mobileconfig в приложении инициализирует все политики — удаляйте лишние ключи, иначе «пустые» defaults ужесточат поведение.
Сильные стороны
- Режет supply-chain риск от случайных extensions в workspace.
- Один JSON понятен SecOps и совпадает с VS Code-подобной моделью allowlist.
- MDM делает ограничение необходимым на corp laptop, а не «рекомендацией в Confluence».
Типичные ошибки
- Поставили один
falseбез"*": trueи сломали весь парк расширений. - Очистили portal field и ждут reset — без промежуточного
{"*": true}клиенты держат старый allowlist. - На Linux положили объект вместо JSON-строки в
policy.json. - Путают allowlist extensions с private gallery URL (
ExtensionGalleryServiceUrl) и с Plugins из другого контура.
FAQ
Что такое Cursor Allowed Extensions?
Это MDM-политика AllowedExtensions и setting extensions.allowed: JSON-allowlist издателей и extension ID. Как только в объекте есть записи, разрешено только явно перечисленное; остальное блокируется. Канон: Identity and access management и Deployment Patterns.
Как разрешить почти всё, но запретить одного издателя?
Используйте wildcard «*»: true вместе с точечным запретом, например {«*»: true, «untrusted-publisher»: false}. Wildcard — наименее специфичное совпадение; publisher и полный ID перекрывают его.
Чем MDM AllowedExtensions отличается от admin portal?
Team dashboard (Security and Identity) пушит extensions.allowed на клиентов 2.1+. Политика AllowedExtensions через MDM перекрывает и portal, и user settings. Пустое поле в portal перестаёт пушить новое значение, но уже применённый локальный allowlist сам не сбрасывается — для reset сначала выкатите {«*»: true}.
Какой формат значения в mobileconfig и policy.json?
Строка JSON. Пример: {«anysphere»: true, «github»: true}. На Linux в ~/.cursor/policy.json значение AllowedExtensions тоже JSON-строка с экранированными кавычками, не вложенный объект.
Достаточно ли Allowed Extensions вместо private marketplace?
Allowlist режет установку с обычного marketplace. Отдельная политика ExtensionGalleryServiceUrl задаёт свой gallery URL, если нужен корпоративный каталог. Часто комбинируют оба рычага.
Вывод
Cursor Allowed Extensions — JSON-allowlist на устройстве. Пишите политику осознанно: либо узкий список издателей, либо wildcard плюс denylist. Базовый канал доставки — MDM; рядом держите Team ID и update mode.
Хотите нейросети под свои задачи, а не «для всех»?
Когда базовых гайдов уже мало, помогает разбор под вашу работу. Наставничество, курсы и подписка Артём Денисов — все форматы на странице обучения. Тех-pillar — n8n для начинающих.