Files
Ren Finlayson 539852f81c
Some checks are pending
CodeQL / Analyze (csharp) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
dotnet-build-and-test / paths-filter (push) Waiting to run
dotnet-build-and-test / dotnet-build-and-test (Debug, windows-latest, net9.0) (push) Blocked by required conditions
dotnet-build-and-test / dotnet-build-and-test (Release, integration, true, ubuntu-latest, net10.0) (push) Blocked by required conditions
dotnet-build-and-test / dotnet-build-and-test (Release, integration, true, windows-latest, net472) (push) Blocked by required conditions
dotnet-build-and-test / dotnet-build-and-test (Release, ubuntu-latest, net8.0) (push) Blocked by required conditions
dotnet-build-and-test / dotnet-build-and-test-check (push) Blocked by required conditions
test
2026-01-24 03:05:12 +11:00
..
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00
2026-01-24 03:05:12 +11:00

Workflows Getting Started Samples

Installation

Microsoft Agent Framework Workflows support ships with the core agent-framework or agent-framework-core package, so no extra installation step is required.

To install with visualization support:

pip install agent-framework[viz] --pre

To export visualization images you also need to install GraphViz.

Samples Overview

Foundational Concepts - Start Here

Begin with the _start-here folder in order. These three samples introduce the core ideas of executors, edges, agents in workflows, and streaming.

Sample File Concepts
Executors and Edges _start-here/step1_executors_and_edges.py Minimal workflow with basic executors and edges
Agents in a Workflow _start-here/step2_agents_in_a_workflow.py Introduces adding Agents as nodes; calling agents inside a workflow
Streaming (Basics) _start-here/step3_streaming.py Extends workflows with event streaming

Once comfortable with these, explore the rest of the samples below.


Samples Overview (by directory)

agents

Sample File Concepts
Azure Chat Agents (Streaming) agents/azure_chat_agents_streaming.py Add Azure Chat agents as edges and handle streaming events
Azure AI Chat Agents (Streaming) agents/azure_ai_agents_streaming.py Add Azure AI agents as edges and handle streaming events
Azure Chat Agents (Function Bridge) agents/azure_chat_agents_function_bridge.py Chain two agents with a function executor that injects external context
Azure Chat Agents (Tools + HITL) agents/azure_chat_agents_tool_calls_with_feedback.py Tool-enabled writer/editor pipeline with human feedback gating
Custom Agent Executors agents/custom_agent_executors.py Create executors to handle agent run methods
Sequential Workflow as Agent agents/sequential_workflow_as_agent.py Build a sequential workflow orchestrating agents, then expose it as a reusable agent
Concurrent Workflow as Agent agents/concurrent_workflow_as_agent.py Build a concurrent fan-out/fan-in workflow, then expose it as a reusable agent
Magentic Workflow as Agent agents/magentic_workflow_as_agent.py Configure Magentic orchestration with callbacks, then expose the workflow as an agent
Workflow as Agent (Reflection Pattern) agents/workflow_as_agent_reflection_pattern.py Wrap a workflow so it can behave like an agent (reflection pattern)
Workflow as Agent + HITL agents/workflow_as_agent_human_in_the_loop.py Extend workflow-as-agent with human-in-the-loop capability
Workflow as Agent with Thread agents/workflow_as_agent_with_thread.py Use AgentThread to maintain conversation history across workflow-as-agent invocations
Workflow as Agent kwargs agents/workflow_as_agent_kwargs.py Pass custom context (data, user tokens) via kwargs through workflow.as_agent() to @ai_function tools
Handoff Workflow as Agent agents/handoff_workflow_as_agent.py Use a HandoffBuilder workflow as an agent with HITL via FunctionCallContent/FunctionResultContent

checkpoint

Sample File Concepts
Checkpoint & Resume checkpoint/checkpoint_with_resume.py Create checkpoints, inspect them, and resume execution
Checkpoint & HITL Resume checkpoint/checkpoint_with_human_in_the_loop.py Combine checkpointing with human approvals and resume pending HITL requests
Checkpointed Sub-Workflow checkpoint/sub_workflow_checkpoint.py Save and resume a sub-workflow that pauses for human approval
Handoff + Tool Approval Resume checkpoint/handoff_with_tool_approval_checkpoint_resume.py Handoff workflow that captures tool-call approvals in checkpoints and resumes with human decisions
Workflow as Agent Checkpoint checkpoint/workflow_as_agent_checkpoint.py Enable checkpointing when using workflow.as_agent() with checkpoint_storage parameter

