跳至主要內容
模組 1:核心 Agent 2 / 6
初階 S02 工具 權限 安全

工具系統與權限

了解 Claude Code 如何把模型請求轉成工具動作,以及權限模式與規則如何把關。

2026年3月20日 15 分鐘閱讀
已校驗 課程最近校驗: 2026年7月20日

你將學到什麼

工具讓 Claude Code 不只生成文字,還能對環境採取行動。本堂課會說明:

  • Claude 如何選擇並呼叫內建工具
  • 權限檢查發生在哪裡
  • 每一種權限模式實際改變了什麼
  • allowaskdeny 規則如何細化基準行為

從意圖到行動

每個工具都有名稱、說明與輸入 schema。Claude 選擇工具並提供結構化輸入;Claude Code 先驗證呼叫、套用權限政策,才真正執行。

使用者請求

Claude 提出工具呼叫

Claude Code 檢查模式 + 權限規則
    ├─ allow → 執行
    ├─ ask  → 等待核准
    └─ deny → 封鎖並把結果回傳給 Claude

ReadEditBashWebFetchTaskCreate 等內建工具名稱,也正是權限規則、子代理工具清單和 hook matcher 使用的名稱。大型工具目錄可以延遲載入,透過 ToolSearch 按需取得,因此不保證每個工具的完整 schema 一開始都在 context 中。

權限基準

在 Manual 模式中,設定值是 default;工作目錄內的讀取通常不需提示,檔案編輯與非唯讀 shell 命令通常會先詢問。其他模式會改變這個基準:

模式不需例行核准即可執行適合情境
defaultmanual 別名)讀取初次使用與敏感工作
acceptEdits讀取、檔案編輯、常見檔案系統命令你會持續審查的本機迭代
plan讀取與唯讀探索編輯前先分析與設計
auto通過背景安全檢查的動作方向可信、執行時間較長的工作
dontAsk僅預先核准及內建唯讀動作使用 allowlist 的非互動自動化
bypassPermissions幾乎所有動作僅限隔離的 container 或 VM

autobypassPermissions 不是同義詞。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

細粒度規則

模式設定基準,規則再決定哪些呼叫應允許、固定詢問或拒絕。規則使用 ToolTool(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 可查看有效規則,以及每條規則來自哪個設定檔。

實用心智模型

把系統拆成兩個不同問題:

  1. Claude 看得到、也能請求這個工具嗎? 由工具可用性、延遲載入與 MCP 設定回答。
  2. 這一次特定呼叫現在能執行嗎? 由目前模式、權限規則、受保護路徑、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 堂課中,我們會使用結構化的 TaskCreateTaskGetTaskListTaskUpdate,把核准後的計畫轉成可見、可追蹤的工作。

官方依據

最後驗證:2026-07-20。