ポリシー
ポリシーは、OpenCode が指定されたリソースに対してアクションを実行できるかどうかを制御します。この機能は実験的なもので、opencode.json の experimental.policies 配列で設定します。
ポリシーは permissions とは別物です。Permissions はセッション中にツールが何を行えるかを制御し、ポリシーは OpenCode が LLM Provider などのリソースを使用できるかどうかを制御します。
設定
各ポリシーステートメントには 3 つのフィールドがあります。
effect—"allow"または"deny"のいずれか。action— 制御対象の操作。resource— ステートメントが適用されるリソース ID またはワイルドカードパターン。
たとえば、openai Provider の使用を拒否するには、次のようにします。
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "openai"
}
]
}
}
ポリシーで拒否された Provider は、認証情報が設定されていたり、正しく構成されていたとしても、モデルの選択や使用には利用できません。
利用可能なポリシー
OpenCode は現在、1 つのポリシーアクションをサポートしています。
| Action | Resource | Description |
|---|---|---|
provider.use | openai などの Provider ID | LLM Provider の使用を許可または拒否します。 |
今後、より多くのポリシーアクションが追加される予定です。
マッチング
resource フィールドはワイルドカードマッチングをサポートしています。* は 0 文字以上と一致し、? は 1 文字と一致します。
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "company-*"
}
]
}
}
これは company-us や company-eu などの Provider を拒否します。
ルールの順序
複数のステートメントがマッチする場合、最後にマッチしたステートメントが優先されます。幅広いルールを先に書き、その後により具体的な例外を記述してください。
たとえば、Anthropic のみを許可するには、次のようにします。
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "*"
},
{
"effect": "allow",
"action": "provider.use",
"resource": "anthropic"
}
]
}
}
どのポリシーも Provider にマッチしない場合、Provider の使用はデフォルトで許可されます。
ポリシーはグローバル設定とプロジェクト設定の両方で設定できます。両方の場所からのポリシーが同じ Provider にマッチする場合、グローバルポリシーがプロジェクトポリシーより優先されます。これにより、リポジトリ側でグローバルに拒否した Provider を再び有効化することを防ぎます。
Provider リスト
Provider へのアクセスを制御する際は、古い disabled_providers および enabled_providers 設定の代わりにポリシーを使用してください。
disabled_providers を置き換えるには、次のようにします。
{
"experimental": {
"policies": [
{ "effect": "deny", "action": "provider.use", "resource": "openai" },
{ "effect": "deny", "action": "provider.use", "resource": "google" }
]
}
}
enabled_providers を置き換えるには、まずすべての Provider を拒否し、その後で選択した Provider を許可します。
{
"experimental": {
"policies": [
{ "effect": "deny", "action": "provider.use", "resource": "*" },
{ "effect": "allow", "action": "provider.use", "resource": "anthropic" },
{ "effect": "allow", "action": "provider.use", "resource": "openai" }
]
}
}