Разрешения
Контролируйте, какие действия требуют одобрения для выполнения.
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— подстановка файла (соответствует шаблону подстановки)grep— поиск по контенту (соответствует шаблону регулярного выражения)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" } }}Что означает «Спросить»
Когда 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 editsmode: subagentpermission: edit: deny bash: ask webfetch: deny---
Only analyze code and suggest changes.