跳至主要內容

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 的啟動檔。
  • 經由符號連結的 denyWrite glob(macOS)。 當 pattern 所在的資料夾是經由符號連結抵達時,sandbox 的 denyWrite glob 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 與 PermissionRequest hook 會 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.step hook 若以別名(例如 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 條;每一條的原文請見官方變更日誌。

如何更新

  1. 檢查已安裝的版本:claude --version
  2. 直接就地更新:claude update
  3. 如果有腳本執行 claude ultrareview,請在 PR 編號或 base 分支之後加上 --trust-workspace,或設定 CLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1;否則在沒有終端機的環境中,它現在會拒絕執行。

相關連結