Principle:Microsoft Autogen Handoff Termination
| Knowledge Sources | |
|---|---|
| Domains | Multi-Agent Systems, Termination Conditions, Human-in-the-Loop, Workflow Control |
| Last Updated | 2026-02-11 00:00 GMT |
Overview
Handoff termination is a stopping condition that halts a multi-agent conversation when a specific agent is designated as the handoff target, enabling controlled exit points and human-in-the-loop workflows.
Description
Multi-agent swarm systems need well-defined stopping conditions. While some termination conditions are based on message counts or content patterns, handoff termination addresses a distinct need: stopping execution when control is transferred to an entity outside the swarm, most commonly a human user.
In a swarm, agents continuously hand off tasks to each other. This creates a potential infinite loop if no stopping criterion is defined. Handoff termination solves this by monitoring the message stream for a HandoffMessage whose target matches a preconfigured name. When detected, it emits a StopMessage that signals the orchestrator to halt the conversation.
The most common use case is the human-in-the-loop pattern:
- An agent is configured with a handoff to a pseudo-agent named "user" (or any designated name).
- A handoff termination condition monitors for transfers to "user".
- When the agent determines it needs human input, it invokes the "user" handoff.
- The termination condition fires, pausing the swarm.
- The human provides input, and the swarm is resumed with that input as a new task.
This principle extends beyond human interaction. Any external system, approval gate, or asynchronous process can be modeled as a termination-triggering handoff target.
Usage
Use handoff termination when:
- You need to pause a swarm to collect human input before continuing.
- A workflow requires an approval gate where an external system must intervene.
- You want to create breakpoints in a multi-agent conversation at specific transfer points.
- You need to combine handoff-based stopping with other termination conditions (e.g., max messages) using logical operators.
Theoretical Basis
Handoff termination implements the sentinel pattern in stream processing. The message stream is continuously scanned for a sentinel value (a HandoffMessage with a specific target), and when found, the stream is terminated.
Handoff Termination Algorithm:
State: terminated = False
On receiving message batch M = [m_1, m_2, ..., m_n]:
IF terminated:
RAISE TerminatedException
FOR each message m_i in M:
IF m_i is HandoffMessage AND m_i.target == configured_target:
terminated = True
RETURN StopMessage(
content="Handoff to {target} from {m_i.source} detected.",
source="HandoffTermination"
)
RETURN None (no termination triggered)
Reset:
terminated = False
Key properties of this design:
- Single-shot: Once triggered, the condition remains in the terminated state until explicitly reset. Attempting to evaluate after termination raises an exception.
- Composable: Can be combined with other termination conditions using logical OR (
|) operators, allowing expressions likeHandoffTermination("user") | MaxMessageTermination(10). - Resettable: The
reset()method allows the condition to be reused across multiple runs of the same swarm, which is essential for the resume-after-human-input pattern.