Claude Code v2.1.251:模型切換 hook、/cost 提示快取統計與權限強化
Claude Code v2.1.251 新增 PreModelSwitch 與 PostModelSwitch hook、/cost 的提示快取統計與 /usage 的支出上限列,並修補多項符號連結、沙箱與設定相關的權限漏洞。
Claude Code v2.1.251 是一次大型更新,變更日誌共有 71 個項目。此版本新增了在模型切換前後觸發的 hook 事件、提示快取與支出上限的用量資訊,以及將前景子代理的活動即時串流到 Remote Control 用戶端的功能。其餘許多變更著重於收緊權限,涵蓋符號連結路徑、外掛指令路徑、沙箱輸出檔案,以及現在必須先經核准才會生效的設定。
新功能
模型切換 hook
新增的 PreModelSwitch 與 PostModelSwitch hook 事件,可讓 hook 阻擋、確認或註記一次模型切換。此外,在恢復工作階段時執行的 SessionStart hook,現在會收到工作階段的陳舊程度(staleness)與預估的重新快取成本。
提示快取與支出上限資訊
/cost 現在會顯示每個工作階段的提示快取資訊,包括命中率、未命中數、重新快取的 token 數,以及快取處於暖或冷的狀態;狀態列腳本也會取得對應的 prompt_cache 物件。對於透過設有支出上限的 Claude apps 閘道使用的開發者,/usage 新增了 Spend limit 進度列,狀態列也新增 rate_limits.spend_limit 欄位。
Remote Control 即時顯示子代理活動
Remote Control 用戶端現在可以即時收到前景子代理的工具呼叫與結果串流。背景子代理(預設的執行方式)仍然只顯示狀態。
說明中列出背景工作階段指令
claude --help 現在會列出 attach、logs、stop、respawn 與 rm。對仍在執行中的背景工作階段使用 --resume 時,提示訊息現在會寫出確切的 claude attach <id> 指令。
模型與 effort 預設值
CLAUDE_CODE_SUBAGENT_MODEL現在設定的是子代理的預設模型,而不再覆寫一切:代理定義中的model:,以及每次產生子代理時明確指定的模型,優先順序都高於它。/effort現在會依模型分別儲存預設的 effort 等級,切換模型時各自保留設定。- 以席位計費的 Enterprise 訂閱,預設模型改為 Opus 5,與其他進階方案一致。
- 當目前使用的模型不是可辨識的 Claude 模型時(例如透過自訂
ANTHROPIC_BASE_URL使用的第三方模型),預設的 commit trailer 改為Co-Authored-By: Claude Code。
需要核准才會生效的設定
- 由伺服器管理的設定若會終止沙箱 TLS、將沙箱流量導向您自己的代理伺服器、注入憑證或削弱沙箱隔離,現在必須先經核准才會生效。
- 來自受管設定或專案設定的
ANTHROPIC_CUSTOM_HEADERS,若設定的是憑證、組織/租戶、路由或 API 行為相關的標頭(例如Authorization或Host),現在需要核准。 - 專案層級
.claude/settings.json中的env不再設定CLAUDE_CONFIG_DIR、CLAUDE_CODE_TMPDIR或TMPDIR/TMP/TEMP,請改在 shell、使用者設定或受管設定中設定。 - 受管設定的核准對話框現在只會列出自上次核准以來有變更的設定。
Claude in Chrome 改用 Claude Code 權限檢查
Claude in Chrome 的瀏覽器操作現在一律經過 Claude Code 的權限檢查,包括停用遙測的工作階段;這類工作階段先前使用的是 Chrome 擴充功能本身的提示。
原生執行檔變小
原生執行檔縮小約 5 MB。另外,此版本移除了六種較少使用語言(1c、gml、isbl、mathematica、maxima、sqf)的語法醒目提示,依變更日誌所述,這讓執行檔縮小 2.5 MB。
修正與改進
權限與安全性
- 檔案工具(Read、Write、Edit)不再跟隨在權限檢查之後於工作目錄中被替換的符號連結;先前這可能導致在核准範圍以外讀取或寫入檔案。
- Grep 與 Glob 現在會對透過符號連結搜尋路徑存取到的檔案套用
Read(...)拒絕規則。 - 市集項目中宣告的外掛指令不再能指向外掛目錄以外的位置,這類路徑會以路徑穿越(path-traversal)錯誤拒絕。
- 將算術運算式指派給整數 shell 變數的 Bash 指令(例如
OPTIND=1/0、RANDOM=2+2)不再被自動核准,現在會要求核准。 - 專案設定不再能啟用詳細的 beta 追蹤或原始 API 本文記錄;較低範圍的 beta 追蹤端點也不再能繞過由受管設定或主機應用程式指定的 OTLP 收集器。
- 指令在沙箱中執行時,Bash 輸出檔案的建立與讀回方式已調整,沙箱中的指令無法重新導向或替換這些檔案。
對話與模式
- 模型在某一輪只產生思考內容後,對話不再卡在「text content blocks must be non-empty」錯誤。
- 當 effort 為 xhigh/max 且關閉思考時,Opus 5 請求不再失敗;此時 effort 會以
high送出。 - 工作階段中途收到受管設定的
disableAutoMode時,已在 auto mode 下執行的工作階段現在會切回預設模式。 - 變更目錄讓工作階段被移到已存在、ID 相同的對話記錄上時,對話記錄不再被悄悄覆寫。
背景工作階段與子代理
- 背景工作階段及其子代理現在可以編輯它們以
git worktree add建立的 git worktree 中的檔案。 - 轉到背景的工作階段(
←、/background、--bg)不再遺失在 shell 中匯出的 Vertex/Bedrock 閘道設定(ANTHROPIC_*_BASE_URL+CLAUDE_CODE_SKIP_*_AUTH),先前這會讓所有請求失敗。 - 大量平行子代理不再造成 TUI 延遲:每秒的進度更新現在會取代前一則,而不是在對話記錄中不斷累積。
- 在代理團隊中,隊友的最終答案現在會透過閒置通知送達團隊負責人,而不是只收到沒有內容的「available」通知。
SDK、MCP 與雲端工作階段
- SDK MCP 伺服器的交握確認遺失時,SDK 與雲端工作階段不再無限期卡住;等待會在 70 秒後逾時,且只將該伺服器標記為失敗。
- 使用
--input-format stream-json時,用戶端注入且未附訊息 id 的助理工具呼叫,不再被合併到第一個呼叫而遺失結果,恢復較舊的工作階段時也是如此。
效能與供應商
- 減少多餘的 UI 重新繪製,降低互動式工作階段中每輪執行時的 CPU 使用量。
- 模型的工具呼叫格式錯誤時,重試的上下文現在會捨棄錯誤的輸出,在 Bedrock、Vertex 與 Foundry 上也是如此。
/radio現在可在 Bedrock、Vertex AI、Foundry 與 Claude Platform on AWS 上使用,停用遙測時也可使用。
VS Code
- Remote Control 橫幅改為頁尾的膠囊標籤,在 Remote Control 開啟或失敗時顯示,可在 claude.ai/code 開啟該工作階段;使用
/remote-control開啟或關閉。
v2.1.251 共包含 71 項變更,完整清單請參閱完整變更日誌。
如何更新
- 檢查已安裝的版本:
claude --version - 就地更新:
claude update - 如果專案的
.claude/settings.json在env中設定了CLAUDE_CONFIG_DIR、CLAUDE_CODE_TMPDIR或TMPDIR/TMP/TEMP,請將它們移到 shell、使用者設定或受管設定中,因為專案層級的env已不再設定這些變數。若您使用CLAUDE_CODE_SUBAGENT_MODEL,請注意代理定義中的model:與每次產生時明確指定的模型,現在優先於它。