MO StudioStart a Project

MO STORIES

Claude Code allowTools 與 disallowedTools 怎麼設?常用權限規則範例

2026年5月24日3 分鐘閱讀

Claude Code 權限設定不是把所有工具打開,而是把每天安全重複的動作放行,把會刪檔、推送、讀 secrets 的動作擋下來。

Claude Code allowTools 與 disallowedTools 怎麼設?常用權限規則範例
封面視覺

Claude Code allowTools 怎麼設?先看這個版本

如果你只是想讓 Claude Code 少問一點,我會先這樣設:

類型建議原因
可放行ReadGlobGrep讀取和搜尋通常是低風險
可放行Bash(git status:*)Bash(npm test:*)Bash(npm run lint:*)每天會重複跑,失敗也不會破壞專案
要保留確認WriteEdit改檔前仍要看任務範圍
建議封鎖Bash(rm:*)Bash(git push:*)Bash(curl:*)刪檔、推送、下載執行都不該無腦放行
建議封鎖Read(.env*)Read(**/*secret*)secrets 不應該被 AI agent 隨手讀走

這篇是 [[2026-05-19 Claude Code 權限怎麼設?permission modes、allowlist 與安全設定完整整理(2026)|Claude Code 權限母文]] 的子文。
如果你還不知道 settings.json 放哪裡,先看 [[2026-05-24 Claude Code settings.json 在哪?專案、使用者與權限設定路徑整理|Claude Code settings.json 路徑整理]]。

重點只有一句:

allowTools 不是讓 Claude Code 什麼都能做,而是讓它只在你信任的範圍內少問一點。

本文含 Claude 推薦連結:Claude。權限設定與 CLI 參數會隨版本調整,本文查詢日期為 2026-05-24,實際仍以官方文件為準。

allowTools 和 disallowedTools 差在哪?

你可以把它想成公司門禁。

allowTools 像是「這些門平常可以刷卡進去」。
disallowedTools 像是「這些門就算你有卡,也不能進去」。

規則白話意思常見用途
permissions.allow符合規則的工具或指令可以不用每次問放行安全的讀取、測試、lint
permissions.deny符合規則的工具或指令直接擋掉擋 secrets、刪檔、推送、危險 shell
CLI --allowedTools這次 session 額外允許某些工具臨時跑固定任務
CLI --disallowedTools這次 session 額外禁止某些工具臨時進敏感 repo 時加保護

官方文件也有提醒一個很重要的觀念:
allow 規則只影響「自動批准」,不是讓工具從不存在變成存在。deny 規則才是明確封鎖。

所以不要以為「我只 allow Read,Claude Code 就永遠不會嘗試其他工具」。
比較精準的理解是:

  • allow:這些動作通過時少問你
  • deny:這些動作不要做
  • permission mode:剩下沒有命中的動作怎麼處理

最小安全版 settings.json

如果你不知道怎麼開始,可以先用這個版本。

{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "Bash(git status:*)",
      "Bash(git diff:*)",
      "Bash(npm test:*)",
      "Bash(npm run lint:*)",
      "Bash(npm run typecheck:*)"
    ],
    "deny": [
      "Read(.env*)",
      "Read(**/.env*)",
      "Read(**/*secret*)",
      "Read(**/*credential*)",
      "Bash(rm:*)",
      "Bash(git push:*)",
      "Bash(git reset:*)",
      "Bash(curl:*)",
      "Bash(wget:*)"
    ]
  }
}

這不是萬用設定,但很適合當起點。

它的邏輯是:

① 讓 Claude Code 可以順利讀專案
② 讓它可以跑常見檢查
③ 擋掉 secrets
④ 擋掉刪檔、強制改 git 狀態、網路下載執行

如果你是在客戶專案或公司 repo,我會再更保守一點,把 EditWrite 都留給人工確認,不要一開始就放進 allow。

哪些 Bash 指令可以放行?

我的判斷方式很簡單:

失敗也不會造成破壞,而且你每天都會重複跑的指令,才適合放進 allowlist。

指令可不可以放行理由
git status可以只看狀態
git diff可以只看差異
npm test可以測試失敗不會改檔
npm run lint可以多數情況只檢查
npm run build視情況可能產生 build artifact
git add視情況會改 staging 狀態
git commit通常不要會留下歷史紀錄
git push不要會影響遠端
rm不要刪錯很麻煩
`curlbash`不要

如果你真的需要讓 Claude Code 自動跑 build,可以把 scope 寫窄一點。

{
  "permissions": {
    "allow": [
      "Bash(npm run build:*)"
    ]
  }
}

但我不會把整個 Bash(*) 放進 allow。
那已經不是「少問」,而是把門拆掉。

settings.json 應該放全域還是專案?

看這張表就好。

放哪裡路徑適合放什麼
使用者全域~/.claude/settings.json你每個專案都會用的個人偏好
專案共享專案/.claude/settings.json團隊共用規則,可以進 git
專案個人專案/.claude/settings.local.json只跟你這台機器有關,不進 git

我自己的習慣是:

  • 全域只放非常保守的讀取和檢查指令
  • 專案共享只放團隊真的同意的規則
  • 個人 local 才放自己常用但不適合強迫別人的指令

例如你可以把 npm test 放專案共享。
但你自己常用的 pnpm devnode tmp/debug.mjs,就比較適合放 local。

3 種常見情境範例

① 內容網站:Markdown 編輯 + build 檢查

