コンテンツにスキップ

ポリシー

ポリシーは、OpenCode が指定されたリソースに対してアクションを実行できるかどうかを制御します。この機能は実験的なもので、opencode.jsonexperimental.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 つのポリシーアクションをサポートしています。

ActionResourceDescription
provider.useopenai などの Provider IDLLM Provider の使用を許可または拒否します。

今後、より多くのポリシーアクションが追加される予定です。


マッチング

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

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

これは company-uscompany-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" }
    ]
  }
}