開了之後,Bash 還能寫到專案外嗎?
可以。依文章,這個設定只管 Write、Edit、NotebookEdit,shell 指令的重導向、MCP 工具與 hook 程式都不在範圍內。
要擋住這些,需要另外使用沙箱。
專案設定能替自己開,也能替我關掉嗎?
能開、不能關。依文章,專案設定可以為自己開啟,但不能解除使用者已經開的封鎖;任何一個載入的檔案設為 true 就生效。
要完整關掉,必須從每個設定它的檔案裡刪除這個鍵並重啟。
我用 worktree,會被影響嗎?
會。文章說開啟期間 EnterWorktree 與 ExitWorktree 會被移除或拒絕,位於工作目錄外的子代理 worktree 也會被拒絕寫入。
如果你的流程依賴 isolation: worktree,先在測試專案確認再推廣。
符號連結會被怎麼處理?
文章沒有說明符號連結的處理方式,也沒有解釋路徑如何正規化。我沒有找到官方文件補上這一塊。
在依賴這個設定保護重要目錄之前,建議自己建一個指向專案外的連結來測試。
Claude Code v2.1.314(2026 年 10 月 30 日)新增了 permissions.blockWritesOutsideWorkingDirectories:開啟後,Write、Edit 與 NotebookEdit 會拒絕寫入工作目錄以外的路徑,而且在每一種權限模式下都一樣。changelog 只有一句話,細節主要來自 Developers Digest 的第三方整理,我沒有直接看過官方文件,下面會標出文章沒說清楚的地方。
設定在 ~/.claude/settings.json 的 permissions 物件裡,值是布林,預設未設定,false 等同未設定,需要 v2.1.314 以上。文章說任何一個載入的設定檔都能設它;只要有一個檔案是 true 就生效,即使管理來源設為 false。專案自己的設定可以替自己開啟,但不能解除使用者已經開的封鎖。文章說它在「每一種模式,包括 bypassPermissions」都會拒絕。
它只管 Write、Edit、NotebookEdit 這三個檔案工具。不在範圍內的有:Shell 指令(例如 echo x > ~/file 這樣的重導向)、MCP 工具,以及 hook 執行的程式,文章說這些需要靠沙箱。另外幾個仍可寫到專案外:計畫檔、工作階段的 scratchpad、背景工作階段的 tmp 目錄,以及專案自動記憶裡的 .md 檔。
文章列出幾種即使在工作目錄裡也會被拒絕的寫入:Claude Code 自己的設定檔(所以設定檔不能解除封鎖)、只透過專案的 additionalDirectories 加進來的目錄、除非 git 回報為未追蹤否則包含 .claude/settings.local.json 的情況、位於工作目錄外的子代理 worktree(isolation: worktree),以及由專案設定的 autoMemoryDirectory。副作用是開啟期間 EnterWorktree 與 ExitWorktree 會被移除或拒絕。
文章沒有給完整定義,只列出加入方式:工作階段中用 /add-dir(目錄必須存在)、啟動時用 --add-dir,或在使用者或管理設定的 additionalDirectories。允許規則不能讓檔案工具越過這道封鎖;只列在專案 .claude/settings.json 的目錄不算。如果 Claude Code 讀不到管理設定的 permissions 物件,封鎖會維持開啟。雲端工作階段可能不套用這個鍵。符號連結如何處理、路徑如何正規化,文章都沒有說明。
測試方法是請 Claude 用 Write 工具建立 ~/block-test.txt(前提是家目錄不是工作目錄),拒絕訊息會指出 permissions.blockWritesOutsideWorkingDirectories 設定阻擋了寫入。要關閉,必須從每一個設定它的檔案裡刪掉這個鍵並重啟;某個檔案設 false 沒有用,只要另一個檔案還是 true。
讓 agent 無人看管地跑之前,這個設定是便宜的第一層保險:一次寫錯路徑覆蓋了家目錄裡的檔案,修復成本遠高於花五分鐘開一個布林值。但不要因此就以為「寫入已被管住」:Bash 重導向、MCP 工具與 hook 程式都在範圍外,真正的邊界仍需要沙箱。建議先在測試專案開啟,用上面的方法驗證拒絕行為,再推到團隊的管理設定;同時檢查你有沒有依賴 worktree 或專案層 additionalDirectories 的流程,因為它們會被連帶擋下。