Request streams report activity before delivering one terminal result.
Public stream events
run.startedmarks the accepted run.run.progress,run.log, andrun.consoledescribe operational activity and should not be presented as agent-authored progress.run.model.reasoning.started,.delta,.completed,.failed, and.unavailablecarry labeled provider-returned summaries or visible thinking by attempt. They never carry encrypted continuation state or unavailable raw reasoning.run.agent_progresscarries a concise update only after the agent decision commits. It is safe to persist with ordinary conversation history.run.tool.started,run.tool.completed, andrun.tool.faileddescribe tool activity.task.updatedreports delegated task lifecycle.run.completed,run.failed, andrun.cancelledare terminal events.runner.errorreports a runner-level protocol or service problem.
Treat events as protocol data: validate the envelope before updating application state and correlate every event to its command, session, and run.
Finish from the terminal event
Operational progress, provider reasoning, and agent progress may be useful to display, but they do not own the final answer. Provider deltas are live-only by default and should be discarded after the active run. Read assistantText, structured output, and any operator state from the terminal result.