Политики
Управляйте тем, какие настроенные ресурсы может использовать OpenCode.
Политики определяют, может ли OpenCode выполнить действие над именованным ресурсом. Эта функция экспериментальная и настраивается с помощью массива experimental.policies в opencode.json.
Политики отделены от разрешений. Разрешения определяют, что могут делать инструменты во время сессии, а политики определяют, может ли OpenCode использовать ресурс, например LLM провайдера.
Конфигурация
Каждое правило политики содержит три поля:
effect— либо"allow", либо"deny".action— контролируемая операция.resource— идентификатор ресурса или шаблон с маской, к которому применяется правило.
Например, запретите использование провайдера openai:
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "openai"
}
]
}
}Провайдер, запрещённый политикой, недоступен для выбора модели или использования модели, даже если у него есть учётные данные или он настроен корректно.
Доступные политики
На данный момент OpenCode поддерживает одно действие политики:
| Действие | Ресурс | Описание |
|---|---|---|
provider.use | ID провайдера, например openai | Разрешает или запрещает использование LLM провайдера. |
В будущем могут быть добавлены другие действия политики.
Сопоставление
Поле resource поддерживает сопоставление по маске. Используйте * для совпадения с нулём или более символов и ? для совпадения с одним символом.
Например:
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "company-*"
}
]
}
}Это запрещает таких провайдеров, как company-us и company-eu.
Порядок правил
Если совпадает несколько правил, побеждает последнее совпавшее правило. Сначала указывайте общие правила, а затем — более конкретные исключения.
Например, разрешите использовать только Anthropic:
{
"$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:
{
"experimental": {
"policies": [
{ "effect": "deny", "action": "provider.use", "resource": "openai" },
{ "effect": "deny", "action": "provider.use", "resource": "google" }
]
}
}Чтобы заменить enabled_providers, сначала запретите всех провайдеров, а затем разрешите выбранных:
{
"experimental": {
"policies": [
{ "effect": "deny", "action": "provider.use", "resource": "*" },
{ "effect": "allow", "action": "provider.use", "resource": "anthropic" },
{ "effect": "allow", "action": "provider.use", "resource": "openai" }
]
}
}