Buckets:
| 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`, `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`) | |
| - `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` по умолчанию запрещены: | |
| ```json title="opencode.json" | |
| { | |
| "permission": { | |
| "read": { | |
| "*": "allow", | |
| "*.env": "deny", | |
| "*.env.*": "deny", | |
| "*.env.example": "allow" | |
| } | |
| } | |
| } | |
| ``` | |
| ## Что означает «ask» | |
| Когда 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 *"`) при передаче аргументов. | |
| ::: | |
Xet Storage Details
- Size:
- 11.2 kB
- Xet hash:
- 5a8e9df77fd24852c0c38ff0f631ec147b9a7663e488fd237507e07d40c1e099
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.