Four primitives — every 2026 multi-agent framework fits this shape
Agent
system_prompt + tools
stateless function
of (prompt, tools, model)
AutoGen: ConversableAgent
CrewAI: role + goal + backstory
LangGraph: node function
Swarm: Agent(instructions, tools)
Handoff
transfer of control
three implementations:
1 function return (Swarm)
2 graph edge (LangGraph)
3 speaker selection (AutoGen)
always: (from, to, optional payload)
Shared state
the ONLY stateful thing
message pool
blackboard
StateGraph reducer
MCP shared context
memory poisoning lives here
Orchestrator
who speaks next
static graph
LLM-selected
handoff-driven
queue-driven
scheduler over the other three
mapping the 2026 frameworks onto the four axes
OpenAI Swarm / Agents SDK
agent = Agent(instructions, tools)
handoff = tool returns Agent · shared state pushed to caller · orchestrator = LLM's handoff call
AutoGen v0.4 / AG2
agent = ConversableAgent
handoff = speaker selection · shared state = message pool · orchestrator = selector fn (LLM or round-robin)
CrewAI
agent = role + goal + backstory
handoff = Process.Sequential / Hierarchical · shared state = Task outputs · orchestrator = manager LLM
LangGraph
agent = node function
handoff = graph edge · shared state = StateGraph reducer · orchestrator = the graph (deterministic)