# Claude Agent SDKの便利だけど知られていない機能
🌍 複雑なタスクの進捗、見失っていませんか?構造化タスクトラッキングで可視化できます!
Claude Agent SDKには、エージェント実行中のタスク管理と進捗表示を行う組み込み機能があります。
📌 タイトル:構造化タスク(Todo)トラッキング
🔗 URL:
🧩 概要
`TaskCreate`、`TaskUpdate`、`TaskGet`、`TaskList` の4つのツールを使って、エージェント実行中の構造化タスク管理が可能です。これらのタスクトラッキングツールは Claude 3.x 系、Opus 4〜4.7、Sonnet 4〜4.6、Haiku 4.5 でのみデフォルトで提供され(Claude Code v2.1.268 以降、TypeScript SDK は v0.3.268 以降がこの既定を同梱)、それ以外のモデルではオプトインが必要です。エージェントは複数ステップの作業を自動的にタスクとして登録し、`pending` → `in_progress` → `completed` のライフサイクルで進捗を管理します。従来の `TodoWrite` は全リストを毎回上書きしていましたが、新しい Task ツールでは個別のタスク単位で作成・更新できるため、より細かい進捗追跡が実現できます。
🛠 使い方
```python
# Python - TaskCreate/TaskUpdate のストリームを監視
from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ToolUseBlock
async for message in query(
prompt="React アプリのパフォーマンスを最適化してください",
# 既定で Task ツールが提供されないモデルでも有効化する
options=ClaudeAgentOptions(env={"CLAUDE_CODE_ENABLE_TODO_TOOLS": "1"}),
):
if not isinstance(message, AssistantMessage):
continue
for block in message.content:
if not isinstance(block, ToolUseBlock):
continue
if == "TaskCreate":
print(f"+ {block.input['subject']}")
elif == "TaskUpdate" and block.input.get("status"):
# ストリーム上のキー名は修復前の生の形(id / task_id の場合がある)
task_id = (
block.input.get("taskId")
or block.input.get("id")
or block.input.get("task_id")
)
print(f" {task_id} -> {block.input['status']}")
```
```typescript
// TypeScript - タスクの作成と更新をリアルタイム表示
import { query } from "
@anthropic-ai/claude-agent-sdk";
for await (const message of query({
prompt: "Optimize my React app performance",
// 既定で Task ツールが提供されないモデルでも有効化する
options: { env: { ...process.env, CLAUDE_CODE_ENABLE_TODO_TOOLS: "1" } },
})) {
if (message.type !== "assistant") continue;
for (const block of message.message.content) {
if (block.type !== "tool_use") continue;
if ( === "TaskCreate") {
console.log(`+ ${block.input.subject}`);
} else if ( === "TaskUpdate") {
// ストリーム上のキー名は修復前の生の形(id / task_id の場合がある)
const taskId = block.input.taskId ?? ?? block.input.task_id;
if (taskId && block.input.status) console.log(` ${taskId} -> ${block.input.status}`);
}
}
}
```
🏗 本番システムへの組み込み方
・タスクの進捗をUIのプログレスバーやチェックリストに反映して、ユーザーに作業状況を可視化します
・`TaskCreate` の結果から `taskId` を取得し、マップで管理することで完全なタスク一覧を構築できます
・`TaskList` のツール結果を監視してスナップショットを取得し、ダッシュボードに表示します
・3ステップ以上の複雑なタスクで自動的にタスクが作成されるため、長時間実行の監視に活用できます
💡 ユースケース
📋 大規模リファクタリングの進捗をリアルタイムでチームに共有する
🔄 CI/CDパイプラインでエージェントの各ステップの完了状況を追跡する
📊 マルチステップのコード分析で、どの分析が完了したかをダッシュボードに表示する
⚠️ 注意点
・`TaskCreate` の入力には `taskId` は含まれません。対応する `tool_result` ブロックから `{ task: { id, subject } }` として取得する必要があります
・既定でツールが提供されないモデルでは、`allowed_tools` にツール名を挙げる、`tools` オプションに列挙する、`env` で `CLAUDE_CODE_ENABLE_TODO_TOOLS=1` を設定する、のいずれかでオプトインが必要です(オプトインしないと該当の `tool_use` ブロックはストリームに現れません)。逆に `CLAUDE_CODE_ENABLE_TASKS=0` を設定すると、4つの Task ツールの代わりに旧 `TodoWrite` が提供されます
・`status` を `"deleted"` に設定するとタスクを削除できます
✨ 複数ステップの作業を「何をやっているか分からない」状態で待つのはストレスフルです。タスクトラッキングを活用して、エージェントの作業をガラス張りにしましょう!
#
ClaudeAgentSDK# #
AIAgent#