Русский
Документация
Разрешения

Разрешения

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

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 — глоббинг файлов (соответствует glob-шаблону)
  • grep — поиск по содержимому (соответствует regex-шаблону)
  • 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"
    }
  }
}

Что делает "Ask"

Когда 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.

Совет: Используйте сопоставление шаблонов для команд с аргументами. "grep *" разрешает grep pattern file.txt, тогда как "grep" само по себе заблокирует это. Команды вроде git status работают для поведения по умолчанию, но требуют явного разрешения (например, "git status *"), когда передаются аргументы.