canUseTool コールバックを使用して、実行時にそれ以外のすべてを処理します。
このページはパーミッションモードとルールについて説明しています。ユーザーが実行時にツールリクエストを承認または拒否する対話的な承認フローを構築するには、承認とユーザー入力の処理を参照してください。
パーミッションの評価方法
Claude がツールをリクエストすると、SDK は次の順序でパーミッションをチェックします。フック
最初にフックを実行します。フックはコールを直接拒否するか、それを渡すことができます。
allow を返すフックは、以下の拒否および質問ルールをスキップしません。これらはフックの結果に関係なく評価されます。拒否ルール
deny ルール(disallowed_tools およびsettings.jsonから)をチェックします。拒否ルールが一致する場合、bypassPermissions モードでもツールはブロックされます。Bash のような裸名の拒否ルールはこの評価が開始される前に Claude のコンテキストからツールを削除するため、このステップでチェックされるのは Bash(rm *) のようなスコープ付きルールのみです。パーミッションモード
アクティブなパーミッションモードを適用します。
bypassPermissions はこのステップに到達したすべてを承認します。acceptEdits はファイル操作を承認します。その他のモードはフォールスルーします。canUseTool コールバック
上記のいずれでも解決されない場合、決定のために
canUseTool コールバックを呼び出します。dontAsk モードでは、このステップはスキップされ、ツールは拒否されます。- フック: カスタムコードを実行して、ツールリクエストを許可、拒否、または変更します。フックで実行を制御を参照してください。
- canUseTool コールバック: 実行時にユーザーに承認を促します。承認とユーザー入力の処理を参照してください。
許可および拒否ルール
allowed_tools および disallowed_tools(TypeScript:allowedTools / disallowedTools)は、上記の評価フロー内の許可および拒否ルールリストにエントリを追加します。許可ルールは承認のみに影響します。allowed_tools にリストされていないツールは引き続き Claude に利用可能であり、パーミッションモードにフォールスルーします。拒否ルールは、ツール全体に名前を付けるか、ツール内のパターンをスコープするかによって異なる動作をします。
| オプション | 効果 |
|---|---|
allowed_tools=["Read", "Grep"] | Read および Grep は自動承認されます。ここにリストされていないツールは引き続き存在し、パーミッションモードおよび canUseTool にフォールスルーします。 |
disallowed_tools=["Bash"] | Bash ツール定義はリクエストから削除されます。Claude はツールを認識せず、それを試みることはできません。 |
disallowed_tools=["Bash(rm *)"] | Bash は利用可能なままです。rm * に一致する呼び出しは、bypassPermissions を含むすべてのパーミッションモードで拒否されます。その他の Bash 呼び出しはパーミッションモードにフォールスルーします。 |
allowedTools を permissionMode: "dontAsk" と組み合わせます。リストされたツールは承認されます。その他のものはプロンプトの代わりに直接拒否されます。
.claude/settings.json で許可、拒否、および質問ルールを宣言的に設定することもできます。これらのルールは、project 設定ソースが有効な場合に読み込まれます。デフォルトの query() オプションではこれが有効です。setting_sources(TypeScript:settingSources)を明示的に設定する場合は、それらを適用するために "project" を含めてください。ルール構文については、パーミッション設定を参照してください。
パーミッションモード
パーミッションモードは、Claude がツールをどのように使用するかについてのグローバル制御を提供します。query() を呼び出すときにパーミッションモードを設定するか、ストリーミングセッション中に動的に変更できます。
利用可能なモード
SDK は以下のパーミッションモードをサポートしています。| モード | 説明 | ツール動作 |
|---|---|---|
default | 標準パーミッション動作 | 自動承認なし。一致しないツールは canUseTool コールバックをトリガーします |
dontAsk | プロンプトの代わりに拒否 | allowed_tools またはルールで事前承認されていないものはすべて拒否されます。canUseTool は呼び出されません |
acceptEdits | ファイル編集を自動受け入れ | ファイル編集およびファイルシステム操作(mkdir、rm、mv など)は自動的に承認されます |
bypassPermissions | すべてのパーミッションチェックをバイパス | すべてのツールはパーミッションプロンプトなしで実行されます(注意して使用してください) |
plan | 計画モード | 読み取り専用ツールが実行されます。Claude はソースファイルを編集せずに分析および計画します |
auto(TypeScript のみ) | モデル分類承認 | モデル分類器が各ツール呼び出しを承認または拒否します。利用可能性については自動モードを参照してください |
パーミッションモードの設定
クエリを開始するときにパーミッションモードを一度設定するか、セッションがアクティブな間に動的に変更できます。- クエリ時
- ストリーミング中
クエリを作成するときに
permission_mode(Python)または permissionMode(TypeScript)を渡します。このモードは、動的に変更されない限り、セッション全体に適用されます。モードの詳細
ファイル編集モード(acceptEdits)
ファイル操作を自動承認し、Claude がプロンプトなしでコードを編集できるようにします。その他のツール(ファイルシステム操作ではない Bash コマンドなど)は引き続き通常のパーミッションが必要です。
自動承認される操作:
- ファイル編集(Edit、Write ツール)
- ファイルシステムコマンド:
mkdir、touch、rm、rmdir、mv、cp、sed
additionalDirectories 内のパスにのみ適用されます。そのスコープ外のパスおよび保護されたパスへの書き込みはプロンプトが表示されます。
使用時期: Claude の編集を信頼し、プロトタイピング中など、より高速な反復を望む場合、または分離されたディレクトリで作業する場合。
質問しないモード(dontAsk)
パーミッションプロンプトを拒否に変換します。allowed_tools、settings.json 許可ルール、またはフックで事前承認されたツールは通常どおり実行されます。その他のすべては canUseTool を呼び出さずに拒否されます。
使用時期: ヘッドレスエージェント用に固定された明示的なツール表面が必要で、canUseTool が存在しないことへの暗黙的な依存よりもハード拒否を優先する場合。
パーミッションバイパスモード(bypassPermissions)
プロンプトなしですべてのツール使用を自動承認します。フックは引き続き実行され、必要に応じて操作をブロックできます。
計画モード(plan)
Claude を読み取り専用ツールに制限します。Claude はファイルを読み取り、読み取り専用シェルコマンドを実行してコードベースを探索できますが、ソースファイルは編集しません。Claude は AskUserQuestion を使用して、計画を最終化する前に要件を明確にする場合があります。これらのプロンプトの処理については、承認とユーザー入力の処理を参照してください。
使用時期: Claude に変更を提案させたいが実行させたくない場合、たとえばコードレビュー中または変更を実行する前に承認が必要な場合。
関連リソース
パーミッション評価フロー内の他のステップについては、以下を参照してください。- 承認とユーザー入力の処理:対話的な承認プロンプトと明確化の質問
- フックガイド:エージェントライフサイクルの主要なポイントでカスタムコードを実行
- パーミッションルール:
settings.jsonの宣言的な許可/拒否ルール