Skip to main content
Skip to content

스트리밍 세션 이벤트

Copilot 에이전트 수행하는 모든 작업(생각, 코드 작성, 실행 도구)은 구독할 수 있는 session 이벤트로 내보내집니다. 이 가이드는 각 이벤트 유형에 대한 필드 수준 참조이므로 SDK 원본을 읽지 않고도 예상되는 데이터를 정확하게 알 수 있습니다.

Overview

세션에서 설정되면 streaming: true SDK는 지속형 이벤트(전체 메시지, 도구 결과)와 함께 임시 이벤트(델타, 진행률 업데이트)를 실시간으로 내보냅니다. 모든 이벤트는 공통 엔벨로프를 공유하며, 이벤트 data 형식에 따라 달라지는 type 페이로드를 전달합니다.

다이어그램: 설명된 프로세스를 보여 주는 시퀀스 다이어그램

ConceptDescription
임시 이벤트일시적인; 실시간으로 스트리밍되지만 세션 로그에 유지 되지 않습니다 . 세션 다시 시작에서 재생되지 않습니다.
지속형 이벤트디스크의 세션 이벤트 로그에 저장됩니다. 세션을 다시 열 때 재생됩니다.
델타 이벤트임시 스트리밍 청크(텍스트 또는 추론)입니다. 델타를 누적하여 전체 콘텐츠를 빌드합니다.
parentId 체인각 이벤트는 parentId 이전 이벤트를 가리키며 걸을 수 있는 연결된 목록을 형성합니다.

이벤트 봉투

형식에 관계없이 모든 세션 이벤트에는 다음 필드가 포함됩니다.

FieldTypeDescription
id
string (UUID v4)고유 이벤트 식별자
timestamp
string (ISO 8601)이벤트를 만든 경우
parentIdstring | null체인에 있는 이전 이벤트의 ID입니다. null 첫 번째 이벤트에 대한
agentIdstring?하위 에이전트에서 시작된 이벤트에 대한 하위 에이전트 인스턴스 ID; 루트/주 에이전트 및 세션 수준 이벤트에 대한 없음
ephemeralboolean?
true 일시적 이벤트의 경우 없음; 지속형 이벤트의 경우 false
typestring이벤트 유형 판별자(아래 표 참조)
dataobject이벤트별 페이로드

이벤트 구독

코드 언어 navigation

TypeScript
// 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) 이러한 SDK는 별도의 이벤트별 데이터 형식(예AssistantMessageDeltaData: )을 사용하므로 각 형식에 관련 필드만 존재합니다.

(.NET) .NET SDK는 이벤트당 강력한 형식의 별도의 데이터 클래스(예: AssistantMessageDeltaData)를 사용하므로 각 형식에 관련 필드만 존재합니다.

(TypeScript) TypeScript SDK는 태그된 유니온을 사용합니다. event.type을 기준으로 매칭하면 data 페이로드가 자동으로 올바른 형태로 좁혀집니다.

세션이 시작되기 전에 구독

세션은 만들기 또는 다시 시작 호출이 반환되기 전에 이벤트를 내보낼 수 있습니다. 에이전트가 이미 작업 중일 수 있으며—특히 continuePendingWork로 재개하는 경우에는 더욱 그렇고—getMessages와 같은 일시적 이벤트는 세션 로그에 절대 기록되지 않으므로, session.idle는 나중에 이를 복구할 수 없습니다. 세션 핸들이 생성된 후에 설치된 구독은 그 시작 시점의 구간을 놓칩니다.

팁

(Rust)Client::prepare_session 프로토콜 Client::prepare_resume_session 활동이 발생하기 전에 세션의 이벤트 채널을 소유하는 값을 반환 PreparedSession 합니다. 먼저 구독한 다음 start()을(를) 호출합니다.

use github_copilot_sdk::{Client, SessionConfig};

async fn create_without_missing_startup_events(
    client: &Client,
) -> Result<(), github_copilot_sdk::Error> {
    let prepared = client.prepare_session(
        SessionConfig::default().with_event_buffer_capacity(2048),
    )?;

    // Installed before any wire activity: nothing is dropped for lack of a receiver.
    let mut events = prepared.subscribe();
    tokio::spawn(async move {
        while let Ok(event) = events.recv().await {
            println!("{}", event.event_type);
        }
    });

    let session = prepared.start().await?;
    let _ = session;
    Ok(())
}

