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)