Cursor permissions.json — это файл, через который IT и команда задают allowlist для agent run mode: какие terminal-команды и MCP tools можно выполнять без постоянного approve, и как Auto-review классификатор должен трактовать shell/MCP/Fetch. Это не registry policy вроде AllowedTeamId, а обычный managed file, который удобно класть через MDM. Канон: Deployment Patterns (Managing Run Mode allowlists with MDM).
Связка: MDM, MCP, Agent Mode, Allowed Extensions. Pillar: n8n для начинающих.
Для кого этот разбор
- Agent Mode уже в проде, но approve на каждый
npm testбесит. - SecOps хочет запретить destructive shell/MCP без полного отключения агента.
- Нужен единый allowlist на флот + доп. правила в монорепо.
- Путают permissions.json с MDM AllowedExtensions / policy.json.
Пути и merge
| Слой | Путь | Как мержится |
|---|---|---|
| User / managed | ~/.cursor/permissions.json |
Базовый файл устройства |
| Per-repo | /.cursor/permissions.json в корне репозитория |
Записи конкатенируются с user-файлом |
| Admin dashboard | team admin-controlled settings | Заменяет file-defined значения категории |
| Editor UI | settings / Add to allowlist | Ниже файла; с файлом не merge’ится |
Precedence по docs: dashboard → (user file + repo file concat) → editor settings. Cursor следит за обоими путями файла — restart обычно не нужен.
Формат файла
{
"terminalAllowlist": [
"npm install",
"pnpm test",
"python -m pytest"
],
"mcpAllowlist": [
"linear:*",
"github:create_pull_request",
"*:search"
],
"autoRun": {
"block_instructions": [
"Block any command that drops or truncates a database table."
]
}
}
terminalAllowlist— string[]; match идёт по полной command string. При включённом sandboxing поддерживаемые команды вне allowlist могут бежать в sandbox.mcpAllowlist—server:tool|server:*|*:tool|*:*. MCP не исполняется внутри local sandbox.autoRun— natural-languageallow_instructions/block_instructionsдля Auto-review (shell, MCP, Fetch; в docs — Cursor 3.6+).
Все три ключа опциональны. Если после concat ключ пуст или отсутствует — Cursor откатывается к editor-managed allowlist для этой категории.
Пример и семантика — Deployment Patterns, проверка 2026-09-15. Не добавляйте сюда секреты и токены: файл часто лежит в managed config и может попасть в repo layer.
Как раздать через MDM
- Соберите минимальный terminalAllowlist под ваш stack (package manager, test runner, linters).
- Опишите mcpAllowlist узко: лучше
github:create_pull_request, чем сразу*:*. - Добавьте block_instructions на destructive DB/prod операции.
- Выложите файл в home пользователя как
~/.cursor/permissions.jsonчерез Jamf/Kandji/Intune/Ansible. - При необходимости дополните per-repo файл в
/.cursor/permissions.json— entries сложатся concat’ом.
Это соседний канал к registry/profile политикам (MDM), но тот же operational контур: устройство получает baseline до того, как разработчик откроет Agent Mode.
Сильные стороны
- Снижает prompt fatigue без полного «auto-run everything».
- Даёт SecOps язык политики на уровне команд и MCP tools.
- Repo-layer позволяет усилить правила в чувствительных репозиториях.
Типичные ошибки
- Кладут секреты в permissions.json «для удобства агента».
- Сразу
*:*в mcpAllowlist и удивляются blast radius. - Думают, что файл перекрывает team dashboard — наоборот, admin settings побеждают категорию.
- Путают с
~/.cursor/policy.json(AllowedExtensions / Team ID) или сextensions.allowed.
FAQ
Что такое Cursor permissions.json?
Это файл allowlist для agent run mode: какие terminal-команды и MCP tools можно запускать без лишнего prompt, плюс autoRun-инструкции классификатора. Путь пользователя: ~/.cursor/permissions.json; в репо можно добавить /.cursor/permissions.json — записи конкатенируются. Канон: Deployment Patterns.
Какие ключи поддерживаются?
Опциональные ключи: terminalAllowlist (string[]), mcpAllowlist (string[]), autoRun (object с allow_instructions / block_instructions). Пустой или отсутствующий ключ после merge возвращает editor-managed allowlist для этой категории.
Какой синтаксис у mcpAllowlist?
Формы server:tool, server:*, *:tool, *:*. Пример: linear:*, github:create_pull_request, *:search. MCP tools не бегают внутри local sandbox.
Кто побеждает: dashboard, файл или editor UI?
Порядок precedence в docs: 1) team dashboard / admin-controlled settings, 2) managed ~/.cursor/permissions.json + repo /.cursor/permissions.json (concat), 3) editor settings и inline Add to allowlist. Admin settings заменяют file-defined значения категории, не мержатся с ними.
Нужен ли restart после правки файла?
Cursor watch’ит оба пути permissions.json, поэтому обновления подхватываются без обязательного restart. Раздавайте файл через Jamf/Intune/Ansible как обычный managed file в Cursor data directory.
Вывод
Cursor permissions.json — allowlist агента на устройстве и в репо. Держите user-файл через MDM, усиливайте критичные репозитории repo-layer, не конфликтуйте с dashboard. Соседние рычаги флота — Allowed Extensions и Update Mode.
Хотите нейросети под свои задачи, а не «для всех»?
Когда базовых гайдов уже мало, помогает разбор под вашу работу. Наставничество, курсы и подписка Артём Денисов — все форматы на странице обучения. Тех-pillar — n8n для начинающих.