メモ
Copilot SDK は現在 テクニカル プレビューです。 機能と可用性は変更される場合があります。
Copilot エージェントが実行するすべてのアクション (思考、コードの記述、ツールの実行) は、サブスクライブできる**セッション イベント**として生成されます。 この記事は、各イベントの種類に対するフィールド レベルの参照であるため、予想されるデータを正確に把握できます。
セッションでstreaming: trueが設定されると、SDK は、一時的なイベント (デルタ、進行状況の更新) をリアルタイムで、永続的なイベント (完全なメッセージ、ツールの結果) と共に出力します。 すべてのイベントは共通のエンベロープを共有し、その形状がイベント dataに依存するtypeペイロードを運びます。 完全なイベント フローのシーケンス図については、 github/copilot-sdk リポジトリを参照してください。
| 概念 | 説明 |
|---|
**エフェメラル イベント** | 過渡;はリアルタイムでストリーミングされますが、セッション ログには保持 **されません** 。 セッションの再開時に再生されません。 |
|
永続化されたイベント | ディスク上のセッション イベント ログに保存されます。 セッションの再開時に再生されます。 |
|
Delta イベント | 一時的なストリーミングデータチャンク(テキストまたは推論) 差分を蓄積して完全なコンテンツを構築します。 |
|
**
parentId チェーン** | 各イベントの parentId は前のイベントを指し示し、ウォーク可能なリンクリストを形成します。 |
イベント エンベロープ
種類に関係なく、すべてのセッション イベントには次のフィールドが含まれます。
| フィールド | タイプ | 説明 |
|---|---|---|
id |
`string` (UUID v4) | 一意のイベント識別子 |
| timestamp |
string (ISO 8601) | イベントが作成されたとき |
| parentId | string \| null | チェーン内の前のイベントの ID。最初のイベントのnull |
| ephemeral | boolean? | 一時的なイベントの場合true。永続化されたイベントの場合は不在またはfalse |
| type | string | イベント型識別子 (以下の表を参照) |
| data | object | イベント固有のペイロード |
イベントに登録する
// All events
session.on((event) => {
console.log(event.type, event.data);
});
// Specific event type — data is narrowed automatically
session.on("assistant.message_delta", (event) => {
process.stdout.write(event.data.deltaContent);
});
Python、Go、.NET の例については、 github/copilot-sdk リポジトリを参照してください。
ヒント
**Python/Go:** これらの SDK では、1 つの `Data` クラス/構造体が使用され、使用可能なすべてのフィールドが省略可能または null 許容として使用されます。 次の表に示すフィールドのみがイベントの種類ごとに設定されます。残りは `None` / `nil`されます。
**。ネット:** .NET SDK では、イベントごとに個別の厳密に型指定されたデータ クラス (たとえば、 `AssistantMessageDeltaData`) が使用されるため、各型に関連するフィールドのみが存在します。
**Typescript:** TypeScript SDK では判別共用体が使用されます。 `event.type`で一致すると、 `data` ペイロードは自動的に正しい図形に絞り込まれます。
アシスタント イベント
これらのイベントは、ターン スタートからストリーミング チャンク、最後のメッセージまで、エージェントの応答ライフサイクルを追跡します。
assistant.turn_start
エージェントがターンの処理を開始したときに出力されます。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
turnId | string | ✅ | ターン識別子 (通常は、文字列化されたターン番号) |
interactionId | string | ||
| テレメトリの相関関係の相互作用識別子 |
assistant.intent
儚い。 エージェントが現在行っていることの簡単な説明。動作に応じて更新されます。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
intent | string | ✅ | 人間が判読できる意図 ("コードベースの探索" など) |
assistant.reasoning
モデルから拡張思考ブロックを完成させます。 推論が完了した後に出力されます。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
reasoningId | string | ✅ | この理論ブロックの一意識別子 |
content | string | ✅ | 完全な拡張思考テキスト |
assistant.reasoning_delta
儚い。 モデルの拡張思考がリアルタイムで段階的に配信されます。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
reasoningId | string | ✅ | 対応する assistant.reasoning イベントと一致します |
deltaContent | string | ✅ | 推論コンテンツに追加するテキストの一部 |
assistant.message
この LLM 呼び出しに対するアシスタントの完全な応答。 ツール呼び出し要求を含めることができます。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
messageId | string | ✅ | このメッセージのユニーク識別子 |
content | string | ✅ | アシスタントのテキスト応答 |
toolRequests | ToolRequest[] | ||
| アシスタントが行いたいと思うツール呼び出し (下記参照) | |||
reasoningOpaque | string | ||
| 暗号化された拡張思考(アントロピックモデル)、セッションにバインドされた | |||
reasoningText | string | ||
| 拡張思考から読み取り可能な推論テキスト | |||
encryptedContent | string | ||
| 暗号化された推論コンテンツ (OpenAI モデル);session-bound | |||
phase | string | ||
生成フェーズ (たとえば、 "thinking" と "response") | |||
outputTokens | number | ||
| API 応答からの実際の出力トークン数 | |||
interactionId | string | ||
| テレメトリの相互作用識別子 | |||
parentToolCallId | string | ||
| このメッセージがサブエージェントから送信されたときに設定する |
**
`ToolRequest` フィールド:**
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
toolCallId | string | ✅ | このツール呼び出しの一意の ID |
name | string | ✅ | ツール名 ( "bash"、 "edit"、 "grep"など) |
arguments | object | ||
| ツールの解析された引数 | |||
type | "function" | "custom" | ||
呼び出しの種類。存在しない場合は"function"が既定値となります。 |
assistant.message_delta
儚い。 アシスタントのテキスト応答の逐次的に送信される部分。リアルタイムでストリーミング。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
messageId | string | ✅ | 対応する assistant.message イベントと一致します |
deltaContent | string | ✅ | メッセージに追加するテキスト チャンク |
parentToolCallId | string | ||
| サブエージェントからの発信時に設定する |
assistant.turn_end
エージェントがターンを完了したときに生成されます (すべてのツールの実行が完了し、最終的な応答が配信されます)。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
turnId | string | ✅ | 対応する assistant.turn_start イベントと一致します |
assistant.usage
儚い。 個々の API 呼び出しのトークンの使用状況とコストに関する情報。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
model | string | ✅ | モデル識別子 (たとえば、 "gpt-4.1") |
inputTokens | number | ||
| 使用された入力トークン | |||
outputTokens | number | ||
| 生成された出力トークン | |||
cacheReadTokens | number | ||
| プロンプト キャッシュから読み取られたトークン | |||
cacheWriteTokens | number | ||
| プロンプト キャッシュに書き込まれたトークン | |||
cost | number | ||
| 請求のためのモデル乗算コスト | |||
duration | number | ||
| API 呼び出し時間 (ミリ秒単位) | |||
initiator | string | ||
この呼び出しをトリガーした内容 (たとえば、 "sub-agent")、ユーザーが開始した場合は存在しません | |||
apiCallId | string | ||
プロバイダーからの完了 ID (たとえば、 chatcmpl-abc123) | |||
providerCallId | string |
GitHub 要求トレース ID (`x-github-request-id`) |
| parentToolCallId | string |
| サブエージェントから使用を開始するタイミングを設定する |
| quotaSnapshots | Record<string, QuotaSnapshot> |
| クォータ識別子でキー付けされたクォータごとのリソース使用量 |
| copilotUsage | CopilotUsage |
| API からの明細化されたトークン コストの内訳 |
assistant.streaming_delta
儚い。 低レベルのネットワーク進行状況インジケーター - ストリーミング API 応答から受信した合計バイト数。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
totalResponseSizeBytes | number | ✅ | これまでに受信した累積バイト数 |
ツールの実行イベント
これらのイベントは、ツール呼び出しを要求するモデルから実行から完了までの、各ツール呼び出しの完全なライフサイクルを追跡します。
tool.execution_start
ツールの実行が開始されたときに出力されます。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
toolCallId | string | ✅ | この呼び出しツールの一意の識別子 |
toolName | string | ✅ | ツールの名前 ( "bash"、 "edit"、 "grep"など) |
arguments | object | ||
| ツールに渡される解析された引数 | |||
mcpServerName | string | ||
| MCP サーバー名 (ツールが MCP サーバーによって提供される場合) | |||
mcpToolName | string | ||
| MCP サーバー上の元のツール名 | |||
parentToolCallId | string | ||
| サブエージェントによって呼び出されたときに設定する |
tool.execution_partial_result
儚い。 実行中のツールからの増分出力 (たとえば、bash 出力のストリーミング)。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
toolCallId | string | ✅ | 対応するtool.execution_startに一致します |
partialOutput | string | ✅ | 増分出力チャンク |
tool.execution_progress
儚い。 実行中のツール (MCP サーバーの進行状況通知など) から人間が判読できる進行状況の状態。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
toolCallId | string | ✅ | 対応するtool.execution_startに一致します |
progressMessage | string | ✅ | 進捗状況メッセージ |
tool.execution_complete
ツールの実行が正常に終了したとき、またはエラーが発生したときに生成されます。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
toolCallId | string | ✅ | 対応するtool.execution_startに一致します |
success | boolean | ✅ | 実行が成功したかどうか |
model | string | ||
| このツール呼び出しを生成したモデル | |||
interactionId | string | ||
| 相互作用識別子 | |||
isUserRequested | boolean |
`true` ユーザーがこのツール呼び出しを明示的に要求したとき |
| result | Result |
| 成功した場合の発表 (下記参照) |
| error | { message, code? } |
| 障害発生時に存在する |
| toolTelemetry | object |
| ツール固有のテレメトリ |
| parentToolCallId | string |
| サブエージェントによって呼び出されたときに設定する |
**
`Result` フィールド:**
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
content | string | ✅ | LLM に送信される簡潔な結果 (トークン効率のために切り捨てられる可能性があります) |
detailedContent | string | ||
| 差分などの完全なコンテンツを保持する、表示の完全な結果 | |||
contents | ContentBlock[] | ||
| 構造化コンテンツ ブロック (テキスト、ターミナル、イメージ、オーディオ、リソース) |
tool.user_requested
ユーザーが明示的にツールの呼び出しを要求したときに生成されます (呼び出しを選択したモデルではなく)。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
toolCallId | string | ✅ | ツールの呼び出しに関する一意の識別子 |
toolName | string | ✅ | ユーザーが呼び出すツールの名前 |
arguments | object | ||
| 呼び出しの引数 |
セッション ライフサイクル イベント
session.idle
儚い。 エージェントはすべての処理を完了し、次のメッセージの準備が整いました。 これはターンが完全に完了したことを示すシグナルです。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
backgroundTasks | BackgroundTasks | ||
| エージェントがアイドル状態になると、バックグラウンドのエージェントやシェルが引き続き動作します。 |
session.error
セッション処理中にエラーが発生しました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
errorType | string | ✅ | エラー カテゴリ ( "authentication"、 "quota"、 "rate_limit"など) |
message | string | ✅ | 人間が読みやすいエラーメッセージ |
stack | string | ||
| エラースタックトレース | |||
statusCode | number | ||
| アップストリーム要求からの HTTP 状態コード | |||
providerCallId | string |
GitHub サーバー側ログ連携のリクエストトレース ID |
session.compaction_start
コンテキスト ウィンドウの圧縮が開始されました。 データ ペイロードが空 ({})。
session.compaction_complete
コンテキスト ウィンドウの圧縮が完了しました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
success | boolean | ✅ | 圧縮に成功したかどうか |
error | string | ||
| 圧縮に失敗した場合のエラー メッセージ | |||
preCompactionTokens | number | ||
| 圧縮前のトークン | |||
postCompactionTokens | number | ||
| 圧縮後のトークン | |||
preCompactionMessagesLength | number | ||
| 圧縮前のメッセージ数 | |||
messagesRemoved | number | ||
| 削除されたメッセージ | |||
tokensRemoved | number | ||
| トークンが削除されました | |||
summaryContent | string | ||
| LLM によって生成されたコンパクトな履歴の概要 | |||
checkpointNumber | number | ||
| 復旧用に作成されたチェックポイント スナップショット番号 | |||
checkpointPath | string | ||
| チェックポイントが格納されたファイル パス | |||
compactionTokensUsed | { input, output, cachedInput } | ||
| 圧縮 LLM 呼び出しのトークンの使用 | |||
requestId | string |
GitHub 圧縮呼び出しの要求トレース ID |
session.title_changed
一時的な セッションの自動生成されたタイトルが更新されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
title | string | ✅ | 新しいセッション タイトル |
session.context_changed
セッションの作業ディレクトリまたはリポジトリ コンテキストが変更されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
cwd | string | ✅ | 現在の作業ディレクトリ |
gitRoot | string | ||
| Git リポジトリのルート | |||
repository | string |
`"owner/name"`形式のリポジトリ |
| branch | string |
| 現在の Git ブランチ |
session.usage_info
儚い。 コンテキスト ウィンドウ使用率スナップショット。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
tokenLimit | number | ✅ | モデルのコンテキスト ウィンドウの最大トークン数 |
currentTokens | number | ✅ | コンテキスト ウィンドウ内の現在のトークン |
messagesLength | number | ✅ | 会話の現在のメッセージ数 |
session.task_complete
エージェントは、割り当てられたタスクを完了しました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
summary | string | ||
| 完了したタスクの概要 |
session.shutdown
セッションが終了しました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
shutdownType | "routine" | "error" | ✅ | 通常のシャットダウンまたはクラッシュ |
errorReason | string |
`shutdownType` が `"error"` である場合のエラー説明 |
| totalPremiumRequests | number | ✅ | 使用された Premium API 要求の合計数 |
| totalApiDurationMs | number | ✅ | API 呼び出しの累積時間 (ミリ秒単位) |
| sessionStartTime | number | ✅ | セッションの開始時の Unix タイムスタンプ (ミリ秒) |
| codeChanges | { linesAdded, linesRemoved, filesModified } | ✅ | コード変更メトリックの集計 |
| modelMetrics | Record<string, ModelMetric> | ✅ | モデルごとの使用状況の内訳 |
| currentModel | string |
| シャットダウン時に選択されたモデル |
アクセス許可とユーザー入力イベント
これらのイベントは、エージェントが続行する前にユーザーからの承認または入力を必要とする場合に生成されます。
permission.requested
一時的。 エージェントには、アクション (コマンドの実行、ファイルの書き込みなど) を実行するためのアクセス許可が必要です。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | これを使用して、次の方法で応答します。 session.respondToPermission() |
permissionRequest | PermissionRequest | ✅ | 要求されているアクセス許可の詳細 |
`permissionRequest`は、`kind`の判別共用体です。
kind | 主要なフィールド | 説明 |
|---|---|---|
"shell" |
`fullCommandText`、 `intention`、 `commands[]`、 `possiblePaths[]` | シェル コマンドを実行する |
| "write" |
fileName、 diff、 intention、 newFileContents? | ファイルの書き込み/変更 |
| "read" |
path、intention | ファイルまたはディレクトリの読み取り |
| "mcp" |
serverName、toolName、toolTitle、args?、readOnly | MCP ツールを呼び出す |
| "url" |
url、intention | URL を取得する |
| "memory" |
subject、fact、citations | メモリを格納する |
| "custom-tool" |
toolName、toolDescription、args? | カスタム ツールを呼び出す |
すべての kind バリアントには、要求をトリガーしたツール呼び出しにリンクバックするオプションの toolCallId も含まれています。
permission.completed
一時的。 アクセス許可要求が解決されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | 対応するpermission.requestedに一致します |
result.kind | string | ✅ | 次のいずれか: "approved"、 "denied-by-rules"、 "denied-interactively-by-user"、 "denied-no-approval-rule-and-could-not-request-from-user"、 "denied-by-content-exclusion-policy" |
user_input.requested
儚い。 エージェントがユーザーに質問しています。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | これを使用して、次の方法で応答します。 session.respondToUserInput() |
question | string | ✅ | ユーザーに提示する質問 |
choices | string[] | ||
| ユーザーの定義済みの選択肢 | |||
allowFreeform | boolean | ||
| 自由形式のテキスト入力が許可されるかどうか |
user_input.completed
儚い ユーザー入力要求が解決されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | 対応するuser_input.requestedと一致します |
elicitation.requested
一時的 エージェントには、ユーザーからの構造化されたフォーム入力 (MCP 引き出しプロトコル) が必要です。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | これを使用して、次の方法で応答します。 session.respondToElicitation() |
message | string | ✅ | 必要な情報の説明 |
mode | "form" | ||
現在、引き出しモードは"form"のみです。 | |||
requestedSchema | { type: "object", properties, required? } | ✅ | フォーム フィールドを記述する JSON スキーマ |
elicitation.completed
儚い。 引き出し要請が解決されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | 対応する elicitation.requested |
サブエージェントとスキル イベント
subagent.started
カスタム エージェントがサブエージェントとして呼び出されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
toolCallId | string | ✅ | このサブエージェントを生成した親ツール呼び出し |
agentName | string | ✅ | サブエージェントの内部名 |
agentDisplayName | string | ✅ | 人間が判読できる表示名 |
agentDescription | string | ✅ | サブエージェントの機能の説明 |
subagent.completed
サブエージェントが正常に完了しました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
toolCallId | string | ✅ | 対応する subagent.started に一致しています |
agentName | string | ✅ | 内部名 |
agentDisplayName | string | ✅ | 表示名 |
subagent.failed
サブエージェントでエラーが発生しました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
toolCallId | string | ✅ | 対応する subagent.started |
agentName | string | ✅ | 内部名 |
agentDisplayName | string | ✅ | 表示名 |
error | string | ✅ | エラー メッセージ |
subagent.selected
現在の要求を処理するために、カスタム エージェントが選択 (推論) されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
agentName | string | ✅ | 選択したエージェントの内部名 |
agentDisplayName | string | ✅ | 表示名 |
tools | string[] | null | ✅ | このエージェントで使用可能なツール名。すべてのツールにはnull |
subagent.deselected
カスタム エージェントの選択が解除され、既定のエージェントに戻りました。 応答ペイロードは空になります ({})。
skill.invoked
現在の会話に対してスキルがアクティブ化されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
name | string | ✅ | スキル名 |
path | string | ✅ | SKILL.md 定義へのファイル パス |
content | string | ✅ | 会話にすべてのスキルコンテンツが挿入されました。 |
allowedTools | string[] | ||
| このスキルがアクティブな間に自動承認されたツール | |||
pluginName | string | ||
| スキルの元のプラグイン | |||
pluginVersion | string | ||
| プラグインのバージョン |
その他のイベント
abort
現在のターンは中止されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
reason | string | ✅ | ターンが中止された理由 (たとえば、 "user initiated") |
user.message
ユーザーがメッセージを送信しました。 セッション タイムライン用に記録されます。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
content | string | ✅ | ユーザーのメッセージ テキスト |
transformedContent | string | ||
| 前処理後に変換されたバージョン | |||
attachments | Attachment[] | ||
| ファイル、ディレクトリ、選択、BLOB または GitHub の参照添付ファイル | |||
source | string | ||
| メッセージ ソース識別子 | |||
agentMode | string | ||
エージェント モード: "interactive"、 "plan"、 "autopilot"、または "shell" | |||
interactionId | string | ||
| 相互作用識別子 |
system.message
システムまたは開発者のプロンプトが会話に挿入されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
content | string | ✅ | プロンプトの内容 |
role | "system" | "developer" | ✅ | メッセージ 役割 |
name | string | ||
| ソース識別子 | |||
metadata | { promptVersion?, variables? } | ||
| プロンプト テンプレートのメタデータ |
external_tool.requested
儚い。 エージェントは、外部ツール (SDK コンシューマーによって提供されるツール) を呼び出したいと考えています。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | これを使用して、次の方法で応答します。 session.respondToExternalTool() |
sessionId | string | ✅ | この要求が属するセッション |
toolCallId | string | ✅ | この呼び出しのツール呼び出し ID |
toolName | string | ✅ | 外部ツールの名前 |
arguments | object | ||
| ツールの引数 |
external_tool.completed
儚い 外部ツール要求が解決されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | 対応するexternal_tool.requestedと一致します。 |
exit_plan_mode.requested
儚い エージェントによってプランが作成され、プラン モードを終了する必要があります。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | これを使用して、次の方法で応答します。 session.respondToExitPlanMode() |
summary | string | ✅ | プランの概要 |
planContent | string | ✅ | プランファイルの全内容 |
actions | string[] | ✅ | 使用可能なユーザー アクション (承認、編集、拒否など) |
recommendedAction | string | ✅ | 推奨されるアクション |
exit_plan_mode.completed
儚い。 終了プラン モード要求が解決されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | 対応するexit_plan_mode.requestedと一致する |
command.queued
一時的 スラッシュ コマンドがキューに登録され、実行されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | これを使用して、次の方法で応答します。 session.respondToQueuedCommand() |
command | string | ✅ | スラッシュ コマンド テキスト (たとえば、 /help、 /clear) |
command.completed
一時的 キューに登録されたコマンドが解決されました。
| データ フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
requestId | string | ✅ | 対応する command.queued に一致する |
クイックリファレンス: エージェンティックターンフロー
一般的なエージェント ターンでは、次の順序でイベントが出力されます。
assistant.turn_start → Turn begins
├── assistant.intent → What the agent plans to do (ephemeral)
├── assistant.reasoning_delta → Streaming thinking chunks (ephemeral, repeated)
├── assistant.reasoning → Complete thinking block
├── assistant.message_delta → Streaming response chunks (ephemeral, repeated)
├── assistant.message → Complete response (may include toolRequests)
├── assistant.usage → Token usage for this API call (ephemeral)
│
├── [If tools were requested:]
│ ├── permission.requested → Needs user approval (ephemeral)
│ ├── permission.completed → Approval result (ephemeral)
│ ├── tool.execution_start → Tool begins
│ ├── tool.execution_partial_result → Streaming tool output (ephemeral, repeated)
│ ├── tool.execution_progress → Progress updates (ephemeral, repeated)
│ ├── tool.execution_complete → Tool finished
│ │
│ └── [Agent loops: more reasoning → message → tool calls...]
│
assistant.turn_end → Turn complete
session.idle → Ready for next message (ephemeral)
すべてのイベントの種類の概要
| イベントの種類 | エフェメラル | カテゴリ | キー データ フィールド |
|---|---|---|---|
assistant.turn_start | |||
| 助手 |
`turnId`、`interactionId?` |
| assistant.intent | ✅ | 助手 | intent |
| assistant.reasoning |
| 助手 |
reasoningId、content |
| assistant.reasoning_delta | ✅ | 助手 |
reasoningId、deltaContent |
| assistant.streaming_delta | ✅ | 助手 | totalResponseSizeBytes |
| assistant.message |
| 助手 |
messageId、content、toolRequests?、outputTokens?、phase? |
| assistant.message_delta | ✅ | 助手 |
messageId、deltaContent、parentToolCallId? |
| assistant.turn_end |
| 助手 | turnId |
| assistant.usage | ✅ | 助手 |
model、inputTokens?、outputTokens?、cost?、duration? |
| tool.user_requested |
| ツール |
toolCallId、toolName、arguments? |
| tool.execution_start |
| ツール |
toolCallId、 toolName、 arguments?、 mcpServerName? |
| tool.execution_partial_result | ✅ | ツール |
toolCallId、partialOutput |
| tool.execution_progress | ✅ | ツール |
toolCallId、progressMessage |
| tool.execution_complete |
| ツール |
toolCallId、 success、 result?、 error? |
| session.idle | ✅ | セッション | backgroundTasks? |
| session.error |
| セッション |
errorType、message、statusCode? |
| session.compaction_start |
| セッション |
(空) |
| session.compaction_complete |
| セッション |
success、preCompactionTokens?、summaryContent? |
| session.title_changed | ✅ | セッション | title |
| session.context_changed |
| セッション |
cwd、 gitRoot?、 repository?、 branch? |
| session.usage_info | ✅ | セッション |
tokenLimit、currentTokens、messagesLength |
| session.task_complete |
| セッション | summary? |
| session.shutdown |
| セッション |
shutdownType、codeChanges、modelMetrics |
| permission.requested | ✅ | 許可 |
requestId、permissionRequest |
| permission.completed | ✅ | 許可 |
requestId、result.kind |
| user_input.requested | ✅ | ユーザー入力 |
requestId、question、choices? |
| user_input.completed | ✅ | ユーザー入力 | requestId |
| elicitation.requested | ✅ | ユーザー入力 |
requestId、message、requestedSchema |
| elicitation.completed | ✅ | ユーザー入力 | requestId |
| subagent.started |
| サブエージェント |
toolCallId、agentName、agentDisplayName |
| subagent.completed |
| サブエージェント |
toolCallId、agentName、agentDisplayName |
| subagent.failed |
| サブエージェント |
toolCallId、agentName、error |
| subagent.selected |
| 副代理 |
agentName、agentDisplayName、tools |
| subagent.deselected |
| サブエージェント |
(空) |
| skill.invoked |
| Skill |
name、 path、 content、 allowedTools? |
| abort |
| 制御 | reason |
| user.message |
| User |
content、attachments?、agentMode? |
| system.message |
| システム |
content、role |
| external_tool.requested | ✅ | 外部ツール |
requestId、toolName、arguments? |
| external_tool.completed | ✅ | 外部ツール | requestId |
| command.queued | ✅ | 命令 |
requestId、command |
| command.completed | ✅ | 命令 | requestId |
| exit_plan_mode.requested | ✅ | プラン モード |
requestId、 summary、 planContent、 actions |
| exit_plan_mode.completed | ✅ | プラン モード | requestId |