prepare_* 는 동기적이며 불활성입니다. 버퍼 용량의 유효성을 검사하고 로컬 채널을 할당하며 다른 작업은 수행하지 않습니다. 세션은 등록되지 않으며 start()이 처음 폴링되기 전까지는 CLI에 아무것도 도달하지 않습니다. 시작되지 않은 준비된 세션을 폐기해도 어떤 상태도 남기지 않고 해당 구독을 종료합니다. start() future를 폐기하면 진행 중인 시작 작업이 취소되고 세션 등록이 해제되므로, 동일한 세션 ID로 다시 시도해도 성공합니다. 정리 작업은 중단된 시작 작업이 소유했던 바로 그 등록 항목에만 한정되므로, 동일한 세션 ID를 이미 이어받은 재시도를 제거할 수 없습니다.

초기 버퍼링은 미리 대비할 가치가 있습니다.

  • 이벤트 버퍼는 유한하며, event_buffer_capacity가 이를 재정의하지 않는 한 512개 이벤트로 제한됩니다. 용량 0 이 고정되지 않고 잘못된 구성 오류로 거부됩니다.
  • 느린 구독자에게는 건너뛴 이벤트 수를 보고하는 Lagged 오류가 표시됩니다. 세션의 이벤트 루프에는 역압을 적용하지 않습니다.
  • 시작 시 대규모 버스트를 데이터 손실 없이 확인해야 하는 소비자는 해당 버스트를 감당할 수 있는 용량을 구성하거나 start()와 동시에 구독의 데이터를 소진해야 합니다.

참고

서버가 세션 ID를 할당하는 클라우드 세션의 경우 SDK는 만들기 응답이 도착하고 ID가 알려지게 될 때까지 알림을 라우팅할 수 없습니다. 해당 지점 이전에 내보낸 이벤트는 세션으로 라우팅할 수 없습니다. 보장은 더 좁습니다. 라우트된 이벤트는 설치된 수신기 부족으로 인해 삭제되지 않습니다. 첫 번째 바이트부터 라우팅과 응답 전 전체 적용 범위를 확보하려면 session_id를 구성에 고정하세요.

부모 에이전트 응답만 렌더링

하위 에이전트 이벤트는 상위 세션 스트림을 공유하며, 엔벌로프 수준의 agentId를 포함합니다. 루트/메인 에이전트 이벤트와 세션 수준 이벤트에는 agentId가 포함되지 않으므로, 메인 채팅 렌더러는 agentId가 설정된 assistant 이벤트를 무시하고 대신 해당 이벤트를 트레이스 또는 진행률 UI로 라우팅할 수 있습니다.

코드 언어 navigation

TypeScript
import type { CopilotSession } from "@github/copilot-sdk";

export function subscribeParentResponse(session: CopilotSession): void {
    session.on("assistant.message_delta", (event) => {
        if (!event.agentId) {
            process.stdout.write(event.data.deltaContent);
        }
    });
}

도우미 이벤트

이러한 이벤트는 턴 시작부터 스트리밍 청크를 거쳐 최종 메시지까지 에이전트의 응답 수명 주기를 추적합니다.

assistant.turn_start

에이전트가 턴 처리를 시작할 때 내보내집니다.

데이터 필드TypeRequiredDescription
turnIdstring✅턴 식별자(일반적으로 문자열화된 턴 번호)
interactionIdstring
원격 분석 상관 관계에 대한 CAPI 상호 작용 ID

assistant.intent

임시. 에이전트가 현재 수행하는 작업에 대한 간단한 설명이며 작동하면서 업데이트됩니다.

데이터 필드TypeRequiredDescription
intentstring✅사람이 읽을 수 있는 의도(예: "코드베이스 탐색")

assistant.reasoning

모델에서 확장된 사고 블록을 완성합니다. 추론이 완료된 후 내보냅니다.

