日本語
ドキュメント
権限

パーミッション

どのアクションに承認が必要かを制御します。

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

v1.1.1 以降、レガシーの tools ブール設定は非推奨となり、permission に統合されました。古い tools 設定は後方互換性のために引き続きサポートされています。


アクション

各パーミッションルールは以下のいずれかに解決されます:

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

設定

グローバルにパーミッションを設定し(* を使用)、特定のツールをオーバーライドできます。

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

すべてのパーミッションを一度に設定することもできます:

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

きめ細かいルール(オブジェクト構文)

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

opencode.json
{
  "$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 が起動された作業ディレクトリ外のパスに触れるツール呼び出しを許可します。これはパスを入力として受け取るすべてのツールに適用されます(例:readeditlistglobgrep、および多くの bash コマンド)。

ホーム展開(~/... など)はパターンの書き方にのみ影響します。外部パスを現在のワークスペースの一部にするわけではないため、作業ディレクトリ外のパスは external_directory で許可する必要があります。

例えば、これは ~/projects/personal/ 下のすべてへのアクセスを許可します:

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

ここで許可されたディレクトリは、現在のワークスペースと同じデフォルトを継承します。read はデフォルトで allow なので、オーバーライドされない限り external_directory 下のエントリの読み取りも許可されます。これらのパスでツールを制限する必要がある場合は、明示的なルールを追加します。例えば、読み取りを維持しながら編集をブロックする場合:

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

リストを信頼できるパスに集中させ、他のツール(例:bash)に必要に応じて追加の許可または拒否ルールを重ねてください。


利用可能なパーミッション

OpenCode のパーミッションはツール名でキー付けされ、いくつかの安全ガードがあります:

  • read — ファイルの読み取り(ファイルパスにマッチ)
  • edit — すべてのファイル変更(editwritepatchmultiedit をカバー)
  • glob — ファイルグロビング(グロブパターンにマッチ)
  • grep — コンテンツ検索(正規表現パターンにマッチ)
  • list — ディレクトリ内のファイル一覧(ディレクトリパスにマッチ)
  • bash — シェルコマンドの実行(git status --porcelain のような解析されたコマンドにマッチ)
  • task — サブエージェントの起動(サブエージェントタイプにマッチ)
  • skill — スキルの読み込み(スキル名にマッチ)
  • lsp — LSP クエリの実行(現在は非きめ細かい)
  • todoreadtodowrite — TODO リストの読み取り/更新
  • webfetch — URL の取得(URL にマッチ)
  • websearchcodesearch — Web/コード検索(クエリにマッチ)
  • external_directory — ツールがプロジェクト作業ディレクトリ外のパスに触れたときにトリガー
  • doom_loop — 同じツール呼び出しが同一の入力で 3 回繰り返されたときにトリガー

デフォルト

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

  • ほとんどのパーミッションはデフォルトで "allow"
  • doom_loopexternal_directory はデフォルトで "ask"
  • read"allow" ですが、.env ファイルはデフォルトで拒否されます:
opencode.json
{
  "permission": {
    "read": {
      "*": "allow",
      "*.env": "deny",
      "*.env.*": "deny",
      "*.env.example": "allow"
    }
  }
}

"Ask" の動作

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

  • once — このリクエストのみを承認
  • always — 提案されたパターンにマッチする将来のリクエストを承認(現在の OpenCode セッションの残りの間)
  • reject — リクエストを拒否

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


エージェント

エージェントごとにパーミッションをオーバーライドできます。エージェントのパーミッションはグローバル設定とマージされ、エージェントルールが優先されます。エージェントのパーミッションについて詳しく学ぶ

注意: より詳細なパターンマッチングの例については、上記のきめ細かいルール(オブジェクト構文)セクションを参照してください。

opencode.json
{
  "$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 でエージェントのパーミッションを設定することもできます:

~/.config/opencode/agents/review.md
---
description: Code review without edits
mode: subagent
permission:
  edit: deny
  bash: ask
  webfetch: deny
---
 
Only analyze code and suggest changes.

ヒント: 引数付きのコマンドにはパターンマッチングを使用してください。"grep *"grep pattern file.txt を許可しますが、"grep" 単独ではブロックされます。git status のようなコマンドはデフォルトの動作では機能しますが、引数が渡される場合は明示的なパーミッション("git status *" など)が必要です。