Разрешения
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, 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)glob— подстановка файла (соответствует шаблону подстановки)grep— поиск по контенту (соответствует шаблону регулярного выражения)bash— запуск shell-команд (соответствует проанализированным командам, напримерgit status --porcelain)task— запуск субагентов (соответствует типу субагента)skill— загрузка навыка (соответствует названию навыка)lsp— выполнение запросов LSP (в настоящее время не детализированных)webfetch— получение URL-адреса (соответствует URL-адресу)websearch— поиск в сети (соответствует запросу)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"
}
}
}Когда 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.