데이터 필드TypeRequiredDescription
reasoningIdstring✅이 추론 블록의 고유 식별자
contentstring✅확장된 사고 전체 텍스트

assistant.reasoning_delta

임시. 실시간으로 스트리밍되는 모델의 확장된 사고의 증분 조각.

데이터 필드TypeRequiredDescription
reasoningIdstring✅해당 이벤트와 일치 assistant.reasoning
deltaContentstring✅추론 콘텐츠에 추가할 텍스트 청크

assistant.message

이 LLM 호출에 대한 도우미의 전체 응답입니다. 도구 호출 요청을 포함할 수 있습니다.

데이터 필드TypeRequiredDescription
messageIdstring✅이 메시지의 고유 식별자
contentstring✅도우미의 텍스트 응답
toolRequestsToolRequest[]
도우미가 수행하려는 도구 호출(아래 참조)
reasoningOpaquestring
암호화된 확장 사고(인류 모델); 세션 바인딩
reasoningTextstring
확장된 사고에서 읽을 수 있는 추론 텍스트
encryptedContentstring
암호화된 추론 콘텐츠(OpenAI 모델); 세션 바인딩
phasestring
생성 단계(예: "thinking" 대 "response")
outputTokensnumber
API 응답의 실제 출력 토큰 수
interactionIdstring
원격 분석에 대한 CAPI 상호 작용 ID
parentToolCallIdstring
Deprecated. 하위 에이전트 귀속에 엔벌로프 수준 agentId 사용

** ToolRequest 필드:**

FieldTypeRequiredDescription
toolCallIdstring✅이 도구 호출의 고유 ID
namestring✅도구 이름(예: , "bash", "edit"``"grep")
argumentsobject
구문 분석된 도구의 인수
type"function" | "custom"
호출 유형; 없는 경우 기본값은 "function" 입니다.

assistant.message_delta

임시. 실시간으로 스트리밍되는 도우미 텍스트 응답의 증분 조각.

데이터 필드TypeRequiredDescription
messageIdstring✅해당 이벤트와 일치 assistant.message
deltaContentstring✅메시지에 추가할 텍스트 청크
parentToolCallIdstring
Deprecated. 하위 에이전트 귀속에 엔벌로프 수준 agentId 사용

assistant.turn_end

에이전트가 턴을 완료할 때 내보내집니다(모든 도구 실행이 완료되고 최종 응답이 전달됨).

데이터 필드TypeRequiredDescription
turnIdstring✅해당 이벤트와 일치 assistant.turn_start

assistant.usage

임시. 개별 API 호출에 대한 토큰 사용량 및 비용 정보입니다.

데이터 필드TypeRequiredDescription
modelstring✅모델 식별자(예: "gpt-5.4")
inputTokensnumber
사용된 입력 토큰
outputTokensnumber
생성된 출력 토큰
reasoningTokensnumber
추론/사고 과정에 사용되는 출력 토큰 (outputTokens의 일부)
cacheReadTokensnumber
프롬프트 캐시에서 읽은 토큰
cacheWriteTokensnumber
프롬프트 캐시에 기록된 토큰
cacheExpiresAtstring
이 모델 호출의 프롬프트 캐시가 만료되는 시점의 ISO 8601 타임스탬프
contentFilterTriggeredboolean
콘텐츠 필터링에 의해 응답이 차단되었는지 또는 잘렸는지 여부(finish_reason === 'content_filter')
finishReasonstring
모델 완료 이유(예: "stop", "length", "tool_calls", "content_filter")
costnumber
비용 청구를 위한 모델 승수 비용
durationnumber
API 호출 기간(밀리초)
timeToFirstTokenMsnumber
요청 디스패치에서 받은 첫 번째 토큰까지의 시간(스트리밍 대기 시간)
interTokenLatencyMsnumber
연속 토큰 간의 평균 대기 시간(스트리밍 처리량)
reasoningEffortstring
이 호출에 사용되는 추론 작업 수준(예: "low", , "medium"``"high")
initiatorstring
이 호출을 발생시킨 항목(예: "sub-agent"); 사용자가 시작한 경우에는 없음
apiCallIdstring
공급자의 완료 ID(예: chatcmpl-abc123)
serviceRequestIdstring
CAPI 로그 상관 관계에 대한 Copilot 서비스 요청 ID(x-copilot-service-request-id)
apiEndpoint"/chat/completions" | "/v1/messages" | "/responses" | "ws:/responses"
모델 호출에 사용되는 API 엔드포인트; 는 관찰 가능성 및 비용 특성에 유용합니다.
ws:/responses 는 응답 API의 websocket 변형입니다.
providerCallIdstring
GitHub 요청 추적 ID(x-github-request-id)
parentToolCallIdstring
Deprecated. 하위 에이전트 귀속에 엔벌로프 수준 agentId 사용
quotaSnapshotsRecord<string, QuotaSnapshot>
할당량별 리소스 사용량( 할당량 식별자 키 지정)
copilotUsageCopilotUsage
API의 항목별 토큰 비용 분석

