Русский
Документация
Политики

Политики

Управляйте тем, какие настроенные ресурсы может использовать OpenCode.

Политики определяют, может ли OpenCode выполнить действие над именованным ресурсом. Эта функция экспериментальная и настраивается с помощью массива 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.useID провайдера, например 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"
      }
    ]
  }
}

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

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


Списки провайдеров

Используйте политики вместо устаревших настроек disabled_providers и enabled_providers для управления доступом провайдеров.

Чтобы заменить 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" }
    ]
  }
}