composition

Sample File Concepts
Sub-Workflow (Basics) composition/sub_workflow_basics.py Wrap a workflow as an executor and orchestrate sub-workflows
Sub-Workflow: Request Interception composition/sub_workflow_request_interception.py Intercept and forward sub-workflow requests using @handler for SubWorkflowRequestMessage
Sub-Workflow: Parallel Requests composition/sub_workflow_parallel_requests.py Multiple specialized interceptors handling different request types from same sub-workflow
Sub-Workflow: kwargs Propagation composition/sub_workflow_kwargs.py Pass custom context (user tokens, config) from parent workflow through to sub-workflow agents

control-flow

Sample File Concepts
Sequential Executors control-flow/sequential_executors.py Sequential workflow with explicit executor setup
Sequential (Streaming) control-flow/sequential_streaming.py Stream events from a simple sequential run
Edge Condition control-flow/edge_condition.py Conditional routing based on agent classification
Switch-Case Edge Group control-flow/switch_case_edge_group.py Switch-case branching using classifier outputs
Multi-Selection Edge Group control-flow/multi_selection_edge_group.py Select one or many targets dynamically (subset fan-out)
Simple Loop control-flow/simple_loop.py Feedback loop where an agent judges ABOVE/BELOW/MATCHED
Workflow Cancellation control-flow/workflow_cancellation.py Cancel a running workflow using asyncio tasks

human-in-the-loop

Sample File Concepts
Human-In-The-Loop (Guessing Game) human-in-the-loop/guessing_game_with_human_input.py Interactive request/response prompts with a human via ctx.request_info()
Agents with Approval Requests in Workflows human-in-the-loop/agents_with_approval_requests.py Agents that create approval requests during workflow execution and wait for human approval to proceed
SequentialBuilder Request Info human-in-the-loop/sequential_request_info.py Request info for agent responses mid-workflow using .with_request_info() on SequentialBuilder
ConcurrentBuilder Request Info human-in-the-loop/concurrent_request_info.py Review concurrent agent outputs before aggregation using .with_request_info() on ConcurrentBuilder
GroupChatBuilder Request Info human-in-the-loop/group_chat_request_info.py Steer group discussions with periodic guidance using .with_request_info() on GroupChatBuilder

tool-approval

Tool approval samples demonstrate using @ai_function(approval_mode="always_require") to gate sensitive tool executions with human approval. These work with the high-level builder APIs.

Sample File Concepts
SequentialBuilder Tool Approval tool-approval/sequential_builder_tool_approval.py Sequential workflow with tool approval gates for sensitive operations
ConcurrentBuilder Tool Approval tool-approval/concurrent_builder_tool_approval.py Concurrent workflow with tool approvals across parallel agents
GroupChatBuilder Tool Approval tool-approval/group_chat_builder_tool_approval.py Group chat workflow with tool approval for multi-agent collaboration

observability

Sample File Concepts
Executor I/O Observation observability/executor_io_observation.py Observe executor input/output data via ExecutorInvokedEvent and ExecutorCompletedEvent without modifying executor code

For additional observability samples in Agent Framework, see the observability getting started samples. The sample demonstrates integrating observability into workflows.

orchestration

