of LLMs’ reasoning capabilities with reminiscence, planning, and gear use (creating what we name brokers) has expanded the vary of duties LLMs can carry out.
Nonetheless, a single agent alone has its limitations. When coupled with too many instruments or a very giant context, it usually results in poor selections and subpar responses.
This is the reason multi-agent programs have grown in recognition, as they permit us to deal with use circumstances of accelerating complexity.
Multi-agent programs join quite a few specialised brokers that work collectively, every specializing in a selected activity, whereas the system routes queries to the best knowledgeable.
Consider it as a staff of consultants collaborating, every contributing their very own specialised abilities by way of a “divide-and-conquer” method.
On this article, we are going to clearly discover one of many key ideas in multi-agent programs: how brokers switch management to at least one one other.
Contents
(1) Primer to LangGraph
(2) Definition of Agentic Handoffs
(3) Example Scenario
(4) Handoffs in LangGraph
Right here is the link to the accompanying GitHub repo.
(1) Primer to LangGraph
[Optional Reading]
LangGraph is an open-source orchestration framework for constructing stateful, LLM-based agentic programs that reliably deal with complicated duties.
It permits builders to design workflows as graphs, the place every graph consists of nodes (representing duties or LLM calls) and edges (representing management movement).
LangGraph is my framework of selection for constructing agentic programs due to its key strengths:
- Low-level controllability that gives exact management over transitions, states, and the way every agent executes.
- Clear and intuitive graph-based workflows that make complicated logic simple to know, arrange, and hint.
- Versatile non-chat workflows that help agentic orchestration past conversational brokers (e.g., frameworks like AutoGen)
The picture under reveals what a graph-based workflow designed for retrieval augmented era appears like:

(2) Definition of Agentic Handoffs
First, let’s perceive what a handoff means.
An agentic handoff is the second when an agent instantly and dynamically passes management to a different agent after ending its work.
That is vital as a result of we would like duties to be routed to the agent greatest outfitted to offer a context-aware response.
In technical phrases, a handoff happens when one agent transfers management, duty, or conversational context to a different agent to make sure continuity and relevance within the interplay.
The picture under illustrates a three-agent structure based mostly on the supervisor sample, through which a central agent coordinates the specialised employee brokers (a analysis agent and a document-authoring agent).

On this case, handoffs can happen in each instructions between the supervisor and every employee agent.
Every employee positive aspects its specialization by way of integration with a selected set of instruments and customised prompts.
Suppose the consumer question is “Analysis how social media utilization impacts adolescent psychological well being”.
The supervisor agent, being conscious of the nature of the consumer question and the employee brokers at its disposal, will hand off the duty to the analysis agent to hold out the following flip.
Right here is the movement:
- Supervisor agent analyzes consumer intent and decides that it wants help from the analysis agent
- Supervisor passes management (and state*) to the analysis agent
- The analysis agent performs the duty and decides whether or not to handoff again to the supervisor agent or finish the dialog.
* State is the multi-agent system’s short-term reminiscence, capturing current conversations and key data so every agent can act appropriately based mostly on prior context and knowledge.
(3) Instance State of affairs
Let’s have a look at the instance situation to anchor our walkthrough.
We are going to arrange an actual property assistant able to answering queries associated to properties in Singapore. It’s designed as a three-agent system based mostly on the favored supervisor sample.
On this situation, we now have an actual property supervisor (supervisor) with entry to 2 specialised employee brokers:
- Property profile agent: Handles queries associated to housing property particulars.
- Transaction historical past agent: Handles queries associated to property transactions and market tendencies.
The routing has been simplified to be one-way i.e. as soon as the employee agent completes its activity, the dialog ends.

For the coordination to work, the supervisor agent should concentrate on its function, total workflow, and brokers at its disposal. We do that with a immediate like this:
Discover that the directions for the handoff standards are explicitly outlined within the immediate.
The code for the supervisor node for conditional routing is as follows:
Whereas multi-agent programs can observe completely different design patterns and scale to much more nodes, this straightforward instance permits us to focus on the thought of agent handoffs.
The next screenshot reveals the output of our actual property multi-agent system for a consumer question:

As we are going to deal with agent handoffs, I’ll not be detailing the complete LangGraph setup code (e.g., prompts, nodes, LLM calls). Nonetheless, you will discover the code implementation in this GitHub repo.
(4) Handoffs in LangGraph
There are two mechanisms for agent handoffs in LangGraph:
- Conditional edges
- Command object
(4.1) Conditional Edges (Static Routing-Based mostly Handoff)
A conditional edge is the traditional graph-routing methodology for handing off management between brokers.
In a graph, nodes do the work whereas edges inform what to do subsequent.
Edges are capabilities that resolve the routing logic (i.e., which node to execute subsequent). This routing might be direct fastened transitions or based mostly on particular circumstances (aka conditional edges).
Put merely, the movement in a conditional edge is as follows:
- A node generates an output
- Output is handed to the conditional edge as enter
- The perform within the conditional edge evaluates it and chooses the following node to run

