MO STORIES
Claude Code allowTools 與 disallowedTools 怎麼設?常用權限規則範例
Claude Code 權限設定不是把所有工具打開,而是把每天安全重複的動作放行,把會刪檔、推送、讀 secrets 的動作擋下來。

Claude Code allowTools 怎麼設?先看這個版本
如果你只是想讓 Claude Code 少問一點,我會先這樣設:
| 類型 | 建議 | 原因 |
|---|---|---|
| 可放行 | Read、Glob、Grep | 讀取和搜尋通常是低風險 |
| 可放行 | Bash(git status:*)、Bash(npm test:*)、Bash(npm run lint:*) | 每天會重複跑,失敗也不會破壞專案 |
| 要保留確認 | Write、Edit | 改檔前仍要看任務範圍 |
| 建議封鎖 | 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,我會再更保守一點,把 Edit、Write 都留給人工確認,不要一開始就放進 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 | 不要 | 刪錯很麻煩 |
| `curl | bash` | 不要 |
如果你真的需要讓 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 dev、node 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 | 團隊每個人都被迫吃你的偏好 |
忘記擋 .env | AI agent 可能讀到不該讀的 secrets |
我會建議每次新增 allow 規則前,都問自己一句:
這個動作如果在半夜自動跑,我明天早上會不會後悔?
如果答案是會,就不要放進 allow。
我的建議設定順序
不要一次把權限打開。
比較好的順序是:
- 先用
default或plan觀察 Claude Code 會做什麼。 - 把每天重複允許的安全指令記下來。
- 只把這些指令加進
permissions.allow。 - 先補
.env、secrets、刪檔、推送的 deny 規則。 - 跑一週後再調整。
這樣你會得到一個比較健康的工作流:
日常低風險動作不打斷,高風險動作仍停下來問你。
常見問題 FAQ
allowTools 是不是等於 allow all?
不是。allow 規則只是讓符合條件的工具或指令少問你,不是把整個 Claude Code 權限系統關掉。真正高風險的是 bypassPermissions 或把 Bash(*) 這類過寬規則放進 allow。
disallowedTools 和 deny 規則哪個比較重要?
日常設定我會優先寫在 settings.json 的 permissions.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>想讓網站為你帶來更多商機嗎?
瘦桑與 茉設計 同步提供專業的網站升級服務:
前 5 名諮詢客戶享免費效能報告
延伸閱讀

Claude Code settings.json 在哪?專案、使用者與權限設定路徑整理
Claude Code 的 settings.json 不是只有一個位置。這篇用表格整理全域、專案、local 設定的差別, 以及權限設定應該放在哪裡。

Claude Code 權限怎麼設?permission modes、allowlist 與安全設定完整整理(2026)
Claude Code 權限不是麻煩,是你和 AI agent 之間的安全邊界。這篇用 Why / What / How 整理 permission modes、allowlist、settings.json 與實務設定範例。

Claude Code Telegram 教學:用官方 Channels 從手機操作本機專案(2026)
Claude Code Telegram 教學怎麼開始?這篇整理官方 Channels 的前提、BotFather 建 bot、plugin 安裝、pair、allowlist、permission relay 與常見卡點,帶你用手機操作本機專案。
訂閱 MO Stories
獲得最新的網頁設計趨勢、Headless CMS 技術洞察與數位變現策略。