Agent Squad
TL;DR
Agent Squad is an Apache-2.0 framework in Python, TypeScript and Swift that routes each user message to the best-matching specialist agent via a classifier and keeps per-agent conversation history. Now maintained by 2FastLabs (previously awslabs/agent-squad, originally multi-agent-orchestrator), it suits chat and support assistants built from several narrow agents.
Key facts
| Type | Framework |
|---|---|
| Languages / SDKs | Python, TypeScript, Swift |
| License | Apache-2.0 |
| Pricing model | Open source, free |
| Orchestration pattern | Other |
| GitHub stars | 7,778 (as of 2026-09-30) |
| GitHub forks | 740 |
| Last push | 2026-09-23 |
| Latest release | typescript_1.1.5 |
| Repository | 2FastLabs/agent-squad |
| Website | 2fastlabs.github.io |
| Documentation | 2fastlabs.github.io |
| Last verified | 2026-09-30 |
Key features
- A classifier picks one agent per turn from the agents' descriptions and the conversation history; Bedrock is the default, with Anthropic, OpenAI and custom classifiers available. (source)
- Built-in agents wrap Bedrock models, Amazon Bedrock Agents, Amazon Lex bots, AWS Lambda functions, OpenAI and Anthropic, plus chain and filter agents. (source)
- SupervisorAgent lets a lead agent query a team of agents in parallel as tools and merge the answers; it can itself be a routed agent, giving teams of teams. (source)
- GroundedAgent splits work between a tool-calling gatherer and a presenter that writes the reply only from the gathered tool output. (source)
- Conversation storage backends: in-memory, DynamoDB, SQL (SQLite or Turso), a summarizing wrapper, or a custom store. (source)
- MCPToolProvider attaches tools from one or more MCP servers to any agent over stdio, Streamable HTTP or SSE. (source)
- A Swift runtime runs the same routing model on iOS 16+ and macOS 14+, with MCP tools, realtime voice and on-device chat storage. (source)
Architecture and orchestration pattern
Pattern: Other
Agent Squad is a router. The AgentSquad orchestrator receives a message with a user id and session id, asks a classifier which registered agent fits best (using each agent's description and the recent conversation), runs that one agent, stores the exchange, and returns the response with metadata naming the agent. If no agent matches, a configurable default agent can answer instead.
Agents do not talk to each other in the basic flow; each turn goes to exactly one of them. Two built-in agent types add coordination inside a turn: SupervisorAgent calls team members as tools, in parallel, and composes one reply, and ChainAgent passes output through a sequence of agents. A supervisor can be registered with the classifier like any agent to build hierarchies.
State is conversation history keyed by user, session and agent, held in a ChatStorage backend (in-memory by default; DynamoDB, SQL or a summarizing wrapper for longer histories). MAX_MESSAGE_PAIRS_PER_AGENT caps how much history each agent keeps.
Human in the loop
No built-in approval or pause API is documented. The docs show human involvement as an application pattern: the e-commerce support simulator example routes complex or sensitive queries to human support staff, notifies the customer, and gives staff a separate interface to answer. Any gating of tool calls would have to be written into custom agents or tools.
Protocols
| Protocol | Support | Note |
|---|---|---|
| MCP | Yes evidence | Client: MCPToolProvider (Python and TypeScript) connects agents to MCP servers over stdio, Streamable HTTP or SSE; the Swift runtime also supports MCP tools. |
| A2A | Unknown | README and docs navigation do not mention A2A; GitHub code search matched only a docs package-lock file, and issue search returned nothing. |
| AG-UI | Unknown | README, docs and GitHub code search for ag-ui returned nothing, and Agent Squad is not in the AG-UI README integration list. |
Best for
- Support or help-desk assistants that route billing, technical and other questions to separate specialist agents. (shortlist)
- AWS-based stacks that want Bedrock models, Lex bots or Lambda functions behind one conversational entry point.
- TypeScript services, since the TypeScript and Python packages keep feature parity. (shortlist)
- Assistants on iPhone, iPad or Mac that need the routing loop to run on device.
Not for
- Open-ended collaboration where several agents converse over many turns; the core flow sends each turn to one agent.
- Local-model-first setups; Ollama appears only as cookbook examples, and native support is an open request.
- Projects that need A2A or AG-UI interoperability; neither was found.
Quickstart
pip install "agent-squad[aws]" import asyncio
from agent_squad.agents import BedrockLLMAgent, BedrockLLMAgentOptions
from agent_squad.orchestrator import AgentSquad
# Default classifier and these agents use Amazon Bedrock: configure AWS credentials first.
squad = AgentSquad()
squad.add_agent(BedrockLLMAgent(BedrockLLMAgentOptions(
name="Billing Agent", description="Answers invoice, refund and payment questions.")))
squad.add_agent(BedrockLLMAgent(BedrockLLMAgentOptions(
name="Tech Agent", description="Troubleshoots login, app and connectivity problems.")))
async def main():
resp = await squad.route_request("I was charged twice this month", "user-1", "session-1")
print(resp.metadata.agent_name, "->", resp.output.content)
asyncio.run(main())
Common pitfalls
- Python 3.11+ is required for the Python package.
- Pick extras to match providers:
agent-squad[aws],[anthropic],[openai]or[all]. - Without a classifier argument,
AgentSquad()uses the Bedrock classifier, so AWS credentials and Bedrock model access are needed; the quickstart checks this withaws sts get-caller-identity. - The project moved from awslabs to 2FastLabs; the README asks users to update bookmarks, clone URLs and dependencies.
JevClassifiercalls a third-party service (TypeSafe) and needsTYPESAFE_API_KEY.- Pass
stream_response=Truetoroute_requestand consumeresponse.outputas a stream when an agent streams.
Pros
- Python and TypeScript packages keep feature parity, and a Swift runtime covers Apple platforms. (source)
- Several storage backends, including a summarizing wrapper that keeps long histories small. (source)
- SupervisorAgent adds parallel team coordination on top of simple routing when a turn needs several specialists. (source)
- MCP servers plug into any agent through one provider class. (source)
- Classifiers are swappable (Bedrock, Anthropic, OpenAI, Jev or custom), so routing cost and latency can be tuned separately from the agents. (source)
Cons
- The project moved from awslabs/agent-squad to 2fastlabs/agent-squad, and the README asks users to update clone URLs and dependencies. (source)
- The default classifier is the Bedrock classifier, so an out-of-the-box setup depends on AWS. (source)
- An open, untriaged report describes a denial-of-service problem in TypeScript streaming response handling (filed against 1.1.0). (source)
- Native Ollama agent and classifier support is still an open feature request. (source)
- No built-in Gemini agent; it is an open feature request. (source)
Alternatives
FAQ
Is Agent Squad still an AWS Labs project?
The README says the project, previously hosted at awslabs/agent-squad and earlier named multi-agent-orchestrator, is now maintained at 2fastlabs/agent-squad. Package names on PyPI and npm are agent-squad.
Does Agent Squad support MCP?
Yes. MCPToolProvider connects agents to MCP servers over stdio, Streamable HTTP or SSE in Python and TypeScript, and the Swift runtime supports MCP tools too. A2A and AG-UI support were not found.
Is Agent Squad free?
Yes, it is Apache-2.0 licensed with no paid tier; the project accepts GitHub sponsorships. Model calls (Bedrock, OpenAI, Anthropic) and the optional Jev classifier service are billed by those providers.
How does Agent Squad decide which agent answers?
A classifier reads the agents' descriptions and the conversation history and picks one agent per turn. If none fits, a default agent can answer if you enable that option.
Does Agent Squad work with Claude Code?
It does not drive Claude Code. Each runtime ships a SKILL.md guide for AI coding assistants, and the Swift docs explain installing it as a Claude Code skill so the assistant writes correct Agent Squad code.
Sources
- Agent Squad GitHub repository (README)
- README: quick start
- Agent Squad documentation
- Introduction
- Quickstart
- Orchestrator overview
- Classifiers overview
- Agents overview
- SupervisorAgent
- GroundedAgent
- Storage overview
- MCP Tool Provider
- Swift quick start
- Swift guide: building with AI assistants (Claude Code skill)
- Cookbook: e-commerce support simulator (human handoff)
- Issue #662: denial of service in streaming response handling
- Issue #335: native Ollama support
- Issue #376: built-in Gemini agent