複數步驟的工作一旦交給 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=1to 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
TodoWriteonly when you setCLAUDE_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。 不知道的話真的很容易搞混。
兩者從設計上就不一樣。
| 項目 | 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 工具,不是 TodoWriteTodoWrite 更完整,可以有依賴關係與負責人(依官方文件,未實測)-p 可確認)。Opus 5 是 TodoWrite,Haiku 4.5 是 Task 工具如果你覺得最近清單不見了,問題可能不是模型,而是環境變數。
先檢查 CLAUDE_CODE_ENABLE_TASKS 吧。
參考
※ 引用內容同時附上原文與日文譯文。為了可讀性,譯文有做適度調整;若要精確措辭請以原典為準。
JQIT 95% 以上的工程師都是從零經驗錄用的。
如果有興趣,歡迎也來公司網站逛逛。
▶ 公司網站
我們也有工程師招募。如果有興趣,歡迎看看。
▶ 招募網站