本文へスキップ
設定

ポリシー

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

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


各ポリシーステートメントには 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.useプロバイダー ID (openai など)LLM プロバイダーの使用を許可または拒否します。

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


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

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

これにより、company-us や company-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"
      }
    ]
  }
}

プロバイダーに一致するポリシーがない場合、そのプロバイダーの使用はデフォルトで許可されます。

ポリシーはグローバル設定とプロジェクト設定の両方で設定できます。両方の場所のポリシーが同じプロバイダーに一致する場合は、グローバルポリシーがプロジェクトポリシーより優先されます。これにより、グローバルで拒否しているプロバイダーをリポジトリが再度有効にすることを防げます。


OpenCode 2 でプロバイダーへのアクセスを制御する場合は、古い disabled_providers および enabled_providers 設定の代わりにポリシーを使用してください。OpenCode 1 では、引き続きこれらのプロバイダーリストを使用してください。

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" }
    ]
  }
}