assistant.streaming_delta

임시. 낮은 수준의 네트워크 진행률 표시기 - 스트리밍 API 응답에서 받은 총 바이트 수입니다.

데이터 필드TypeRequiredDescription
totalResponseSizeBytesnumber✅지금까지 받은 누적 바이트

도구 실행 이벤트

이러한 이벤트는 실행부터 완료까지 도구 호출을 요청하는 모델에서 각 도구 호출의 전체 수명 주기를 추적합니다.

tool.execution_start

도구 실행을 시작할 때 내보냅니다.

데이터 필드TypeRequiredDescription
toolCallIdstring✅이 도구 호출에 대한 고유 식별자
toolNamestring✅도구의 이름(예: "bash", , "edit"``"grep")
argumentsobject
구문 분석된 인수가 도구에 전달됨
mcpServerNamestring
MCP 서버에서 도구를 제공하는 경우 MCP 서버 이름
mcpToolNamestring
MCP 서버의 원래 도구 이름
parentToolCallIdstring
Deprecated. 하위 에이전트 귀속에 엔벌로프 수준 agentId 사용

tool.execution_partial_result

임시. 실행 중인 도구의 점진적 출력(예: 스트리밍되는 bash 출력).

데이터 필드TypeRequiredDescription
toolCallIdstring✅해당 항목과 일치 tool.execution_start
partialOutputstring✅증분 출력 청크

tool.execution_progress

임시. 실행 중인 도구에서 사람이 읽을 수 있는 진행 상태(예: MCP 서버 진행률 알림).

데이터 필드TypeRequiredDescription
toolCallIdstring✅해당 항목과 일치 tool.execution_start
progressMessagestring✅진행 상태 메시지

tool.execution_complete

도구 실행이 성공적으로 또는 오류와 함께 완료될 때 내보냅니다.

데이터 필드TypeRequiredDescription
toolCallIdstring✅해당 항목과 일치 tool.execution_start
successboolean✅실행 성공 여부
modelstring
이 도구 호출을 생성한 모델
interactionIdstring
CAPI 상호 작용 ID
isUserRequestedboolean
true 사용자가 이 도구 호출을 명시적으로 요청한 경우
resultResult
성공 시 프레젠테이션(아래 참조)
error{ message, code? }
실패 시 표시됨
toolTelemetryobject
도구별 텔레메트리(예: CodeQL 검사 수)
parentToolCallIdstring
Deprecated. 하위 에이전트 귀속에 엔벌로프 수준 agentId 사용

** Result 필드:**

FieldTypeRequiredDescription
contentstring✅LLM으로 전송된 간결한 결과(토큰 효율성을 위해 잘려질 수 있음)
detailedContentstring
전체 표시 결과, diffs와 같은 전체 콘텐츠 유지
contentsContentBlock[]
구조적 콘텐츠 블록(텍스트, 터미널, 이미지, 오디오, 리소스)

tool.user_requested

사용자가 도구 호출을 명시적으로 요청할 때 내보내집니다(모델이 호출하도록 선택하는 대신).

데이터 필드TypeRequiredDescription
toolCallIdstring✅이 도구 호출에 대한 고유 식별자
toolNamestring✅사용자가 호출하려는 도구의 이름
argumentsobject
호출에 대한 인수

