Claude Code v2.1.309:sandbox 與權限檢查強化
Claude Code v2.1.309 修補 sandbox、Bash 權限檢查與 worktree 隔離的缺口;sed -i 改用標準 Bash 權限提示,claude ultrareview 則需要工作區信任。依賴這些行為的腳本請先確認。
Claude Code v2.1.309 共有 79 條變更:62 條修正、8 條改進、6 條行為變更、2 條更新、1 條新增。最該先看的是一批修正:sandbox、Bash 與 PowerShell 權限檢查、hook,以及 worktree 隔離,過去在某些情況下並沒有守住。另有六條行為變更會影響腳本與無人值守的 session 所仰賴的行為,包括 sed -i 的權限提示方式,以及 claude ultrareview 新增的工作區信任要求。Claude 也不再把角色名稱與預留位置寫成 GitHub 提及、通知到不相關的使用者。如果你仰賴 sandbox 或權限規則來限制 Claude 執行的內容,請更新。
Sandbox 與權限強化
本節每一項都是 v2.1.309 本身的修正,更新即可套用。想了解權限模式、規則與 sandbox 如何搭配,請參考〈權限模型與安全性〉。
Sandbox
- shell 啟動檔在 sandbox 外執行。 在 macOS 與 Linux 上,受 sandbox 限制的 Bash 命令在每次執行前,會先在 sandbox 外執行 shell 的啟動檔。
- 經由符號連結的
denyWriteglob(macOS)。 當 pattern 所在的資料夾是經由符號連結抵達時,sandbox 的denyWriteglob pattern 不會套用在路徑的實際位置上。 --mcp-config檔案。 受 sandbox 限制的命令與自動接受的編輯,可以修改以--mcp-config傳入的 MCP 設定檔。- session 結束後的寫入禁止(Linux)。 當背景命令比 session 存活得更久時,sandbox 的寫入禁止規則會解除。
Bash 與 PowerShell 權限檢查
- 重新導向可能失敗的命令所設定的變數。 Bash 權限檢查會信任某個命令設定的變數,而該命令的重新導向可能無法開啟。
- 經過包裝或加上前綴的
cd,接著執行 git。 某些先切換目錄再執行 git 的複合命令,在cd經過包裝或加上前綴時不會跳出權限提示;現在會比照單純的cd一樣提示。 Edit(path)deny 規則與重新導向。 在某些同時含有 subshell 的命令中,Edit(path)deny 規則擋不住導向該路徑的 Bash 重新導向。- PowerShell 的
Set-Location與cd(Windows)。 PowerShell 權限檢查會自動核准某些以目前目錄為目標、又帶有額外引數的Set-Location或cd命令;現在會要求核准。
Worktree 隔離、hook 與其他防護
- worktree 隔離防護。 以 worktree 隔離的 session 會接受某些帶 locale 前綴的命令,以及在 zsh 上的某些算術命令,而這些本該被隔離防護(isolation guard)拒絕。
- profile store 的寫入保護。 當設定目錄是經由符號連結抵達時,這項保護不會生效。
- PowerShell hook。 在 PowerShell 中執行的 hook,在其程式以結束代碼 2 結束時不會阻擋。在 Windows 上,未安裝 Git for Windows 時,設定
"shell": "powershell"的PreToolUse與PermissionRequesthook 會 fail open(直接放行)。v2.1.310 另外修正了一個相關的 Windows 情況:缺少 Git Bash、且 hook 的命令只有加引號的字串時,hook 會放行工具呼叫。 - agent teammate。 分割窗格(split-pane)中的 agent teammate 不會繼承 leader 命令列上給定的工具 deny 規則與
--tools規則。 - 已停用的 MCP 伺服器。 在 print(
-p)與 SDK session 中,之後出現的權限提示可能讓已停用的 MCP 伺服器重新連線。
值得注意的行為變更
這六條變更可能影響腳本、設定或無人值守的 session 所仰賴的行為。
sed -i改用標準的 Bash 權限提示。 它現在會照原樣執行,不再顯示模擬的檔案編輯預覽。和其他 Bash 編輯一樣,它的變更不再能用/rewind還原。claude ultrareview需要工作區信任。 在終端機上它會詢問,否則就拒絕執行。腳本可以把--trust-workspace放在 PR 編號或 base 分支之後(這個旗標不接受值),或設定CLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1。
# 先寫 PR 編號或 base 分支;--trust-workspace 不接受值
claude ultrareview 1234 --trust-workspace
# 或透過環境變數關閉信任檢查
CLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1 claude ultrareview 1234
- bypass permissions 模式下危險的
rm與rmdir。 在桌面應用與 VS Code 的 bypass permissions 模式中,這類命令原本會跳出提示,現在則會立即被拒絕並附上改寫提示,讓無人值守的 session 能繼續進行。 - sandbox 無法執行時,被排除在 sandbox 外的命令。 當 sandbox 已啟用卻無法執行時,設定中排除在 sandbox 之外的命令,現在要寫入 sandbox 寫入清單(write-list)中的路徑前會先詢問;在這種情況下,不經 sandbox 的備援執行會被拒絕。
- 建立 worktree 時不再按需抓取物件。 Claude Code 建立或重用 worktree 時,git 不再按需抓取物件,一般 clone 與設定了 Bash sandbox 的 partial clone 都是如此;這類 partial clone 會先把物件抓下來。
/claude-api以multiagent_20261001建立 Managed Agents 團隊。 這個 skill 現在以multiagent_20261001建立 Managed Agents 的 subagent 團隊,並預設開啟 dynamic workflows,而不再使用coordinator。
角色名稱不再變成 GitHub 提及
Claude 過去可能在 PR、issue 與留言中,把角色名稱與預留位置寫成提及(mention),因而通知到不相關的 GitHub 使用者。這個問題已修正;如果你讓 Claude 代為在 GitHub 撰寫內容或留言,這條修正值得留意。
Session、context 與終端機輸入
- 過大的巢狀 CLAUDE.md。 讀取位於非常大的巢狀 CLAUDE.md 底下的檔案後,session 會反覆壓縮。超過大小上限的巢狀 CLAUDE.md 現在只會載入開頭部分。
/rewind。 某一輪透過/code-review --fix、subagent 或 shell 命令更動了有檢查點的檔案時,清單會顯示「No code changes」。/rename。 用/rename重新命名的 session,在 VS Code 視窗重新載入或非互動式--resume之後,在其他 session 中會以自動產生的名稱出現。- 對話記錄與
jq。 過長的工具輸出預覽會從 emoji 中間被截斷,留下jq無法解析的 session 對話記錄。 ctrl+enter(立即送出)。 在回應開始前按下時,只會把訊息排入佇列;在 prompt 的 hook 執行期間按下時,會重新啟動那些 hook,訊息卻仍留在佇列中。ctrl+o。 不會顯示其他 agent 與 session 尚在等待遞送的訊息;現在這些訊息會完整出現在對話記錄下方,並標示為等待中。!模式。 綁定按鍵的 slash 命令會從!模式被送進 shell 執行。
Skill、plugin、mod 與 artifact
--add-dir資料夾中的同名 skill。 當另一個 skill 已佔用相同名稱時,--add-dir資料夾中的 skill 會無法使用;現在會以<folder>:<name>的形式提供。- 巢狀套件的 skill。 當巢狀套件的檔案是從 shell 修改時,
/verify與/code-review找不到該套件自己的 skill。 - 從 claude.ai 同步的 plugin 與 skill,在發生磁碟讀取錯誤後會被移除,有時甚至發生在 session 進行中。
- mod。 mod 的
turn.stephook 若以別名(例如haiku)指定模型,每個請求都會以模型錯誤失敗;現在別名會解析為對應的模型。hooks 模組巢狀過深而無法載入時,錯誤訊息現在會指出是哪個檔案,而不只是一則 stack overflow 訊息。 - artifact。 某些一般頁面的發布與更新會被拒絕,例如含有特定 minified 腳本的頁面,或 Claude 無法先讀取的 artifact。此外,若對話在某一輪中被壓縮,Claude 在該輪剩下的時間裡,每次更新 artifact 都會詢問權限。
- 內建的 dataviz skill 現在接受 APCA 作為文字對比度的衡量方式(需要符合 AA 時仍保留 WCAG 2 對比值),在色盤驗證腳本中加入
apca(text, background)函式,並會說明彩色圖表填色中的標籤該用白色還是近黑色。
/claude-api skill
除了上面提到的 multiagent_20261001 變更,內建的 /claude-api skill 還有三條修正、兩條改進與一條更新,大多與 tracing 有關:
- 不再聲稱
ant beta:worker poll --on-work會把 trace context 傳給命令。 - C# 的 tracing 設定不再漏掉雲端平台 client 的 span。
- 不再聲稱發往 Claude Platform on AWS 的請求,其 API span 無法加入呼叫端的 trace。
- 被要求加入 OpenTelemetry 時,除了 SDK tracing,也會提供 API tracing。
- 在說某項功能不支援之前,會先查閱線上的最新文件。
- 更新:service account key 與 Workload Identity Federation token 現在可以管理 OpenTelemetry 的目的地。
桌面應用、Remote Control 與意見回饋
- 由 Claude Desktop 承載的 session,在連線重新整理時有時會遺失訊息。
- Claude 桌面應用中的 Claude Code session,在同一台電腦的終端機登入不同帳號或組織時,會缺少部分功能。
claude remote-control的狀態列,對不在 git 儲存庫中的資料夾會把分支顯示為HEAD。/privacy-settings會顯示過時的「Help improve our AI models」設定值;現在無法取得設定時也會說明。- 意見回饋。 組織不接受意見回饋時,過去會顯示「try again later」;現在會顯示伺服器給的原因,以及回報錯誤的管道。過大的
/feedback回報現在會改為不附對話記錄重新送出,而不是直接失敗。
Git、供應商與平台
- git replace refs。 Claude Code 建立的 worktree 與分支 checkout 現在會忽略 git replace refs,與它其他的 git 操作一致。
- Windows 上的 git。 Claude Code 為自身執行的許多 git 命令在 Windows 上變快了。在所有平台上,這些命令的錯誤訊息現在一律以英文顯示,即使 git 設定為其他語言也一樣。
- Amazon Bedrock。 當
ANTHROPIC_BEDROCK_BASE_URL設為預設的bedrock-runtime.<region>.amazonaws.com端點時,fine-grained tool streaming 會一直維持關閉。 - gateway。 在只送出 keepalive ping 的 gateway 後方,「Waiting for API response」提示會閃爍;不經 Anthropic 後端的路由現在會等待 45 秒。
- 磁碟已滿。 因磁碟已滿而中斷的 Bash 命令現在會說明原因,並指出該清出空間的資料夾;在已滿的暫存磁碟區上啟動時,會顯示清楚的訊息,而不是原始的 ENOSPC 錯誤。
- macOS。 在沒有 Xcode 或 Command Line Tools 的 Mac 上,Claude Code 不再每次啟動都跳出「Install Command Line Developer Tools」對話框。
- Linux sandbox。 在與父行程共用
/proc的 Linux sandbox 中,Read 讀取 PDF 頁面範圍時會回報「File does not exist」。
自架 runner、雲端 session、Claude Tag 與 Code Review
- 自架 runner。 第一個 prompt(例如
/code-review)仍在 subagent 中執行時,--startup-timeout-min不再停止該 session;真正卡死的行程仍會被停止。session 移到新的 runner 時,Claude 現在能看到被中斷的工具呼叫,並標示為結果未知。 - 雲端 session。 session 的 Changes 窗格現在會說明它列出的是否只有已推送的 commit,或只有 Claude 的編輯。雲端環境編輯器不再打亂環境變數,也不再替同時含有兩種引號的值加上反斜線。routine 表單中的 Add connector 清單不再於載入期間顯示沒有可用的 connector;「read documentation」工具列現在會顯示可讀的頁面,而不是跳脫過的 JSON;管理設定中的自架環境詳細資訊對話框,現在只有內容會捲動,標題、分頁與按鈕都保持可見。
- Claude Tag。 Slack 中的 Claude 不再把你核准發到頻道的草稿誤發到你的私訊;沒有指定頻道的貼文現在會被拒絕,好讓它發到核准的頻道。session 已停止時,Slack 核准卡片上的 Allow 與 Deny 不會有任何作用;現在你的回答會重新啟動 session。workspace 移到另一個 Claude 組織後,Claude 不再忽略頻道中沒有標記它的訊息(包括 Enterprise Grid 上未共用的頻道),也不再於讀到有人剛加進討論串的新訊息之前就發出回覆。Claude Tag 管理設定的 Slack 頁面在清單載入失敗時,不再顯示沒有已連結的 workspace,而是顯示錯誤與 Retry 按鈕。
- Code Review。 先前建立 check 的嘗試失敗時,完成的審查在 pull request 上不會顯示 check;現在最後一次嘗試會加上已完成的 check。
@claude review stop之後,排在進行中審查後面的 push 不再啟動審查;它的 check 現在會關閉並說明原因。
VS Code
- 空白的 Claude 面板。 編輯器快取了不完整的面板檔案後,面板會一直空白;現在會自行恢復,或說明出了什麼問題、該如何修正。
- 憑證錯誤。 新增一則記錄檔警告:當聽寫或擴充套件自身的請求未通過憑證驗證(例如在 TLS 檢查代理後方)時,說明該怎麼處理。
- 更快的 Edit 與 Write。 在聊天面板中,每次編輯後等待新 problems 的時間,多數情況下從 1 到 1.5 秒縮短為 0.75 秒。
- Session history 不再因為每次開新 session 卻沒送出訊息,而堆滿空白的「Untitled」session。
- 長訊息。
/goal等較長的 slash 命令訊息,現在會像其他 prompt 一樣收合在 Show more 後面;聊天面板變窄之後,長訊息也會收合。 - Ctrl+J 過去在聊天輸入框中一律插入換行;現在若在
~/.claude/keybindings.json的 Chat context 中把"ctrl+j"設為null,就會交由 VS Code 與作業系統處理。 - mod 標籤。 mod 在 prompt 上方的「From the … plugin」標籤,不再蓋住 slash 命令與 @ 提及選單。
- 貼上複製的 LaTeX 數學式時,不再產生空的清單項目、段落或程式碼區塊,也不再讓清單項目從 1 重新編號。
- 意見回饋錯誤在組織不接受意見回饋時,不再只顯示 HTTP 狀態碼。
以上已摘要全部 79 條;每一條的原文請見官方變更日誌。
如何更新
- 檢查已安裝的版本:
claude --version - 直接就地更新:
claude update - 如果有腳本執行
claude ultrareview,請在 PR 編號或 base 分支之後加上--trust-workspace,或設定CLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1;否則在沒有終端機的環境中,它現在會拒絕執行。