複數步驟的工作一旦交給 Claude Code,它就會用檢查清單來顯示進度。

但我這邊的環境裡,TodoWrite 這個功能整個不存在,而且是按工具別直接消失。

2.1.233 的 changelog 裡寫著這段:

Todo/task-tracking tools (TaskCreate/Get/Update/List, TodoWrite) are no longer available on Opus 4.8, Sonnet 5, Fable 5, Mythos 5, and newer models; set CLAUDE_CODE_ENABLE_TODO_TOOLS=1 to bring them back
(Todo/任務追蹤工具(TaskCreate/Get/Update/List、TodoWrite)在 Opus 4.8、Sonnet 5、Fable 5、Mythos 5 及更新的模型上不再提供;設定 CLAUDE_CODE_ENABLE_TODO_TOOLS=1 即可把它們找回來)

看起來像是「因為是新模型」所以就結束了,但實際上我改變條件測過之後,結果不一樣。

同樣是 Opus 5,只要環境變數不同,還是能用。 被關掉的是 CLAUDE_CODE_ENABLE_TASKS=0


先看結果

這是在 claude -p 的非互動模式 下,改變條件後,詢問「目前可用工具中,列出所有以 Todo / Task 開頭的工具」得到的結果。

模型 ENABLE_TASKS ENABLE_TODO_TOOLS 可用工具
Opus 5 未設定 未設定 TodoWrite
Haiku 4.5 未設定 未設定 TaskCreate / Get / List / Update
Opus 5 0 未設定 なし
Opus 5 未設定 1 TaskCreate / Get / List / Update

第 3 行跟我自己的環境條件一樣。 當時就是 CLAUDE_CODE_ENABLE_TASKS=0

檢證環境:Windows 10 / Claude Code 2.1.234 / --model opus 會解析成 claude-opus-5


兇手是 ENABLE_TASKS=0

查看環境變數後,發現是這樣:

CLAUDE_CODE_ENABLE_TASKS      = 0
CLAUDE_CODE_ENABLE_TODO_TOOLS = (未設定)

settings.json 裡沒有寫。 這是從父行程傳進來的。

這個變數的意思,官方文件有寫。

On other models, Claude Code provides the Task tools by default and TodoWrite only when you set CLAUDE_CODE_ENABLE_TASKS=0.
(在其他模型上,Claude Code 預設提供 Task 工具,只有在設定 CLAUDE_CODE_ENABLE_TASKS=0 時才會提供 TodoWrite

也就是說,ENABLE_TASKS=0 的意思是:把 Task 工具關掉,改成用 TodoWrite。

但問題是,新模型預設就沒有 Task 工具。
這時再加上「把 Task 工具關掉」這個設定,等於是對一個本來就不存在的東西做切換,結果 TodoWrite 也不會出現。

最後兩邊都消失。 這就是實測中的第 3 行。


變數名稱與實際回來的東西不一樣

要把它打開的是 CLAUDE_CODE_ENABLE_TODO_TOOLS=1。光看名字會以為是把 TodoWrite 帶回來,但實際上:

TaskCreate
TaskGet
TaskList
TaskOutput
TaskStop
TaskUpdate

回來的是整套 Task 工具,沒有 TodoWrite

官方文件也是這樣描述這個變數的。

sets only CLAUDE_CODE_ENABLE_TODO_TOOLS=1, the opt-in for the models that otherwise don't get the tools
(只設定 CLAUDE_CODE_ENABLE_TODO_TOOLS=1,這是給原本不會拿到這些工具的模型所用的 opt-in)

變數名稱是 Todo,實際內容卻是 Task。 不知道的話真的很容易搞混。


Todo 和 Task 是不同的東西

兩者從設計上就不一樣。

項目 TodoWrite Task 工具
更新單位 一次重寫整份清單 TaskCreate 新增 1 筆,用 TaskUpdate 更新 1 筆
讀取 TaskList / TaskGet
依賴關係 可用 addBlocks / addBlockedBy 指定

Task 工具有依賴關係和負責人。 不過這張表是根據官方文件的描述整理的,
我沒有實際建立依賴關係來測試。

官方沒有寫明為什麼要停用。 可以推測是朝「功能更完整的一側」整併了,但
我沒找到明確這樣寫的文字。這只是推測。


不同模型的預設值也不同

就算不設定環境變數,結果也會因模型而異。

模型 預設提供的內容
Opus 5 TodoWrite
Haiku 4.5 Task 工具一式

changelog 寫的是「Opus 4.8、Sonnet 5 以後不能用」,但
我直接對 Opus 5 詢問時,回傳的是 TodoWrite-p 的結果)。

另外,細節規格寫在 Agent SDK 的頁面,而且條件是依 SDK 版本描述的。
SDK 跟 CLI 的預設值不一定一致。 到頭來,自己在環境裡實測最快。


該怎麼做

確認自己的環境。

echo "TASKS=${CLAUDE_CODE_ENABLE_TASKS:-未設定} TODO=${CLAUDE_CODE_ENABLE_TODO_TOOLS:-未設定}"
狀態 會發生什麼
兩者都未設定 保持模型預設,不用動
ENABLE_TASKS=0 在新模型上會全部消失,這就是原因
再加上 ENABLE_TODO_TOOLS=1 Task 工具會回來
想要固定出現 可以寫進 settings.json
{
  "env": { "CLAUDE_CODE_ENABLE_TODO_TOOLS": "1" }
}

另外,官方說清單會出現,是在「需要三個以上不同操作的複雜工作」時。
如果只是短請求,本來就不會產生,所以把它打開也不會有差別。


總結

  • 原因是 CLAUDE_CODE_ENABLE_TASKS=0 跟新模型組合時,整個功能會消失
  • ENABLE_TASKS=0 原本的意義是「關掉 Task 工具,改用 TodoWrite」。 但如果本來就沒有 Task,TodoWrite 也不會出現
  • 要恢復的是 CLAUDE_CODE_ENABLE_TODO_TOOLS=1回來的是 Task 工具,不是 TodoWrite
  • Task 工具比 TodoWrite 更完整,可以有依賴關係與負責人(依官方文件,未實測)
  • 不同模型的預設值不同-p 可確認)。Opus 5 是 TodoWrite,Haiku 4.5 是 Task 工具
  • 官方文件主要是 Agent SDK,與 CLI 的實際行為可能不完全一致

如果你覺得最近清單不見了,問題可能不是模型,而是環境變數。
先檢查 CLAUDE_CODE_ENABLE_TASKS 吧。


參考

※ 引用內容同時附上原文與日文譯文。為了可讀性,譯文有做適度調整;若要精確措辭請以原典為準。

相關文章


JQIT 95% 以上的工程師都是從零經驗錄用的。
如果有興趣,歡迎也來公司網站逛逛。

公司網站

我們也有工程師招募。如果有興趣,歡迎看看。

招募網站


原文出處:https://qiita.com/jqit_suwa/items/dda364cfccd770e110d6


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝12   💬4   ❤️2
297
🥈
我愛JS
💬1  
7
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登