メインコンテンツへスキップ
Claude Agent SDK は、Claude がツールをどのように使用するかを管理するためのパーミッション制御を提供します。パーミッションモードとルールを使用して、自動的に許可されるものを定義し、canUseTool コールバックを使用して、実行時にそれ以外のすべてを処理します。
このページはパーミッションモードとルールについて説明しています。ユーザーが実行時にツールリクエストを承認または拒否する対話的な承認フローを構築するには、承認とユーザー入力の処理を参照してください。

パーミッションの評価方法

Claude がツールをリクエストすると、SDK は次の順序でパーミッションをチェックします。
1

フック

最初にフックを実行します。フックはコールを直接拒否するか、それを渡すことができます。allow を返すフックは、以下の拒否および質問ルールをスキップしません。これらはフックの結果に関係なく評価されます。
2

拒否ルール

deny ルール(disallowed_tools およびsettings.jsonから)をチェックします。拒否ルールが一致する場合、bypassPermissions モードでもツールはブロックされます。Bash のような裸名の拒否ルールはこの評価が開始される前に Claude のコンテキストからツールを削除するため、このステップでチェックされるのは Bash(rm *) のようなスコープ付きルールのみです。
3

パーミッションモード

アクティブなパーミッションモードを適用します。bypassPermissions はこのステップに到達したすべてを承認します。acceptEdits はファイル操作を承認します。その他のモードはフォールスルーします。
4

許可ルール

allow ルール(allowed_tools および settings.json から)をチェックします。ルールが一致する場合、ツールは承認されます。
5

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 呼び出しはパーミッションモードにフォールスルーします。
ロックダウンされたエージェントの場合、allowedToolspermissionMode: "dontAsk" と組み合わせます。リストされたツールは承認されます。その他のものはプロンプトの代わりに直接拒否されます。
const options = {
  allowedTools: ["Read", "Glob", "Grep"],
  permissionMode: "dontAsk"
};
allowed_toolsbypassPermissions を制限しません。 allowed_tools はリストしたツールのみを事前承認します。リストされていないツールは許可ルールと一致せず、パーミッションモードにフォールスルーします。ここで bypassPermissions はそれらを承認します。allowed_tools=["Read"]permission_mode="bypassPermissions" と一緒に設定すると、BashWriteEdit を含むすべてのツールが承認されます。bypassPermissions が必要だが特定のツールをブロックしたい場合は、disallowed_tools を使用してください。
.claude/settings.json で許可、拒否、および質問ルールを宣言的に設定することもできます。これらのルールは、project 設定ソースが有効な場合に読み込まれます。デフォルトの query() オプションではこれが有効です。setting_sources(TypeScript:settingSources)を明示的に設定する場合は、それらを適用するために "project" を含めてください。ルール構文については、パーミッション設定を参照してください。

パーミッションモード

パーミッションモードは、Claude がツールをどのように使用するかについてのグローバル制御を提供します。query() を呼び出すときにパーミッションモードを設定するか、ストリーミングセッション中に動的に変更できます。

利用可能なモード

SDK は以下のパーミッションモードをサポートしています。
モード説明ツール動作
default標準パーミッション動作自動承認なし。一致しないツールは canUseTool コールバックをトリガーします
dontAskプロンプトの代わりに拒否allowed_tools またはルールで事前承認されていないものはすべて拒否されます。canUseTool は呼び出されません
acceptEditsファイル編集を自動受け入れファイル編集およびファイルシステム操作mkdirrmmv など)は自動的に承認されます
bypassPermissionsすべてのパーミッションチェックをバイパスすべてのツールはパーミッションプロンプトなしで実行されます(注意して使用してください)
plan計画モード読み取り専用ツールが実行されます。Claude はソースファイルを編集せずに分析および計画します
auto(TypeScript のみ)モデル分類承認モデル分類器が各ツール呼び出しを承認または拒否します。利用可能性については自動モードを参照してください
サブエージェント継承: 親が bypassPermissionsacceptEdits、または auto を使用する場合、すべてのサブエージェントはそのモードを継承し、サブエージェントごとにオーバーライドすることはできません。サブエージェントはシステムプロンプトが異なり、メインエージェントよりも制約が少ない動作をする可能性があるため、bypassPermissions を継承すると、承認プロンプトなしで完全な自律的なシステムアクセスが付与されます。

パーミッションモードの設定

クエリを開始するときにパーミッションモードを一度設定するか、セッションがアクティブな間に動的に変更できます。
クエリを作成するときに permission_mode(Python)または permissionMode(TypeScript)を渡します。このモードは、動的に変更されない限り、セッション全体に適用されます。
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions


async def main():
    async for message in query(
        prompt="Help me refactor this code",
        options=ClaudeAgentOptions(
            permission_mode="default",  # ここでモードを設定
        ),
    ):
        if hasattr(message, "result"):
            print(message.result)


asyncio.run(main())

モードの詳細

ファイル編集モード(acceptEdits

ファイル操作を自動承認し、Claude がプロンプトなしでコードを編集できるようにします。その他のツール(ファイルシステム操作ではない Bash コマンドなど)は引き続き通常のパーミッションが必要です。 自動承認される操作:
  • ファイル編集(Edit、Write ツール)
  • ファイルシステムコマンド:mkdirtouchrmrmdirmvcpsed
どちらも、作業ディレクトリまたは additionalDirectories 内のパスにのみ適用されます。そのスコープ外のパスおよび保護されたパスへの書き込みはプロンプトが表示されます。 使用時期: Claude の編集を信頼し、プロトタイピング中など、より高速な反復を望む場合、または分離されたディレクトリで作業する場合。

質問しないモード(dontAsk

パーミッションプロンプトを拒否に変換します。allowed_toolssettings.json 許可ルール、またはフックで事前承認されたツールは通常どおり実行されます。その他のすべては canUseTool を呼び出さずに拒否されます。 使用時期: ヘッドレスエージェント用に固定された明示的なツール表面が必要で、canUseTool が存在しないことへの暗黙的な依存よりもハード拒否を優先する場合。

パーミッションバイパスモード(bypassPermissions

プロンプトなしですべてのツール使用を自動承認します。フックは引き続き実行され、必要に応じて操作をブロックできます。
極度の注意を持って使用してください。Claude はこのモードでフルシステムアクセスを持ちます。すべての可能な操作を信頼できる制御された環境でのみ使用してください。allowed_tools はこのモードを制限しません。リストしたツールだけでなく、すべてのツールが承認されます。拒否ルール(disallowed_tools)、明示的な ask ルール、およびフックはモードチェック前に評価され、ツールをブロックできます。

計画モード(plan

Claude を読み取り専用ツールに制限します。Claude はファイルを読み取り、読み取り専用シェルコマンドを実行してコードベースを探索できますが、ソースファイルは編集しません。Claude は AskUserQuestion を使用して、計画を最終化する前に要件を明確にする場合があります。これらのプロンプトの処理については、承認とユーザー入力の処理を参照してください。 使用時期: Claude に変更を提案させたいが実行させたくない場合、たとえばコードレビュー中または変更を実行する前に承認が必要な場合。

関連リソース

パーミッション評価フロー内の他のステップについては、以下を参照してください。