Claude Code SDKでのツール使用と権限の制御
canUseTool
コールバック、フック、およびsettings.json権限ルールを使用した権限システムの実装方法について説明します。完全なAPIドキュメントについては、TypeScript SDKリファレンスを参照してください。
canUseTool
- カバーされていないケースの動的承認、ユーザーに権限を求めるquery()
を呼び出すときに権限モードを設定するか、ストリーミングセッション中に動的に変更できます。
モード | 説明 | ツール動作 |
---|---|---|
default | 標準権限動作 | 通常の権限チェックが適用される |
plan | 計画モード - 実行なし | Claudeは読み取り専用ツールのみ使用可能;実行前に計画を提示 (現在SDKではサポートされていません) |
acceptEdits | ファイル編集の自動承認 | ファイル編集とファイルシステム操作が自動的に承認される |
bypassPermissions | すべての権限チェックをバイパス | すべてのツールが権限プロンプトなしで実行される(注意して使用) |
acceptEdits
)bypassPermissions
)bypassPermissions
モード - アクティブな場合、残りのすべてのツールを許可canUseTool
コールバック - 残りのケースを処理bypassPermissions
モードでもツール使用を常にブロック可能bypassPermissions
モードは許可ルールとcanUseTool
をオーバーライドcanUseTool
コールバックはquery
関数を呼び出すときにオプションとして渡されます。ツール名と入力パラメータを受け取り、許可または拒否の決定を返す必要があります。
canUseToolは、Claude Codeがユーザーに権限プロンプトを表示する場合に発火します。例えば、フックと権限ルールがそれをカバーしておらず、自動承認モードでない場合です。
インタラクティブなツール承認の実装方法を示す完全な例:
canUseTool
は権限ルールでカバーされていないケースを処理settings.json
の権限ルールは、組み込みのbashコマンド解析を持つ宣言的制御を提供します。これらのルールはcanUseTool
が呼び出される前に評価されます。設定の詳細については、Claude Code設定ドキュメントを参照してください。
ToolName(pattern)
のパターンに従います
Bash(npm:*)
は「npm」で始まる任意のコマンドにマッチRead(./src/**/*.ts)
はsrc内のTypeScriptファイルにマッチWebFetch
はすべてのWeb取得をブロックrm -rf
やcurl | sh
などの危険なパターンを認識Bash(git:*)
- 任意のgitコマンドにマッチBash(npm run test)
- 正確なコマンドにマッチBash(npm run test:*)
- npm run test:unit、test:integration等にマッチ