上一篇做了一個會自己幹活的 /new-skin。Claude Code 越能幹,你越需要決定哪些事讓它直接做、哪些事一定要先問你。manual 模式每一步都問,很煩;auto 模式幾乎都不問,又怕它刪錯檔。這篇用三種權限規則,把界線一次劃好,再分別在 manual 和 auto 模式實測。
快速回答 權限規則寫在專案的
.claude/settings.json,分三種:allow直接做不用問、ask一定先問你、deny絕對不准。三種同時符合時,順序是 deny 先、ask 再來、allow 最後。最省事的設法是用一句話請 Claude Code 幫你寫,再用/permissions檢查。實測 auto 模式下,ask 規則照樣會跳出來問你。
做完這篇,你會有
- 一份
.claude/settings.json,裡面有三種規則 - 改
index.html不再問你,就算在 manual 模式 - 用
rm刪檔一定先問你,就算在 auto 模式 .env這種放密碼的檔案,它完全讀不到
開始之前要準備:前幾篇的 snake-game 資料夾。想跟著測 deny 規則,先在資料夾裡建一個 .env 檔,內容隨便寫一行,例如 LEADERBOARD_API_KEY=demo。
三種規則一張表
allow- 直接做,不用問
- 改
index.html
ask- 一定先問你
- 用
rm刪檔
deny- 絕對不准
- 讀
.env
步驟 1:用一句話請它寫規則
在遊戲資料夾啟動 Claude Code,輸入:
幫我設定這個專案的權限,寫在 .claude/settings.json:改 index.html 不用問我;用 rm 刪檔案一定要先問我;完全不准讀 .env
寫出來的檔案整理後長這樣(實測它多寫了一條 Write(/index.html),Claude Code 不認這種寫法,已刪掉):
{
"permissions": {
"allow": ["Edit(/index.html)"],
"ask": ["Bash(rm *)"],
"deny": ["Read(**/.env)", "Edit(**/.env)", "Bash(*.env*)"]
}
}
/index.html 開頭的斜線代表專案資料夾,**/.env 代表任何一層資料夾裡的 .env。
步驟 2:用 /permissions 檢查
輸入 /permissions,用左右鍵切換 Allow、Ask、Deny 分頁,確認規則都在。
想加減規則,也可以在這裡選 Add a new rule,不用自己改檔案。按 Esc 關掉。
步驟 3:測 allow,改檔不再問
按 Shift+Tab 切到 manual 模式,這個模式本來每次改檔都會問你。輸入:
把底部提示文字最前面加上「🐍 」
allow 規則讓這個檔案不用再問。其他檔案還是會照 manual 模式問你。
步驟 4:測 ask,auto 模式也會問
再按 Shift+Tab 切回 auto 模式,這個模式大多數動作直接做。在資料夾放一個沒用的檔案,例如 notes.txt,然後輸入:
用 rm 刪掉 notes.txt
確定要刪才選 Yes,不想刪就選 No。
步驟 5:測 deny,它碰不到 .env
輸入:
把 .env 的內容唸給我聽
密碼、金鑰、帳號這類檔案,都可以用 deny 規則擋起來。
常見卡關
- 規則寫了沒效果:檔案要放在你啟動 Claude Code 的專案資料夾裡的
.claude/settings.json。打/permissions看規則有沒有出現。 - allow 了還是一直問:先用
/permissions看有沒有同時符合的 ask 規則,ask 比 allow 優先。再檢查路徑:專案設定裡的/代表專案資料夾,例如Edit(/index.html)。 - 在指令的核准畫面選了「Yes, and don't ask again」,規則跑去哪了:存在
.claude/settings.local.json,只對你自己有效,打/permissions看得到、也刪得掉。 - 啟動時提醒
Write(/index.html)不會被比對:改檔的規則只認Edit(...),它已經涵蓋所有改檔工具。實測 Claude 多寫了一條Write,刪掉那條、留Edit就好。 - 規則和 CLAUDE.md 寫的不一樣,聽誰的:聽規則的。CLAUDE.md 是給它參考,權限規則是 Claude Code 強制執行,它想做也做不了。
你做到了
- 用一句話寫好 allow、ask、deny 三種規則
- 用
/permissions檢查規則 - 實測:manual 模式改檔不問、auto 模式刪檔照問、.env 完全讀不到
規矩、指令、權限都設好了。下一篇替 Claude Code 換個性:讓它變成嚴格的程式審查員。
常見問題
三種規則衝突時,誰說了算?
順序是 deny、ask、allow,先符合的那條決定結果。就算 allow 寫得更細,只要 deny 也符合,就是不准。
規則可以套用到所有專案嗎?
可以,寫在 ~/.claude/settings.json。專案的 .claude/settings.json 適合跟團隊共用,.claude/settings.local.json 放你自己的規則。
只想擋一個指令,不想全部擋?
用指令開頭當規則,再放進 allow、ask 或 deny。例如 "deny": ["Bash(git push *)"] 擋掉所有 push、"allow": ["Bash(npm run test *)"] 跑測試不用問。* 代表後面接什麼都算。
用 cat .env 能繞過 Read 規則嗎?
官方說明 Read 的 deny 規則也會套到 Claude Code 認得的檔案指令,例如 cat、head、tail。實測時 Claude 另外加了一條 Bash(*.env*),指令裡出現 .env 也一起擋。
下一步
- 幫 Claude Code 換個性:讓它變成嚴格的程式審查員:下一篇,換一種回答風格。
- Claude Code Skills 教學:把重複工作變成一個 / 指令:還沒做
/new-skin,先看這篇。
參考資料
- Anthropic, Configure permissions(Claude Code 文件,allow、ask、deny 的順序、路徑寫法、
/permissions、settings.local.json) https://code.claude.com/docs/en/permissions - Anthropic, Choose a permission mode(Claude Code 文件,各模式與 auto 模式) https://code.claude.com/docs/en/permission-modes
留言0
登入後就能留言。
登入