コンテンツにスキップ

権限

Permissions

OpenCode は permission 設定を使用して、特定のアクションが自動的に実行されるか確認を求めるかブロックされるかを決定します。

v1.1.1 現在、レガシー tools ブール値設定は非推奨となり、permission にマージされました。古い tools 設定は下位互換性のために引き続きサポートされています。


アクション

各権限ルールは以下のいずれかに解決されます:

  • "allow" — 承認なしに実行
  • "ask" — 確認を求める
  • "deny" — アクションをブロック

設定

グローバルに権限を設定し(* を使用して)、特定のツールを上書きできます。

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "*": "ask",
    "bash": "allow",
    "edit": "deny"
  }
}

すべての権限を一度に設定することもできます:

{
  "$schema": "https://opencode.ai/config.json",
  "permission": "allow"
}

細粒度のルール(オブジェクト構文)

ほとんどの権限に対して、オブジェクトを使用してツール入力に基づいて異なるアクションを適用できます。

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "bash": {
      "*": "ask",
      "git *": "allow",
      "npm *": "allow",
      "rm *": "deny",
      "grep *": "allow"
    },
    "edit": {
      "*": "deny",
      "packages/web/src/content/docs/*.mdx": "allow"
    }
  }
}

ルールはパターンマッチで評価され、最後にマッチしたルールが優先されます。キャッチオール "*" ルールを最初に配置し、より具体的なルールをその後に配置するのが一般的なパターンです。


ワイルドカード

権限パターンは単純なワイルドカード一致を使用します:

  • * — 0 個以上の任意の文字にマッチ
  • ? — 正確に 1 文字にマッチ
  • 他のすべての文字は文字通りマッチ

ホームディレクトリの展開

パターンの先頭に ~ または $HOME を使用してホームディレクトリを参照できます。これは external_directory ルールに特に便利です。

  • ~/projects/*/Users/username/projects/*
  • $HOME/projects/*/Users/username/projects/*
  • ~/Users/username

外部ディレクトリ

external_directory を使用して、OpenCode が開始された作業ディレクトリ外のパスに触れるツール呼び出しを許可します。これは(例えば readeditglobgrep、多くの bash コマンドのように)パスを入力として受け取る任意のツールに適用されます。

ホーム展開(~/... など)はパターンの書き方にのみ影響します。現在のワークスペースの一部となる外部パスを作成するものではなく、作業ディレクトリ外のパスは external_directory を介して引き続き許可される必要があります。

例えば、これにより ~/projects/personal/ 下のすべてへのアクセスが許可されます:

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "external_directory": {
      "~/projects/personal/**": "allow"
    }
  }
}

ここで許可されたディレクトリは現在のワークスペースと同じデフォルトを継承します。read はデフォルトで "allow" なので、external_directory 下のエントリへの読み取りも、明示的に上書きしない限り許可されます。これらのパスで特定のツールを制限する必要がある場合(読み取りを許可しながら編集をブロックするなど)、明示的なルールを追加します:

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "external_directory": {
      "~/projects/personal/**": "allow"
    },
    "edit": {
      "~/projects/personal/**": "deny"
    }
  }
}

リストを信頼できるパスに集中させ、他のツール(例えば bash)について必要に応じて追加の allow または deny ルールを重ねていきます。


利用可能な権限

OpenCode の権限はツール名でキー指定され、いくつかの安全保護があります:

  • read — ファイルの読み取り(ファイルパスにマッチ)
  • edit — すべてのファイル変更(editwritepatch をカバー)
  • glob — ファイル globbing(glob パターンにマッチ)
  • grep — コンテンツ検索(正規表現パターンにマッチ)
  • bash — シェルコマンドの実行(解析済みコマンドにマッチ。例:git status --porcelain
  • task — サブエージェントの起動(サブエージェントタイプにマッチ)
  • skill — skill の読み込み(skill 名にマッチ)
  • lsp — LSP クエリの実行(現在細粒度未対応)
  • question — 実行中のユーザーへの質問
  • webfetch — URL のフェッチ(URL にマッチ)
  • websearch — Web 検索(クエリにマッチ)
  • external_directory — ツールがプロジェクトの作業ディレクトリ外のパスに触れるときにトリガー
  • doom_loop — 同じツール呼び出しが同じ入力で 3 回繰り返されたときにトリガー

デフォルト

何も指定しない場合、OpenCode は寛容なデフォルトから開始します:

  • ほとんどの権限はデフォルトで "allow"
  • doom_loopexternal_directory はデフォルトで "ask"
  • read"allow" ですが、.env ファイルはデフォルトで拒否されます:
{
  "permission": {
    "read": {
      "*": "allow",
      "*.env": "deny",
      "*.env.*": "deny",
      "*.env.example": "allow"
    }
  }
}

“Ask” の動作

OpenCode が確認を求めるとき、UI は 3 つの結果を提供します:

  • once — この要求のみ承認
  • always — 現在の OpenCode セッションの残りにおいて、提案されたパターンにマッチする今後の要求を承認
  • reject — 要求を拒否

always が承認するパターンのセットはツールから提供されます(例えば bash の承認は通常 git status* のような安全なコマンドプレフィックスをホワイトリスト化します)。


エージェント

エージェントごとに権限を上書きできます。エージェント権限はグローバル設定とマージされ、エージェントのルールが優先されます。エージェント権限について詳しくはこちらを参照してください。

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "bash": {
      "*": "ask",
      "git *": "allow",
      "git commit *": "deny",
      "git push *": "deny",
      "grep *": "allow"
    }
  },
  "agent": {
    "build": {
      "permission": {
        "bash": {
          "*": "ask",
          "git *": "allow",
          "git commit *": "ask",
          "git push *": "deny",
          "grep *": "allow"
        }
      }
    }
  }
}

Markdown でエージェント権限を設定することもできます:

---
description: 編集なしのコードレビュー
mode: subagent
permission:
  edit: deny
  bash: ask
  webfetch: deny
---

コードの分析と変更提案のみを行います。