Claude Code 2.1.275(2026-09-17)的 changelog 這樣寫著。
修正了
/update-config寫入Write(path)權限規則時,與檔案權限檢查
不相符,而不是Edit(path)規則
Write(路徑) 的權限規則,和檔案的權限檢查不一致。 而且寫出那種格式的正是 Claude Code 自己的 /update-config。我測了 36 次。
deny 只寫 Write(檔案) 12 次都寫進去了
deny 只寫 Edit(檔案) 12 次都停住了
兩者都寫 12 次都停住了
Edit() 會連 Write 工具的新建也擋下來,Bash 的重新導向也會擋
2.1.275 仍然是 Write() 不起作用。修好的只有「寫出來的那一側」
檢證環境:Windows 10 / Claude Code 2.1.273 與 2.1.275 隔離安裝 /
claude -p/ 測量於 2026-09-18
acceptEdits 就無法定論上次卡在這裡。
claude -p 沒有會回答確認的人,所以「拒絕」和「等待確認」看起來會是一樣的。
使用 --permission-mode acceptEdits 就能分開。
規則的狀態acceptEdits 下的結果有生效自動核准也不能覆寫 → 停住**沒生效確認會被自動核准 → 寫入**我把拒絕規則各自分開,準備了 3 個丟棄用目錄。
{ "permissions": { "deny": ["Write(./secret.txt)", "Write(./fresh.txt)"] } }
{ "permissions": { "deny": ["Edit(./secret.txt)", "Edit(./fresh.txt)"] } }
{ "permissions": { "deny": ["Edit(./secret.txt)", "Write(./secret.txt)", ... ] } }
路徑也有 3 種。判定只看檔案內容,不採信自我申告。
路徑E用 Edit 工具改寫既有的 secret.txtW用 Write 工具新建 fresh.txtB用 Bash 的 echo ... > secret.txt
Write() 一次都沒擋下來3 種規則 × 3 條路徑 × 2 個版本 × 每次 2 回 = 36 次。
拒絕規則E: Edit 工具W: Write 工具B: Bash 重新導向只有 Write(...)**2/2 寫入2/2 寫入2/2 寫入只有 Edit(...)0/2(拒絕)0/2(拒絕)0/2兩者都有0/2(拒絕)0/2(拒絕)0/2Claude Code 2.1.273 和 2.1.275,沒有任何差異。**
只有 Write(...) 的時候,不會出現拒絕事件(兩個版本都是 0/6)。
只有在有 Edit(...) 時才會回傳,而且不同路徑會顯示不同文句。
Edit / Write 工具 File is in a directory that is denied by your permission settings.
Bash Permission to use Bash with command echo BASH-WROTE > secret.txt has been denied.
Edit() 會連 Write 工具也擋下來寫成 Edit(./fresh.txt),Write 工具的新建也會被擋住。
雖然名字是「Edit」,但檔案相關的檢查其實更偏向這一邊。
Write() 甚至連 Write 工具本身都擋不住。
/update-config 寫出的格式,在 2.1.275 已經改了changelog 指名的就是這裡。
我請它「阻止對 secret.txt 的編輯」,然後讀取提案 JSON。
Claude Code 的版本提案的拒絕規則2.1.273 第 1 次Edit(secret.txt) / Write(secret.txt)**2.1.273 第 2 次再加上 `Edit(/secret.txt)/ **Write(/secret.txt)`**2.1.275 兩次都是 Edit(secret.txt) / `Edit(/secret.txt)** בלבד****2.1.273 雖然兩次的項目數不同,但都包含Write()。** 2.1.275 兩次都只有Edit()`。
不過 Write() 本身在 2.1.275 也還是沒有效。
修好的只是「之後要寫出的格式」,已經寫出的規則依舊沒有效。
只要找 Write( 就行了。
grep -n '"Write(' ~/.claude/settings.json ~/.claude/settings.local.json .claude/settings.json 2>/dev/null
找到了就改成 Edit(。只寫 Edit() 就能擋住 3 條路徑,所以沒必要兩個都寫。
我自己的環境裡只有 Edit(...),因此沒有影響。
Write() 在所有情境都沒用。 我測的是檔案的 deny 規則而已;allow 端沒測acceptEdits 下的表現。 互動式工作階段裡確認對話框怎麼出現,沒有確認/update-config 是兩個版本都拿不到 settings.json 的建立權限,所以我是讀提案 JSON。寫入後的檔案沒確認deny 裡寫了 Write(檔案),Claude Code 12 次也都還是寫進去了Edit(檔案) 會擋下全部 3 條路徑。 Edit 工具、Write 工具的新建、Bash 的重新導向Write() 無效。 修好的只有 /update-config 寫出的格式/update-config,混進了無效的 Write() 一起提案grep '"Write('。有出現就改成 Edit(拒絕規則,並不是寫了就會生效的設定。
上次是「刪掉也不影響結果」,這次則是明明寫著,卻什麼都沒做。
參考
/update-config 修正tee 繞過的那篇JQIT 的工程師 95% 以上都是無經驗錄用。
如果有興趣,也歡迎到公司網站逛逛。
▶ 公司網站
我們也有工程師招募。若有興趣,歡迎看看。
▶ 招募網站