Claude / MCP · 權限設定踩坑

Claude Code 權限設定踩坑
設了 bypass 還在問我?

全局設了 bypassPermissions,結果 Claude 每次跑指令還在彈「Allow this bash command?」
查了半天,發現是三個坑疊在一起。本篇一次講清楚,從此不再被煩。

Part 1:權限系統是什麼 Part 2:三個坑的故事 Part 3:一次搞定的解決方案 Part 4:FAQ
1
什麼是 Claude Code 的權限系統?

Claude Code 可以幫你執行各種操作:讀文件、寫文件、跑 Bash 指令、甚至呼叫外部 API。但這些操作有些是有風險的(例如刪除文件、推送代碼到 GitHub),所以 Claude Code 內建了一套「權限系統」,在執行每個操作前先問你:「允許嗎?」

權限確認 Permission Prompt
每次 Claude 要執行一個操作(例如跑一段 Bash 指令),都會彈出一個確認框,問你「Allow this bash command?」,你要按 Y 或點「允許」才會繼續。
就像大樓門口的保全,每個人進來都要刷卡。即使你是住戶,每次都要刷。
Bypass 模式 bypassPermissions
設了這個模式之後,Claude 執行操作時不再彈確認框,直接放行。適合你信任 Claude 的場景,省去每次按「允許」的麻煩。
給保全一張「永久通行證」,以後這個人進出都不用刷卡了。
Allow 白名單 permissions.allow
你也可以不用 bypass 全開,而是只允許特定的操作。每次你點了「允許」,那個操作就會被加進白名單。下次同樣的操作就自動放行。
不是給通行證,而是在門口貼一張「VIP 名單」。名單上的人不用刷卡,不在名單上的還是要。

Claude Code 的設定有兩層,就像「全校校規」和「教室班規」的關係:

全局設定
C:\Users\你的名字\.claude\settings.json
項目級設定
你的項目/.claude/settings.json
當前 Session
開對話時鎖定,中途改不了
關鍵:項目級設定會覆蓋全局設定。如果項目級 settings.json 存在但沒有寫 defaultMode,全局的 bypass 就會被「蓋掉」。而且,不管你怎麼改設定,當前對話都不會生效,必須開新對話。
一句話記住:全局設定像「全校校規」,項目級設定像「班規」,班規可以覆蓋校規。而且改了規矩要「下節課」才生效(新 session)。
2
三個坑的故事:為什麼設了 bypass 還在問?

以下是 Thomas 的真實經歷。他在 Windows 上用 VS Code + Claude Code,設了 bypass,以為一勞永逸,結果 Claude 每次跑指令還是彈確認框。查了半天才發現是三個坑疊在一起。

坑 #1
項目級設定覆蓋了全局的 bypass
Thomas 在全局設定裡加了 "defaultMode": "bypassPermissions",滿心以為萬事大吉。

但他的工作目錄 D:\Backup\Downloads 下面也有一個 .claude/settings.json,裡面只有 permissions.allow 白名單,沒有 defaultMode

結果:項目級設定覆蓋了全局設定,bypass 被吃掉了。Claude 繼續老老實實地每次問你「Allow?」。
坑的本質:Claude Code 的設定合併邏輯不是「全局 + 項目級疊加」,而是「項目級存在就以項目級為準」。項目級缺了 defaultMode,就等於沒有 bypass。
坑 #2
改了設定,當前對話不生效
Thomas 發現了坑 #1 之後,立刻在項目級 settings.json 裡也加上了 "defaultMode": "bypassPermissions"

結果——還是在彈確認框!

原因是:Claude Code 的權限模式在對話開始的那一刻就鎖定了。你在當前 session 裡改了 settings.json,它完全不會讀取新的設定。必須關掉當前對話,開一個全新的 session,新設定才會生效。
坑的本質:權限模式是「開機時載入」,不是「實時監聽」。你在對話中途改設定檔,就像飛機已經起飛了才改航線圖,飛行員看不到。
坑 #3
Allow 白名單越積越長,完全沒用
在踩完前兩個坑的過程中,Thomas 每次被問「Allow?」都乖乖點了允許。每點一次,那個指令就被自動加進 permissions.allow 白名單。

最後打開 settings.json 一看:130 多條 allow 規則,密密麻麻一大串。

而這些規則在 bypass 模式下完全沒用——bypass 模式是「所有操作全部放行」,根本不需要白名單。這 130 條規則純粹是在沒有 bypass 時一條一條積累的「歷史債」。
小提示:設了 bypass 之後,你可以安全地把 permissions.allowpermissions.deny 裡面的條目全部清空。bypass 模式下它們完全不起作用。
坑 1:項目級沒設 bypass
全局設定被覆蓋
每次都彈確認框
以為 bypass 壞了
瘋狂點「允許」
白名單越積越長
修好了,還是不生效
坑 2:需要新 session
3
一次搞定的解決方案

