« Phase 23 README · Warmup · Deep Dive · Principal Deep Dive · Core Contributor · Staff Notes
Phase 23 — Hitchhiker's Guide
The compressed practitioner tour. Read the WARMUP for the mechanisms; this is the stuff you say in the meeting.
30-second mental model
There are three names and one of them is the answer. AutoGen = conversational multi-agent teams (a shared chat + who-speaks-next + when-to-stop). Semantic Kernel = enterprise plumbing (typed functions, session state, middleware, telemetry, .NET). The Microsoft Agent Framework (MSAF) = the late-2025 successor to both, which keeps AutoGen's agents, folds in SK's enterprise features, and adds a new graph Workflow engine (typed edges, checkpointing, human-in-the-loop). AutoGen and SK are the lineage; MSAF is what you build on now. The framework's whole organizing idea is open-ended agents vs explicit workflows — and its advice is "if you can write a function, do that."
The one-liners to have ready
| Say this | Because |
|---|---|
| "MSAF is the successor to both AutoGen and Semantic Kernel." | It's the single most current-sounding sentence in a Microsoft-stack round. |
| "AutoGen coordinates by conversation; MSAF Workflows coordinate by graph." | Names the open-ended vs explicit split precisely. |
| "A team = shared chat + speaker selection + termination condition." | The entire AutoGen control loop in one line. |
| "Edges are type-safe: the type is a contract that errors, the condition is the router." | Shows you know the crux of MSAF Workflows. |
| "HITL and checkpointing are the same mechanism — a pause at a super-step boundary." | The insight that separates a builder from a user. |
| "The magentic manager drives from a progress ledger." | Names Magentic-One and the reliability lever. |
| "if you can write a function, do that." | MSAF's own least-agentic principle (Phase 00). |
The vocabulary to drop
- AutoGen:
AssistantAgent(LLM agent) ·UserProxyAgent(human/executor) ·TextMessage·RoundRobinGroupChat(cycle in order) ·SelectorGroupChat(a model/policy picks next) ·MaxMessageTermination/TextMentionTermination(compose with|/&) ·TaskResult. - v0.4 runtime:
autogen-core(async actor/event runtime) ·autogen-agentchat(team API) ·autogen-ext(model clients/tools). Rewrite = monolithic loop → actor model. - MSAF:
AIAgent/ChatAgent· Workflow (WorkflowBuilder, executors, typed edges) ·RequestInfoExecutor(HITL) · checkpointing · middleware · threads/sessions · MCP client. - Patterns: sequential · concurrent (fan-out/fan-in + aggregator) · handoff (dynamic transfer) · group-chat · magentic (manager + progress ledger, from Magentic-One).
The framework compare-and-contrast (memorize the axes)
| Explicit graph? | Checkpoint + HITL | Type-safe edges | Ecosystem | Reach for it when | |
|---|---|---|---|---|---|
| MSAF | yes (Workflows) | yes | yes | .NET · Python · Go / Azure | Microsoft/Azure/.NET shop, SK migrant, need typed+durable+governed orchestration |
| LangGraph | yes | yes | typed state (no edge types) | Python/JS / LangChain | Python-native LangChain shop; richest checkpointer/store ecosystem |
| OpenAI Agents SDK | no (loop + handoffs) | not built-in | no | Python / OpenAI | Light, model-centric loop with handoffs + guardrails |
| CrewAI | no (roles/tasks) | limited | no | Python | Quick role-based multi-agent prototype |
War stories
- The group chat that never stopped. A two-agent "reviewer/writer" team with only a
TextMentionTermination("APPROVE")— the model kept almost approving and never said the word. Ran until the token budget alarm. Fix: always compose aMaxMessageTerminationbackstop with|. Termination is the team-levelmax_steps; the model-driven keyword is a suggestion, not a guarantee. - The stringly-typed handoff that shipped garbage. Agent A emitted a dict; agent B expected a list;
nothing errored, B silently produced nonsense that surfaced three steps later. That is precisely the
bug MSAF's type-safe edges catch at the wiring — a
WorkflowTypeError, not a corrupted run. - The refund nobody approved. A "workflow" that continued past a human-approval step when the
approval service timed out and returned empty. Re-run also re-sent the refund (not idempotent). MSAF's
answer: the HITL node checkpoints and pauses;
resumerequires the response or raises. HITL and durability are one feature; treating them as optional is how money moves without a human. - "Let's use AutoGen and Semantic Kernel together." Said in a 2025 design review; it was the 2024 answer. The room noticed. The current answer is "MSAF, which is the successor to both."
Beginner mistakes
- Talking about AutoGen and SK as the current, separate destinations (they're MSAF's lineage now).
- Shipping a group chat with no
MaxMessageTerminationbackstop. - Using an open-ended team for a task with a knowable structure (that's a Workflow — "write the function").
- Conflating an edge's type (a contract that errors) with its condition (the router).
- Treating checkpointing and human-in-the-loop as two features instead of one mechanism.
- Building a handoff/manager loop with no bound (infinite ping-pong) or an unvalidated target.
- Calling "concurrent" nondeterministic — it means independent, which is why you can run it deterministically.
- Answering "MSAF or LangGraph?" without naming the axis (typed/durable control flow) or the ecosystem (Azure vs Python).