簡而言之:claude --dangerously-skip-permissions 等同於 claude --permission-mode bypassPermissions。請僅在容器、虛擬機或沙盒執行環境中,以非 root 使用者身分使用它,並且確保沒有任何你無法承受損失或洩漏的資料在可觸及的範圍內。
--dangerously-skip-permissions 的作用
該指令及其完整形式 claude --dangerously-skip-permissions 與 claude --permission-mode bypassPermissions 相同。命令列介面參考將此旗標描述為「跳過權限提示。等同於 --permission-mode bypassPermissions」。
實際上,檔案編輯、shell 指令、網路擷取、MCP 工具和子代理都會在不詢問的情況下運行。在我們的測試中,一個使用 Agent 工具啟動的子代理在沒有提示的情況下運行了 uname -s > sub.txt:自 v2.1.98 起,子代理會繼承父代理的模式。
它在六種權限模式中的位置
| 模式 | 無需提示即可執行的操作 | 如何啟動 |
|---|---|---|
| default (顯示為 Manual) | 僅讀取 | --permission-mode default (或 manual) |
| acceptEdits | 讀取、檔案編輯、常見檔案系統指令 (mkdir、touch、mv、cp) | --permission-mode acceptEdits,Shift+Tab |
| plan | 讀取,加上當自動模式可用時,分類器批准的指令 | --permission-mode plan,Shift+Tab |
| auto | 所有操作,每個動作都由分類器審查 | 自 v2.1.283 起,終端機和 VS Code 中的內建預設,Shift+Tab |
| dontAsk | 讀取工作目錄和預先批准的工具;任何會提示的操作都會被拒絕 | --permission-mode dontAsk 或設定,從不在 Shift+Tab 循環中 |
| bypassPermissions | 除了下方硬性阻止的所有操作 | --dangerously-skip-permissions 或 --permission-mode bypassPermissions |
來源:權限模式。對於新的會話,模式優先來自旗標,然後是設定檔中的 permissions.defaultMode,最後是內建預設(終端機和 VS Code 中為 auto,claude -p 和 Agent SDK 為 default)。
首次執行警告和 skipDangerousModePermissionPrompt
在繞過模式下的首次互動式會話會顯示此對話框,其中「否,退出」預設為選中(在我們的容器中捕獲):
警告:Claude Code 正在以繞過權限模式運行
在繞過權限模式下,Claude Code 在運行潛在危險指令之前不會徵求您的批准。此模式應僅在具有受限網路存取權限且損壞後可輕鬆恢復的沙盒容器/虛擬機中使用。繼續即表示您接受在繞過權限模式下執行操作的所有責任。
❯ 否,退出
是,我接受
選擇「是,我接受」會將 "skipDangerousModePermissionPrompt": true 寫入 ~/.claude/settings.json,然後狀態列會顯示 ⏵⏵ bypass permissions on。claude -p 從不顯示此對話框。文件指出,儲存庫無法為你跳過它:此設定僅從使用者、本地或受管理設定中讀取。
它仍然阻止什麼(已測試)
拒絕規則在所有模式下都有效
文件明確指出:「拒絕規則在所有模式下都有效,包括 bypassPermissions。」我們使用針對推送的拒絕規則和真實的 git 遠端進行了檢查:
{ "permissions" : { "deny" : [ "Bash(git push *)" ] } }
使用 --dangerously-skip-permissions,git push origin main 被拒絕,列在 permission_denials 中,並且遠端分支沒有移動。另一方面:「允許規則在 bypassPermissions 中無效。」所有操作都已允許,因此允許清單在此模式下不起作用。
詢問規則、AskUserQuestion 和互動式 MCP 工具
明確的詢問規則仍然會詢問。使用 {"permissions": {"ask": ["Bash(curl *)"]}}:
在繞過模式下的互動式會話:Claude Code 在 curl 呼叫處停止,並顯示「權限規則 Bash(curl *) 需要確認此指令。您要繼續嗎?」
帶有旗標的 claude -p:沒有人可以回答,因此呼叫被拒絕。文件明確指出:「在此 -p 運行中,少數仍會提示的呼叫會被拒絕。」AskUserQuestion 內建工具、標記為 requiresUserInteraction 的 MCP 工具,以及你的組織設定為詢問的連接器工具也是如此。
關鍵路徑:rm -rf ~ 等指令
rm 和 rmdir 在關鍵路徑上從不自動批准,在任何模式下,即使有允許規則或返回「允許」的鉤子也不行。關鍵路徑包括檔案系統根目錄、其頂層目錄(/usr、/etc)、你的家目錄、你的工作目錄及其父目錄,以及危險的形式,例如 rm -rf "$DIR"/* 或 rm -rf "$(pwd)"(完整清單)。
在互動式繞過會話中,文件指出此類指令會在時間限制內詢問你,然後被拒絕。我們看到的情況:rm -rf /tmp/repo,工作目錄,帶有旗標:被危險的 rm 檢查拒絕,列在 permission_denials 中。相同的指令沒有旗標但帶有允許規則 Bash(rm *):也被拒絕。允許規則無法批准它。
rm -rf build,一個子資料夾:運行了。只有關鍵路徑受到保護,而不是 rm -rf 可以觸及的所有內容。rm -rf ~ 和 rm -rf /:從未到達工具。模型的響應在任何工具呼叫之前就被安全分類器停止了(JSON 中為 "safety_stops": 1,沒有權限拒絕),因此這兩次運行並未說明權限檢查本身。
工作目錄外的讀取
使用 "permissions": {"blockReadsOutsideWorkingDirectories": true} (v2.1.257+),在繞過模式下讀取 /etc/os-release 被拒絕。如果沒有它,Claude Code 會讀取你的使用者可以讀取的任何檔案,包括 ~/.ssh 和 ~/.aws。
拒絕的 PreToolUse 鉤子
PreToolUse 鉤子在任何權限模式檢查之前運行。鉤子指南指出,返回 permissionDecision: "deny" 的鉤子「即使在 bypassPermissions 模式或使用 --dangerously-skip-permissions 時也會阻止工具」。我們的鉤子:
```bash
#!/bin/bash
PreToolUse policy: deny any Bash command that mentions "hook-target".
input = $( cat )
if echo "$input" | jq -e '.tool_input.command // "" | test("hook-target")' > /dev/null ; then
echo '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"blocked by policy hook"}}'
fi
exit 0
```
touch hook-target.txt 在繞過模式下被拒絕,模型報告了鉤子的原因:「被策略鉤子阻止」。這是最有用的硬性阻止:鉤子可以呼叫你自己的策略,記錄每次呼叫並失敗關閉。
它不再阻止什麼:Claude 自己的設定
對受保護路徑(.git、.claude、.vscode、shell 配置檔)的寫入「除了在 bypassPermissions 模式下,從不自動批准」。使用該旗標,Write 工具在沒有提示的情況下在專案中創建了 .claude/settings.json,並在家目錄中創建了 ~/.claude/settings.json(根據更新日誌,自 v2.1.126 起)。
換句話說,在繞過模式下的代理可以重寫保存其拒絕規則和鉤子的檔案,以供其下一個會話使用。你所依賴的規則應屬於受管理設定,或屬於代理無法寫入的 --settings 檔案(我們將其掛載為唯讀)。
我們的測試總結
| 操作 (Claude Code 2.1.304) | claude -p,無旗標 | claude -p --dangerously-skip-permissions |
|---|---|---|
| uname -s > os.txt (寫入檔案) | 拒絕,結束代碼 0 | 運行 |
| 帶有拒絕規則的 git push | 拒絕 | 拒絕,遠端未更改 |
| 帶有詢問規則的 curl | 拒絕 | 拒絕 (互動式繞過:提示) |
| 被 PreToolUse 鉤子拒絕的 touch | 未運行 | 被鉤子原因拒絕 |
| rm -rf 工作目錄 | 即使有允許規則 Bash(rm *) 也被拒絕 | 拒絕 |
| rm -rf build (子資料夾) | 未運行 | 運行 |
| 讀取工作目錄外,blockReadsOutsideWorkingDirectories 開啟 | 未運行 | 拒絕 |
| 寫入 .claude/settings.json,~/.claude/settings.json | 未運行 | 運行 |
| 子代理運行 shell 指令 | 未運行 | 運行 |
所有運行都以結束代碼 0 退出,無論是否被拒絕。標記為「未運行」的單元格是我們未測試的組合。
如何全面開啟它
命令列介面旗標、別名和恢復會話
該旗標是一個啟動選項,因此每次啟動時都要傳遞它,包括恢復會話時:
claude --dangerously-skip-permissions
claude --continue --dangerously-skip-permissions
claude --resume <session-id> --dangerously-skip-permissions
如果你經常輸入它,請為容器而不是旗標設定別名,這樣簡短的指令也是安全的指令,例如 alias claude-yolo='devcontainer exec --workspace-folder . claude --dangerously-skip-permissions',搭配 Anthropic 的參考開發容器。
預設情況:permissions.defaultMode // ~/.claude/settings.json
{ "permissions" : { "defaultMode" : "bypassPermissions" } }
我們測試了這兩個位置。在使用者設定中,claude -p 沒有旗標會寫入檔案。在專案的 .claude/settings.json 中,該設定被忽略,相同的指令被拒絕:自 v2.1.257 起,.claude/settings.json 或 .claude/settings.local.json 中的 bypassPermissions 會使會話以手動模式啟動,因此克隆的儲存庫無法為你開啟它。
會話中:--allow-dangerously-skip-permissions 和 Shift+Tab
你無法從未啟動繞過模式的會話中進入繞過模式。請改用 --allow-dangerously-skip-permissions 啟動:它會將 bypass 添加到 Shift+Tab 循環中,但不會以該模式啟動。
claude --permission-mode plan --allow-dangerously-skip-permissions
這就是兩個旗標之間的區別:--dangerously-skip-permissions 以繞過模式啟動,而 --allow-dangerously-skip-permissions 僅使其可用。然後循環會運行 default、acceptEdits、plan、bypassPermissions,如果可用則運行 auto。
文件中的一個副作用是:當繞過模式在互動式終端機中可用時,plan 模式的阻止不會被強制執行。
VS Code 擴充功能和桌面應用程式
VS Code:將 claudeCode.allowDangerouslySkipPermissions 設定為 true 以將「繞過權限」添加到模式選擇器中,並將 claudeCode.initialPermissionMode 設定為 bypassPermissions 以使每個新對話都以該模式啟動。
該擴充功能僅從你的使用者設定中讀取 initialPermissionMode,並忽略工作區值(VS Code 文件)。
桌面應用程式:在 Pro 和 Max 版本上,開啟「設定 → Claude Code → 允許繞過權限模式」;在 Team 和 Enterprise 版本上,由組織策略決定。雲端會話不提供繞過模式(桌面文件)。
「它仍然要求權限」:修復
「出於安全原因,不能與 root/sudo 權限一起使用」
作為 root 使用者,我們的運行立即停止,結束代碼為 1:--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons。
解決方法是將 Claude Code 作為普通使用者運行:在你的容器中創建一個(useradd -m dev,Dockerfile 中的 USER dev)。文件補充說,「在已識別的沙盒中,檢查會自動跳過」。
你在議題 #9184 中找到的解決方法是 IS_SANDBOX=1:在我們的 root 容器中,IS_SANDBOX=1 claude -p --dangerously-skip-permissions 運行了。這是一個社群解決方法,不是文件化的設定,它只適用於你反正會丟棄的容器。拒絕是一個合理的預設:root 加上沒有提示意味著一個錯誤的指令可能會毀掉整台機器。
對 .claude/ 編輯的提示
議題 #37765 報告說,該旗標在 Claude 編輯其在 .claude/ 中的設定之前仍然會詢問。它於 2026 年 4 月關閉,v2.1.126 更新日誌稱該旗標「現在繞過對 .claude/、.git/、.vscode/、shell 配置檔寫入的提示」。在 2.1.304 版本上,我們沒有收到提示。如果你仍然看到它,請更新 Claude Code。
子代理
議題 #40241 報告說,使用 Agent 工具啟動的子代理沒有繼承繞過模式。它作為 #42696 的重複議題關閉,並在 v2.1.98 中修復:「進程內生成的子代理現在繼承父代理的權限模式。」我們的子代理測試在沒有提示的情況下運行了。
設定被忽略
它位於專案的 .claude/settings.json 中,但被忽略了。請參閱上方「預設情況:permissions.defaultMode」部分。bypassPermissions 不應在專案設定中設定。