Policies
控制 OpenCode 可以使用哪些已配置的资源。
策略(Policies)控制 OpenCode 是否可以对指定资源执行某个操作。此功能为实验性功能,通过 opencode.json 中的 experimental.policies 数组进行配置。
策略与权限是分开的。权限控制会话期间工具可以做什么,而策略控制 OpenCode 是否可以使用某个资源,例如 LLM 提供商。
Configuration
每条策略语句包含三个字段:
effect- 取值为"allow"或"deny"。action- 被控制的操作。resource- 该语句适用的资源 ID 或通配符模式。
例如,拒绝使用 openai 提供商:
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "openai"
}
]
}
}被策略拒绝的提供商无法用于模型选择或模型使用,即使它拥有凭证或配置正确。
Available Policies
OpenCode 目前支持一种策略操作:
| Action | Resource | Description |
|---|---|---|
provider.use | 提供商 ID,例如 openai | 允许或拒绝使用某个 LLM 提供商。 |
未来可能会添加更多策略操作。
Matching
resource 字段支持通配符匹配。使用 * 匹配零个或多个字符,使用 ? 匹配一个字符。
例如:
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "company-*"
}
]
}
}这将拒绝诸如 company-us 和 company-eu 之类的提供商。
Rule Order
当多条语句匹配时,以最后一条匹配的语句为准。建议先写宽泛的规则,再在后面写更具体的例外规则。
例如,仅允许 Anthropic:
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "*"
},
{
"effect": "allow",
"action": "provider.use",
"resource": "anthropic"
}
]
}
}如果没有策略匹配某个提供商,则默认允许使用该提供商。
策略可以同时设置在全局配置和项目配置中。如果两处的策略都匹配同一个提供商,全局策略的优先级高于项目策略。这可以防止某个仓库重新启用你在全局中已拒绝的提供商。
Provider Lists
在控制提供商访问权限时,请使用策略来代替较旧的 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" }
]
}
}