Claude Code 一直要求權限?不用 --dangerously-skip-permissions 也能解決
第四十次核准 npm test 只是雜訊。Claude Code 提供了所有你需要的工具,可以讓無聊的提示安靜下來,同時保留危險的提示。只是這些功能分散在三個檔案和六種模式裡。
簡答
把你一定會核准的指令放進 permissions.allow(例如 Bash(npm run *)),一定要停下來的指令放進 ask 或 deny,再依工作選擇合適的權限模式:大量編輯用 acceptEdits,例行工作用 auto,閱讀程式碼用 plan。規則的檢查順序是 deny → ask → allow,因此 deny 永遠無法被覆寫。使用 /permissions 可查看每條規則的來源。--dangerously-skip-permissions 請只留給用完即丟的容器。
Claude Code 為什麼這麼常詢問
在預設模式(CLI 中標示為 Manual)下,Claude Code 第一次使用每個工具時都會提示,而且每個尚未獲准執行的 shell 指令都會再詢問一次。這個提示是你攔下錯誤 rm 或意外 git push 的時機,值得保留。問題在於,代理程式在一個工作階段中做的上百件無害小事也都會觸發它。
是否看到提示取決於三件事:設定檔中的規則、你目前的權限模式,以及你先前用「Yes, and don’t ask again」(是,且不再詢問)給出的回答。要消除雜訊,三者都得調整。
Claude Code v2.1.283 以後的版本,在所有方案和供應商上,都會以 auto 模式啟動互動式終端機和 VS Code 工作階段。在 auto 模式下,背景分類器會根據你的要求檢查指令和網路請求,而不是對例行動作逐一提示。如果你仍然每件事都看到提示,請檢查狀態列:「⏸ manual mode on」表示你處於預設模式。
allow、ask 與 deny 規則
規則位於設定檔的 permissions 底下。以下範例直接取自 Anthropic 的設定參考文件:
allow:不詢問直接執行。ask:一律詢問,即使在原本會自動核准的模式下也一樣。deny:一律不執行。
重點在順序:先 deny,再 ask,最後 allow。第一個符合的規則勝出,規則寫得多具體都不會改變順序。 allow 規則無法在 deny 規則中開出例外;只要工具在任何層級被拒絕,其他層級都無法允許它。規則由 Claude Code 本身強制執行,而非由模型執行,所以在 CLAUDE.md 裡寫「絕不 push」和 deny 規則的效果並不相同。
如何撰寫規則
| 規則 | 符合的對象 |
|---|---|
Bash(npm run *) | npm run build、npm run test --watch,但不包括 npm install |
Bash(git log *) | 只有 git log …。相較之下,Bash(git *) 會允許所有 git 指令。 |
Bash(ls:*) | 等同 Bash(ls *)::* 是結尾萬用字元的另一種寫法 |
Read(./.env) | 讀取該檔案。Read 和 Edit 規則使用 gitignore 模式 |
Edit(//Users/alice/notes/**) | 絕對路徑。開頭只有一個 / 時是相對於設定檔的路徑,所以絕對路徑要用 // |
WebFetch(domain:example.com) | 只有 example.com。子網域請加上 WebFetch(domain:*.example.com) |
mcp__github__* | github MCP 伺服器的所有工具。mcp__ 後面接括號的規則會被略過 |
在 Windows 上,PowerShell 規則的寫法與 Bash 規則相同。
該用哪個設定檔
| 範圍 | 檔案 | 用途 |
|---|---|---|
| 使用者 | ~/.claude/settings.json(Windows:%USERPROFILE%\.claude\settings.json) | 你自己在所有專案中的習慣 |
| 專案(共用) | .claude/settings.json | 整個團隊都該套用的規則(提交到版本控制) |
| 專案(本機) | .claude/settings.local.json | 你在單一儲存庫的個人規則(不提交) |
| 受管理 | managed-settings.json 及其他受管理來源 | 公司政策;任何設定都無法覆寫 |
優先順序由高到低:受管理、命令列、專案本機、共用專案、使用者。permissions.allow 這類清單鍵會跨檔案合併,而不是取代。有兩個細節常讓人踩雷:
- 設定檔是嚴格的 JSON:
//註解或結尾逗號都是語法錯誤,整個檔案會被忽略。 - 共用專案檔案中的 allow 規則,要等每位團隊成員都信任該資料夾後才會生效。deny 和 ask 規則則會立即生效。
大多數修改不需重新啟動就會套用到執行中的工作階段,包括 permissions 和 hooks。要查看實際載入了什麼,請執行 /status(看 Setting sources 那一行)或 /permissions,後者會列出每條規則及其來源檔案。
「Yes, and don’t ask again」實際儲存了什麼
用「不再詢問」回答提示時,系統會在 git 儲存庫根目錄的 .claude/settings.local.json 中替你寫入一條規則。效期長短取決於工具:
| 工具 | 記住多久 |
|---|---|
| Bash 指令 | 永久,依儲存庫和指令 |
| 檔案編輯 | 直到工作階段結束 |
| WebFetch | 永久,依儲存庫和網域 |
所以如果 Claude 每個新工作階段都要求編輯檔案,那是刻意的設計:檔案編輯的核准只在單一工作階段內有效。請改用 acceptEdits 模式或 Edit(...) allow 規則。如果某個指令在「不再詢問」之後仍然一直詢問,請到專案或受管理檔案中找找有沒有 ask 規則。你本機檔案裡的 allow 規則無法勝過它。
權限模式與各自的使用時機
| 模式 | 作用 | 適合 |
|---|---|---|
default(Manual) | 每個工具第一次使用時提示 | 不熟悉的儲存庫、有風險的工作 |
acceptEdits | 不詢問直接接受檔案編輯 | 之後會在 git 中審查的大型重構 |
plan | 只閱讀和規劃,不做任何變更 | 探索程式碼庫、設計變更 |
auto | 沒有例行提示;分類器會先檢查指令和網路請求 | 日常工作 |
dontAsk | 不提示 | 指令碼與自動化 |
bypassPermissions | 略過提示,包括對 .git 和 .claude 的寫入 | 僅限隔離的容器或虛擬機器 |
按 Shift+Tab 可循環切換模式。從 auto 開始,第一次按會切到 default,接著是 default → acceptEdits → plan。用 permissions.defaultMode 設定起始模式;請注意 auto 和 bypassPermissions 只有在使用者或受管理設定中才會生效,寫在專案檔案中無效。
有些情況在所有模式下(包括 bypass)都一定會提示,例如明確的 ask 規則、Claude 向你提出的問題,以及對關鍵路徑執行的 rm 等。管理員可以把 permissions.disableBypassPermissionsMode 或 permissions.disableAutoMode 設為 "disable" 來關閉有風險的模式。
關於 --dangerously-skip-permissions
--dangerously-skip-permissions 等同 --permission-mode bypassPermissions。Anthropic 的文件說得很直白:只能在隔離環境中使用,例如沒有網際網路連線的容器、虛擬機器或開發容器。它在 Linux 和 macOS 上拒絕以 root 身分執行,而且一旦你接受警告,就會在使用者設定中設定 skipDangerousModePermissionPrompt。
如果你真正想要的是「別再問無聊的事」,auto 模式加上幾條 allow 規則就能做到,而且不必放棄重要的提示。
沙箱:提示更少,同時保有安全網
Claude Code 可以在沙箱中執行 shell 指令。沙箱預設關閉;用 /sandbox 或 sandbox.enabled: true 開啟。一種沙箱模式會自動核准在沙箱中執行的指令,另一種則仍會詢問。沙箱只涵蓋 shell 指令:檔案工具、MCP 伺服器和 hook 都在沙箱外執行。
沙箱可在 macOS、Linux 和 WSL2 上執行。在原生 Windows 上沙箱無法執行,指令會在沒有沙箱的情況下執行。這也是在 Windows 上要保留一份簡短 ask 清單的另一個理由。
一套可行的設定
以下是 JavaScript 專案的合理起點。請依你的技術堆疊調整指令:
- 先建立一份只包含唯讀和測試指令的 allow 清單。
- 凡是會離開你電腦的動作(push、publish、deploy)都放進
ask。 - 直接 deny 機密資料。
- 以 auto 或 acceptEdits 模式工作,探索時切換到 plan 模式。
- 每隔幾天打開
.claude/settings.local.json,清理「不再詢問」新增的規則。
剩下的提示出現在錯誤的地方時
調整之後,你應該只會被問到真正需要你決定的事。剩下的問題在於問題出現的位置:在瀏覽器後方的某個終端機分頁裡,代理程式可能等了二十分鐘你才發現。
Pet Island 會把這些問題移到螢幕頂端的一座小島上。當 Claude Code 需要權限時,請求會連同指令或差異內容出現在那裡,你不必切換視窗就能允許、拒絕或一律允許。Claude Code 的提問和計畫也能在島上處理;如果島關閉了,Claude Code 會直接改回在終端機中詢問。
常見問題
如何讓 Claude Code 不再每個指令都要求權限?
把你信任的指令加入 ~/.claude/settings.json 的 permissions.allow,例如 "Bash(npm run *)",並使用 auto 或 acceptEdits 模式。有風險的指令留在 permissions.ask,讓它們仍會停下來。
為什麼我選了不再詢問,Claude Code 還是會再次詢問檔案編輯?
檔案編輯的核准只持續到工作階段結束。如果想跨工作階段核准編輯,請使用 acceptEdits 模式或 Edit(...) allow 規則。
allow 規則可以覆寫 deny 規則嗎?
不行。規則的檢查順序是 deny、ask、allow,第一個符合的規則勝出。在任何層級被拒絕的工具,都無法在其他地方被允許。
--dangerously-skip-permissions 安全嗎?
Anthropic 只建議在隔離環境中使用,例如沒有網際網路連線的容器或虛擬機器。它也會略過對 .git 和 .claude 寫入的提示。
「Yes, and don’t ask again」會把規則存在哪裡?
存在 git 儲存庫根目錄的 .claude/settings.local.json。
Claude Code 的沙箱在 Windows 上能用嗎?
原生 Windows 上不行;指令會在沒有沙箱的情況下執行。沙箱可在 macOS、Linux 和 WSL2 上執行。
資料來源
本頁所有設定與行為均已於 2026年10月26日 對照下列頁面確認。代理程式更新很快;若內容不再相符,請以官方頁面為準。
- Claude Code 文件:Configure permissions(設定權限)
- Claude Code 文件:Permission modes(權限模式)
- Claude Code 文件:Settings(設定)
- Claude Code 文件:Settings reference(設定參考)
- Claude Code 文件:Sandboxing(沙箱)