Перейти к содержимому

Разрешения

Контролируйте, какие действия требуют одобрения для выполнения.

opencode использует конфигурацию permission, чтобы решить, должно ли данное действие выполняться автоматически, запрашивать вас или блокироваться.

Начиная с v1.1.1, устаревшая логическая конфигурация tools устарела и была объединена с permission. Старая конфигурация tools по-прежнему поддерживается для обеспечения обратной совместимости.


Действия

Каждое правило разрешения разрешается в одно из:

  • "allow" — запуск без одобрения
  • "ask" — запрос на одобрение
  • "deny" — заблокировать действие

Конфигурация

Вы можете устанавливать разрешения глобально (с помощью *) и переопределять определенные инструменты.

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}

Вы также можете установить все разрешения одновременно:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}

Детальные правила (синтаксис объекта)

Для большинства разрешений вы можете использовать объект для применения различных действий на основе входных данных инструмента.

opencode.json
{
"$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/:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}

Любой каталог, разрешенный здесь, наследует те же настройки по умолчанию, что и текущая рабочая область. Поскольку для read по умолчанию установлено значение allow, чтение также разрешено для записей под external_directory, если оно не переопределено. Добавьте явные правила, когда инструмент должен быть ограничен в этих путях, например, блокировать редактирование при сохранении чтения:

opencode.json
{
"$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 по умолчанию запрещены:
opencode.json
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}

Что означает «Спросить»

Когда opencode запрашивает одобрение, пользовательский интерфейс предлагает три результата:

  • once — утвердить только этот запрос
  • always — одобрять будущие запросы, соответствующие предложенным шаблонам (до конца текущего сеанса opencode).
  • reject — отклонить запрос

Набор шаблонов, которые одобрит always, предоставляется инструментом (например, утверждения bash обычно включают в белый список безопасный префикс команды, такой как git status*).


Агенты

Вы можете переопределить разрешения для каждого агента. Разрешения агента объединяются с глобальной конфигурацией, и правила агента имеют приоритет. Подробнее о разрешениях агента.

opencode.json
{
"$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:

~/.config/opencode/agents/review.md
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Only analyze code and suggest changes.