Agentツールとは何ですか?通常のツール呼び出しとどう違いますか?
Agentツールは、Subagent——独自の隔離されたコンテキストウィンドウを持つ新しいClaudeインスタンス——を起動するための、ClaudeCodeに組み込まれた特殊なツールだ。通常のツール(ファイル読み込みやコマンド実行など)との違いは、通常のツール呼び出しは実行して終わり、結果が現在のコンテキストに直接返るのに対し、Agentツールの呼び出しは独自のシステムプロンプト、ツールリスト、権限設定を持つ完全に別の対話フローを起動し、完了後に結果の要約だけを呼び出し元に返す点にある。
このツールはもともとTaskという名前だったが、ClaudeCode v2.1.63で正式にAgentへと改名された。改名の理由は、元の名前が別の内部タスク追跡システム(Task*系機能)と混同されやすかったためだ。公式ドキュメントと現行バージョンは現在Agentという名称で統一されているが、既存の設定ファイルやフックスクリプトにあるTask(...)という記述は、エイリアスとして引き続き機能し、改名によって動作しなくなることはない。
Agentツールはなぜ存在するのですか?どんな問題を解決していますか?
標準的な対話は固定サイズのコンテキストウィンドウを持ち、長時間・複数ステップのタスクでは、探索的なファイル読み込みやコード検索から蓄積される出力が継続的にコンテキスト領域を消費し、本当に重要な情報を薄めてしまう。Agentツールは、こうしたノイズを隔離するための仕組みを提供する——大量の中間プロセスを生む作業をSubagentに委ね、独立したコンテキスト内で完了させ、メイン対話は精製された結果だけを受け取る。
これは、このツールがなぜ通常のツールとは別に設計され、専用の名前を与えられているのかも説明する。このツールが行うのは単純な情報取得ではなく、独立した実行ブランチ全体を起動することだからだ。そのブランチには独自の権限制御(例えば特定のSubagentを読み取り専用に制限する)や独自のモデル選択(探索的なタスクに安価なモデルを割り当てる)が必要であり、これらは通常のツールにはない能力だ。
Agentツールは実際にはどのように動作し、どんな制限がありますか?
メインAgentがAgentツールを呼び出す際は、起動するSubagentの種類(general-purposeやカスタムSubagentの名前など)とタスク記述テキストを指定する。起動されたSubagentは自分だけのクリーンなコンテキストを持ち、メイン対話の履歴を継承せず、タスク完了後に結果の要約を返す。
Subagentは自身もAgentツールを呼び出して、さらに次の層のSubagentを起動できるが、この入れ子能力には深さの制限がある——現在のデフォルトはメイン対話から数えて最大3層までだ。深さの上限に達すると、そのSubagentのツールリストからAgentツールが取り除かれ、それ以上の委任はできず自分自身で残りの作業を完了させて要約を返すしかなくなり、無限に下へと延びることはない。この深さの上限は環境変数で調整でき、1に設定すると入れ子機能を完全に無効化できる。また「fork」と呼ばれる特殊な形態もあり、これはクリーンなコンテキストから始まるのではなく、メイン対話の完全な履歴をそのまま継承するが、fork自体はAgentツールを呼び出してさらに次の層を生成することはできない。
Agentツールの仕組みを理解することは、実際のClaudeCode利用にどう役立ちますか?
設定ファイルやsettings.json、カスタムフックスクリプトの中でTask(...)という記述を見かけても、それが古くなったものだと心配する必要はない——これは公式に保持されているエイリアスであり、Agent(...)と書くのと同じ効果を持ち、そのまま使い続けても問題は起きない。ただし、新しく書く設定については、今後ドキュメントと食い違わないよう、現行名称であるAgentを直接使うことが推奨される。
カスタムSubagentを設計したり、ツール呼び出しを傍受するフックスクリプトを書いたりする場合には、一点注意が必要だ。tool_nameフィールドをチェックする際に文字列"Task"とハードコードして比較しているスクリプトは、改名後に動作しなくなる可能性がある。実際に渡される値がすでに"Agent"に変わっているためだ。こうしたスクリプトは両方の名称をチェックするか、自前で文字列比較ロジックを組む代わりに、現行の公式な権限ルール構文(Agent(agent_type)など)を使ってどのSubagent種類を起動できるかを制限する方がよい。
GitHubのissue #29677には実際の事例が記録されている:ClaudeCode v2.1.63でTaskツールがAgentに改名された後、あるコミュニティ開発者が自作のPreToolUse/PostToolUseフックスクリプトが静かに壊れていることに気づいた。原因は、これらのスクリプトがtool_nameフィールドを文字列"Task"とハードコードして比較していたためで、改名後はフィールドの実際の値が"Agent"に変わり、スクリプトの照合ロジックが一致しなくなっていた。この事例がきっかけとなり、公式ドキュメントには「バージョン2.1.63でTaskツールはAgentに改名された。設定やエージェント定義内の既存のTask(...)参照は、引き続きエイリアスとして機能する」という説明が明記されるようになった。
利点は探索的なノイズを独立したコンテキストに隔離し、メイン対話をクリーンに保てること、またSubagentごとに異なるツール権限やモデルを設定できることだ。欠点はSubagentの起動がコンテキストをゼロから再構築することを意味し、背景情報への依存度が高くメイン対話との頻繁なやり取りが必要なタスクではむしろ遅延コストが増える点であり、すべてのタスクが委任に適しているわけではない。