# Claude Agent SDKの便利だけど知られていない機能
🌍 サブエージェントの会話を中断して、後から続きを再開したい?resume機能で全履歴を保持したまま再開できます!
Claude Agent SDKでは、サブエージェントのセッションIDとエージェントIDを使って、完全な会話履歴を保持したまま処理を再開できます。
📌 タイトル:サブエージェントの再開(resume)
🔗 URL:
🧩 概要
サブエージェントが完了すると、Agentツールの結果に `agentId:
` が含まれます。この `agentId` とセッションの `session_id` を保存しておけば、`resume` オプションで同じセッションを再開し、`"Resume agent "` というプロンプトでサブエージェントの続きから処理を開始できます。再開されたサブエージェントは、以前のすべてのツール呼び出し、結果、推論を保持しています。なお、組み込みの `Explore` / `Plan` エージェントはワンショット(1回限り)のため再開できません。
🛠 使い方
```python
# Python - サブエージェントの再開
import re
from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition, ToolResultBlock
AGENTS = {
"endpoint-finder": AgentDefinition(
description="APIエンドポイントを探索・カタログ化します",
prompt="APIエンドポイントを見つけて文書化してください",
tools=["Read", "Grep", "Glob"],
)
}
# 1回目: サブエージェントを実行し、IDを取得
agent_id = None
session_id = None
async for message in query(
prompt="endpoint-finderエージェントでAPIエンドポイントを探索してください",
options=ClaudeAgentOptions(
allowed_tools=["Read", "Grep", "Glob", "Agent"],
agents=AGENTS,
),
):
if hasattr(message, "session_id"):
session_id = message.session_id
for block in getattr(message, "content", None) or []:
if isinstance(block, ToolResultBlock):
text = str(block.content)
if match := "agentId:\s*([\w-]+)", text):
agent_id =
# 2回目: 同じセッションで再開し、フォローアップ質問
if agent_id and session_id:
async for message in query(
prompt=f"Resume agent {agent_id} and list the top 3 most complex endpoints",
options=ClaudeAgentOptions(
allowed_tools=["Read", "Grep", "Glob", "Agent"],
agents=AGENTS,
resume=session_id, # 同じセッションを再開
),
):
if hasattr(message, "result"):
print(message.result)
```
🏗 本番システムへの組み込み方
・長時間の分析タスクを分割し、中間結果を確認してからフォローアップを実行するワークフローを構築します
・`session_id` と `agentId` をデータベースに保存して、後から任意のタイミングで再開できるようにします
・カスタムエージェントまたは `general-purpose` エージェントを使用します(Explore/Planは再開不可)
・再開時には同じエージェント定義を `agents` パラメータに渡す必要があります
💡 ユースケース
🔄 大規模コードベースの調査を段階的に行い、各フェーズの結果を確認してから次に進む
💬 サブエージェントの分析結果に対してフォローアップ質問を行う対話型ワークフロー
📊 初回分析後にスコープを絞った詳細分析を追加実行する
⚠️ 注意点
・再開には同じ `session_id` が必要です。新しい `query()` はデフォルトで新規セッションを開始します
・組み込みの `Explore` / `Plan` エージェントはワンショットのため `agentId` を出力せず、再開できません
・サブエージェントのトランスクリプトは `cleanupPeriodDays`(デフォルト30日)で自動クリーンアップされます
・メイン会話のコンパクション(圧縮)はサブエージェントのトランスクリプトに影響しません
✨ resume機能を使えば、サブエージェントとの「対話」が可能になります。1回限りの使い捨てではなく、継続的な分析パートナーとして活用しましょう!
#ClaudeAgentSDK# #AIAgent#