知道了三個坑的原因,解決方案其實很簡單:在兩個地方都設好 bypass,然後開新 session。以下是完整步驟。

1
修改全局設定 Global settings.json
打開文件:C:\Users\你的用戶名\.claude\settings.json
確認裡面有 "defaultMode": "bypassPermissions"
2
修改項目級設定 Project settings.json
打開你的項目目錄下的 .claude/settings.json
同樣加上 "defaultMode": "bypassPermissions"
3
清理白名單(選做)
permissions.allow 裡堆積的 130 條規則清空。bypass 模式下它們完全不需要。清理後文件更乾淨,也更容易讀。
4
開新 Session(關鍵!)
關掉當前的 Claude Code 對話,開一個全新的對話。這是最容易忘記的一步!新設定只有在新 session 才會載入。
C:\Users\Administrator\.claude\settings.json
// 全局設定:影響所有項目
{
  "permissions": {
    "defaultMode": "bypassPermissions"
  }
}
你的項目/.claude/settings.json
// 項目級設定:只影響這個項目
{
  "permissions": {
    "defaultMode": "bypassPermissions",
    "allow": [],
    "deny": []
  }
}
為什麼兩邊都要設?因為你不知道未來會不會打開一個沒有 .claude 資料夾的新項目(靠全局),也不知道項目級設定會不會覆蓋全局(靠項目級)。雙保險最穩。
場景 沒有 bypass 有 bypass
Claude 跑一個 Bash 指令 彈確認框,等你按 Y 直接執行,不打斷
Claude 讀一個文件 彈確認框 直接讀
Claude 寫一個文件 彈確認框 直接寫
一個複雜任務(20 步操作) 彈 20 次確認框,你要點 20 次 Y 全自動跑完,中間不打斷
你離開座位讓 Claude 幹活 你一走它就停了,等你回來按 Y 你走了它也繼續跑
settings.json 裡的 allow 列表 越積越長,幾十上百條 空的就好,用不到
你修改了 settings.json
全局或項目級
當前 session 不會變
已鎖定的設定
開新 session
Claude 重新讀取設定
bypass 生效!
不再彈確認框
?
常見問題 FAQ
bypass 模式安全嗎?Claude 會不會亂搞我的文件?
bypass 只是跳過「執行前的確認彈窗」,Claude 本身有內建的安全機制,不會主動做破壞性操作(例如 git push --force、刪除重要文件),除非你明確要求。搭配 git 版本控制,隨時可以回溯,風險很低。
我只有一個項目,不想改全局設定,只改項目級可以嗎?
可以。只要項目級 settings.json 裡有 "defaultMode": "bypassPermissions",這個項目就會生效。但如果你以後打開別的項目,那個項目就不會有 bypass,除非你在全局也設了。
怎麼確認 bypass 有沒有生效?
最簡單的方法:開新 session 後,讓 Claude 執行一個簡單的 Bash 指令(例如 ls)。如果它直接執行了沒有彈確認框,就代表 bypass 生效了。
清理了 allow 白名單之後,如果我關掉 bypass,會不會所有操作都被拒絕?
不會「被拒絕」,而是回到「每次都要問你」的狀態。Claude 會在每次執行操作前彈確認框,你點「允許」後,那個操作又會被重新加進白名單。所以清理白名單不會有什麼損失。
我在 Mac 上用 Claude Code,路徑不一樣嗎?
是的。Mac 上全局設定的路徑是 ~/.claude/settings.json(也就是你的 home 目錄下面)。項目級設定的路徑一樣是 .claude/settings.json。其他操作完全相同。
VS Code 裡的 claudeCode.initialPermissionMode 和 Claude Code 自己的 settings.json 有什麼關係?
它們是兩套不同的設定。claudeCode.initialPermissionMode 是 VS Code 擴充功能的設定,控制的是 VS Code 內建的 Claude Code 面板。而 .claude/settings.json 裡的 defaultMode 是 Claude Code CLI 自己的設定,控制的是在終端裡跑的 Claude Code。兩者都要設才能確保不管用哪種方式都是 bypass。
我的 settings.json 已經有 100 多條 allow 規則,直接全刪會不會出問題?
如果你已經設了 bypass,全刪 allow 列表完全沒問題。bypass 模式下根本不會看 allow 列表。如果你以後想關掉 bypass,回到一條一條授權的模式,到時候 Claude 會重新逐條問你授權,新的 allow 規則會自動累積回來。