세션 수명 주기 이벤트

session.idle

임시. 에이전트가 모든 처리를 완료했으며 다음 메시지를 준비했습니다. 이는 턴이 완전히 완료되었다는 신호입니다.

데이터 필드TypeRequiredDescription
abortedboolean
중단 신호를 통해 이전 턴이 취소된 경우 True입니다.

session.error

세션 처리 중에 오류가 발생했습니다.

데이터 필드TypeRequiredDescription
errorTypestring✅오류 범주(예: , "authentication", "quota"``"rate_limit")
messagestring✅사람이 읽을 수 있는 오류 메시지
stackstring
오류 스택 추적
statusCodenumber
업스트림 요청의 HTTP 상태 코드
providerCallIdstring
서버 쪽 로그 상관 관계에 대한 GitHub 요청 추적 ID

session.compaction_start

컨텍스트 창 압축이 시작되었습니다. 데이터 페이로드가 비어 있습니다({}).

session.compaction_complete

컨텍스트 창 압축이 완료되었습니다.

데이터 필드TypeRequiredDescription
successboolean✅압축 성공 여부
errorstring
압축에 실패한 경우 오류 메시지
preCompactionTokensnumber
압축 전 토큰
postCompactionTokensnumber
압축 후 토큰
preCompactionMessagesLengthnumber
압축 전 메시지 수
messagesRemovednumber
제거된 메시지
tokensRemovednumber
제거된 토큰
summaryContentstring
압축된 기록의 LLM 생성 요약
checkpointNumbernumber
복구를 위해 만든 검사점 스냅샷 번호
checkpointPathstring
검사점이 저장된 파일 경로
compactionTokensUsed{ input, output, cachedInput }
압축 LLM 호출에 대한 토큰 사용량
requestIdstring
컴팩션 호출에 대한 GitHub 요청 추적 ID

session.title_changed

임시. 세션의 자동 생성된 타이틀이 업데이트되었습니다.

데이터 필드TypeRequiredDescription
titlestring✅새 세션 제목

session.context_changed

세션의 작업 디렉터리 또는 리포지토리 컨텍스트가 변경되었습니다.

데이터 필드TypeRequiredDescription
cwdstring✅현재 작업 디렉터리
gitRootstring
Git 리포지토리 루트
repositorystring
형식의 "owner/name" 리포지토리
branchstring
현재 Git 브랜치

session.usage_info

임시. 컨텍스트 창 사용률 스냅샷

데이터 필드TypeRequiredDescription
tokenLimitnumber✅모델의 컨텍스트 창에 대한 최대 토큰
currentTokensnumber✅컨텍스트 창의 현재 토큰
messagesLengthnumber✅대화의 현재 메시지 수

session.session_limits_changed

현재 회계 기간의 세션 제한이 변경되었습니다. 값은 null``sessionLimits 제한이 활성화되지 않음을 의미합니다.

데이터 필드TypeRequiredDescription
sessionLimitsSessionLimitsConfig | null✅현재 세션 제한 또는 제한이 활성화되어 있지 않은 경우 null
sessionLimits.maxAiCreditsnumber
세션의 현재 회계 기간 동안 허용되는 최대 AI 크레딧

session.usage_checkpoint

세션이 다시 시작될 때 회계를 다시 구성하는 데 사용되는 지속성 집계 사용 검사점입니다.

데이터 필드TypeRequiredDescription
totalNanoAiunumber✅체크포인트 시점의 세션 전반에 걸쳐 누적된 나노-AI 단위 비용
totalPremiumRequestsnumber
검사점 시간에 사용된 총 프리미엄 API 요청 수

session.task_complete

에이전트가 할당된 작업을 완료했습니다.

데이터 필드TypeRequiredDescription
summarystring
완료된 작업의 요약

session.shutdown

세션이 종료되었습니다.

