Agent 工具是什麼,跟一般的工具呼叫有什麼不同?
Agent 工具是 Claude Code 內建的一種特殊工具,作用是啟動一個 Subagent——一個擁有自己獨立上下文視窗的新 Claude 實例。跟一般工具(例如讀檔案、執行指令)不同的地方在於,一般工具呼叫完就結束、結果直接回到當前上下文;Agent 工具呼叫的則是啟動另一個完整的對話流程,這個流程有自己的系統提示詞、工具清單、權限設定,完成後才把結果摘要傳回呼叫者。
這個工具原本叫做 Task,在 Claude Code v2.1.63 正式改名為 Agent。改名的原因是原本的命名跟另一套內部的任務追蹤系統(Task* 相關功能)容易混淆,官方文件與現行版本已經統一使用 Agent 這個名稱,但既有設定檔或 hook 腳本裡的 Task(...) 寫法仍可作為別名繼續運作,不會因為改名而失效。
Agent 工具為什麼存在,解決了什麼問題?
一個標準對話有固定大小的上下文視窗,在長時間、多步驟的任務裡,探索性質的檔案讀取、程式碼搜尋累積的輸出會持續佔用上下文空間,稀釋掉真正重要的資訊。Agent 工具提供了一個把這類雜訊隔離出去的機制——把會產生大量中間過程的工作交給 Subagent 在獨立上下文裡完成,主對話只接收提煉過的結果。
這也解釋了為什麼這個工具需要跟一般工具分開設計、給予特殊名稱:它做的不是單純的資訊擷取,而是啟動一整條獨立的執行分支。這種分支需要有自己的權限控制(例如限制某個 Subagent 只能讀檔案不能寫入)、自己的模型選擇(可以指定用比較便宜的模型處理探索性任務),這些都是一般工具不具備的能力。
Agent 工具實際運作起來是什麼樣子,有哪些限制?
主 Agent 呼叫 Agent 工具時,需要指定要啟動的 Subagent 類型(例如 general-purpose 或某個自訂的 Subagent 名稱)以及一段任務描述文字。Subagent 啟動後擁有自己乾淨的上下文,不繼承主對話歷史,完成任務後把結果摘要傳回。
Subagent 也可以再呼叫 Agent 工具去啟動下一層 Subagent,但這個巢狀能力有深度限制——目前預設是主對話下方最多三層,到達深度上限後,Agent 工具會從那一層 Subagent 的工具清單裡被拿掉,讓它只能自己把工作做完再回傳,不會無限往下延伸。這個深度限制可以透過環境變數調整,設成 1 就等於完全關閉巢狀能力。另外還有一種特殊型態叫「fork」,它會直接繼承主對話的完整歷史而不是從乾淨上下文開始,但 fork 本身無法再呼叫 Agent 工具去產生下一層。
了解 Agent 工具的機制,對我實際使用 Claude Code 有什麼幫助?
如果你在設定檔、settings.json、或自訂 hook 腳本裡看到 Task(...) 這樣的寫法,不用擔心它已經過期——這是官方保留的別名,跟寫成 Agent(...) 效果相同,繼續使用不會出問題,只是新寫的設定建議直接用 Agent 這個現行名稱,以免將來查文件時對不上。
如果你在設計自訂 Subagent、或撰寫會攔截工具呼叫的 hook 腳本,需要特別留意:檢查 tool_name 欄位的腳本如果寫死比對字串 "Task",在改名後可能會失效,因為實際傳入的欄位值已經變成 "Agent"。這類腳本建議同時比對兩個名稱,或改用官方目前的權限規則語法(例如 Agent(agent_type))來限制哪些 Subagent 類型可以被啟動,而不是自己手刻字串比對邏輯。
GitHub 上的官方 issue #29677 記錄了一起真實案例:Claude Code v2.1.63 把 Task 工具改名為 Agent 後,社群開發者發現自己撰寫的 PreToolUse/PostToolUse hook 腳本開始失效,因為這些腳本檢查 tool_name 欄位時寫死比對字串 "Task",改名後欄位值變成 "Agent",腳本邏輯因此再也匹配不到。這起事件也讓官方在後續文件裡明確加註「v2.1.63 起 Task 工具改名為 Agent,既有 Task(...) 設定仍可作為別名運作」的說明,避免同樣的問題重演。
優點是能把探索性質的雜訊隔離在獨立上下文裡,讓主對話保持乾淨,也能針對不同 Subagent 設定不同的工具權限與模型;缺點是啟動 Subagent 需要重新建立上下文,對於背景資訊需求高、需要跟主對話頻繁互動的任務反而會增加延遲成本,不是所有任務都適合委派出去。