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

  1. User / workspace setting extensions.allowed — легко снять.
  2. Admin portal (Security and Identity) — пушит значение на клиенты Cursor 2.1+; пустое поле = перестать пушить новое, но локально уже полученный allowlist сам не исчезает.
  3. 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 ID com.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.

Артём Денисов эксперт Нетологии и автор курса Яндекс Практикума по промпт-инжинирингу. Разбирает AllowedExtensions по официальным IAM и Deployment Patterns: allowlist-семантика без выдуманных marketplace-цен.

Хотите нейросети под свои задачи, а не «для всех»?

Когда базовых гайдов уже мало, помогает разбор под вашу работу. Наставничество, курсы и подписка Артём Денисов — все форматы на странице обучения. Тех-pillar — n8n для начинающих.