在 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
函數時作為選項傳遞。它接收工具名稱和輸入參數,並必須返回決定 - 允許或拒絕。
當 Claude Code 會向使用者顯示權限提示時,canUseTool 會觸發,例如鉤子和權限規則未涵蓋且不在自動接受模式中。
以下是顯示如何實現互動式工具批准的完整範例:
canUseTool
處理權限規則未涵蓋的情況settings.json
中的權限規則提供具有內建 bash 命令解析的宣告式控制。這些規則在呼叫 canUseTool
之前進行評估。有關設定配置的更多詳細資訊,請參閱 Claude Code 設定文檔。
ToolName(pattern)
Bash(npm:*)
匹配任何以 “npm” 開頭的命令Read(./src/**/*.ts)
匹配 src 中的 TypeScript 檔案WebFetch
阻止所有網路擷取rm -rf
或 curl | sh
Bash(git:*)
- 匹配任何 git 命令Bash(npm run test)
- 匹配確切命令Bash(npm run test:*)
- 匹配 npm run test:unit、test:integration 等