К содержимому
Конфигурация

Политики

Политики определяют, может ли OpenCode выполнить действие над именованным ресурсом. Эта функция OpenCode 2 экспериментальная и настраивается с помощью массива experimental.policies в opencode.json.

Политики существуют отдельно от разрешений. Разрешения управляют тем, что инструменты могут делать во время сеанса, а политики — тем, может ли OpenCode использовать ресурс, например поставщика LLM.


Каждое правило политики содержит три поля:

  • effect - "allow" или "deny".
  • action - Контролируемая операция.
  • resource - Идентификатор ресурса или шаблон с подстановочными знаками, к которому применяется правило.

Например, запретите использование поставщика openai:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "experimental": {
    "policies": [
      {
        "effect": "deny",
        "action": "provider.use",
        "resource": "openai"
      }
    ]
  }
}

Поставщик, запрещенный политикой, недоступен для выбора и использования моделей, даже если для него есть учетные данные или он настроен правильно во всем остальном.


Сейчас OpenCode поддерживает одно действие политики:

ДействиеРесурсОписание
provider.useИдентификатор поставщика, например openaiРазрешает или запрещает использование поставщика LLM.

В будущем могут появиться и другие действия политик.


Поле resource поддерживает сопоставление с подстановочными знаками. Используйте *, чтобы сопоставить ноль или более символов, и ?, чтобы сопоставить один символ.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "experimental": {
    "policies": [
      {
        "effect": "deny",
        "action": "provider.use",
        "resource": "company-*"
      }
    ]
  }
}

Это правило запрещает таких поставщиков, как company-us и company-eu.


Если совпадает несколько правил, побеждает последнее совпавшее. Сначала размещайте общие правила, а после них — более конкретные исключения.

Например, разрешите только Anthropic:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "experimental": {
    "policies": [
      {
        "effect": "deny",
        "action": "provider.use",
        "resource": "*"
      },
      {
        "effect": "allow",
        "action": "provider.use",
        "resource": "anthropic"
      }
    ]
  }
}

Если ни одна политика не совпадает с поставщиком, его использование по умолчанию разрешено.

Политики можно задавать как в глобальной конфигурации, так и в конфигурации проекта. Если политики из обоих мест совпадают с одним и тем же поставщиком, глобальная политика имеет приоритет над политикой проекта. Это не позволяет репозиторию снова включить поставщика, которого вы запретили глобально.


В OpenCode 2 для управления доступом к поставщикам используйте политики вместо старых настроек disabled_providers и enabled_providers. В OpenCode 1 продолжайте использовать эти списки поставщиков.

Чтобы заменить disabled_providers:

opencode.json
{
  "experimental": {
    "policies": [
      { "effect": "deny", "action": "provider.use", "resource": "openai" },
      { "effect": "deny", "action": "provider.use", "resource": "google" }
    ]
  }
}

Чтобы заменить enabled_providers, сначала запретите всех поставщиков, а затем разрешите выбранных:

opencode.json
{
  "experimental": {
    "policies": [
      { "effect": "deny", "action": "provider.use", "resource": "*" },
      { "effect": "allow", "action": "provider.use", "resource": "anthropic" },
      { "effect": "allow", "action": "provider.use", "resource": "openai" }
    ]
  }
}