데이터 필드TypeRequiredDescription
shutdownType"routine" | "error"✅정상적인 종료 또는 충돌
errorReasonstring
shutdownType이 "error"일 때 오류 설명
totalPremiumRequestsnumber✅사용된 총 프리미엄 API 요청
totalApiDurationMsnumber✅누적 API 호출 시간(밀리초)
sessionStartTimenumber✅세션이 시작된 때의 Unix 타임스탬프(ms)
codeChanges{ linesAdded, linesRemoved, filesModified }✅집계 코드 변경 메트릭
modelMetricsRecord<string, ModelMetric>✅모델별 사용량 분석
currentModelstring
종료 시 선택한 모델

권한 및 사용자 입력 이벤트

이러한 이벤트는 에이전트가 계속하기 전에 사용자의 승인 또는 입력이 필요할 때 내보내집니다.

permission.requested

에이전트는 작업을 수행할 수 있는 권한이 필요합니다(명령 실행, 파일 쓰기 등).

데이터 필드TypeRequiredDescription
requestIdstring✅이를 통해 응답하세요. session.respondToPermission()
permissionRequestPermissionRequest✅요청되는 권한의 세부 정보

permissionRequest는 kind에 대한 구별된 합집합입니다.

kind핵심 필드Description
"shell"
fullCommandText, intention, , commands[], possiblePaths[]셸 명령 실행
"write"
fileName, diff, , intention, newFileContents?파일 쓰기/수정
"read"
path, intention파일 또는 디렉터리 읽기
"mcp"
serverName, toolName, toolTitle, args?``readOnlyMCP 도구 호출
"url"
url, intentionURL 가져오기
"memory"
subject, fact, citations메모리 저장
"custom-tool"
toolName, toolDescription, args?사용자 지정 도구 호출

또한 모든 kind 변형에는 요청을 트리거한 도구 호출에 대한 선택적 toolCallId 연결도 포함됩니다.

permission.completed

권한 요청이 해결되었습니다.

데이터 필드TypeRequiredDescription
requestIdstring✅해당 항목과 일치 permission.requested
result.kindstring✅다음 중 하나: "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

임시. 에이전트가 사용자에게 질문을 하고 있습니다.

데이터 필드TypeRequiredDescription
requestIdstring✅이를 통해 응답하세요. session.respondToUserInput()
questionstring✅사용자에게 제시할 질문
choicesstring[]
사용자에 대해 미리 정의된 선택
allowFreeformboolean
자유 형식 텍스트 입력 허용 여부

user_input.completed

임시. 사용자 입력 요청이 확인되었습니다.

데이터 필드TypeRequiredDescription
requestIdstring✅해당 항목과 일치 user_input.requested

elicitation.requested

임시. 에이전트에는 사용자의 구조적 양식 입력이 필요합니다(MCP 유도 프로토콜).

데이터 필드TypeRequiredDescription
requestIdstring✅이를 통해 응답하세요. session.respondToElicitation()
messagestring✅필요한 정보에 대한 설명
mode"form"
유도 모드(현재는 "form"만 가능)
requestedSchema{ type: "object", properties, required? }✅양식 필드를 설명하는 JSON 스키마

elicitation.completed

임시. 유도 요청이 해결되었습니다.

데이터 필드TypeRequiredDescription
requestIdstring✅해당 항목과 일치 elicitation.requested

하위 에이전트 및 기술 이벤트

subagent.started

사용자 지정 에이전트가 하위 에이전트로 호출되었습니다.

데이터 필드TypeRequiredDescription
toolCallIdstring✅이 하위 에이전트를 생성한 부모 도구 호출
agentNamestring✅하위 에이전트의 내부 이름
agentDisplayNamestring✅사람이 읽을 수 있는 표시 이름
agentDescriptionstring✅하위 에이전트가 수행하는 작업 설명
modelstring
하위 에이전트가 실행될 모델(시작 시 알려진 경우)

subagent.completed

하위 에이전트가 성공적으로 완료되었습니다.

데이터 필드TypeRequiredDescription
toolCallIdstring✅해당 항목과 일치 subagent.started
agentNamestring✅내부 이름
agentDisplayNamestring✅표시 이름
modelstring
하위 에이전트에서 사용하는 모델
durationMsnumber
벽시계 실행 기간(밀리초)
totalTokensnumber
사용된 총 입력 및 출력 토큰
totalToolCallsnumber
총 도구 호출 수

