Principle:Microsoft Agent framework Magentic Orchestration Pattern
| Knowledge Sources | |
|---|---|
| Domains | Multi_Agent_Orchestration, Deep_Research, Agentic_AI |
| Last Updated | 2026-02-11 17:00 GMT |
Overview
Multi-agent orchestration pattern that coordinates specialized agents through iterative fact-gathering, planning, delegation, and progress evaluation with stall detection and recovery.
Description
The Magentic Orchestration Pattern (inspired by Microsoft Research's Magentic-One) organizes agents into two tiers:
- Coordination tier: Meta-agents that analyze, plan, manage, and summarize:
- Researcher: Gathers and correlates facts relevant to the task
- Planner: Devises a step-by-step plan given facts and team capabilities
- Manager: Maintains a "progress ledger" that evaluates whether the request is satisfied, progress is being made, or the system is stuck in a loop
- Summarizer: Generates the final user-facing response
- Capability tier: Specialized agents with domain tools (web search, code execution, weather, etc.)
The pattern operates in a loop: the Manager evaluates progress after each agent action and decides whether to delegate to the next agent, restart planning, or terminate. Stall detection prevents infinite loops by tracking consecutive non-progress steps and triggering re-analysis of facts and plans.
Usage
Apply this pattern when building AI systems that must address complex, multi-step research queries requiring coordination of heterogeneous capabilities with built-in failure recovery. It is the most advanced multi-agent pattern in the Agent Framework workflow samples.
Theoretical Basis
Pseudo-code Logic:
# Abstract Magentic orchestration algorithm (NOT real implementation)
facts = researcher.analyze(user_query)
plan = planner.create_plan(facts, team_capabilities)
stall_count = 0
restart_count = 0
while True:
ledger = manager.evaluate_progress(task_context)
if ledger.is_request_satisfied:
return summarizer.generate_response(conversation)
if ledger.is_stalling or not ledger.is_progress_being_made:
stall_count += 1
if stall_count > STALL_THRESHOLD:
restart_count += 1
if restart_count > RESTART_THRESHOLD:
return "Unable to complete after multiple restarts"
facts = researcher.re_analyze(facts)
plan = planner.re_plan(facts, team_capabilities)
stall_count = 0
continue
next_agent = select_agent(ledger.next_speaker, available_agents)
result = next_agent.execute(ledger.instruction)
stall_count = 0 # Reset on successful delegation
Key properties:
- Progress ledger: Structured evaluation with is_request_satisfied, is_in_loop, is_progress_being_made, next_speaker, and instruction fields
- Two-level recovery: Stall detection triggers re-planning; repeated stalls trigger full restart with fresh fact analysis
- Bounded termination: Restart count ensures the system eventually terminates even for unsolvable queries