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, Node.js iterates with stream.next(), Python uses a synchronous iterator, and 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.
  • Streamed events can also include human-in-the-loop confirmation signals (confirmation_required, confirmation_received, confirmation_timeout) when a confirmation policy is enabled.

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.