subagent.failed

하위 에이전트에 오류가 발생했습니다.

데이터 필드TypeRequiredDescription
toolCallIdstring✅해당 항목과 일치 subagent.started
agentNamestring✅내부 이름
agentDisplayNamestring✅표시 이름
errorstring✅오류 메시지
modelstring
하위 에이전트에 대해 선택된 모델(알려진 경우)
durationMsnumber
벽시계 실행 기간(밀리초)
totalTokensnumber
실패하기 전에 사용된 총 입력 및 출력 토큰
totalToolCallsnumber
실패하기 전에 수행한 총 도구 호출

subagent.selected

현재 요청을 처리하기 위해 사용자 지정 에이전트를 선택(유추)했습니다.

데이터 필드TypeRequiredDescription
agentNamestring✅선택한 에이전트의 내부 이름
agentDisplayNamestring✅표시 이름
toolsstring[] | null✅이 에이전트에서 사용할 수 있는 도구 이름; null 모든 도구에 대해

subagent.deselected

사용자 지정 에이전트가 선택 취소되어 기본 에이전트로 돌아갑니다. 데이터 페이로드가 비어 있습니다({}).

skill.invoked

현재 대화에 대한 기술이 활성화되었습니다.

데이터 필드TypeRequiredDescription
namestring✅기술 이름
pathstring✅SKILL.md 정의에 대한 파일 경로
contentstring✅기술 콘텐츠 전체가 대화에 삽입됨
allowedToolsstring[]
이 기술이 활성 상태일 때 자동으로 승인된 도구
pluginNamestring
스킬이 기원한 플러그인
pluginVersionstring
플러그 인 버전

기타 이벤트

abort

현재 턴이 중단되었습니다.

데이터 필드TypeRequiredDescription
reasonstring✅턴이 중단된 이유(예: "user initiated")

user.message

사용자가 메시지를 보냈습니다. 세션 타임라인을 위해 기록됩니다.

데이터 필드TypeRequiredDescription
contentstring✅사용자의 메시지 텍스트
transformedContentstring
전처리 후 변환된 버전
attachmentsAttachment[]
파일, 디렉터리, 선택 영역, Blob 또는 GitHub 참조 첨부 파일
sourcestring
메시지 원본 식별자
agentModestring
에이전트 모드: "interactive", "plan", "autopilot"또는 "shell"
interactionIdstring
CAPI 상호 작용 ID

system.message

시스템 또는 개발자 프롬프트가 대화에 삽입되었습니다.

데이터 필드TypeRequiredDescription
contentstring✅프롬프트 텍스트
role"system" | "developer"✅메시지 역할
namestring
원본 식별자
metadata{ promptVersion?, variables? }
프롬프트 템플릿 메타데이터

external_tool.requested

에이전트는 외부 도구(SDK 소비자가 제공하는 도구)를 호출하려고 합니다.

데이터 필드TypeRequiredDescription
requestIdstring✅이를 통해 응답하세요. session.respondToExternalTool()
sessionIdstring✅이 요청이 속한 세션
toolCallIdstring✅이 호출에 대한 도구 호출 ID
toolNamestring✅외부 도구의 이름
argumentsobject
도구의 인수

external_tool.completed

외부 도구 요청이 확인되었습니다.

데이터 필드TypeRequiredDescription
requestIdstring✅해당 항목과 일치 external_tool.requested

exit_plan_mode.requested

임시. 에이전트가 계획을 만들고 계획 모드를 종료하려고 합니다.

데이터 필드TypeRequiredDescription
requestIdstring✅이를 통해 응답하세요. session.respondToExitPlanMode()
summarystring✅계획 요약
planContentstring✅전체 계획 파일 콘텐츠
actionsstring[]✅사용 가능한 사용자 작업(예: 승인, 편집, 거부)
recommendedActionstring✅권장 작업

exit_plan_mode.completed

임시. 종료 계획 모드 요청이 해결되었습니다.

데이터 필드TypeRequiredDescription
requestIdstring✅해당 항목과 일치 exit_plan_mode.requested

command.queued

임시. 슬래시 명령이 실행을 위해 큐에 대기되었습니다.

