日本語
ドキュメント
ポリシー

ポリシー

OpenCodeが使用できる設定済みリソースを制御します。

ポリシーは、OpenCodeが特定のリソースに対してアクションを実行できるかどうかを制御します。この機能は実験的なもので、opencode.jsonexperimental.policies 配列で設定します。

ポリシーは権限とは別のものです。権限はセッション中にツールが何をできるかを制御しますが、ポリシーはLLMプロバイダーなどのリソースをOpenCodeが使用できるかどうかを制御します。


設定

各ポリシーステートメントには3つのフィールドがあります。

  • effect - "allow"(許可)または "deny"(拒否)のいずれか。
  • action - 制御対象の操作。
  • resource - ステートメントが適用されるリソースIDまたはワイルドカードパターン。

例えば、openai プロバイダーの使用を拒否するには次のようにします。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "experimental": {
    "policies": [
      {
        "effect": "deny",
        "action": "provider.use",
        "resource": "openai"
      }
    ]
  }
}

ポリシーによって拒否されたプロバイダーは、認証情報を持っていたり正しく設定されていたりしても、モデル選択やモデル使用に利用できません。


利用可能なポリシー

OpenCodeは現在、1つのポリシーアクションをサポートしています。

アクションリソース説明
provider.useopenai などのプロバイダーIDLLMプロバイダーの使用を許可または拒否します。

今後、さらに多くのポリシーアクションが追加される可能性があります。


マッチング

resource フィールドはワイルドカードマッチングをサポートしています。* は0文字以上、? は1文字にマッチします。

例:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "experimental": {
    "policies": [
      {
        "effect": "deny",
        "action": "provider.use",
        "resource": "company-*"
      }
    ]
  }
}

これにより company-uscompany-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_providersenabled_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" }
    ]
  }
}