2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
3> Use this file to discover all available pages before exploring further.3> Use this file to discover all available pages before exploring further.
4 4
5# パーミッションの設定5# 権限の設定
6 6
7> パーミッションモード、フック、宣言的な許可/拒否ルールを使用して、エージェントがツールをどのように使用するかを制御します。7> 権限モード、hooks、および宣言的な許可/拒否ルールを使用して、エージェントがツールをどのように使用するかを制御します。
8 8
9Claude Agent SDK は、Claude がツールをどのように使用するかを管理するためのパーミッション制御を提供します。パーミッションモードとルールを使用して、自動的に許可されるものを定義し、[`canUseTool` コールバック](/docs/ja/agent-sdk/user-input)を使用して、実行時にそれ以外のすべてを処理します。9Claude Agent SDK は、Claude がツールをどのように使用するかを管理するための権限制御を提供します。権限モードとルールを使用して、自動的に許可されるものを定義し、[`canUseTool` コールバック](/docs/ja/agent-sdk/user-input)を使用して、実行時にそれ以外のすべてを処理します。
10
11<Note>
12 このページはパーミッションモードとルールについて説明しています。ユーザーが実行時にツールリクエストを承認または拒否する対話的な承認フローを構築するには、[承認とユーザー入力の処理](/docs/ja/agent-sdk/user-input)を参照してください。
13</Note>
14 10
15<h2 id="how-permissions-are-evaluated">11<h2 id="how-permissions-are-evaluated">
16 パーミッションの評価方法12 権限がどのように評価されるか
17</h2>13</h2>
18 14
19Claude がツールをリクエストすると、SDK は次の順序でパーミッションをチェックします。15Claude がツールをリクエストすると、SDK は以下の順序で権限をチェックします。
20 16
21<Steps>17<Steps>
22 <Step title="フック">18 <Step title="Hooks">
23 最初に[フック](/docs/ja/agent-sdk/hooks)を実行します。フックはコールを直接拒否するか、それを渡すことができます。`allow` を返すフックは、以下の拒否および質問ルールをスキップしません。これらはフックの結果に関係なく評価されます。19 最初に [hooks](/docs/ja/agent-sdk/hooks) を実行します。Hook は呼び出しを完全に拒否するか、それを通すことができます。`allow` を返す Hook は、以下の deny および ask ルールをスキップしません。これらは Hook の結果に関係なく評価されます。`PreToolUse` Hook の allow は、[重要なパス](/docs/ja/permission-modes#critical-paths) をターゲットとする `rm` または `rmdir` の削除を承認することもできません。
24 </Step>20 </Step>
25 21
26 <Step title="拒否ルール">22 <Step title="Deny ルール">
27 `deny` ルール(`disallowed_tools` および[settings.json](/docs/ja/settings#permission-settings)から)をチェックします。拒否ルールが一致する場合、`bypassPermissions` モードでもツールはブロックされます。`Bash` のような裸名の拒否ルールはこの評価が開始される前に Claude のコンテキストからツールを削除するため、このステップでチェックされるのは `Bash(rm *)` のようなスコープ付きルールのみです。23 `deny` ルール(`disallowed_tools` および [settings.json](/docs/ja/settings-reference#permission-settings) から)をチェックします。Deny ルールがマッチした場合、`bypassPermissions` モードでもツールはブロックされます。`Bash` のような裸名の deny ルールは、この評価が始まる前に Claude のコンテキストからツールを削除するため、`Bash(rm *)` のようなスコープ付きルールのみがこのステップでチェックされます。
28 </Step>24 </Step>
29 25
30 <Step title="質問ルール">26 <Step title="Ask ルール">
31 [settings.json](/docs/ja/settings#permission-settings)から `ask` ルールをチェックします。質問ルールが一致する場合、`bypassPermissions` モードでも、コールは確認のために[`canUseTool` コールバック](/docs/ja/agent-sdk/user-input)にフォールスルーします。27 [settings.json](/docs/ja/settings-reference#permission-settings) から `ask` ルールをチェックします。Ask ルールがマッチした場合、呼び出しは確認のために [`canUseTool` コールバック](/docs/ja/agent-sdk/user-input) にフォールスルーします。`bypassPermissions` モードでも同様です。
32 28
33 ユーザーインタラクションが必要なツールは同じように動作します。`AskUserQuestion` および MCP ツール(サーバーが[`_meta["anthropic/requiresUserInteraction"]`](/docs/ja/mcp#require-approval-for-a-specific-tool)を設定)は、許可ルールが一致する場合でも常にコールバックにフォールスルーします。`dontAsk` モードでは、このモードはプロンプトを表示しないため、両方のケースが代わりに拒否されます。MCP アノテーションには Claude Code v2.1.199 以降が必要です。29 ユーザーインタラクションが必要なツールは同じように動作します。`AskUserQuestion` および [`_meta["anthropic/requiresUserInteraction"]`](/docs/ja/mcp#require-approval-for-a-specific-tool) を設定する MCP ツールサーバーは、allow ルールがマッチした場合でも常にコールバックにフォールスルーします。`dontAsk` モードでは、このモードは決してプロンプトを表示しないため、両方のケースが拒否されます。MCP アノテーションには Claude Code v2.1.199 以降が必要です。
34 30
35 [claude.ai コネクタ](/docs/ja/mcp#organization-controls-on-connector-tools)ツール(組織が `ask` に設定したもの)もこのステップでフローを離れます。すべてのコールはコールバックにフォールスルーします。`bypassPermissions` モードでも、許可ルールが一致する場合でもです。コールバックは理由 `Your organization requires approval for this tool` を受け取ります。`dontAsk` モードではコールが拒否される代わりに、このモードはプロンプトを表示しないためです。31 組織が `ask` に設定した [claude.ai コネクタ](/docs/ja/mcp#organization-controls-on-connector-tools) ツールもこのステップでフローを離れます。`bypassPermissions` モードでも allow ルールがマッチした場合でも、すべての呼び出しはコールバックにフォールスルーします。コールバックは理由 `Your organization requires approval for this tool` を受け取ります。`dontAsk` モードでは、このモードは決してプロンプトを表示しないため、呼び出しは拒否されます。
36 </Step>32 </Step>
37 33
38 <Step title="権限モード">34 <Step title="Permission モード">
39 アクティブな[権限モード](#permission-modes)を適用します。`bypassPermissions` はこのステップに到達したすべてを承認します。`acceptEdits` はファイル操作を承認します。`plan` はファイル編集およびシェル書き込みツールを許可ルールに関係なく [`canUseTool` コールバック](/docs/ja/agent-sdk/user-input)にルーティングするため、計画中は書き込み操作を自動承認することはできません。その他のモードはフォールスルーします。35 アクティブな [permission モード](#permission-modes) を適用します。
36
37 * `bypassPermissions` モードでは、Claude Code はこのステップに到達したすべてのものを承認します。ただし、[重要なパス](/docs/ja/permission-modes#critical-paths) をターゲットとする `rm` および `rmdir` の削除は除きます。これらはフォールスルーします。
38 * `acceptEdits` モードでは、Claude Code は [Accept edits モード](#accept-edits-mode-acceptedits) の下にリストされたファイル操作を承認します。
39 * `plan` モードでは、Claude Code は allow ルールに関係なく、ファイル編集およびシェル書き込みツールを `canUseTool` コールバックに送信します。これにより、計画中に書き込み操作を自動承認することはできません。
40 * その他のモードでは、リクエストはフォールスルーします。
40 </Step>41 </Step>
41 42
42 <Step title="許可ルール">43 <Step title="Allow ルール">
43 `allow` ルール(`allowed_tools` および settings.json から)をチェックします。ルールが一致する場合、ツールは承認されます。44 `allow` ルール(`allowed_tools` および settings.json から)をチェックします。ルールがマッチした場合、ツールは承認されます。ツール自体が承認する呼び出しもこのステップで解決されます。ルールは不要です。例えば、作業ディレクトリ内のファイル読み取りまたは [読み取り専用 Bash コマンド](/docs/ja/permissions#read-only-commands)。`rm` および `rmdir` の削除で [重要なパス](/docs/ja/permission-modes#critical-paths) をターゲットとするものは、allow ルールによって決して承認されません。プロンプトを表示するモードではコールバックに到達し、Claude Code v2.1.218 以降の `auto` モードでは [分類器](/docs/ja/permission-modes#eliminate-prompts-with-auto-mode) に移動し、`dontAsk` モードでは拒否されます。
44 </Step>45 </Step>
45 46
46 <Step title="canUseTool コールバック">47 <Step title="canUseTool コールバック">
47 上記のいずれでも解決されない場合、決定のために[`canUseTool` コールバック](/docs/ja/agent-sdk/user-input)を呼び出します。`dontAsk` モードでは、このステップはスキップされ、ツールは拒否されます。48 上記のいずれでも解決されない場合、決定のために [`canUseTool` コールバック](/docs/ja/agent-sdk/user-input) を呼び出します。`dontAsk` モードでは、このステップはスキップされ、ツールは拒否されます。
49
50 TypeScript SDK では、[`permissionPrompts: 'none'`](/docs/ja/agent-sdk/typescript#options) を設定した場合、このステップではコールバックは呼び出されません。[`PermissionRequest` hook](/docs/ja/hooks#permissionrequest) はまだ決定する機会があり、そうしない場合、Claude Code は呼び出しを拒否します。このオプションには Claude Code v2.1.259 以降が必要です。
48 </Step>51 </Step>
49</Steps>52</Steps>
50 53
51<img src="https://mintcdn.com/claude-code/jYgs7qigNjO1Badj/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=jYgs7qigNjO1Badj&q=85&s=c771ad9085b1277d3708027a49c744bc" alt="6 ステップのパーミッション評価フロー図。ツールリクエストはフック、拒否ルール、質問ルール、パーミッションモード、許可ルール、canUseTool を通過します。フック、拒否ルール、canUseTool はブロックにルーティングでき、パーミッションモードバイパス、許可ルール、canUseTool は実行にルーティングできます。質問ルールは canUseTool にルーティングします。" width="1180" height="260" data-path="images/agent-sdk/permissions-flow.svg" />54<img src="https://mintcdn.com/claude-code/jYgs7qigNjO1Badj/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=jYgs7qigNjO1Badj&q=85&s=c771ad9085b1277d3708027a49c744bc" className="dark:hidden" alt="上記のステップに対応する 6 ステップの権限評価フロー図。ツールリクエストは hooks、deny ルール、ask ルール、permission モード、allow ルール、canUseTool を通過します。Hooks、deny ルール、canUseTool は Blocked にルーティングでき、permission モード bypass、allow ルール、canUseTool は Execute にルーティングでき、ask ルールは canUseTool にルーティングします。" width="1180" height="260" data-path="images/agent-sdk/permissions-flow.svg" />
52 55
53v2.1.198 以降、このパーミッション評価順序が到達できない `canUseTool` コールバックを渡す場合、TypeScript SDK はクエリが構築されるときに Node.js プロセス警告を 1 回発行します。警告のコードは `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED` です。2 つの設定がこれをトリガーします。56<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/agent-sdk/permissions-flow-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=e53a91e9059cbf51852b7cedb4dd4251" className="hidden dark:block" alt="上記のステップに対応する 6 ステップの権限評価フロー図。ツールリクエストは hooks、deny ルール、ask ルール、permission モード、allow ルール、canUseTool を通過します。Hooks、deny ルール、canUseTool は Blocked にルーティングでき、permission モード bypass、allow ルール、canUseTool は Execute にルーティングでき、ask ルール は canUseTool にルーティングします。" width="1180" height="260" data-path="images/agent-sdk/permissions-flow-dark.svg" />
54 57
55* `permissionMode: 'bypassPermissions'`。これはパーミッションモードステップに到達するすべてのコールを自動承認します。58TypeScript SDK がコールバックが相談される前に呼び出しを自動承認することを期待する設定で `canUseTool` コールバックを渡す場合、SDK はクエリが構築されるときに Node.js プロセス警告を 1 回発行します。警告のコードは `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED` です。2 つの設定がそれをトリガーします。
56* `"Read"` などの各裸の `allowedTools` エントリ。これはコールバックが相談される前にそのツール全体を自動承認します。
57 59
58`Bash(ls *)` などの指定子を持つエントリと `acceptEdits` モードはこれをトリガーしません。また、設定ファイルから来る許可ルールはチェックに表示されません。60* `permissionMode: 'bypassPermissions'`。これは permission モードステップに到達するすべての呼び出しを自動承認します。ただし、[どのモードも自動承認しないアクション](/docs/ja/permission-modes#actions-no-mode-auto-approves) は除きます。
61* `"Read"` などの各裸の `allowedTools` エントリ。これはコールバックが相談される前にそのツール全体を自動承認します。ただし、[どのモードも自動承認しないアクション](/docs/ja/permission-modes#actions-no-mode-auto-approves) は除きます。
59 62
60`process.on('warning', ...)` でリッスンしてコードをマッチングしてログに記録するか、それを抑制します。モードとルールに関係なくすべてのツールコールをゲートするには、代わりに[`PreToolUse` フック](/docs/ja/agent-sdk/hooks)を使用します。63`Bash(ls *)` などの指定子を持つエントリおよび `acceptEdits` モードはそれをトリガーしません。また、設定ファイルから来る allow ルールはチェックに表示されません。
61 64
62このページは**許可および拒否ルール**と**パーミッションモード**に焦点を当てています。その他のステップについては、以下を参照してください。65`process.on('warning', ...)` でリッスンし、コードをマッチさせてログまたは抑制します。モードとルールに関係なくすべてのツール呼び出しをゲートするには、代わりに [`PreToolUse` hook](/docs/ja/agent-sdk/hooks) を使用します。
63 66
64* **フック:** カスタムコードを実行して、ツールリクエストを許可、拒否、または変更します。[フックで実行を制御](/docs/ja/agent-sdk/hooks)を参照してください。67このページは **allow および deny ルール** および **permission モード** に焦点を当てています。その他のステップについては、以下を参照してください。
65* **canUseTool コールバック:** 実行時にユーザーに承認を促します。[承認とユーザー入力の処理](/docs/ja/agent-sdk/user-input)を参照してください。68
69* **Hooks:** ツールリクエストを許可、拒否、または変更するカスタムコードを実行します。[実行を Hook で制御する](/docs/ja/agent-sdk/hooks) を参照してください。
70* **canUseTool コールバック:** 前のステップで呼び出しが解決されない場合、実行時にユーザーの承認をプロンプトします。[承認とユーザー入力を処理する](/docs/ja/agent-sdk/user-input) を参照してください。
66 71
67<h2 id="allow-and-deny-rules">72<h2 id="allow-and-deny-rules">
68 許可および拒否ルール73 許可ルールと拒否ルール
69</h2>74</h2>
70 75
71`allowed_tools` および `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)は、上記の評価フロー内の許可および拒否ルールリストにエントリを追加します。許可ルールは承認のみに影響します。`allowed_tools` にリストされていないツールは引き続き Claude に利用可能であり、パーミッションモードにフォールスルーします。拒否ルールは、ツール全体に名前を付けるか、ツール内のパターンをスコープするかによって異なる動作をします。76`allowed_tools` と `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)は、上記の評価フロー内の許可ルールと拒否ルールリストにエントリを追加します。`allowed_tools` に[タスク追跡ツール](/docs/ja/agent-sdk/todo-tracking#model-availability)の 1 つを名前で指定すると、Claude Code もセッションをオプトインします。`allowed_tools` にリストされていない他のツールは、Claude でも利用可能であり、承認が必要なそのツールへの呼び出しは権限モードにフォールスルーします。拒否ルールは、ツール名を指定するか、ツール内のパターンをスコープするかによって動作が異なります。
72 77
73| オプション | 効果 |78| オプション | 効果 |
74| :-------------------------------- | :----------------------------------------------------------------------------------------------------------------------- |79| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
75| `allowed_tools=["Read", "Grep"]` | `Read` および `Grep` は自動承認されます。ここにリストされていないツールは引き続き存在し、パーミッションモードおよび `canUseTool` にフォールスルーします。 |80| `allowed_tools=["Read", "Grep"]` | `Read` と `Grep` は自動承認されます。ここにリストされていない他のツールは依然として存在し、承認が必要なそれらへの呼び出しは権限モードと `canUseTool` にフォールスルーします。 |
76| `disallowed_tools=["Bash"]` | `Bash` ツール定義はリクエストから削除されます。Claude はツールを認識せず、それを試みることはできません。 |81| `disallowed_tools=["Bash"]` | `Bash` ツール定義はリクエストから削除されます。Claude はツールを認識せず、実行を試みることはできません。 |
77| `disallowed_tools=["Bash(rm *)"]` | `Bash` は利用可能なままです。`rm *` に一致する呼び出しは、`bypassPermissions` を含むすべてのパーミッションモードで拒否されます。その他の `Bash` 呼び出しはパーミッションモードにフォールスルーします。 |82| `disallowed_tools=["Bash(rm *)"]` | `Bash` は利用可能なままです。`rm *`[に記載されているとおり](/docs/ja/permissions#bash-rule-limits)にマッチする呼び出しは、`bypassPermissions` を含むすべての権限モードで拒否されます。`/bin/rm` を含む他の `Bash` 呼び出しは、権限モードにフォールスルーします。 |
78| `disallowed_tools=["*"]` | すべてのツール定義はリクエストから削除されます。拒否ルールではツール名グロブがサポートされています。`"*"` はすべてのツールに一致し、`"mcp__*"` はすべてのサーバー全体のすべての MCP ツールに一致します。 |83| `disallowed_tools=["*"]` | すべてのツール定義がリクエストから削除されます。拒否ルールではツール名グロブがサポートされています:`"*"` はすべてのツールにマッチし、`"mcp__*"` はすべてのサーバー全体のすべての MCP ツールにマッチします。 |
79 84
80許可ルールは、リテラル `mcp__<server>__` プレフィックスの後にのみツール名グロブを受け入れます。サーバーセグメントはグロブフリーである必要があり、設定したサーバーに名前を付けます。`mcp__puppeteer__*` は `puppeteer` サーバーからのすべてのツールに一致し、`mcp__github__get_*` はその `get_` ツールに一致します。`allowed_tools=["*"]` または `allowed_tools=["mcp__*"]` のようなアンカーされていないエントリは、スタートアップ警告で無視され、何も自動承認しません。85許可ルールは、リテラル `mcp__<server>__` プレフィックスの後にのみツール名グロブを受け入れます。サーバーセグメントはグロブフリーである必要があり、設定したサーバーを指定します:`mcp__puppeteer__*` は `puppeteer` サーバーからのすべてのツールにマッチし、`mcp__github__get_*` はその `get_` ツールにマッチします。`allowed_tools=["*"]` や `allowed_tools=["mcp__*"]` のようなアンカーなしエントリは、スタートアップ警告で無視され、何も自動承認しません。
81 86
82`Read` および `Edit` のスコープ付きルールはパスパターンを取ります。`Edit(path)` ルールは、`Write` および `NotebookEdit` を含む、ファイルを書き込むすべての組み込みツールを管理します。`Write(path)` ルールはファイル権限チェックと一致することはありません。87`Read` と `Edit` のスコープ付きルールはパスパターンを取ります。`Edit(path)` ルールは、`Write` と `NotebookEdit` を含む、ファイルを書き込むすべての組み込みツールを管理します。`Write(path)` ルールはファイル権限チェックによってマッチすることはありません。
83 88
84絶対ファイルシステムパスには `//path` を使用します。`Edit(//secrets/**)` の拒否ルールは、ディスク上の `/secrets` の下のどこでも書き込みをブロックします。単一の先頭スラッシュを使用する場合、`Edit(/secrets/**)` はルールのソースでアンカーされます。`allowed_tools` または `disallowed_tools` を通じて渡されるルールの場合、これはセッションの作業ディレクトリを意味するため、ルールはディスク上の `/secrets` をブロックしません。4 つのアンカー形式と設定ファイルからのルール解決方法については、[Read および Edit ルール](/docs/ja/permissions#read-and-edit)を参照してください。89絶対ファイルシステムパスには `//path` を使用します:`Edit(//secrets/**)` の拒否ルールは、ディスク上の `/secrets` の下のどこでも書き込みをブロックします。単一の先頭スラッシュの場合、`Edit(/secrets/**)` はルールのソースでアンカーします。`allowed_tools` または `disallowed_tools` を通じて渡されるルールの場合、それはセッションの作業ディレクトリを意味するため、ルールはディスク上の `/secrets` をブロックしません。[Read と Edit ルール](/docs/ja/permissions#read-and-edit)で 4 つのアンカー形式と、設定ファイルからのルール解決方法を参照してください。
85 90
86<Warning>91<Warning>
87 **自動承認されたツールは `canUseTool` に到達しません。** 任意の前のステップで承認されたツール呼び出し(`acceptEdits` または `bypassPermissions` による、または許可ルールによる)は、`canUseTool` コールバックをスキップするため、そこに配置した権限チェックはそのツールに対して静かにバイパスされます。`AskUserQuestion`、MCP ツール([`_meta["anthropic/requiresUserInteraction"]`](/docs/ja/mcp#require-approval-for-a-specific-tool) でマークされたもの)、およびコネクタツール([組織が `ask` に設定したもの](/docs/ja/mcp#organization-controls-on-connector-tools))は、許可ルールが一致する場合でもコールバックに到達します。92 **自動承認ツールは `canUseTool` に到達しません。** `acceptEdits` または `bypassPermissions` によって、または許可ルールによって、任意の前のステップで承認されたツール呼び出しは、その `canUseTool` コールバックをスキップするため、そこに配置した権限チェックはそのツールに対して静かにバイパスされます。`AskUserQuestion`、MCP ツール([`_meta["anthropic/requiresUserInteraction"]`](/docs/ja/mcp#require-approval-for-a-specific-tool)でマークされている)、コネクタツール([組織が `ask` に設定](/docs/ja/mcp#organization-controls-on-connector-tools))、および[重要なパス](/docs/ja/permission-modes#critical-paths)をターゲットとする `rm` と `rmdir` 削除は、許可ルールがマッチする場合でも、コールバックに到達します。`auto` モードでは、重要なパス削除は[分類器](/docs/ja/permission-modes#eliminate-prompts-with-auto-mode)に移動し、コールバックには移動しません。一方、ここにリストされている他の呼び出しはそれでも到達します。分類器ルーティングには Claude Code v2.1.218 以降が必要です。`dontAsk` モードでは、これらの呼び出しは代わりに拒否され、コールバックを呼び出しません。
88 93
89 カバレッジはエントリの形式に依存します。`Read` または `mcp__github__get_issue` のような単純な名前は、そのツールへのすべての呼び出しを自動承認しますが、`Bash(ls *)` のようなスコープ付きルールは一致する呼び出しのみを自動承認し、その他の `Bash` 呼び出しはコールバックにフォールスルーします。すべてのツール呼び出しで実行する必要があるチェックについては、[`PreToolUse` フック](/docs/ja/agent-sdk/hooks)を使用してください。フックはすべての他のステップの前に実行され、フック拒否は `bypassPermissions` モードでも適用されます。94 カバレッジはエントリの形式に依存します:`Read` や `mcp__github__get_issue` のような裸の名前は、上記の例外を除いて、そのツールへのすべての呼び出しを自動承認しますが、`Bash(npm test *)` のようなスコープ付きルールはマッチする呼び出しのみを自動承認し、承認が必要な他の `Bash` 呼び出しはコールバックにフォールスルーします。すべてのツール呼び出しで実行する必要があるチェックの場合は、[`PreToolUse` フック](/docs/ja/agent-sdk/hooks)を使用します:フックはすべての他のステップの前に実行され、フック拒否は `bypassPermissions` モードでも適用されます。
90</Warning>95</Warning>
91 96
92ロックダウンされたエージェントの場合、`allowedTools` を `permissionMode: "dontAsk"` と組み合わせます。リストされたツールは承認されます。上記の警告の常にプロンプトが表示されるツールを除き、その他のものはプロンプトの代わりに直接拒否されます。97ロックダウンされたエージェントの場合、`allowedTools` を `permissionMode: "dontAsk"` と組み合わせます:
93 98
94```typescript theme={null}99```typescript theme={null}
95const options = {100const options = {
98};103};
99```104```
100 105
106リストされたツールは承認されます。ただし、[モードが自動承認しないアクション](/docs/ja/permission-modes#actions-no-mode-auto-approves)を除きます。プロンプトを表示する他のすべての呼び出しは代わりに拒否されます。`default` モードで承認が不要な呼び出しは、リストするかどうかに関わらず実行されます。例えば、[読み取り専用 Bash コマンド](/docs/ja/permissions#read-only-commands)、`Agent` のような実行前に尋ねないツール、および作業ディレクトリ内のファイル読み取りなどです。ツールを Claude の到達範囲から完全に外すには、その裸の名前を `disallowedTools` に追加します。
107
101<Warning>108<Warning>
102 **`allowed_tools` は `bypassPermissions` を制限しません。** `allowed_tools` はリストしたツールのみを事前承認します。リストされていないツールは許可ルールと一致せず、パーミッションモードにフォールスルーします。ここで `bypassPermissions` はそれらを承認します。`allowed_tools=["Read"]` を `permission_mode="bypassPermissions"` と一緒に設定すると、`Bash`、`Write`、`Edit` を含むすべてのツールが承認されます。`bypassPermissions` が必要だが特定のツールをブロックしたい場合は、`disallowed_tools` を使用してください。109 **`allowed_tools` は `bypassPermissions` を制約しません。** `allowed_tools` はリストしたツールを事前承認します。リストされていない他のツールは、許可ルールによってマッチされず、権限モードにフォールスルーします。ここで `bypassPermissions` はそれらを承認します。`allowed_tools=["Read"]` を `permission_mode="bypassPermissions"` と一緒に設定すると、`Bash`、`Write`、`Edit` を含むすべてのツールが承認されます。`bypassPermissions` が必要だが、特定のツールをブロックしたい場合は、`disallowed_tools` を使用します。
103</Warning>110</Warning>
104 111
105`.claude/settings.json` で許可、拒否、および質問ルールを宣言的に設定することもできます。これらのルールは、`project` 設定ソースが有効な場合に読み込まれます。デフォルトの `query()` オプションではこれが有効です。`setting_sources`(TypeScript:`settingSources`)を明示的に設定する場合は、それらを適用するために `"project"` を含めてください。ルール構文については、[パーミッション設定](/docs/ja/settings#permission-settings)を参照してください。112`.claude/settings.json` で許可、拒否、および質問ルールを宣言的に設定することもできます。これらのルールは、`project` 設定ソースが有効な場合に読み込まれます。デフォルト `query()` オプションではこれが有効です。`setting_sources`(TypeScript:`settingSources`)を明示的に設定する場合は、それらを適用するために `"project"` を含めます。[権限設定](/docs/ja/settings-reference#permission-settings)でルール構文を参照してください。
106 113
107<h2 id="permission-modes">114<h2 id="permission-modes">
108 パーミッションモード115 権限モード
109</h2>116</h2>
110 117
111パーミッションモードは、Claude がツールをどのように使用するかについてのグローバル制御を提供します。`query()` を呼び出すときにパーミッションモードを設定するか、ストリーミングセッション中に動的に変更できます。118権限モードは、Claude がツールをどのように使用するかについてグローバルコントロールを提供します。`query()` を呼び出すときに権限モードを設定するか、ストリーミングセッション中に動的に変更できます。
112 119
113<h3 id="available-modes">120<h3 id="available-modes">
114 利用可能なモード121 利用可能なモード
115</h3>122</h3>
116 123
117SDK は以下のパーミッションモードをサポートしています。124SDK は以下の権限モードをサポートしています。
118 125
119| モード | 説明 | ツール動作 |126| モード | 説明 | ツール動作 |
120| :------------------ | :--------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |127| :------------------ | :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
121| `default` | 標準パーミッション動作 | 自動承認なし。一致しないツールは `canUseTool` コールバックをトリガーします |128| `default` | 標準的な権限動作 | モードベースの自動承認なし。承認が必要で許可ルールに一致しないコールは、`canUseTool` コールバックをトリガーします |
122| `dontAsk` | プロンプトの代わりに拒否 | `allowed_tools` またはルールで事前承認されていないものはすべて拒否されます。コネクタツール[組織が `ask` に設定](/docs/ja/mcp#organization-controls-on-connector-tools)したもの、およびユーザーインタラクションが必要なツールは、事前承認していても拒否されます。`canUseTool` は呼び出されません |129| `dontAsk` | プロンプトの代わりに拒否 | それ以外の場合はプロンプトが表示されるコールは拒否されます。`allowed_tools` またはルールで承認されたコール、および `default` モードで承認が不要なコールは実行されます。コネクタツール([組織が `ask` に設定](/docs/ja/mcp#organization-controls-on-connector-tools))およびユーザーインタラクションが必要なツール、ならびに [重要なパス](/docs/ja/permission-modes#critical-paths) をターゲットとする `rm` および `rmdir` の削除は、事前に承認していても拒否されます。`canUseTool` は呼び出されません |
123| `acceptEdits` | ファイル編集を自動受け入れ | ファイル編集および[ファイルシステム操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` など)は自動的に承認されます |130| `acceptEdits` | ファイル編集を自動承認 | ファイル編集および [ファイルシステム操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` など)は自動的に承認されます |
124| `bypassPermissions` | パーミッションチェックをバイパス | ツールは明示的な [`ask` ルール](#how-permissions-are-evaluated)が一致する場合、コネクタツール[組織が `ask` に設定](/docs/ja/mcp#organization-controls-on-connector-tools)した場合、およびユーザーインタラクションが必要なツール以外は、パーミッションプロンプトなしで実行されます(注意して使用してください) |131| `bypassPermissions` | 権限チェックをバイパス | [モードが自動承認しないアクション](/docs/ja/permission-modes#actions-no-mode-auto-approves) を除き、ツールは権限プロンプトなしで実行されます。注意して使用してください |
125| `plan` | 計画モード | Claude はソースファイルを編集せずにコードベースを探索および計画します。ファイル編集は自動承認されず、`canUseTool` コールバックを通じてプロンプトが表示されます |132| `plan` | 計画モード | Claude はソースファイルを編集せずに探索と計画を行います。ファイル編集は自動承認されず、`canUseTool` コールバックを通じてプロンプトが表示されます |
126| `auto` | モデル分類承認 | モデル分類器が各ツール呼び出しを承認または拒否します。利用可能性については[自動モード](/docs/ja/permission-modes#eliminate-prompts-with-auto-mode)を参照してください |133| `auto` | モデル分類承認 | モデル分類器が権限プロンプトを承認または拒否します。利用可能性については [自動モード](/docs/ja/permission-modes#eliminate-prompts-with-auto-mode) を参照してください |
127 134
128<Warning>135<Warning>
129 **サブエージェント継承:** 親が `bypassPermissions`、`acceptEdits`、または `auto` を使用する場合、すべてのサブエージェントはそのモードを継承し、サブエージェントごとにオーバーライドすることはできません。サブエージェントはシステムプロンプトが異なり、メインエージェントよりも制約が少ない動作をする可能性があるため、`bypassPermissions` を継承すると、完全な自律的なシステムアクセスが付与されます。明示的な [`ask` ルール](#how-permissions-are-evaluated)、コネクタツール[組織が `ask` に設定](/docs/ja/mcp#organization-controls-on-connector-tools)したもの、およびユーザーインタラクションが必要なツールは引き続きプロンプトを強制します。136 **サブエージェント継承:** サブエージェントは、その [`AgentDefinition`](/docs/ja/agent-sdk/typescript#agentdefinition) で `permissionMode` を設定し、親セッションが `default`、`dontAsk`、または `plan` モードにある場合を除き、親セッションの権限モードで実行されます。その場合でも、Claude Code は `"bypassPermissions"` 値を適用しません。サブエージェントは、親セッション自体が `bypassPermissions` モードにある場合にのみ、`bypassPermissions` モードで実行されます。`bypassPermissions` 例外には Claude Code v2.1.267 以降が必要です。
137
138 サブエージェントは、メインエージェントとは異なるシステムプロンプトを持つ可能性があり、動作がより制約されていないため、`bypassPermissions` を継承すると、完全で自律的なシステムアクセスが付与されます。[モードが自動承認しないアクション](/docs/ja/permission-modes#actions-no-mode-auto-approves) は引き続き適用されます。
130</Warning>139</Warning>
131 140
132<h3 id="set-permission-mode">141<h3 id="set-permission-mode">
133 パーミッションモードの設定142 権限モードを設定する
134</h3>143</h3>
135 144
136クエリを開始するときにパーミッションモードを一度設定するか、セッションがアクティブな間に動的に変更できます。145クエリを開始するときに権限モードを一度設定するか、セッションがアクティブな間に動的に変更できます。
137 146
138<Tabs>147<Tabs>
139 <Tab title="クエリ時">148 <Tab title="クエリ時">
149 async for message in query(158 async for message in query(
150 prompt="Help me refactor this code",159 prompt="Help me refactor this code",
151 options=ClaudeAgentOptions(160 options=ClaudeAgentOptions(
152 permission_mode="default", # ここでモードを設定161 permission_mode="default", # Set the mode here
153 ),162 ),
154 ):163 ):
155 if hasattr(message, "result"):164 if hasattr(message, "result"):
166 for await (const message of query({175 for await (const message of query({
167 prompt: "Help me refactor this code",176 prompt: "Help me refactor this code",
168 options: {177 options: {
169 permissionMode: "default" // ここでモードを設定178 permissionMode: "default" // Set the mode here
170 }179 }
171 })) {180 })) {
172 if ("result" in message) {181 if ("result" in message) {
181 </Tab>190 </Tab>
182 191
183 <Tab title="ストリーミング中">192 <Tab title="ストリーミング中">
184 `set_permission_mode()`(Python)または `setPermissionMode()`(TypeScript)を呼び出して、セッション中盤でモードを変更します。新しいモードは、その後のすべてのツールリクエストに対して直ちに有効になります。これにより、制限的に開始し、信頼が構築されるにつれてパーミッションを緩和できます。たとえば、Claude の初期アプローチをレビューした後に `acceptEdits` に切り替えます。193 `set_permission_mode()`(Python)または `setPermissionMode()`(TypeScript)を呼び出して、セッション中盤でモードを変更します。新しいモードは、その後のすべてのツールリクエストに対して直ちに有効になります。これにより、制限的に開始して、信頼が構築されるにつれて権限を緩和できます。たとえば、Claude の初期アプローチを確認した後に `acceptEdits` に切り替えることができます。
185 194
186 <CodeGroup>195 <CodeGroup>
187 ```python Python theme={null}196 ```python Python theme={null}
192 async def main():201 async def main():
193 async with ClaudeSDKClient(202 async with ClaudeSDKClient(
194 options=ClaudeAgentOptions(203 options=ClaudeAgentOptions(
195 permission_mode="default", # デフォルトモードで開始204 permission_mode="default", # Start in default mode
196 )205 )
197 ) as client:206 ) as client:
198 await client.query("Help me refactor this code")207 await client.query("Help me refactor this code")
199 208
200 # セッション中盤でモードを動的に変更209 # Change mode dynamically mid-session
201 await client.set_permission_mode("acceptEdits")210 await client.set_permission_mode("acceptEdits")
202 211
203 # 新しいパーミッションモードでメッセージを処理212 # Process messages with the new permission mode
204 async for message in client.receive_response():213 async for message in client.receive_response():
205 if hasattr(message, "result"):214 if hasattr(message, "result"):
206 print(message.result)215 print(message.result)
216 const q = query({225 const q = query({
217 prompt: "Help me refactor this code",226 prompt: "Help me refactor this code",
218 options: {227 options: {
219 permissionMode: "default" // デフォルトモードで開始228 permissionMode: "default" // Start in default mode
220 }229 }
221 });230 });
222 231
223 // セッション中盤でモードを動的に変更232 // Change mode dynamically mid-session
224 await q.setPermissionMode("acceptEdits");233 await q.setPermissionMode("acceptEdits");
225 234
226 // 新しいパーミッションモードでメッセージを処理235 // Process messages with the new permission mode
227 for await (const message of q) {236 for await (const message of q) {
228 if ("result" in message) {237 if ("result" in message) {
229 console.log(message.result);238 console.log(message.result);
242</h3>251</h3>
243 252
244<h4 id="accept-edits-mode-acceptedits">253<h4 id="accept-edits-mode-acceptedits">
245 ファイル編集モード(`acceptEdits`)254 編集受け入れモード(`acceptEdits`)
246</h4>255</h4>
247 256
248ファイル操作を自動承認し、Claude がプロンプトなしでコードを編集できるようにします。その他のツール(ファイルシステム操作ではない Bash コマンドなど)は引き続き通常のパーミッションが必要です。257ファイル操作を自動承認して、Claude がプロンプトなしでコードを編集できるようにします。その他のツール(ファイルシステム操作ではない Bash コマンドなど)は通常の権限が必要です。
249 258
250**自動承認される操作:**259**自動承認される操作:**
251 260
252* ファイル編集(Edit、Write ツール)261* ファイル編集(Edit、Write ツール)
253* ファイルシステムコマンド:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`262* ファイルシステムコマンド:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`
254 263
255どちらも、作業ディレクトリまたは `additionalDirectories` 内のパスにのみ適用されます。そのスコープ外のパスおよび保護されたパスへの書き込みはプロンプトが表示されます。264どちらも、作業ディレクトリまたは `additionalDirectories` 内のパスにのみ適用されます。`acceptEdits` モードでは、Claude が以下の場合、Claude Code は要求を自動承認しません。
265
266* そのスコープ外のパスで作業する
267* 保護されたパスに書き込む
268* `rm` または `rmdir` で [重要なパス](/docs/ja/permission-modes#critical-paths) を削除する
256 269
257**使用時期:** Claude の編集を信頼し、プロトタイピング中など、より高速な反復を望む場合、または分離されたディレクトリで作業する場合。270**使用時期:** Claude の編集を信頼し、より高速な反復を望む場合。プロトタイピング中や分離されたディレクトリで作業する場合など。
258 271
259<h4 id="don’t-ask-mode-dontask">272<h4 id="don’t-ask-mode-dontask">
260 質問しないモード(`dontAsk`)273 質問しないモード(`dontAsk`)
261</h4>274</h4>
262 275
263パーミッションプロンプトを拒否に変換します。`allowed_tools`、`settings.json` 許可ルール、またはフックで事前承認されたツールは通常どおり実行されます。コネクタツール[組織が `ask` に設定](/docs/ja/mcp#organization-controls-on-connector-tools)したもの、およびユーザーインタラクションが必要なツールは、許可ルールが一致する場合でも拒否されます。その他のすべては `canUseTool` を呼び出さずに拒否されます。276`canUseTool` を呼び出さずに、権限プロンプトを拒否に変換します。`allowed_tools`、`settings.json` 許可ルール、またはフックで事前承認されたツール、および `default` モードで承認が不要なコール(作業ディレクトリ内のファイル読み取りや `Agent` への呼び出しなど)は通常どおり実行されます。コネクタツール([組織が `ask` に設定](/docs/ja/mcp#organization-controls-on-connector-tools))、ユーザーインタラクションが必要なツール、および [重要なパス](/docs/ja/permission-modes#critical-paths) をターゲットとする `rm` および `rmdir` の削除は、許可ルールが一致する場合でも拒否されます。`PreToolUse` フック許可は、重要なパス削除をクリアしません。
264 277
265**使用時期:** ヘッドレスエージェント用に固定された明示的なツール表面が必要で、`canUseTool` が存在しないことへの暗黙的な依存よりもハード拒否を優先する場合。278**使用時期:** ヘッドレスエージェント用に固定された明示的なツールサーフェスを望み、`canUseTool` が存在しないことへの暗黙的な依存よりもハード拒否を優先する場合。
266 279
267<h4 id="bypass-permissions-mode-bypasspermissions">280<h4 id="bypass-permissions-mode-bypasspermissions">
268 パーミッションバイパスモード(`bypassPermissions`)281 権限バイパスモード(`bypassPermissions`)
269</h4>282</h4>
270 283
271プロンプトなしですべてのツール使用を自動承認します。フックは引き続き実行され、必要に応じて操作をブロックできます。284以下に示す場合を除き、プロンプトなしでツール使用を自動承認します。フックは引き続き実行され、必要に応じて操作をブロックできます。
272 285
273<Warning>286<Warning>
274 極度の注意を持って使用してください。Claude はこのモードでフルシステムアクセスを持ちます。すべての可能な操作を信頼できる制御された環境でのみ使用してください。287 極度の注意を持って使用してください。このモードでは Claude はシステムへの完全なアクセスを持ちます。信頼できるすべての操作が可能な制御された環境でのみ使用してください。
288
289 `allowed_tools` はこのモードを制約しません。リストしたツールだけでなく、すべてのツールが承認されます。これらのコントロールは引き続き適用されます。
275 290
276 `allowed_tools` はこのモードを制限しません。リストしたツールだけでなく、すべてのツールが承認されます。拒否ルール(`disallowed_tools`)、明示的な `ask` ルール、およびフックはモードチェック前に評価され、ツールをブロックできます。コネクタツール[組織が `ask` に設定](/docs/ja/mcp#organization-controls-on-connector-tools)したもの、およびユーザーインタラクションが必要なツールは引き続き `canUseTool` コールバックにフォールスルーします。291 * 拒否ルール、明示的な `ask` ルール、およびフックはモードチェック前に評価され、ツールをブロックできます。
292 * コネクタツール([組織が `ask` に設定](/docs/ja/mcp#organization-controls-on-connector-tools))、ユーザーインタラクションが必要なツール、および [重要なパス](/docs/ja/permission-modes#critical-paths) をターゲットとする `rm` および `rmdir` の削除は、引き続き `canUseTool` コールバックにフォールスルーします。
293 * [クロスセッションメッセージングセーフガード](/docs/ja/permission-modes#skip-all-checks-with-bypasspermissions-mode) は引き続き適用されます。
277</Warning>294</Warning>
278 295
279<h4 id="plan-mode-plan">296<h4 id="plan-mode-plan">
280 計画モード(`plan`)297 計画モード(`plan`)
281</h4>298</h4>
282 299
283Claude はコードベースを探索および計画を作成し、ソースファイルを編集しません。読み取り専用ツールはデフォルトモードと同じように実行されます。ファイル編集は計画モードで自動承認されることはなく、許可ルールが一致する場合でも、代わりに `canUseTool` コールバックを通じてプロンプトが表示されます。Claude は計画を最終化する前に要件を明確にするために `AskUserQuestion` を使用する場合があります。これらのプロンプトの処理については、[承認とユーザー入力の処理](/docs/ja/agent-sdk/user-input#handle-clarifying-questions)を参照してください。300Claude はソースファイルを編集せずにコードベースを探索し、計画を作成します。読み取り専用ツールは `default` 権限モードと同じように実行されます。
301
302ファイル編集は計画モードで自動承認されません。許可ルールが一致する場合でも、代わりに `canUseTool` コールバックを通じてプロンプトが表示されます。Claude Code v2.1.212 以降では、`touch` や `rm` などのファイルを変更するシェルコマンドは同じ方法で `canUseTool` コールバックに到達します。
303
304Claude は計画を最終化する前に、`AskUserQuestion` を使用して要件を明確にする場合があります。これらのプロンプトの処理については、[承認とユーザー入力の処理](/docs/ja/agent-sdk/user-input#handle-clarifying-questions) を参照してください。
284 305
285**使用時期:** Claude に変更を提案させたいが実行させたくない場合、たとえばコードレビュー中または変更を実行する前に承認が必要な場合。306**使用時期:** Claude に変更を実行せずに提案させたい場合。コードレビュー中や、変更が行われる前に承認する必要がある場合など。
286 307
287<h2 id="related-resources">308<h2 id="related-resources">
288 関連リソース309 関連リソース
289</h2>310</h2>
290 311
291パーミッション評価フロー内の他のステップについては、以下を参照してください。312権限評価フローの他のステップについては、以下をご覧ください。
292 313
293* [承認とユーザー入力の処理](/docs/ja/agent-sdk/user-input):対話的な承認プロンプトと明確化の質問314* [承認とユーザー入力の処理](/docs/ja/agent-sdk/user-input):インタラクティブな承認プロンプトと確認質問
294* [フックガイド](/docs/ja/agent-sdk/hooks):エージェントライフサイクルの主要なポイントでカスタムコードを実行315* [Hooks ガイド](/docs/ja/agent-sdk/hooks):エージェントライフサイクルの重要なポイントでカスタムコードを実行
295* [パーミッションルール](/docs/ja/settings#permission-settings):`settings.json` の宣言的な許可/拒否ルール316* [権限ルール](/docs/ja/settings-reference#permission-settings):`settings.json` の宣言的な許可/拒否ルール