데이터 필드TypeRequiredDescription
requestIdstring✅이를 통해 응답하세요. session.respondToQueuedCommand()
commandstring✅슬래시 명령 텍스트(예: /help, /clear)

command.completed

임시. 큐에 대기된 명령이 해결되었습니다.

데이터 필드TypeRequiredDescription
requestIdstring✅해당 항목과 일치 command.queued

session_limits_exhausted.requested

임시. 현재 세션 예산이 소진되었으며 계속하기 전에 런타임에 사용자 결정이 필요합니다.

데이터 필드TypeRequiredDescription
requestIdstring✅보류 중인 고갈 제한 요청에 응답할 때 이 ID 사용
maxAiCreditsnumber✅현재 회계 창에 대해 구성된 최대 AI 크레딧
usedAiCreditsnumber✅현재 집계 기간에 이미 소진된 AI 크레딧

session_limits_exhausted.completed

임시. 대기 중인 한도 초과 요청이 해결되었습니다.

데이터 필드TypeRequiredDescription
requestIdstring✅해당 이벤트와 일치 session_limits_exhausted.requested
response.action"add" | "set" | "unset" | "cancel"✅고갈된 제한 요청에 대해 선택한 작업
response.additionalAiCreditsnumber
response.action이(가) "add"일 때 현재 최대치에 추가할 AI 크레딧
response.maxAiCreditsnumber
response.action이(가) "set"일 때의 새로운 절대 최대 AI 크레딧

빠른 참조: 에이전시적 단계 흐름

일반적인 에이전트 동작은 다음 순서로 이벤트를 발생시킵니다.

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
│   ├── permission.completed  → Approval result
│   ├── 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)

모든 이벤트 유형 한눈에 보기

이 표에는 키 data 페이로드 필드가 나열됩니다. 일반적인 봉투 필드는 위에 설명되어 있습니다.

이벤트 유형임시카테고리키 데이터 필드
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
assistant.turn_end
도우미turnId
assistant.usage✅도우미
model, apiEndpoint?, inputTokens?, outputTokens?, cost?``duration?
tool.user_requested
Tool
toolCallId, toolName, arguments?
tool.execution_start
Tool
toolCallId, toolName, , arguments?, mcpServerName?
tool.execution_partial_result✅Tool
toolCallId, partialOutput
tool.execution_progress✅Tool
toolCallId, progressMessage
tool.execution_complete
Tool
toolCallId, success, , result?, error?
session.idle✅Sessionaborted?
session.error
Session
errorType, message, statusCode?
session.compaction_start
Session
(비어 있음)
session.compaction_complete
Session
success, preCompactionTokens?, summaryContent?
session.title_changed✅Sessiontitle
session.context_changed
Session
cwd, gitRoot?, , repository?, branch?
session.usage_info✅Session
tokenLimit, currentTokens, messagesLength
session.session_limits_changed
SessionsessionLimits
session.usage_checkpoint
Session
totalNanoAiu, totalPremiumRequests?
session.task_complete
Sessionsummary?
session.shutdown
Session
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, model?
subagent.completed
하위 에이전트
toolCallId, agentName, agentDisplayName, model?, durationMs?, totalTokens?``totalToolCalls?
subagent.failed
하위 에이전트
toolCallId, agentName, error, model?, durationMs?, totalTokens?``totalToolCalls?
subagent.selected
하위 에이전트
agentName, agentDisplayName, tools
subagent.deselected
하위 에이전트
(비어 있음)
skill.invoked
기술
name, path, , content, allowedTools?
abort
제어reason
user.message
사용자
content, attachments?, agentMode?
system.message
System
content, role
external_tool.requested
외부 도구
requestId, toolName, arguments?
external_tool.completed
외부 도구requestId
command.queued✅Command
requestId, command
command.completed✅CommandrequestId
session_limits_exhausted.requested✅Session
requestId, maxAiCredits, usedAiCredits
session_limits_exhausted.completed✅Session
requestId, response.action
exit_plan_mode.requested✅계획 모드
requestId, summary, , planContent, actions
exit_plan_mode.completed✅계획 모드requestId