Настройка разрешений
Как настроить пользовательские правила разрешений для режима Explore, включая файлы permissions.json, типы правил, поведение по умолчанию и рабочий процесс планирования.
Обзор
Режим Explore — это режим только для чтения, который блокирует потенциально разрушительные операции. Пользовательские правила разрешений позволяют разрешить конкретные операции, которые в противном случае были бы заблокированы.
Рекомендуемый рабочий процесс с приоритетом CLI: используйте команды
craft-agent permission ...вместо прямого редактирования JSON.
craft-agent permission --help- Справочник по каноническим командам: craft-cli.md
Файлы разрешений находятся в:
- Workspace:
~/.craft-agent/workspaces/{slug}/permissions.json - Source:
~/.craft-agent/workspaces/{slug}/sources/{source}/permissions.json
Автоматическое ограничение области для разрешений источника
Важно: MCP-шаблоны в
permissions.jsonисточника автоматически ограничиваются этим источником.
Когда вы пишете:
{ "pattern": "list", "comment": "Allow list operations" }Система внутренне преобразует его в mcp__<sourceSlug>__.*list. Это означает:
- Простые шаблоны, такие как
list, влияют только на инструменты этого источника - Нет риска случайно разрешить инструменты
listиз других источников - Шаблоны на уровне workspace по-прежнему применяются глобально (для намеренных правил между источниками)
Схема permissions.json
{
"allowedMcpPatterns": [
{ "pattern": "list", "comment": "Allow list operations" },
{ "pattern": "get", "comment": "Allow get operations" },
{ "pattern": "search", "comment": "Allow search operations" }
],
"allowedApiEndpoints": [
{ "method": "GET", "path": ".*", "comment": "All GET requests" },
{ "method": "POST", "path": "^/search", "comment": "Search POST" }
],
"allowedBashPatterns": [
{ "pattern": "^ls\\s", "comment": "Allow ls commands" }
],
"blockedTools": [
"dangerous_tool"
],
"allowedWritePaths": [
"/tmp/**",
"~/.craft-agent/**"
],
"blockedCommandHints": [
{
"command": "printf",
"reason": "printf is not in the default Explore-mode allowlist.",
"context": "Explore mode keeps a narrow read-only command set.",
"tryInstead": [
"Use echo for simple output",
"Switch to Ask mode for this command"
],
"example": "echo '--- separator ---'"
},
{
"command": "sed",
"reason": "Only print-only sed is allowed by default.",
"whenNotMatching": "^sed\\s+-n\\b"
}
]
}Типы правил
allowedMcpPatterns
Шаблоны регулярных выражений для имён MCP-инструментов, которые разрешены в режиме Explore.
Для permissions.json на уровне источника используйте простые шаблоны (автоматически ограничиваются источником):
{
"allowedMcpPatterns": [
{ "pattern": "list", "comment": "All list operations for this source" },
{ "pattern": "get", "comment": "All get operations for this source" },
{ "pattern": "search", "comment": "All search operations for this source" }
]
}Для permissions.json на уровне workspace (глобальные правила) используйте полные шаблоны:
{
"allowedMcpPatterns": [
{ "pattern": "^mcp__.*__list", "comment": "List operations across all sources" }
]
}allowedApiEndpoints
Тонкие правила для запросов к API-источникам.
{
"allowedApiEndpoints": [
{ "method": "GET", "path": ".*", "comment": "All GET requests" },
{ "method": "POST", "path": "^/search", "comment": "Search POST" },
{ "method": "POST", "path": "^/v1/query$", "comment": "Query endpoint" }
]
}allowedBashPatterns
Шаблоны регулярных выражений для разрешённых команд bash.
{
"allowedBashPatterns": [
{ "pattern": "^ls\\s", "comment": "ls commands" },
{ "pattern": "^git\\s+status", "comment": "git status" },
{ "pattern": "^pwd$", "comment": "pwd command" }
]
}blockedTools
Дополнительные инструменты для блокировки (редко требуется).
{
"blockedTools": ["risky_tool_name"]
}allowedWritePaths
Glob-шаблоны для каталогов, где разрешены записи.
{
"allowedWritePaths": [
"/tmp/**",
"~/.craft-agent/**",
"/path/to/project/output/**"
]
}blockedCommandHints
Конкретные подсказки для команд, отображаемые, когда команда Bash блокируется в режиме Explore. Это обеспечивает детерминированные объяснения для известных команд, а не только эвристики ближайшего шаблона.
{
"blockedCommandHints": [
{
"command": "printf",
"reason": "printf is not in the default Explore-mode allowlist.",
"context": "Explore mode keeps a narrow read-only command set.",
"tryInstead": [
"Use echo for simple output",
"Switch to Ask mode for this command"
],
"example": "echo '--- separator ---'"
},
{
"command": "sed",
"reason": "Only print-only sed is allowed by default.",
"whenNotMatching": "^sed\\s+-n\\b"
}
]
}Поля:
command(обязательное): базовое имя команды (например,printf,sed)reason(обязательное): основное объяснение, показываемое пользователюcontext(необязательное): дополнительный контекст политики/рискаtryInstead(необязательное): рекомендуемые альтернативыexample(необязательное): пример командыwhenNotMatching(необязательное): условие регулярного выражения; подсказка применяется только тогда, когда команда не соответствует этому шаблону
Поведение по умолчанию в режиме Explore
Заблокировано по умолчанию:
- Команды Bash (кроме перечисленных ниже команд только для чтения)
- Инструменты Write, Edit, MultiEdit
- MCP-инструменты с семантикой записи (create, update, delete)
- Запросы API POST/PUT/DELETE
Разрешено по умолчанию:
- Read, Glob, Grep
- WebFetch, WebSearch
- TodoWrite
- Инструменты браузера (
browser_*иmcp__session__browser_*) - MCP-инструменты с семантикой чтения (list, get, search)
- Записи в папку Plans (только планы сессии)
Команды Bash только для чтения
Эти команды разрешены в режиме Explore без пользовательской настройки:
| Категория | Команды |
|---|---|
| Исследование файлов | ls, tree, cat, head, tail, nl, file, stat, wc, du, df |
| Поиск | find, grep, rg, ag, fd, locate, which |
| Git (только для чтения) | git status, git log, git diff, git show, git branch, git blame, git reflog |
| GitHub CLI | gh pr view/list, gh issue view/list, gh repo view |
| Менеджеры пакетов | npm ls/list/outdated, yarn list, pip list, cargo tree |
| Проверки качества (только для чтения) | bun run typecheck, bun run typecheck:all, bunx tsc --noEmit, tsc --noEmit, npm run typecheck, yarn typecheck, pnpm typecheck |
| Вспомогательные средства браузера | bun run browser-tool --help, bun run browser-tool list, bun run browser-tool template ..., bun run browser-tool parse-url <url> |
| Сведения о системе | pwd, whoami, env, ps, uname, hostname, date, echo |
| Обработка текста | awk/gawk/mawk/nawk (безопасные формы), jq, yq, sort, uniq, cut, column |
| Сетевая диагностика | ping, dig, nslookup, netstat |
| Проверки версий | node --version, python --version и т. д. |
Примечания:
echoразрешён для форматирования литерального вывода (например,echo ---), но перенаправления и подстановка команд по-прежнему блокируются.- Команды семейства
awkразрешены для обработки текста только для чтения, но опасные примитивы выполнения (например,system(...),getlineс командным пайпом илиprint | "cmd") блокируются.
Составные команды
Составные команды с использованием &&, || и | разрешены, когда все части безопасны:
| Конструкция | Пример | Поведение |
|---|---|---|
| Логическое И | git status && git log | ✅ Разрешено, если обе команды безопасны |
| Логическое ИЛИ | git status || echo "failed" | ✅ Разрешено, если обе команды безопасны |
| Пайпы | git log | head | ✅ Разрешено, если все команды безопасны |
Каждая команда проверяется независимо. Если любая команда отсутствует в списке разрешённых, вся составная команда блокируется.
Заблокированные конструкции оболочки
Эти конструкции всегда блокируются, даже если базовая команда разрешена:
| Конструкция | Примеры | Почему блокируется |
|---|---|---|
| Фоновое выполнение | & | Выполняется асинхронно, может скрыть активность |
| Перенаправления | >, >> | Могут перезаписать файлы |
| Подстановка команд | $(), обратные кавычки, <(), >() | Выполняют встроенные команды |
| Управляющие символы | переносы строк, возвраты каретки | Выступают в роли разделителей команд |
Пример: git status > file.txt блокируется, потому что > может перезаписать файлы.
Каскадные правила
Правила каскадируются от workspace → source → agent:
- Правила workspace применяются глобально
- Правила источника расширяют правила workspace для этого источника
- Правила агента расширяют оба для сессии этого агента
Правила аддитивны — они могут только разрешать больше операций, а не ограничивать дополнительно.
Лучшие практики
- Будьте конкретны с шаблонами — используйте якоря (
^,$), чтобы избежать чрезмерного соответствия - Добавляйте комментарии — объясняйте, почему существует каждое правило
- Тестируйте шаблоны — проверяйте, что регулярные выражения соответствуют ожидаемым именам инструментов
- Минимальные разрешения — разрешайте только то, что нужно
Примеры
Доступ к Linear только для чтения:
{
"allowedMcpPatterns": [
{ "pattern": "^mcp__linear__(list|get|search)", "comment": "Read operations" }
]
}API только для поиска:
{
"allowedApiEndpoints": [
{ "method": "GET", "path": ".*" },
{ "method": "POST", "path": "^/search" }
]
}Безопасные команды git:
{
"allowedBashPatterns": [
{ "pattern": "^git\\s+(status|log|diff|branch)", "comment": "Read-only git" }
]
}Планирование в режиме Explore
В режиме Explore вы можете создавать планы реализации, которые пользователь может принять для перехода к выполнению.
Когда создавать планы
Создавайте план, когда:
- Задача содержит несколько сложных шагов
- Вы хотите получить одобрение пользователя перед внесением изменений
- Вы собрали достаточно контекста и готовы к реализации
Создание плана
- Запишите план в markdown-файл в папке plans сессии
- Вызовите
SubmitPlanс путём к файлу - Пользователь видит отформатированный план с кнопкой «Accept Plan»
- Нажатие «Accept Plan» завершает режим Explore и начинает реализацию
Формат плана
# Заголовок плана
## Резюме
Краткое описание того, что этот план обеспечивает.
## Шаги
1. **Описание шага** — детали и подход
2. **Другой шаг** — дополнительные детали
3. ...Рабочий процесс Explore → реализация
Рекомендуемый рабочий процесс:
- Explore — читайте файлы, ищите код, изучайте кодовую базу
- Plan — напишите структурированный план в папку plans
- Submit — вызовите
SubmitPlan, чтобы показать пользователю - Accept — пользователь нажимает «Accept Plan», чтобы завершить режим Explore
- Execute — реализуйте план с полными разрешениями
Это обеспечивает плавный переход от исследования к реализации под контролем пользователя.
Нужен такой агент в вашей компании?
Устанавливаем под ключ: настройка на компьютерах сотрудников, единый аккаунт, интеграция с 1С и внутренними системами, обучение команды. Подробнее о внедрении →