Streaming events
When you enable streaming: true in SessionConfig, session behavior is delivered as incremental events.
SessionEvent page explains Laravel-specific helpers for the SessionEvent class itself.
This page is a type-and-payload reference for each event.
Overview
Copilot agent behavior (reasoning, messages, tool execution, permission checks, and more) flows through session events.
- Ephemeral event: Real-time only. Not persisted in session logs.
- Persisted event: Stored in session logs and replayed when resuming.
- Delta event: Fragment event (
deltaContent, etc.) that you stitch into full content.
parentId chain: Each event links to its previous event.
Event envelope (common fields)
| Field | Type | Description |
|---|
id | string | Event ID (UUID v4) |
timestamp | string | ISO 8601 timestamp |
parentId | string | null | Previous event ID (null for first event) |
ephemeral | boolean? | true when the event is ephemeral |
type | string | Event type |
data | object | Event-specific payload |
Laravel subscription example
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\SessionEvent;
Copilot::start(function (CopilotSession $session): void {
// All events
$session->on(function (SessionEvent $event): void {
info($event->type(), $event->toArray());
});
// Specific event type
$session->on(SessionEventType::ASSISTANT_MESSAGE_DELTA, function (SessionEvent $event): void {
echo $event->deltaContent();
});
$session->sendAndWait(prompt: 'Explain key Laravel strengths');
}, config: new SessionConfig(streaming: true));
Major event categories
Assistant events
assistant.turn_start
Turn starts.
turnId (required)
interactionId (optional)
assistant.intent (ephemeral)
Current execution intent (for example, Exploring codebase).
assistant.reasoning
Completed reasoning block.
reasoningId (required)
content (required)
assistant.reasoning_delta (ephemeral)
Reasoning text delta.
reasoningId (required)
deltaContent (required)
assistant.message
Completed assistant message.
Common fields:
messageId (required)
content (required)
toolRequests (optional)
reasoningOpaque / reasoningText / encryptedContent (optional)
phase / outputTokens / interactionId (optional)
parentToolCallId (optional)
assistant.message_delta (ephemeral)
Message body delta.
messageId (required)
deltaContent (required)
parentToolCallId (optional)
assistant.turn_end
Turn ends.
assistant.usage (ephemeral)
Per-API-call usage metrics.
Common fields:
model (required)
inputTokens / outputTokens / cost / duration (optional)
apiCallId / providerCallId (optional)
quotaSnapshots / copilotUsage (optional)
assistant.streaming_delta (ephemeral)
Low-level stream progress.
totalResponseSizeBytes (required)
Tool execution starts.
toolCallId (required)
toolName (required)
arguments / mcpServerName / mcpToolName / parentToolCallId (optional)
Partial output while tool runs.
toolCallId (required)
partialOutput (required)
Progress message.
toolCallId (required)
progressMessage (required)
Tool execution ends (success/failure).
toolCallId (required)
success (required)
result (on success)
error (on failure)
toolTelemetry / parentToolCallId (optional)
Tool call explicitly requested by user.
toolCallId (required)
toolName (required)
arguments (optional)
Session lifecycle events
session.start
Session start. For Cloud Sessions, it is safest to send the first prompt after confirming a session.start whose producer is copilot-agent.
session.idle (ephemeral)
Processing finished. Waiting for next input.
backgroundTasks (optional)
session.error
Error during session processing.
errorType (required)
message (required)
stack / statusCode / providerCallId (optional)
session.compaction_start
Context compaction starts (data is an empty object).
session.compaction_complete
Context compaction completes.
Common fields:
success (required)
error (optional)
preCompactionTokens / postCompactionTokens (optional)
summaryContent / checkpointPath (optional)
session.title_changed (ephemeral)
Auto title update.
session.context_changed
Working context changed.
cwd (required)
gitRoot / repository / branch (optional)
session.info
Session information such as a remote URL.
infoType (required)
url (optional, e.g. when infoType is remote)
session.remote_steerable_changed
Indicates that remote steerability from Mission Control has changed.
remoteSteerable (optional)
session.usage_info (ephemeral)
Context window usage status.
tokenLimit (required)
currentTokens (required)
messagesLength (required)
session.task_complete
Task completion notification.
session.shutdown
Session shutdown.
Common fields:
shutdownType (required)
errorReason (optional)
totalPremiumRequests / totalApiDurationMs (required)
codeChanges / modelMetrics (required)
permission.requested (ephemeral)
Permission request.
requestId (required)
permissionRequest (required)
permissionRequest.kind values:
shell
write
read
mcp
url
memory
custom-tool
permission.completed (ephemeral)
Permission resolution result.
requestId (required)
result.kind (required)
Question asked to user.
requestId (required)
question (required)
choices / allowFreeform (optional)
User input completed.
elicitation.requested (ephemeral)
Structured input request (form).
requestId (required)
message (required)
requestedSchema (required)
elicitation.completed (ephemeral)
Structured input completed.
Sub-agent and skill events
subagent.started
toolCallId (required)
agentName / agentDisplayName / agentDescription (required)
subagent.completed
toolCallId (required)
agentName / agentDisplayName (required)
subagent.failed
toolCallId (required)
agentName / agentDisplayName (required)
error (required)
subagent.selected
agentName (required)
agentDisplayName (required)
tools (required, can be null)
subagent.deselected
Returns to default agent (data is an empty object).
skill.invoked
name / path / content (required)
allowedTools / pluginName / pluginVersion (optional)
Other events
abort
user.message
content (required)
transformedContent / attachments / source / agentMode / interactionId (optional)
system.message
content (required)
role (required)
name / metadata (optional)
requestId / sessionId / toolCallId / toolName (required)
arguments (optional)
exit_plan_mode.requested (ephemeral)
requestId / summary / planContent / actions / recommendedAction (required)
exit_plan_mode.completed (ephemeral)
command.queued (ephemeral)
requestId (required)
command (required)
command.completed (ephemeral)
Typical event order
assistant.turn_start
├── assistant.intent (ephemeral)
├── assistant.reasoning_delta (ephemeral, repeated)
├── assistant.reasoning
├── assistant.message_delta (ephemeral, repeated)
├── assistant.message
├── assistant.usage (ephemeral)
├── [permission / tool.* loops if needed]
assistant.turn_end
session.idle (ephemeral)
Quick reference of all events
| Event Type | Ephemeral | Category |
|---|
session.start | | Session |
assistant.turn_start | | Assistant |
assistant.intent | ✅ | Assistant |
assistant.reasoning | | Assistant |
assistant.reasoning_delta | ✅ | Assistant |
assistant.streaming_delta | ✅ | Assistant |
assistant.message | | Assistant |
assistant.message_delta | ✅ | Assistant |
assistant.turn_end | | Assistant |
assistant.usage | ✅ | Assistant |
tool.user_requested | | Tool |
tool.execution_start | | Tool |
tool.execution_partial_result | ✅ | Tool |
tool.execution_progress | ✅ | Tool |
tool.execution_complete | | Tool |
session.idle | ✅ | Session |
session.error | | Session |
session.compaction_start | | Session |
session.compaction_complete | | Session |
session.title_changed | ✅ | Session |
session.context_changed | | Session |
session.info | | Session |
session.remote_steerable_changed | | Session |
session.usage_info | ✅ | Session |
session.task_complete | | Session |
session.shutdown | | Session |
permission.requested | ✅ | Permission |
permission.completed | ✅ | Permission |
user_input.requested | ✅ | User Input |
user_input.completed | ✅ | User Input |
elicitation.requested | ✅ | User Input |
elicitation.completed | ✅ | User Input |
subagent.started | | Sub-Agent |
subagent.completed | | Sub-Agent |
subagent.failed | | Sub-Agent |
subagent.selected | | Sub-Agent |
subagent.deselected | | Sub-Agent |
skill.invoked | | Skill |
abort | | Control |
user.message | | User |
system.message | | System |
external_tool.requested | ✅ | External Tool |
external_tool.completed | ✅ | External Tool |
command.queued | ✅ | Command |
command.completed | ✅ | Command |
exit_plan_mode.requested | ✅ | Plan Mode |
exit_plan_mode.completed | ✅ | Plan Mode |
Last modified on May 31, 2026