日本語
ドキュメント
権限

Permissions

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

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

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


Actions

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

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

Configuration

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

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

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

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

Granular Rules (Object Syntax)

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

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

ルールはパターンマッチで評価され、最後に一致したルールが優先されます。一般的なパターンは、すべてに一致する "*" ルールを先頭に置き、より具体的なルールをその後に置くことです。

Wildcards

パーミッションパターンは、シンプルなワイルドカードマッチングを使用します:

  • * は任意の文字 0 個以上に一致します
  • ? はちょうど 1 文字に一致します
  • その他のすべての文字は文字どおりに一致します

Home Directory Expansion

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

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

External Directories

OpenCode が起動された作業ディレクトリの外側のパスに触れるツール呼び出しを許可するには、external_directory を使用します。これは、パスを入力として受け取る任意のツール(例えば readeditglobgrep、および多くの 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)に対しては必要に応じて追加の allow または deny ルールを重ねてください。


Available Permissions

OpenCode のパーミッションはツール名をキーとし、さらにいくつかの安全ガードがあります:

  • read — ファイルの読み取り(ファイルパスに一致)
  • edit — すべてのファイル変更(editwritepatch を含む)
  • glob — ファイルの glob(glob パターンに一致)
  • grep — 内容検索(正規表現パターンに一致)
  • bash — シェルコマンドの実行(git status --porcelain のようにパースされたコマンドに一致)
  • task — サブエージェントの起動(サブエージェントのタイプに一致)
  • skill — スキルの読み込み(スキル名に一致)
  • lsp — LSP クエリの実行(現在はきめ細かくない)
  • question — 実行中にユーザーに質問する
  • webfetch — URL の取得(URL に一致)
  • websearch — Web 検索(クエリに一致)
  • external_directory — ツールがプロジェクトの作業ディレクトリの外側のパスに触れたときにトリガーされる
  • doom_loop — 同じツール呼び出しが同一の入力で 3 回繰り返されたときにトリガーされる

Defaults

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

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

What "Ask" Does

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

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

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


Agents

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

注記: より詳細なパターンマッチングの例については、上記の Granular Rules (Object Syntax) セクションを参照してください。

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 *" など)が必要です。