原文(日本語に翻訳)
サブエージェントからのAPIリクエストにx-claude-code-agent-id/x-claude-code-parent-agent-idヘッダーが付与されるようになりました。またclaude_code.llm_request OTELスパンにagent_id/parent_agent_id属性が追加されました
原文(英語)
API requests from subagents now carry x-claude-code-agent-id / x-claude-code-parent-agent-id headers, and claude_code.llm_request OTEL spans include agent_id / parent_agent_id attributes
概要
サブエージェント(Agentツールで起動したエージェント)からのAPIリクエストに、エージェントIDと親エージェントIDを示すHTTPヘッダーが付与されるようになりました。また、OpenTelemetry(OTEL)スパンにも対応する属性が追加され、複数のサブエージェントを使うワークフローのトレーシングと可観測性が向上しました。
基本的な使い方
これは自動的に適用される変更で、ユーザーによる設定は不要です。OTELを有効にしている場合、自動的にエージェントIDが記録されます。
付与されるHTTPヘッダー
| ヘッダー | 説明 |
|---|---|
x-claude-code-agent-id | 現在のエージェントの一意なID |
x-claude-code-parent-agent-id | 親エージェントのID(ネストしたエージェントの場合) |
OTELスパンの属性
| 属性 | 説明 |
|---|---|
agent_id | 現在のエージェントID |
parent_agent_id | 親エージェントID |
実践例
OTELでのサブエージェントトレーシング
OTELエクスポーターを設定してサブエージェントの実行を追跡:
bash
# OTELエンドポイントを設定
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
# Claude Codeを実行
claude "並行してフロントエンドとバックエンドのテストを実行して"Agentツールでサブエージェントが起動すると、各サブエージェントのAPIリクエストに固有のIDが付与されます。これにより:
- どのAPIリクエストがどのサブエージェントからのものか追跡可能
- エージェントの階層構造(親→子)をトレース可能
- コスト分析でエージェント別の使用量を把握可能
APIプロキシでの利用
カスタムAPIプロキシを使用している場合、これらのヘッダーを活用してリクエストをルーティング・フィルタリング:
python
# プロキシサーバー側での処理例
def handle_request(request):
agent_id = request.headers.get('x-claude-code-agent-id')
parent_agent_id = request.headers.get('x-claude-code-parent-agent-id')
if agent_id:
# サブエージェントからのリクエストをログ
log_agent_request(agent_id, parent_agent_id)
return forward_to_anthropic(request)注意点
- これらのヘッダーはAnthropicのAPIサーバーで処理されますが、ユーザー定義のAPIプロキシでも参照できます
parent_agent_idはネストしたサブエージェント(サブエージェントが別のサブエージェントを起動する場合)で有用です- OTELの設定は
settings.jsonのopenTelemetryセクションで管理します - エージェントIDはセッション固有で、再起動後は変わります