Agent Squad

Framework · Last verified 2026-09-30

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

Agent Squad key facts. Data as of 2026-09-30.
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

MCP, A2A and AG-UI support for Agent Squad. See the full matrix.
ProtocolSupportNote
MCP Yes evidence
checked 2026-09-30
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
checked 2026-09-30
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
checked 2026-09-30
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]"

Install not yet verified by this site. What this means

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 with aws sts get-caller-identity.
  • The project moved from awslabs to 2FastLabs; the README asks users to update bookmarks, clone URLs and dependencies.
  • JevClassifier calls a third-party service (TypeSafe) and needs TYPESAFE_API_KEY.
  • Pass stream_response=True to route_request and consume response.output as a stream when an agent streams.

Official quickstart

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

Unknown fields: protocols.a2a and protocols.agui are unknown: the README and docs navigation do not mention either; GitHub code search found only an unrelated 'a2a' string in docs/package-lock.json and nothing for ag-ui; issue search for a2a returned nothing; Agent Squad is not in the AG-UI README integration list.

Something wrong or out of date, or do you maintain Agent Squad and want this page removed? Report a correction or request removal.