我只想加一條 soft_deny,最安全的寫法是什麼?
陣列第一個元素放 "$defaults",後面再放自己的規則。官方說這樣內建規則會被插在那個位置,你還會繼承之後版本更新的內建清單。改完執行 claude auto-mode config 確認有效設定。
我把 autoMode 寫在專案的 .claude/settings.json,為什麼沒反應?
分類器不讀專案設定裡的 autoMode。官方理由是這些檔案在 repo 裡,被簽入的 repo 可以替自己加 allow 規則。請改放 ~/.claude/settings.json、managed settings,或用 --settings 傳入。
push 前一定要停下來讓我確認,用什麼?
用 permissions.ask,例如 Bash(git push *)。它在分類器之前評估,永遠跳確認。限制是只匹配以該字串開頭的命令,git -C <dir> push 不會被攔;要看完整命令文字就用 PreToolUse hook。
不是工程師,這跟我有什麼關係?
如果你的團隊用 auto mode,而有人改了這份設定,可能不知不覺關掉 force push 這類保護。把它想成安全規則的「新增」和「改寫」只差一個預設標記,改完請跑一次 claude auto-mode config 看結果。
auto mode 是用分類器審查每次工具呼叫的權限模式。官方的 auto mode 設定頁有一個很容易漏看的警告:只要你設了 autoMode.environment、allow、soft_deny、hard_deny 其中一個陣列,卻沒有在裡面放字串 "$defaults",那一段的內建清單就整個被你的清單取代。本文整理這個陷阱、規則的優先順序,以及設定檔該放哪裡。以下除非標明,都出自官方設定頁。
下面這份有保留內建規則,再加上自己的一條:
{
"autoMode": {
"soft_deny": [
"$defaults",
"Never modify files under infra/terraform/prod/"
]
}
}
下面這份只差一行 "$defaults":
{
"autoMode": {
"soft_deny": [
"Never modify files under infra/terraform/prod/"
]
}
}
官方警告寫得很直接:soft_deny 少了 "$defaults",會丟掉每一條內建的 soft block 規則,文件點名包括 force push、curl | bash、production deploy 與 auto mode bypass;hard_deny 少了它,會丟掉內建的資料外洩規則。各段彼此獨立,所以只設 environment 不會動到另外三份預設清單。
官方把分類器內部分成四層:hard_deny 無條件擋,使用者意圖與 allow 例外都不適用;接著是 soft_deny,使用者意圖與 allow 可以覆蓋;allow 是 soft 規則的例外;最後,如果使用者的訊息直接且具體地描述了 Claude 正要做的那個動作,剩下的 soft 規則也會放行。官方的例子是:要求「整理一下 repo」不算授權 force push,但要求「force-push 這個分支」就算。
分類器之外還有更硬的兩層:permissions.deny 在分類器之前就擋,分類器與使用者意圖都無法覆蓋;內容限定的 permissions.ask(例如 Bash(git push *))永遠會跳出確認,分類器不能代為核准。官方也提醒,這類規則只匹配以該字串開頭的命令,git -C <dir> push 這種寫法不會被擋;要檢查完整命令文字,要用 PreToolUse hook。
分類器只從 ~/.claude/settings.json、managed settings 與 --settings 讀 autoMode,不讀專案的 .claude/settings.json 與 settings.local.json,理由是這兩個檔案在 repo 裡,被簽入的 repo 或 build 步驟可以替自己塞 allow 規則。如果你把設定寫在專案裡,它不會生效。各範圍的條目會合併;開發者可以追加但不能移除 managed 提供的條目,而且官方明說,開發者加的 allow 可以蓋過組織的 soft_deny,所以這是疊加而不是硬性政策邊界,真正不能越過的要放 managed 的 permissions.deny。
claude auto-mode defaults 印出內建的四份清單;--label 可以用標籤開頭只看一條規則(需 v2.1.208 以上)。claude auto-mode config 印出分類器實際使用的有效設定,改完後用它確認。claude auto-mode critique 讓 AI 檢查你寫的自訂規則是否含糊、重複或容易誤判。claude auto-mode reset 移除使用者設定檔裡的 autoMode(v2.1.212 以上),會先確認;managed 與 --settings 的仍然有效。/auto-mode-setup 會根據專案與最近的 session 草擬 environment 條目;官方頁面寫它需要 Pro、Max 或 Team 方案、不能在雲端 session 執行;v2.1.304 的更新說明則寫它也開放給 Bedrock、Vertex、Foundry、Claude apps gateway 與關閉 telemetry 的 session。兩處說法不同,我只能說以你版本上的實際行為為準。它掃描 CLAUDE.md、README、設定與近期 session 裡 Claude 執行過的命令,不讀你的訊息;接受草稿時會替 allow、soft_deny、hard_deny 自動加上 "$defaults"。建議的做法是:先只動 environment(官方說多數組織只需要這一項),要加規則時每個陣列第一行都放 "$defaults"。這些都是官方文件的內容;其中「建議先動 environment」是我對官方推薦流程的轉述,不是我自己的實測。