Streaming

session.stream(prompt) yields incremental events as the turn runs, so you can render text as it arrives and react to tool activity in real time. Use it when you want a live UI or a CLI that prints output token-by-token instead of waiting for the full result from send or run.

Each event carries the stable envelope fields version, type, payload, and optional metadata. The common kinds are agent_start, text_delta / reasoning_delta, tool_start / tool_end, agent_end, and error. Verification data is carried by the agent_end payload and convenience fields.

Rust
Node.js
Python
Go

Notes:

  • Rust receives AgentEvent values from a Tokio channel and awaits the returned lifecycle handle. Node.js iterates the EventStream with for await (or calls stream.next() directly). Python's EventStream supports both for and async for. Go drains stream.Events before reading the terminal error from stream.Done. Canceling the Go context also requests cancellation of the active native run.
  • All four SDKs expose the canonical event type. Node.js and Python add convenience projections; Go keeps Payload and Metadata as json.RawMessage and provides DecodePayload. Unknown future event types remain lossless in every SDK.
  • tool_start fires when the model begins emitting a tool call; tool_execution_start fires when the tool actually runs, and tool_end carries its output and exit code.
  • With a confirmation policy enabled, the stream also carries human-in-the-loop signals: confirmation_required, then confirmation_received once an answer arrives. A pending confirmation stays parked until it is answered; no timer settles it. confirmation_timeout is emitted, with action_taken, only when the confirmation channel closes before an answer (for example, on cancel or close).

Runnable streaming examples ship under sdk/node/examples/streaming/. A complete human-in-the-loop confirmation loop ships at sdk/node/examples/streaming/hitl_confirmation_loop.ts, with the matching Python version under sdk/python/examples/ and Go stream coverage in sdk/go/session_test.go.