那串日期後綴走了快兩年,官方文件把它分成五種關係:Anthropic 內建工具的版本編年史
Claude API 的工具總表上,Text editor 那一列掛著兩個 type:text_editor_20250728 跟 text_editor_20250124,兩個都還在。
假如你接手的專案,tools 陣列裡寫的是 text_editor_20250124。直覺會說:後綴比較大的那個比較新,換過去就對了。
這個直覺在這裡會出事。總表上同一個工具掛著兩三個字串,有的是新版取代舊版,有的是兩個都現行、看你用哪個模型,有的根本是同一天推出的兩種演算法,誰也不取代誰。官方文件現在把這些關係分成五種,各有名字。這幾個名字是什麼時候寫進文件的,我查不到。能確定的是那串日期後綴從 2024 年 10 月 22 日算起,已經走了快兩年。
我只讀了官方文件,沒有實際呼叫過 API、沒有宣告過任何一個 tools 陣列,下面所有字串、日期、JSON 都是從文件抄來的。
2024 年 10 月:bash 是掛在 computer use 名下出生的
Bash 工具最早的版本是 bash_20241022,只支援 2024 年 10 月的 Claude Sonnet 3.5(已 retired)。要用它,得帶這個 header:
1 | anthropic-beta: computer-use-2024-10-22 |
header 的名字寫的是 computer-use,不是 bash。Bash 當時沒有自己的一條線,它是被包在 computer use 這個 beta 底下一起放出來的。
Text editor 同一天出生,text_editor_20241022,同樣綁 Sonnet 3.5。官方 change log 寫它提供 view、create、str_replace、insert、undo_edit 五個指令。記住最後那個 undo_edit,它後來會消失。
Computer use 自己呢?最早那一版的確切 type 字串,現在的工具總表跟 computer use 頁面都已經不列了,兩頁都從 computer_20250124 開始算。我沒辦法從現行文件引用那個最早的字串,所以這裡不寫它叫什麼。
這個起點用點餐來想最快。一家店的菜單每改一次,就在封面印上改版日期,舊菜單不回收,拿舊菜單來點的客人照樣接單。一開始店裡只有一本菜單,封面日期就等於「現在的版本」,沒人會搞混。
2025 年初:日期開始跟文件對不上
bash_20250124 是 bash 的第二版,也是目前唯一還列在文件上的版本。官方原文:「requires no beta header. Every model from Claude Sonnet 3.7 (retired) onward accepts it, including all current Claude models.」從這一版開始,bash 不再需要 beta header。
Bash 從此就沒再動過。它是這整段歷史裡最安靜的工具,文件上前後只出現過兩個版本。
Text editor 同期也出了 text_editor_20250124,change log 說它「optimized for Claude Sonnet 3.7 but has identical capabilities to the previous version」。有意思的是那一列的日期欄:March 13, 2025。字串裡寫 1 月 24 日,文件公開是 3 月 13 日,差了 48 天。
所以開頭那個問題的第一層答案出來了:後綴那串日期,不保證是你看到說明文件的那一天。它是工具這一版的識別字,拿它去推「這東西什麼時候公開的」會推錯。
2025 年 4 月到 7 月:唯一一次拿掉東西
text_editor_20250429 是給 Claude 4 的版本。change log 原文:「This version removes the undo_edit command but maintains all other capabilities. The tool name has been updated to reflect its str_replace-based architecture.」
undo_edit 就在這裡消失了。工具名稱也跟著改,現行文件裡叫 str_replace_based_edit_tool,舊名叫什麼,現在的頁面沒寫。回頭看整段歷史,這是 text editor 唯一一次把既有指令拿掉。
三個月後的 text_editor_20250728 修了一些問題,加了一個選填的 max_characters 參數,控制大檔案被截斷的長度,其餘跟 20250429 一樣。文件特別註明:「max_characters is only compatible with text_editor_20250728 and later versions」。
這句話的意思是舊版本連這個參數都不收,版本之間的功能是硬切開的。你以為換個字串只是「多一個選項可以用」,實際上你是換了一份合約。
那回到開頭的兩個字串。總表上 text editor 現行的是 text_editor_20250728 跟 text_editor_20250124,中間的 20250429 不在總表上。這兩個並存的理由,官方後來寫得很清楚:text_editor_20250728 給 Claude 4 以後的模型,text_editor_20250124 給更早的模型。後綴大的那個比較新,但它新在「給新一代模型用」,並沒有取代舊的。你的專案如果還在打舊模型,換過去反而不對。
同一段時間,code execution 走出另一條路
Code execution 的版本序列是 code_execution_20250522(只支援 Python)、code_execution_20250825(加上 Bash 指令與檔案操作)、code_execution_20260120(REPL 狀態可以跨請求保留,加上 programmatic tool calling)、code_execution_20260521。
先講清楚一件事:code execution 的頁面沒有像 text editor 那樣附一張帶日期的 change log 表,上面這些日期是我從 type 字串的後綴讀出來的,文件沒有用「January 20, 2026」這種文字寫出發布日。
最讓我意外的是最後一版。官方原文:「code_execution_20260521 is the same runtime as code_execution_20260120. The difference is that the tool description tells Claude about the 90-second wall-clock limit on each Python cell…」
同一套 runtime。沙箱沒換,能力沒換,換的只是工具描述裡多寫一句話,告訴 Claude 在 programmatic tool calling 裡每個 Python cell 有 90 秒的 wall-clock 上限,讓它自己抓長任務的時間預算。
直覺上,換版本代表執行的那一端變了。這一版說明不一定。對模型來說,工具說明就是工具的一部分,說明改了,行為就可能跟著改,值得一個新字串。
更細的地方藏在 allowed_callers 這個屬性裡。官方寫 "code_execution_20260120" 跟 "code_execution_20260521" 在這個欄位「are interchangeable: a request using either code-execution tool version satisfies tools that list either caller. Response blocks always tag the caller as code_execution_20260120 regardless of which version the request declared.」
你宣告的是 20260521,回應裡寫的卻是 20260120。如果你的程式會拿回應裡的 caller 字串去比對自己送出去的版本,這裡會對不起來。這是文件明寫的行為,算不上 bug,但很容易讓人懷疑自己的 log 寫錯了。
2026 年 8 月 1 日:computer use 整個換骨
在這之前,computer use 目前還列在文件上的是兩個舊版:computer_20250124 跟 computer_20251124。官方針對後者給了一組 effort 設定建議,它支援的模型包含 Claude Opus 4.7、Opus 4.6、Sonnet 4.6、Opus 4.5。computer_20251124 是一個獨立工具,各種動作靠 action 欄位分派。
接著 computer_toolset_20260801 出來了,從字串後綴看是 2026-08-01。它在 Claude API 與 Google Cloud 上是 GA,不需要 beta header。官方的描述是:「one {"type": "computer_toolset_20260801"} entry in tools gives Claude 17 member tools such as screenshot, left_click, type, and zoom」。
同一個點擊動作,官方文件給的前後對照是這樣。舊版 computer_20251124:
1 | { |
新版 computer_toolset_20260801:
1 | { |
回到那家店。以前點餐是一張單子,上面有個欄位叫「動作」,你在裡面勾「點擊」。現在單子拆了,每個動作都是菜單上獨立的一道菜,各有自己的名字,只在旁邊註明「這道屬於 computer 這一區」。
所以你的處理邏輯得跟著改。官方的遷移段落列了九步,跟這篇最有關的是三步:移除 beta header anthropic-beta: computer-use-2025-11-24;把 tools 條目的 type 改成 computer_toolset_20260801,同時刪掉 name、display_width_px、display_height_px、display_number、enable_zoom,toolset 收到這幾個欄位會直接拒絕;agent loop 改成處理回應裡的每一個 tool_use block,依 name 加上 toolset_name 分派,不再看 input.action。剩下六步是 zoom 的預設值、同一輪多個動作的執行順序、tool_result 回填 toolset_name 這類細節,照文件逐條對就好。
舊版沒有被砍掉。官方的說法是:「computer_toolset_20260801 is the stable successor to the beta computer_20251124 and computer_20250124 versions, which remain available on the models listed for them…」它們從現行版之一,退成 beta 版,留給既有的整合、不支援 toolset 的模型,以及還沒有 toolset 的平台。對還列在舊版清單上的模型,文件也寫明升級是選擇性的。
然後是這段歷史裡我覺得最容易踩到的一格。在 Claude API 與 Google Cloud 上,Claude 5.5 以後的模型只認新的 toolset 格式,送舊版 computer_20251124 會直接回錯誤。但在 Amazon Bedrock 上,Claude Opus 5.5 仍然接受舊版 computer_20251124,跟 Opus 5 一樣。同一個模型,換一個雲端平台,「哪個版本會被接受」的答案就不一樣。你在 Bedrock 上測過沒問題的 tools 設定,搬到 Claude API 打同一個模型可能就被拒絕。
header 的字串很像,容易抄錯。computer_20251124 要帶的是 computer-use-2025-11-24,computer use 頁面的遷移步驟、舊版本表格,跟工具總表的 Computer use 那一列,寫的都是這個;computer_20250124 對應 computer-use-2025-01-24。兩個都跟 bash 初版用的 computer-use-2024-10-22 不同。我沒有送過請求,這些字串都是照文件抄的。
同一個日期後綴底下還有另一個東西出生:browser use 工具。它的第一版就是 browser_toolset_20260801,官方原文「is the first version of the browser use tool」。Computer use 是先當了好幾版單一工具,才被改造成 toolset;browser use 一出生就是 toolset,完全沒有走那段路。
Toolset 也帶來一套單一工具沒有的規則。configs 可以逐一啟用或停用個別 member,沒寫到的 member 維持預設,被停用的 member 會從 Claude 看得到的工具裡移除。strict: true、input_examples、把 toolset 或它的 member 指名進 tool_choice,這幾種做法在 toolset 上一律會被 API 以 invalid_request_error 拒絕。串流時每個 member 的 input 一次到齊,也不能用舊的 fine-grained-tool-streaming-2025-05-14 beta header。
我讀到的這一版:這些關係有了名字
現行的 Tool reference 裡有一節叫 Tool versioning。開頭先講規則:「Most Anthropic-provided tools carry a _YYYYMMDD suffix in the type string. A new version is released when the tool’s behavior, schema, or model support changes. Older versions remain available so that existing integrations continue to work.」
接著把「新版跟舊版是什麼關係」分成五種,每種都舉了真實的字串。用那家店來對照:
Capability-keyed 是新菜單多了一道菜,舊菜單照樣收。官方舉的例子包括 web_search_20260209 與 web_fetch_20260209 加上動態內容過濾、web_fetch_20260309 加上 cache-bypass 選項、code_execution_20260120 加上 programmatic tool calling,原文說「both the new and old versions are current; which one you use depends on whether you need the new capability」。
Model-keyed 像兒童菜單跟一般菜單,看來點餐的是誰。例子就是開頭那兩個 text editor 字串。
Variant, not version 是同一天推出的兩種湯底。tool_search_tool_regex_20251119 跟 tool_search_tool_bm25_20251119 是一起發表的兩種搜尋演算法,「Neither supersedes the other.」
Legacy 是舊菜單還能點,只是少了後來加的東西,例子是只支援 Python 的 code_execution_20250522 對上加了 Bash 的 code_execution_20250825。
Successor 是整家店換了點餐方式,就是上一節的 computer use 跟 browser use,官方原文最後一句「Both are client toolsets.」
也有工具完全不走日期後綴。MCP connector 的 mcp_toolset,官方寫「is not date-versioned; versioning is carried in the anthropic-beta header instead.」
這五種分類,我讀起來像是對兩年來各工具實際走出的路做的事後整理,而不是一開始就有的流程。這是我的推測,文件沒有說分類是預先設計還是回頭補的,它只說了什麼時候會出新版。
寫整合的時候,我不會寫任何「自動挑最新字串」的邏輯,把每個 type 字串當成一份釘死的合約,依你打的模型與平台逐一挑選。理由就在上面五種裡,只有 Successor 那一種是「新的取代舊的」;Capability-keyed 的新版是選配,Model-keyed 的新版可能根本不適合你的模型,Variant 則沒有新舊可言。把後綴當版本號比大小,五種裡有四種會讓你選錯或白換。要讓我改口,得等官方文件明寫「後綴較新的版本一律向下相容並取代舊版」,或是把五種分類收斂成只剩 Successor 一種,到那時自動挑最新才說得通。以我讀到的這一版文件來看,兩件事都沒有發生。
還沒被換骨的那兩個
回頭看總表,computer use 跟 browser use 已經是 toolset 了。Bash 還是那個不需要 beta header、只剩 bash_20250124 的單一工具;text editor 還是靠一個工具加上一串指令在運作。它們跟 2026 年 8 月之前的 computer use 長得是同一種形狀。
它們會不會也有換骨的一天,文件一個字都沒提,我也不知道。我只知道 computer use 的前例:要改的不只是 type 字串,還有那段「檢查某個欄位來決定要做什麼」的分派程式碼,而後者才是得動手改邏輯的部分。
所以現在能做的一件事很小:去你的專案裡搜一下,有哪幾個地方寫死了 _2025、_2026 開頭的 type 字串,又有哪幾段 handler 是靠 "action" 分派的。把這份清單列出來,下次總表上多出一個帶 toolset 的字串,你就知道要翻哪幾個檔案。
原文來源:Tool reference、Computer use tool、Text editor tool、Bash tool、Code execution tool















































































































































































