Sample File Concepts
Concurrent Orchestration (Default Aggregator) orchestration/concurrent_agents.py Fan-out to multiple agents; fan-in with default aggregator returning combined ChatMessages
Concurrent Orchestration (Custom Aggregator) orchestration/concurrent_custom_aggregator.py Override aggregator via callback; summarize results with an LLM
Concurrent Orchestration (Custom Agent Executors) orchestration/concurrent_custom_agent_executors.py Child executors own ChatAgents; concurrent fan-out/fan-in via ConcurrentBuilder
Concurrent Orchestration (Participant Factory) orchestration/concurrent_participant_factory.py Use participant factories for state isolation between workflow instances
Group Chat with Agent Manager orchestration/group_chat_agent_manager.py Agent-based manager using with_agent_orchestrator() to select next speaker
Group Chat Philosophical Debate orchestration/group_chat_philosophical_debate.py Agent manager moderates long-form, multi-round debate across diverse participants
Group Chat with Simple Function Selector orchestration/group_chat_simple_selector.py Group chat with a simple function selector for next speaker
Handoff (Simple) orchestration/handoff_simple.py Single-tier routing: triage agent routes to specialists, control returns to user after each specialist response
Handoff (Autonomous) orchestration/handoff_autonomous.py Autonomous mode: specialists iterate independently until invoking a handoff tool using .with_autonomous_mode()
Handoff (Participant Factory) orchestration/handoff_participant_factory.py Use participant factories for state isolation between workflow instances
Magentic Workflow (Multi-Agent) orchestration/magentic.py Orchestrate multiple agents with Magentic manager and streaming
Magentic + Human Plan Review orchestration/magentic_human_plan_review.py Human reviews/updates the plan before execution
Magentic + Checkpoint Resume orchestration/magentic_checkpoint.py Resume Magentic orchestration from saved checkpoints
Sequential Orchestration (Agents) orchestration/sequential_agents.py Chain agents sequentially with shared conversation context
Sequential Orchestration (Custom Executor) orchestration/sequential_custom_executors.py Mix agents with a summarizer that appends a compact summary
Sequential Orchestration (Participant Factories) orchestration/sequential_participant_factory.py Use participant factories for state isolation between workflow instances

Magentic checkpointing tip: Treat MagenticBuilder.participants keys as stable identifiers. When resuming from a checkpoint, the rebuilt workflow must reuse the same participant names; otherwise the checkpoint cannot be applied and the run will fail fast.

Handoff workflow tip: Handoff workflows maintain the full conversation history including any ChatMessage.additional_properties emitted by your agents. This ensures routing metadata remains intact across all agent transitions. For specialist-to-specialist handoffs, use .add_handoff(source, targets) to configure which agents can route to which others with a fluent, type-safe API.

parallelism

Sample File Concepts
Concurrent (Fan-out/Fan-in) parallelism/fan_out_fan_in_edges.py Dispatch to multiple executors and aggregate results
Aggregate Results of Different Types parallelism/aggregate_results_of_different_types.py Handle results of different types from multiple concurrent executors
Map-Reduce with Visualization parallelism/map_reduce_and_visualization.py Fan-out/fan-in pattern with diagram export

state-management

Sample File Concepts
Shared States state-management/shared_states_with_agents.py Store in shared state once and later reuse across agents
Workflow Kwargs (Custom Context) state-management/workflow_kwargs.py Pass custom context (data, user tokens) via kwargs to @ai_function tools

visualization

Sample File Concepts
Concurrent with Visualization visualization/concurrent_with_visualization.py Fan-out/fan-in workflow with diagram export

declarative

YAML-based declarative workflows allow you to define multi-agent orchestration patterns without writing Python code. See the declarative workflows README for more details on YAML workflow syntax and available actions.

Sample File Concepts
Conditional Workflow declarative/conditional_workflow/ Nested conditional branching based on user input
Customer Support declarative/customer_support/ Multi-agent customer support with routing
Deep Research declarative/deep_research/ Research workflow with planning, searching, and synthesis
Function Tools declarative/function_tools/ Invoking Python functions from declarative workflows
Human-in-Loop declarative/human_in_loop/ Interactive workflows that request user input
Marketing declarative/marketing/ Marketing content generation workflow
Simple Workflow declarative/simple_workflow/ Basic workflow with variable setting, conditionals, and loops
Student Teacher declarative/student_teacher/ Student-teacher interaction pattern

resources

Notes

  • Agent-based samples use provider SDKs (Azure/OpenAI, etc.). Ensure credentials are configured, or adapt agents accordingly.

Sequential orchestration uses a few small adapter nodes for plumbing:

  • "input-conversation" normalizes input to list[ChatMessage]
  • "to-conversation:" converts agent responses into the shared conversation
  • "complete" publishes the final WorkflowOutputEvent These may appear in event streams (ExecutorInvoke/Completed). Theyre analogous to concurrents dispatcher and aggregator and can be ignored if you only care about agent activity.

Environment Variables