Skip to main content
Deep Agents build on LangGraph’s event streaming model and add a first-class subagents projection. Use it when you want application-facing streams for the coordinator agent, delegated subagents, nested messages, tool calls, and final state.
Check out the streaming cookbook for runnable examples and links to detailed reference documentation.
For information about lower-level Pregel stream modes, refer to the Deep Agents streaming docs.

Stream subagents

Deep Agents add a subagent projection on top of LangGraph streaming. Use run.subagents when you want one stream handle per delegated task call. The projection discovers subagent tasks first, then opens message, tool-call, and value streams when you access them on a subagent handle.

Subagent stream fields

Each subagent stream exposes the same kinds of projections as the parent run, such as messages, tool calls, nested subagents, and final output. For the general parent-run streaming model, see LangChain Event Streaming. Python uses snake_case projection names such as tool_calls. Each subagent stream can expose .messages, .tool_calls, .values, .subagents, and .output.

Track subagent lifecycle

Use run.subagents when you only need to show which subagents started and finished. You do not need to subscribe to message or value streams unless you access those projections on an individual subagent.

Stream messages and tools

Deep Agents can emit messages and tool calls from the coordinator agent and from delegated subagents. Use run.messages or run.tool_calls for coordinator streams, then access the same projections on each subagent.

Consume concurrently

Coordinator and subagent output often interleave. Consume projections concurrently when you need live UI updates. Use run.interleave(...) when you want one sync loop over multiple projections: