工具系統與權限
了解 Claude Code 如何把模型請求轉成工具動作,以及權限模式與規則如何把關。
你將學到什麼
工具讓 Claude Code 不只生成文字,還能對環境採取行動。本堂課會說明:
- Claude 如何選擇並呼叫內建工具
- 權限檢查發生在哪裡
- 每一種權限模式實際改變了什麼
allow、ask、deny規則如何細化基準行為
從意圖到行動
每個工具都有名稱、說明與輸入 schema。Claude 選擇工具並提供結構化輸入;Claude Code 先驗證呼叫、套用權限政策,才真正執行。
使用者請求
↓
Claude 提出工具呼叫
↓
Claude Code 檢查模式 + 權限規則
├─ allow → 執行
├─ ask → 等待核准
└─ deny → 封鎖並把結果回傳給 Claude
Read、Edit、Bash、WebFetch、TaskCreate 等內建工具名稱,也正是權限規則、子代理工具清單和 hook matcher 使用的名稱。大型工具目錄可以延遲載入,透過 ToolSearch 按需取得,因此不保證每個工具的完整 schema 一開始都在 context 中。
權限基準
在 Manual 模式中,設定值是 default;工作目錄內的讀取通常不需提示,檔案編輯與非唯讀 shell 命令通常會先詢問。其他模式會改變這個基準:
| 模式 | 不需例行核准即可執行 | 適合情境 |
|---|---|---|
default(manual 別名) | 讀取 | 初次使用與敏感工作 |
acceptEdits | 讀取、檔案編輯、常見檔案系統命令 | 你會持續審查的本機迭代 |
plan | 讀取與唯讀探索 | 編輯前先分析與設計 |
auto | 通過背景安全檢查的動作 | 方向可信、執行時間較長的工作 |
dontAsk | 僅預先核准及內建唯讀動作 | 使用 allowlist 的非互動自動化 |
bypassPermissions | 幾乎所有動作 | 僅限隔離的 container 或 VM |
auto 和 bypassPermissions 不是同義詞。Auto 模式會用獨立的安全分類器評估動作,並繼續遵守明確規則;bypass 模式跳過一般權限檢查,保護能力弱得多。
使用 --permission-mode 以指定模式啟動:
claude --permission-mode plan
claude --permission-mode auto
claude --permission-mode dontAsk
claude --permission-mode bypassPermissions
以下舊式便利旗標等同 bypassPermissions,不是 Auto 模式:
claude --dangerously-skip-permissions
細粒度規則
模式設定基準,規則再決定哪些呼叫應允許、固定詢問或拒絕。規則使用 Tool 或 Tool(specifier) 語法:
{
"permissions": {
"allow": [
"Bash(npm test *)",
"Read(/docs/**)"
],
"ask": [
"Bash(git push *)"
],
"deny": [
"Read(./.env)",
"WebFetch(domain:paste.example)"
]
}
}
規則依 deny → ask → allow 的順序判定。範圍較廣的 deny 不會被較窄的 allow 覆寫。使用 /permissions 可查看有效規則,以及每條規則來自哪個設定檔。
實用心智模型
把系統拆成兩個不同問題:
- Claude 看得到、也能請求這個工具嗎? 由工具可用性、延遲載入與 MCP 設定回答。
- 這一次特定呼叫現在能執行嗎? 由目前模式、權限規則、受保護路徑、hooks 與組織政策回答。
隱藏工具與拒絕工具的特定用法是不同控制。像 "Bash" 這種裸 deny 會把工具從 Claude 的 context 移除;"Bash(rm *)" 這種限定範圍的 deny 仍保留 Bash,但封鎖符合模式的呼叫。
動手試試
在 .claude/settings.local.json 建立窄範圍規則,以 Manual 模式啟動,再請 Claude 執行測試並 push 分支。確認測試不提示、push 仍會詢問:
{
"permissions": {
"allow": ["Bash(npm test *)"],
"ask": ["Bash(git push *)"]
}
}
優先使用精確的命令模式,不要直接開放整個 Bash。權限模式是政策邊界,不能取代對危險命令的審查。
下一堂課
在第 3 堂課中,我們會使用結構化的 TaskCreate、TaskGet、TaskList、TaskUpdate,把核准後的計畫轉成可見、可追蹤的工作。
官方依據
最後驗證:2026-07-20。