In LangGraph, we outline conditional edges by calling add_conditional_edges on an StateGraph occasion:
graph.add_conditional_edges(supply="start_node", path=routing_function)
supplyargument refers back to the beginning node. It implies that after this node finishes, the conditional routing kicks in.pathargument takes the conditional perform, and its return worth controls which node the graph strikes to subsequent.
Allow us to first discover the routing perform (should_continue) of our actual property instance:
Here’s what the routing perform is doing:
- Learn the supervisor’s newest response and resolve what to do subsequent.
- Test whether or not the supervisor explicitly requested at hand the duty off to both of the 2 employee brokers.
- When the supervisor names a employee agent, the perform returns that agent’s title as a string, triggering a handoff to that agent.
- If the supervisor didn’t request any employee agent, the perform returns
"finish", that means the supervisor has responded and the workflow ends.
With the routing perform arrange, we subsequent outline the conditional edges:
- The
supervisornode serves because the supply entry level of the movement, the place it first receives and analyzes the consumer question. - After the supervisor completes processing, the routing perform
should_continuecomes into play, inspecting the supervisor’s response to find out the handoff choice. - The
path_mapdict interprets the routing perform’s return values into graph targets. That is wanted asshould_continuemight return“finish”, whichpath_mapconverts intoEND, LangGraph’s cease sign.
The above basically reveals how agentic handoffs work: the supervisor outputs particular strings that the conditional perform makes use of to path to the following agent or terminate.
(4.2) Command Object (Dynamic Handoff)
Conditional edges work nicely for easy, predictable flows, however as soon as the logic turns into extra complicated, wiring collectively many conditional edges can turn out to be tedious and unintuitive.
To make multi-agent workflows extra versatile and simpler to design, the Command kind was launched to mix state updates and management movement.
It simplifies issues by letting nodes return a Command object that updates the graph state and specifies the following node to execute.
As a substitute of counting on predefined edges, the node can itself instantly and dynamically decide the following step based mostly by itself logic at runtime.
This allows edgeless graphs, the place routing lives within brokers somewhat than in a litter of conditional guidelines, leading to a cleaner, extra versatile method to orchestrate handoffs.
Here’s a minimal code for utilizing Command in a router node:
Within the above, the router agent node reads the state, decides what ought to run subsequent, and returns a Command that updates the graph state and factors to the following node.
For the reason that node chooses the following step utilizing the goto argument, there isn’t any must outline conditional edges with add_conditional_edges.
Command makes it such that the handoff logic sits within the nodes somewhat than the perimeters. Therefore, we count on the code in our supervisor node to be extra prolonged:
- The supervisor node calls an LLM to return a
SupervisorDecisionstructured output object containing two key issues: which agent at hand off to, and any related context, just like the property title extracted from the consumer’s message. - If no employee agent is required, the supervisor responds instantly. The node returns a
Commandthat updates the messages with the response and ends the graph. - If a handoff is required, the node builds an replace dictionary. It features a routing message from the supervisor and the extracted context (e.g., the property title) within the graph state, in order that the following agent can use it instantly.
- Lastly, the node returns a
Commandthat specifies the following agent utilizinggotoand applies state updates (i.e., replaceproperty_name).
The
Literal["transaction_history_agent", "property_profile_agent"]kind trace permits us to generate the whole Mermaid graph diagram even after we didn’t explicitly outline the perimeters. The precise handoff movement is dealt with by thegotoparameter.

With Command, the nodes instantly resolve which agent runs subsequent and what to go alongside. It eliminates separate routing guidelines and retains the handoff logic clear.
(4.3) When to make use of conditional edges or Command?
Right here is how to decide on conditional edges versus Command for handoffs:
Use conditional edges when:
- You solely must resolve which node runs subsequent based mostly on the present graph state, with out altering it.
Use <robust>Command</robust> when:
- Your node wants to switch its state and decide the following node concurrently.
- That is helpful in multi-agent handoffs the place routing to a different agent normally requires spending some data to that agent.
In my work, I’ve largely switched to utilizing
Commandas an alternative of conditional edges provided that many multi-agent programs require coordinated graph state updates alongside routing selections.
Wrapping It Up
Agent handoffs are the core mechanism that makes a multi-agent system work successfully. On this article, we lined how these handoffs work in observe, with LangGraph serving because the implementation layer to precise them utilizing conditional routing or the Command object.
No matter framework we use, the thought stays the identical: clear, constant handoffs are what allow brokers to work collectively.
Take a look at this GitHub repo for the code implementation.
