Claude Code v2.1.314:封鎖工作目錄外寫入、閒置壓縮擴大
Claude Code v2.1.314 新增可封鎖工作目錄外檔案寫入的設定,把閒置壓縮帶到 VS Code 與 Claude Desktop,並帶來 81 項修正與 13 項行為變更。
Claude Code v2.1.314 共有 119 條變更:81 條修正、16 條改進、13 條行為變更、6 條新增、3 條更新。這一版新增一個設定,讓 Claude 的檔案編輯工具只能寫入工作目錄之內;閒置壓縮擴及 VS Code 與 Claude Desktop 的 Code 分頁;Claude apps gateway 管理員則多了依 IdP 群組分流,以及 Bedrock guardrail 追蹤。修正範圍涵蓋模型與供應商的可靠性、權限與 hook、登入、終端機、VS Code、雲端 session 與 Claude Tag。有好幾條變更改變了既有設定、環境變數或 hook 規則的行為;如果你替組織管理 Claude Code,或在 Bedrock、Vertex、Foundry 或 LLM gateway 後方使用它,更新前請先讀「值得注意的行為變更」一節。
新功能
封鎖工作目錄外的寫入
新的 permissions.blockWritesOutsideWorkingDirectories 設定會讓 Write、Edit 與 NotebookEdit 工具拒絕工作目錄以外的路徑,而且在任何權限模式下都有效。這條變更只點名這三個工具,並沒有說此設定也涵蓋 shell 命令。權限模式的背景知識,請參考我們的權限模型與安全性教學。
VS Code 與 Claude Desktop 的閒置壓縮
在 VS Code 與 Claude Desktop 的 Code 分頁中,200K token 以上的對話閒置後現在會被摘要;如果到你送出下一則訊息時 prompt cache 已經過期,就會改用這份摘要。另一條變更(見下方「值得注意的行為變更」)也讓閒置壓縮在關閉遙測的訂閱用戶身上執行,並在開啟一小時 prompt cache 後於 Bedrock、Vertex、Foundry 與 LLM gateway 上執行。終端機中的閒置壓縮,請見我們的 v2.1.299 發布說明。
Gateway upstream 的 groups 與 Bedrock 的 guardrail_trace
有兩條新增是給 Claude apps gateway 管理員的:
groups是 gateway upstream 上可選的清單:只有列出的 IdP 群組中的開發者會被送往該 upstream,failover 時也一樣。guardrail_trace用於 Bedrock upstream,會記錄某個請求觸發了哪一個 Amazon Bedrock guardrail filter,但不記錄比對到的文字。
另外兩條新增——排程任務的 Include completed 按鈕,以及管理設定中的 Claude Tag API 文件連結——分別列在雲端 session 與 Claude Tag 兩節。
模型、供應商與 gateway
以下修正涉及模型、雲端供應商、gateway 與連線:
- 管理員設定的 effort 上限。 先前組織管理員為某個模型設定 effort 上限時,session 會一輪接一輪地以「Invalid effort level」失敗。現在 Claude Code 會調降 effort、重試,並告訴你改用哪個等級。effort 控制的是什麼,請見我們的 effort 等級指南。
- 含大量圖片的 Bedrock session。 這類 session 先前每一輪都會失敗,
/compact也一樣,錯誤為「400 Input is too long.」。現在 Claude Code 會移除較舊的圖片並進行壓縮。 - 沒有預設部署的 Microsoft Foundry。 先前當資源沒有預設 Sonnet、Opus 或 Haiku 模型的部署時,session 會失敗。現在 Claude Code 會退回同家族的較舊模型。
- 被指名拒絕的 beta header。 當 gateway 或雲端供應商指名拒絕 Claude Code 的某個 beta header 時,請求現在會拿掉該 header 後重送。
- Gateway 後方的工具搜尋。 在不接受工具搜尋
tool_reference區塊的 gateway 後方,請求先前會一再被拒。現在請求會在不使用工具搜尋的情況下重送一次,而且 session 會記住這一點。 - 帶點號的模型 ID。 先前在 LLM gateway 後方,像
claude-opus-4.8這樣以點號書寫的模型 ID 會被當成較舊的模型,導致 context window、輸出上限、effort、thinking 模式與成本都不正確;現已修正。 - Vertex token 端點。 先前當 Google token 端點接受連線卻始終不回應時,Claude apps gateway 的 Vertex upstream 會卡住好幾分鐘;現已修正。
- 無法辨識的模型名稱。 先前
--resume,以及在拒絕回應後切換到其他模型、再倒轉到該次切換之前,都會把使用 Claude Code 無法辨識之模型名稱的 session 換到另一個模型;現已修正。 - 交叉簽署的根憑證。 先前當系統憑證存放區含有一張與前一代交叉簽署的更新版根憑證時,TLS 連線會以
UNABLE_TO_GET_ISSUER_CERT失敗;現已修正。
Headless 執行、CI 與腳本
claude -p啟動失敗。 過去啟動失敗時,claude -p會以結束代碼 0 結束且沒有任何輸出。現在它會印出錯誤並以結束代碼 1 結束。- CI 中的工作區信任。 先前在有終端機的 CI 工作中,
claude ultrareview與claude remote-control會詢問工作區信任問題。設定CI後,它們現在會直接拒絕未受信任的資料夾。另外,/ultrareview現在也會在執行 git 之前檢查工作區信任,與claude ultrareview一致。 - Git index lock。 先前背景的 diff 更新會短暫佔用儲存庫的 index lock,使同一時間執行的 git 命令可能以「Unable to create ‘.git/index.lock’: File exists」失敗;現已修正。
- stream-json host。 含有
<bash-stdout>或<local-command-stdout>等標籤的 prompt,先前不會向本機的 stream-json host 回報已收到;現已修正。 - 大量 subagent 時的記憶體。 在執行大量 subagent、時間很長的 headless 與 SDK 輪次中,父 session 不再把每個 subagent 的工具結果一直保留到該輪結束。
權限、sandbox、hook 與設定
- 恢復的 worktree 中的 sandbox。 先前對於透過
claude -p --resume或--continue進入的 worktree,sandbox 保護並未生效;現在會生效。 - Monitor 命令上的 hook。 比對 Bash 的 hook 先前不會在 Monitor 工具啟動的 shell 命令上執行,現在會執行;這類 hook 可以阻擋或詢問,但不能核准或改寫這些命令。hook
if條件的相關變更列在「值得注意的行為變更」。hook 的基礎請見我們的 Hooks 系統教學。 --setting-sources的排除。 先前用--setting-sources排除的設定檔,仍會提供部分設定,例如 auto mode 規則與已儲存的權限同意;現已修正。forceRemoteSettingsRefresh。 先前只設定在遠端 managed settings 中時,一旦儲存的副本過期它就不再生效,導致伺服器無法連線時 session 會在沒有政策的情況下啟動;現已修正。- 其他 managed settings。 以下問題都已修正:管理員在 managed settings 中的 TLS 信任設定,在 Claude Desktop session 中沒有套用;當 managed settings 鎖定模型時,Bedrock 與 Vertex 的模型升級提示每次啟動都會再出現;在設有 managed plugin 設定的機器上,只要你自己的某個
--plugin-dir或--plugin-urlplugin 的 manifest 損壞或下載失敗,切換模型就會被拒絕。 - auto mode 的判定。 以下兩個問題已修正:安全檢查沒有給出判定時,auto mode 會把該呼叫回報為已阻擋並列在
/permissions中;被 auto mode、deny 規則或 PreToolUse hook 擋下、或因其他原因沒有執行的 shell 與 MCP 呼叫,在收合的工具群組中看起來像是已經執行過。 - PreCompact hook 的輸出。 先前輸出非常大的 PreCompact hook 可能讓壓縮失敗或重複執行。現在每個 hook 的輸出會截在 10,000 個字元。
sandbox.excludedCommands的說明。 原本說列出的命令一律在 sandbox 之外執行;現在改為說明一次呼叫中的每個命令都必須符合某個項目。- 更清楚的阻擋訊息與提示。 以下三項屬於改進。auto mode 對被擋呼叫的訊息,現在會指名該命令、說明 Claude 可能重試而 auto mode 會再檢查一次,並指向
/permissions供你檢視。/permissions的檢視分頁現在叫 Recently blocked,頁尾會說明按 Esc 會如何處理已標記的列。權限提示中較長的理由會佔用較少列,因此會把待核准命令擠出畫面的終端機變少了。
值得注意的行為變更
以下變更會改變既有設定、環境變數、規則或命令的行為:
FORCE_HYPERLINK=false現在會關閉超連結。false、no與off這三個值過去反而會開啟超連結。- Bash 工具中的
which。 Bash 工具的 shell 現在會清除任何繼承而來的whichalias 或函式,也不再把匯出的which/unsetenv函式傳給命令,因此which會是系統命令或 zsh 內建命令。 - hook 的
if條件會比對 Monitor 命令。 像Monitor(tail *)這樣的條件,現在會比對 Monitor 工具的 shell 命令,就像Bash(tail *)比對 Bash 的命令一樣。 - 被標記的請求改用其他模型重試。 當
ANTHROPIC_DEFAULT_OPUS_MODEL、availableModels或deniedModels讓可用的只剩較舊的 Opus 模型、甚至一個都不剩時,被標記(flagged)的請求現在會改用其他模型重試,而不是以拒絕回應結束。 - 閒置壓縮適用範圍擴大。 現在關閉遙測的訂閱用戶也會執行閒置壓縮;在 Bedrock、Vertex、Foundry 與 LLM gateway 上,只要開啟一小時 prompt cache 也會執行。
- Recently blocked 的核准。
/permissions的 Recently blocked 現在會拒絕核准你無法完整閱讀的呼叫,包括終端機高度不足以完整顯示的呼叫。 - 伺服器管理設定。 Claude 的檔案工具現在在編輯組織伺服器管理設定的本機副本前會先詢問,與編輯你自己的設定檔時相同。
claude -p的結束代碼。 如上所述,啟動失敗的執行現在會印出錯誤並以 1 結束,而不是沒有輸出地以 0 結束。- Cowork 雲端 session 中 hook 的允許。 在 Cowork 雲端 session 的 auto mode 下,hook 對 MCP 工具呼叫的允許現在視同沒有回答,改由分類器或權限提示決定。
- 雲端 session 的設定腳本。 從網頁、桌面與行動應用程式啟動的雲端 session,現在即使設定腳本以錯誤結束也會照常啟動,而不是啟動失敗。
- VS Code 中的
CLAUDE_CODE_DISABLE_CFC_PROMPT。 這個變數現在也會讓擴充套件不再把 Claude in Chrome 的指示加進 session 的訊息中;瀏覽器工具仍然可用。 - 垃圾桶資料夾設有上限。
~/.claude/skills/.trash與~/.claude/plugins/.trash過去會無限制地成長;現在每個大約保留 1024 筆,不論cleanupPeriodDays怎麼設定。 - macOS 上的
git grep。 在 Claude 執行的大多數命令中,git grep現在使用 C locale,以避開 macOS regex 函式庫在處理非有效 UTF-8 檔案時一個已被回報的記憶體洩漏。
登入、MCP 與 Remote Control
- 不登入也能使用的 MCP 伺服器,先前在儲存的登入失效後會顯示「needs authentication」。現在會以未登入狀態使用它們。
- 先前
claude mcp logout在 MCP 登入其實沒有移除時仍會回報成功,例如透過 SSH 連線而 macOS keychain 上鎖時;VS Code 中 MCP 伺服器的「Clear authentication」在已儲存的登入無法移除時也會回報成功。兩者都已修正。 - 多個 session 共用同一個 Anthropic profile 登入時,不再因憑證鎖忙碌而額外更新登入。
- 對透過 App Store 或 Google Play 計費的方案,
/upgrade不再開啟瀏覽器並啟動新的登入,而是告訴你該去哪裡變更方案。 - 當因你的 claude.ai 登入而被拒的請求仍在重試時,雲端 session 顯示的錯誤現在也會建議執行
claude auth login。 - 在擁有一萬個以上 MCP 工具的 session 中,
/context變快了。 - 變更日誌也列出一項改進:當 MDM 與遠端設定在 base URL 或
apiKeyHelper上不一致時,已儲存的 claude.ai、Team 與 Enterprise 登入的行為有所改善,但沒有說明新行為的細節。 - Remote Control。 當 session 服務一時變慢而啟動失敗的
claude remote-controlsession,現在會以逐漸拉長的間隔重試 worker 的註冊。耗時超過 8 秒的模型切換,現在會回傳最終結果,而不是「still pending」錯誤。權限模式按鈕原本在你輸入之前都顯示錯誤的模式;只要你的電腦在線上,現在一開啟就會顯示實際的模式。執行 /compact 之後,用戶端也不再出現多餘的「Compacted (ctrl+o to see full summary)」列。
Session 與用量上限
- 達到用量上限時自動繼續。 先前當任務在等待之間自行重新啟動(例如 /goal check-in、背景或排程任務)時,「Continue automatically at usage limit」可能在你沒有下任何 prompt 的情況下繼續超過三次;現已修正。
- Ultracode 保持關閉。 以 Ultracode 啟動的背景與雲端 session,先前在 Ultracode 被關掉後,下次啟動時又會重新開啟;現已修正。
- 無法解析的工具呼叫。 先前 Claude 放棄一個無法解析的工具呼叫之後,最後那則損壞的回覆與其重試 prompt 會留在對話中;現已修正。
- 恢復與標題。
--resume在損壞的對話記錄上變得更快、更省記憶體。以 skill 或/security-review這類 prompt 型命令開始的 session,現在會依此取得標題;第一個 prompt 失敗(例如碰到用量上限)但對話隨後繼續的 session,也不再一直沒有標題。/resume 選單不再把 CLAUDE.md 或 CLAUDE.local.md 的內容當成只執行過斜線命令之 session 的標題;已刪除的 session 也不再以幾乎空白的項目重新出現在恢復清單中(這種情況很少見)。 - Skill 垃圾桶。 skill 檔案監看器不再逐一檢查保留在
~/.claude/skills/.trash中的每個已移除 skill;這項檢查帶來的檔案系統負載會隨每次移除而增加。該資料夾新設的上限列在「值得注意的行為變更」。 - 背景 session 啟動失敗時,若 daemon 執行檔其實仍在磁碟上,不再被回報為執行檔已刪除。
終端機與編輯
- 串流中的表格。 Markdown 表格在串流時,不再因為輸入到一半的列而在格狀與堆疊版面之間跳動,長表格也不再退回成原始的直線符號。
- Vim 模式。
dw、dW、yw與yW不再越過行尾繼續作用,w與W現在會停在空行上。對字元選取執行p時,現在會考慮被 yank 的文字是否為整行;aw與iw也不再把行尾的換行一併選入。 - 貼上。 先前在 Claude 的提問對話框中,除非「Other」列有焦點,否則貼上的文字與拖曳進來的檔案會遺失;在 prompt 頁尾選取某一列時,貼上的文字也會遺失。兩者都已修正。Ctrl+R 的 prompt 歷史現在也能比對收合起來的
[Pasted text]標籤內的文字。透過 SSH 在 Linux 機器上貼上圖片過去會毫無反應;現在提示列會告訴你把檔案複製過去並貼上它的路徑。 - Agent 與 subagent。 以下問題都已修正:在 agent 面板中,當另一個 agent 啟動或結束時,x 與 Enter 有時會作用在錯誤的 agent 上;在 subagent 開啟的對話記錄中詢問
/btw,會從主對話回答;在/btw等命令的面板上按 Esc,也會一併中斷其對話記錄正開著的 subagent;在全螢幕模式下,檢視以不同模型執行的 subagent 或隊友時,歡迎標頭仍顯示 session 的模型。 - Session 名稱。 用 /rename 設定的名稱,不再在 Claude 詢問權限或計畫決定時消失,讓並排的 session 仍可辨識。
- CRLF diff。 先前對於受 git 行尾轉換影響的 CRLF 檔案,若重新儲存但沒有變更或只改一行,Bash 編輯 diff 會把整個檔案列為已變更;現已修正。
VS Code
除了上面提到的閒置壓縮與 CLAUDE_CODE_DISABLE_CFC_PROMPT 變更,擴充套件還修正了以下問題:
- 佇列中訊息的 hook 執行時,spinner 與 Stop 按鈕不見了。
- 無法儲存的 session 群組變更(例如刪除)會無聲失敗;現在會顯示錯誤通知。
- 在 plan preview 分頁中,Cmd+F/Ctrl+F 無法開啟尋找元件。
- 在俄文、希臘文或希伯來文等非拉丁字母鍵盤配置下,語音聽寫快捷鍵(Ctrl+D)沒有作用。
- 擴充套件在沒有開啟聊天的情況下啟動時,錯過執行的一次性已儲存排程任務會在未詢問的情況下被刪除。
在 IDE 或雲端 session 中用 Esc 或 Stop 停止命令後,Claude 現在除了知道命令被拒絕,也會被告知該命令可能已經執行。
雲端 session 與自架 runner
- 設定腳本。 從網頁、桌面與行動應用程式啟動的雲端 session,不再因設定腳本以錯誤結束而無法啟動(見「值得注意的行為變更」)。
- 排程任務。 在 Anthropic 雲端執行的排程任務,現在會載入你 claude.ai 帳號中啟用的 plugin。當被隱藏的只有已完成的一次性任務時,Scheduled tasks 頁面會出現 Include completed 按鈕,不必打開 Sort 選單就能顯示它們。
- WebFetch 與長 PDF。 在 Cowork 雲端 session 中,WebFetch 先前會無聲地丟掉 PDF 超過 100,000 個字元的文字;現在會說明還有多少沒讀,以及該從哪裡接著讀。
- 沒人要求的模型呼叫。 先前當前一個 worker 剛收到新聊天的檔案就停止時,恢復的 claude.ai 雲端 session 會發出一個沒有人要求的模型呼叫;現已修正。
- 不存在的未提交變更。 先前 Claude 把分支移到它從另一個 worktree 推送的 commit 之後,雲端 session 每一輪都回報有未提交的變更;現已修正。
- 權限模式選擇器。 執行中的雲端或 Remote Control session 拒絕切換後,選擇器先前仍停在 Auto;現在會顯示實際使用的模式並告訴你。
- 管理設定與對話記錄。 管理設定中 GitHub Enterprise 的 Test connection 現在也會以雲端 session 的方式連線,並在這第二項測試失敗時提醒你。自架環境的詳細資訊對話框在很矮的視窗或高縮放比例下會把內容擠出畫面,現在改為可捲動;最近使用的自架環境也會出現在新 session 卡片的近期環境中。在對話記錄中,重新命名的列現在會寫出新標題,儲存庫與環境清單則以表格呈現,而不是一行 JSON。
- 自架 runner。 先前當 runner 暫停 session 的請求在 Anthropic 回應前斷線時,閒置的 session 會移到另一個 runner,而不是暫停;現已修正。session 分支不在 git 遠端時的錯誤訊息,現在也涵蓋從未推送過的分支、說明每種情況的修正方式,並且不再建議重試。
Claude Tag
- 在跨 Enterprise Grid 工作區共用的頻道中,
@Claude !restart先前在一次工作區檢查失敗後就放棄;現在會重試,然後請你再執行一次。 - 在雙方組織都安裝了 Claude 的 Slack Connect 頻道中,Claude 先前有時不會回應在它自己討論串中的標記;現已修正。
- Claude 的 session 等待自架 runner 時,後續訊息先前看不出任何進度;現在 Claude 會在討論串中張貼等待通知。
- 在幾分鐘內用同一個連結從 Slack 連結兩次 Claude 帳號,不再收到第二則確認私訊與頻道通知。
- 在管理設定中,已連接 Slack 的 Enterprise 組織會在 Bundles 與 Channels 分頁看到可關閉的 Claude Tag API 文件連結。plugin 與 skill 頁面的 Retry 在載入失敗後會保留你尚未儲存的存取權變更,儲存庫控制項也不再重複顯示同一個動作。
內建 skill
/claude-api。 它為 API 追蹤設定 Datadog 的步驟,現在會像 Console 一樣送出dd-llmobs-enabled: trueheader;ant的安裝說明也拿掉了過時的 macOSxattr步驟。這個 skill 現在也會在修改 agent 以改善某次 Managed Agents workflow 執行之前,先要求讀取該次執行的 workflow。- dataviz。 內建的 dataviz skill 現在建議:y 軸刻度標籤在 10,000 以下時完整列出,水平方向的標籤在一百萬以下且放得下時也完整列出。遇到甜甜圈圖與圓餅圖的需求,會改以排序長條圖或標出數值的分段長條圖回應。
/design-sync。 上傳提示現在會顯示資料夾、專案,以及將要上傳或刪除的檔案。
少數次要項目(多半是顯示與文字修正)未列於此。完整清單見官方變更日誌。
如何更新
- 檢查已安裝的版本:
claude --version - 直接就地更新:
claude update