Разрешения
Управляйте тем, какие действия требуют одобрения для выполнения.
OpenCode использует конфигурацию permission для определения того, должно ли данное действие выполняться автоматически, запрашивать подтверждение или быть заблокировано.
Начиная с v1.1.1, устаревшая булева конфигурация tools объявлена устаревшей и объединена с permission. Старая конфигурация tools по-прежнему поддерживается для обратной совместимости.
Действия
Каждое правило разрешения разрешается в одно из следующих:
"allow"— выполнять без одобрения"ask"— запрашивать одобрение"deny"— блокировать действие
Конфигурация
Вы можете установить разрешения глобально (с помощью *) и переопределить конкретные инструменты.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}Вы также можете установить все разрешения сразу:
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}Детальные правила (объектный синтаксис)
Для большинства разрешений вы можете использовать объект для применения различных действий на основе входных данных инструмента.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"npm *": "allow",
"rm *": "deny",
"grep *": "allow"
},
"edit": {
"*": "deny",
"packages/web/src/content/docs/*.mdx": "allow"
}
}
}Правила оцениваются по сопоставлению шаблонов, при этом последнее совпадающее правило побеждает. Распространённый паттерн — поместить универсальное правило "*" первым, а более конкретные правила после него.
Подстановочные знаки
Шаблоны разрешений используют простое сопоставление с подстановочными знаками:
*соответствует нулю или более любых символов?соответствует ровно одному символу- Все остальные символы соответствуют буквально
Расширение домашнего каталога
Вы можете использовать ~ или $HOME в начале шаблона для ссылки на ваш домашний каталог. Это особенно полезно для правил external_directory.
~/projects/*->/Users/username/projects/*$HOME/projects/*->/Users/username/projects/*~->/Users/username
Внешние каталоги
Используйте external_directory, чтобы разрешить вызовы инструментов, которые затрагивают пути за пределами рабочего каталога, где был запущен OpenCode. Это применяется к любому инструменту, который принимает путь в качестве входных данных (например, read, edit, list, glob, grep и многие команды bash).
Расширение домашнего каталога (например, ~/...) влияет только на то, как записывается шаблон. Оно не делает внешний путь частью текущего рабочего пространства, поэтому пути за пределами рабочего каталога всё равно должны быть разрешены через external_directory.
Например, это разрешает доступ ко всему в ~/projects/personal/:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}Любой каталог, разрешённый здесь, наследует те же значения по умолчанию, что и текущее рабочее пространство. Поскольку read по умолчанию allow, чтение также разрешено для записей в external_directory, если не переопределено. Добавьте явные правила, когда инструмент должен быть ограничен в этих путях, например, блокировка редактирования при сохранении чтения:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}Держите список сфокусированным на доверенных путях и добавляйте дополнительные правила разрешения или запрета по мере необходимости для других инструментов (например, bash).
Доступные разрешения
Разрешения OpenCode организованы по имени инструмента, плюс несколько защитных механизмов:
read— чтение файла (соответствует пути файла)edit— все модификации файлов (охватываетedit,write,patch,multiedit)glob— глоббинг файлов (соответствует glob-шаблону)grep— поиск по содержимому (соответствует regex-шаблону)list— список файлов в каталоге (соответствует пути каталога)bash— выполнение shell-команд (соответствует разобранным командам, таким какgit status --porcelain)task— запуск субагентов (соответствует типу субагента)skill— загрузка навыка (соответствует имени навыка)lsp— выполнение LSP-запросов (в настоящее время не детализировано)todoread,todowrite— чтение/обновление списка задачwebfetch— получение URL (соответствует URL)websearch,codesearch— веб/код поиск (соответствует запросу)external_directory— срабатывает, когда инструмент затрагивает пути за пределами рабочего каталога проектаdoom_loop— срабатывает, когда один и тот же вызов инструмента повторяется 3 раза с идентичным вводом
Значения по умолчанию
Если вы ничего не указываете, OpenCode начинает с разрешительных значений по умолчанию:
- Большинство разрешений по умолчанию
"allow". doom_loopиexternal_directoryпо умолчанию"ask".read—"allow", но файлы.envпо умолчанию запрещены:
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}Что делает "Ask"
Когда OpenCode запрашивает одобрение, интерфейс предлагает три варианта:
once— одобрить только этот запросalways— одобрить будущие запросы, соответствующие предложенным шаблонам (на оставшуюся часть текущей сессии OpenCode)reject— отклонить запрос
Набор шаблонов, которые always одобрит, предоставляется инструментом (например, одобрения bash обычно добавляют в белый список безопасный префикс команды, такой как git status*).
Агенты
Вы можете переопределить разрешения для каждого агента. Разрешения агента объединяются с глобальной конфигурацией, и правила агента имеют приоритет. Узнайте больше о разрешениях агентов.
Примечание: Обратитесь к разделу Детальные правила (объектный синтаксис) выше для более подробных примеров сопоставления шаблонов.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "deny",
"git push *": "deny",
"grep *": "allow"
}
},
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "ask",
"git push *": "deny",
"grep *": "allow"
}
}
}
}
}Вы также можете настроить разрешения агента в Markdown:
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Only analyze code and suggest changes.Совет: Используйте сопоставление шаблонов для команд с аргументами.
"grep *"разрешаетgrep pattern file.txt, тогда как"grep"само по себе заблокирует это. Команды вродеgit statusработают для поведения по умолчанию, но требуют явного разрешения (например,"git status *"), когда передаются аргументы.