適合寫文章、改 frontmatter、跑靜態網站檢查。

{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "Bash(git status:*)",
      "Bash(git diff:*)",
      "Bash(npm run build:*)"
    ],
    "deny": [
      "Read(.env*)",
      "Bash(git push:*)",
      "Bash(rm:*)"
    ]
  }
}

這種設定適合內容網站,因為工作多半是讀文章、改 Markdown、跑 build。

② 前端專案:測試與型別檢查優先

{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "Bash(npm test:*)",
      "Bash(npm run lint:*)",
      "Bash(npm run typecheck:*)"
    ],
    "deny": [
      "Read(**/.env*)",
      "Bash(git push:*)",
      "Bash(git reset:*)",
      "Bash(rm:*)"
    ]
  }
}

前端專案的重點是讓 Claude Code 能快點驗證,但不要讓它自動推送或重置 git。

③ 客戶專案:保守版

{
  "permissions": {
    "defaultMode": "default",
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "Bash(git status:*)"
    ],
    "deny": [
      "Read(**/.env*)",
      "Read(**/*secret*)",
      "Read(**/*credential*)",
      "Bash(git push:*)",
      "Bash(git reset:*)",
      "Bash(rm:*)",
      "Bash(curl:*)",
      "Bash(wget:*)"
    ]
  }
}

客戶專案先保守是正常的。
你可以等 Claude Code 跑過幾輪、你看懂它的行為,再逐步加 allow。

最常見錯誤

錯誤會發生什麼
一開始就 allow Bash(*)等於把 shell 幾乎全放開
只寫 allow,不寫 deny少問了,但高風險動作仍可能落到 permission mode
把團隊規則放進個人 local換人、換機器就不一致
把個人習慣 commit 到專案 settings團隊每個人都被迫吃你的偏好
忘記擋 .envAI agent 可能讀到不該讀的 secrets

我會建議每次新增 allow 規則前,都問自己一句:

這個動作如果在半夜自動跑,我明天早上會不會後悔?

如果答案是會,就不要放進 allow。

我的建議設定順序

不要一次把權限打開。

比較好的順序是:

  1. 先用 defaultplan 觀察 Claude Code 會做什麼。
  2. 把每天重複允許的安全指令記下來。
  3. 只把這些指令加進 permissions.allow
  4. 先補 .env、secrets、刪檔、推送的 deny 規則。
  5. 跑一週後再調整。

這樣你會得到一個比較健康的工作流:

日常低風險動作不打斷,高風險動作仍停下來問你。

常見問題 FAQ

allowTools 是不是等於 allow all?

不是。allow 規則只是讓符合條件的工具或指令少問你,不是把整個 Claude Code 權限系統關掉。真正高風險的是 bypassPermissions 或把 Bash(*) 這類過寬規則放進 allow。

disallowedTools 和 deny 規則哪個比較重要?

日常設定我會優先寫在 settings.jsonpermissions.deny,因為它會跟專案設定一起保存。CLI 的 --disallowedTools 適合臨時 session 加限制。

可以把 npm run build 放進 allow 嗎?

可以,但要看專案。若 build 只產生可重建的輸出,通常可以;若 build 會部署、改資料庫或產生不可逆結果,就不應該放行。

為什麼我設定 allow 後還是會問?

常見原因是規則沒有精準命中、工具名稱或 Bash pattern 寫法不對、被更高層的 deny 規則擋住,或該動作不屬於 allow 規則能自動批准的範圍。

參考資料

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "allowTools 是不是等於 allow all?", "acceptedAnswer": { "@type": "Answer", "text": "不是。allow 規則只是讓符合條件的工具或指令少問你,不是把整個 Claude Code 權限系統關掉。真正高風險的是 bypassPermissions 或把 Bash(*) 這類過寬規則放進 allow。" } }, { "@type": "Question", "name": "disallowedTools 和 deny 規則哪個比較重要?", "acceptedAnswer": { "@type": "Answer", "text": "日常設定建議優先寫在 settings.json 的 permissions.deny,因為它會跟專案設定一起保存。CLI 的 --disallowedTools 適合臨時 session 加限制。" } }, { "@type": "Question", "name": "可以把 npm run build 放進 allow 嗎?", "acceptedAnswer": { "@type": "Answer", "text": "可以,但要看專案。若 build 只產生可重建的輸出,通常可以;若 build 會部署、改資料庫或產生不可逆結果,就不應該放行。" } }, { "@type": "Question", "name": "為什麼我設定 allow 後還是會問?", "acceptedAnswer": { "@type": "Answer", "text": "常見原因是規則沒有精準命中、工具名稱或 Bash pattern 寫法不對、被更高層的 deny 規則擋住,或該動作不屬於 allow 規則能自動批准的範圍。" } } ] } </script>

想讓網站為你帶來更多商機嗎?

瘦桑與 茉設計 同步提供專業的網站升級服務:

速度升級
讓 LCP < 2.5s,降低跳出率
流量升級
精準診斷核心關鍵字佈局
獲取專家診斷

前 5 名諮詢客戶享免費效能報告

延伸閱讀

Newsletter

訂閱 MO Stories

獲得最新的網頁設計趨勢、Headless CMS 技術洞察與數位變現策略。

我們尊重隱私,絕不發送垃圾郵件。可隨時取消訂閱。

MO DESIGN STUDIO

我們專注品牌網站設計、行銷著陸頁與整合式 CMS 流程,協助團隊打造有感的線上體驗。

← 返回部落格