コンテンツにスキップ

権限

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

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 — shell コマンドの実行 (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"
}
}
}

「尋ねる」ということ

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.