ポリシー
OpenCodeが使用できる設定済みリソースを制御します。
ポリシーは、OpenCodeが特定のリソースに対してアクションを実行できるかどうかを制御します。この機能は実験的なもので、opencode.json の experimental.policies 配列で設定します。
ポリシーは権限とは別のものです。権限はセッション中にツールが何をできるかを制御しますが、ポリシーはLLMプロバイダーなどのリソースをOpenCodeが使用できるかどうかを制御します。
設定
各ポリシーステートメントには3つのフィールドがあります。
effect-"allow"(許可)または"deny"(拒否)のいずれか。action- 制御対象の操作。resource- ステートメントが適用されるリソースIDまたはワイルドカードパターン。
例えば、openai プロバイダーの使用を拒否するには次のようにします。
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "openai"
}
]
}
}ポリシーによって拒否されたプロバイダーは、認証情報を持っていたり正しく設定されていたりしても、モデル選択やモデル使用に利用できません。
利用可能なポリシー
OpenCodeは現在、1つのポリシーアクションをサポートしています。
| アクション | リソース | 説明 |
|---|---|---|
provider.use | openai などのプロバイダーID | LLMプロバイダーの使用を許可または拒否します。 |
今後、さらに多くのポリシーアクションが追加される可能性があります。
マッチング
resource フィールドはワイルドカードマッチングをサポートしています。* は0文字以上、? は1文字にマッチします。
例:
{
"$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" }
]
}
}