--- title: Разрешения description: Контролируйте, какие действия требуют одобрения для выполнения. --- opencode использует конфигурацию `permission`, чтобы решить, должно ли данное действие выполняться автоматически, запрашивать вас или блокироваться. Начиная с `v1.1.1`, устаревшая логическая конфигурация `tools` устарела и была объединена с `permission`. Старая конфигурация `tools` по-прежнему поддерживается для обеспечения обратной совместимости. --- ## Действия Каждое правило разрешения разрешается в одно из: - `"allow"` — запуск без одобрения - `"ask"` — запрос на одобрение - `"deny"` — заблокировать действие --- ## Конфигурация Вы можете устанавливать разрешения глобально (с помощью `*`) и переопределять определенные инструменты. ```json title="opencode.json" { "$schema": "https://opencode.ai/config.json", "permission": { "*": "ask", "bash": "allow", "edit": "deny" } } ``` Вы также можете установить все разрешения одновременно: ```json title="opencode.json" { "$schema": "https://opencode.ai/config.json", "permission": "allow" } ``` --- ## Детальные правила (синтаксис объекта) Для большинства разрешений вы можете использовать объект для применения различных действий на основе входных данных инструмента. ```json title="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`](#external-directories). - `~/projects/*` -> `/Users/username/projects/*` - `$HOME/projects/*` -> `/Users/username/projects/*` - `~` -> `/Users/username` ### Внешние каталоги Используйте `external_directory`, чтобы разрешить вызовы инструментов, затрагивающие пути за пределами рабочего каталога, в котором был запущен opencode. Это применимо к любому инструменту, который принимает путь в качестве входных данных (например, `read`, `edit`, `list`, `glob`, `grep` и многие команды `bash`). Расширение дома (например, `~/...`) влияет только на запись шаблона. Он не делает внешний путь частью текущего рабочего пространства, поэтому пути за пределами рабочего каталога все равно должны быть разрешены через `external_directory`. Например, это позволяет получить доступ ко всему, что находится под `~/projects/personal/`: ```json title="opencode.json" { "$schema": "https://opencode.ai/config.json", "permission": { "external_directory": { "~/projects/personal/**": "allow" } } } ``` Любой каталог, разрешенный здесь, наследует те же настройки по умолчанию, что и текущая рабочая область. Поскольку для [`read` по умолчанию установлено значение `allow`](#defaults), чтение также разрешено для записей под `external_directory`, если оно не переопределено. Добавьте явные правила, когда инструмент должен быть ограничен в этих путях, например, блокировать редактирование при сохранении чтения: ```json title="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` — запуск команд оболочки (соответствует проанализированным командам, например `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` по умолчанию запрещены: ```json title="opencode.json" { "permission": { "read": { "*": "allow", "*.env": "deny", "*.env.*": "deny", "*.env.example": "allow" } } } ``` --- ## Что означает «Спросить» Когда opencode запрашивает одобрение, пользовательский интерфейс предлагает три результата: - `once` — утвердить только этот запрос - `always` — одобрять будущие запросы, соответствующие предложенным шаблонам (до конца текущего сеанса opencode). - `reject` — отклонить запрос Набор шаблонов, которые одобрит `always`, предоставляется инструментом (например, утверждения bash обычно включают в белый список безопасный префикс команды, такой как `git status*`). --- ## Агенты Вы можете переопределить разрешения для каждого агента. Разрешения агента объединяются с глобальной конфигурацией, и правила агента имеют приоритет. [Подробнее](/docs/agents#permissions) о разрешениях агента. :::note Более подробные примеры сопоставления с образцом см. в разделе [Детальные правила (синтаксис объекта)](#granular-rules-object-syntax) выше. ::: ```json title="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: ```markdown title="~/.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. ``` :::tip Используйте сопоставление с образцом для команд с аргументами. `"grep *"` разрешает `grep pattern file.txt`, а сам `"grep"` блокирует его. Такие команды, как `git status`, работают по умолчанию, но требуют явного разрешения (например, `"git status *"`) при передаче аргументов. :::