SpyBara
Go Premium

agent-sdk/permissions.md 2026-06-09 06:34 UTC to 2026-06-10 23:57 UTC

38 added, 15 removed.

2026
Tue 30 23:02 Mon 29 23:02 Sat 27 01:01 Fri 26 23:00 Thu 25 23:58 Wed 24 22:02 Tue 23 22:00 Mon 22 23:59 Fri 19 22:58 Thu 18 22:00 Wed 17 17:02 Tue 16 21:57 Mon 15 23:02 Sat 13 21:59 Fri 12 22:00 Thu 11 23:01 Wed 10 23:57 Tue 9 06:34 Mon 8 06:52 Sat 6 06:24 Fri 5 06:45 Thu 4 06:52 Wed 3 06:53 Tue 2 06:51

設定權限

使用權限模式、hooks 和宣告式允許/拒絕規則來控制您的代理程式如何使用工具。

Claude Agent SDK 提供權限控制來管理 Claude 如何使用工具。使用權限模式和規則來定義自動允許的內容,並使用 canUseTool 回呼 在執行時處理其他所有情況。

權限如何被評估

當 Claude 請求工具時,SDK 會按照以下順序檢查權限:

1

Hooks

首先執行 hooks。Hook 可以直接拒絕呼叫或將其傳遞。返回 allow 的 hook 不會跳過下面的拒絕和詢問規則;無論 hook 結果如何,這些規則都會被評估。

2

拒絕規則

檢查 deny 規則(來自 disallowed_toolssettings.json)。如果拒絕規則符合,工具會被阻止,即使在 bypassPermissions 模式下也是如此。裸名稱拒絕規則(如 Bash)會在此評估開始前將工具從 Claude 的上下文中移除,因此只有範圍規則(如 Bash(rm *))會在此步驟中被檢查。

3

權限模式

應用活躍的 權限模式bypassPermissions 批准到達此步驟的所有內容。acceptEdits 批准檔案操作。其他模式會通過。

4

允許規則

檢查 allow 規則(來自 allowed_tools 和 settings.json)。如果規則符合,工具會被批准。

5

canUseTool 回呼

如果上述任何步驟都未解決,請呼叫您的 canUseTool 回呼 以做出決定。在 dontAsk 模式下,此步驟會被跳過,工具會被拒絕。

Permission evaluation flow diagram

本頁重點關注 允許和拒絕規則 以及 權限模式。對於其他步驟:

允許和拒絕規則

allowed_toolsdisallowed_tools(TypeScript:allowedTools / disallowedTools)將條目新增到上述評估流程中的允許和拒絕規則清單。允許規則只影響批准:未列在 allowed_tools 中的工具仍然可供 Claude 使用,並會通過權限模式。拒絕規則的行為取決於它們是命名工具還是在工具內限定模式。

選項 效果
allowed_tools=["Read", "Grep"] ReadGrep 會自動批准。此處未列出的工具仍然存在,並會通過權限模式和 canUseTool
disallowed_tools=["Bash"] Bash 工具定義會從請求中移除。Claude 看不到該工具,無法嘗試使用它。
disallowed_tools=["Bash(rm *)"] Bash 保持可用。符合 rm * 的呼叫在每個權限模式中都會被拒絕,包括 bypassPermissions。其他 Bash 呼叫會通過權限模式。

對於鎖定的代理程式,將 allowedToolspermissionMode: "dontAsk" 配對。列出的工具會被批准;其他任何工具都會被直接拒絕,而不是提示:

const options = {
  allowedTools: ["Read", "Glob", "Grep"],
  permissionMode: "dontAsk"
};

您也可以在 .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) 模型分類批准 模型分類器批准或拒絕每個工具呼叫。請參閱 Auto 模式 以了解可用性

設定權限模式

您可以在開始查詢時設定一次權限模式,或在會話活躍時動態更改它。

在建立查詢時傳遞 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",  # Set the mode here
),
):
if hasattr(message, "result"):
print(message.result)


asyncio.run(main())

模式詳細資訊

接受編輯模式(`acceptEdits`)

自動批准檔案操作,以便 Claude 可以編輯程式碼而無需提示。其他工具(例如不是檔案系統操作的 Bash 命令)仍然需要正常權限。

自動批准的操作:

  • 檔案編輯(Edit、Write 工具)
  • 檔案系統命令:mkdirtouchrmrmdirmvcpsed

兩者都只適用於工作目錄或 additionalDirectories 內的路徑。該範圍外的路徑和對受保護路徑的寫入仍然會提示。

使用時機: 您信任 Claude 的編輯並想要更快的迭代,例如在原型設計期間或在隔離目錄中工作時。

不詢問模式(`dontAsk`)

將任何權限提示轉換為拒絕。由 allowed_toolssettings.json 允許規則或作為 hook 執行的工具會正常執行。其他所有內容都會被拒絕,而不呼叫 canUseTool

使用時機: 您想要為無頭代理程式提供固定的明確工具表面,並且更喜歡硬拒絕而不是無聲依賴 canUseTool 不存在。

繞過權限模式(`bypassPermissions`)

自動批准所有工具使用而無需提示。Hooks 仍然執行,如果需要可以阻止操作。

規劃模式(`plan`)

將 Claude 限制為唯讀工具。Claude 可以讀取檔案並執行唯讀 shell 命令來探索程式碼庫,但不編輯您的原始檔案。Claude 可能會使用 AskUserQuestion 在最終確定計畫之前澄清需求。請參閱 處理核准和使用者輸入 以處理這些提示。

使用時機: 您想要 Claude 提出變更建議而不執行它們,例如在程式碼審查期間或當您需要在進行變更之前核准變更時。

對於權限評估流程中的其他步驟: