# Strands Agents: features, protocols, quickstart

## TL;DR

Strands Agents is Amazon's Apache-2.0 SDK for building agents in Python and TypeScript; its repo, formerly strands-agents/sdk-python, is now the harness-sdk monorepo that also ships a ready-made Strands harness. It offers agents-as-tools, swarm, graph and workflow patterns plus MCP and A2A. It suits teams wanting in-process agents across model providers, especially on AWS.

## Key facts

| Field | Value |
| --- | --- |
| Type | Framework |
| Languages / SDKs | Python, TypeScript |
| License | Apache-2.0 |
| Pricing model | Open source, free |
| Orchestration pattern | Supervisor |
| GitHub stars | 8,573 (as of 2026-09-30) |
| GitHub forks | 1,289 |
| Last push | 2026-09-29 |
| Latest release | harness-cli/v0.1.4 |
| Repository | [strands-agents/harness-sdk](https://github.com/strands-agents/harness-sdk) |
| Website | [strandsagents.com](https://strandsagents.com/) |
| Documentation | [strandsagents.com](https://strandsagents.com/) |
| Last verified | 2026-09-30 |

## Key features

- Model-driven agent loop with lifecycle controls such as turn limits, token budgets, cancellation and stop reasons, plus hooks on every step. ([source](https://strandsagents.com/docs/user-guide/sdk/agents/agent-loop/))
- Four documented multi-agent patterns: agents as tools, Swarm, Graph and Workflow, with a comparison of when to use each. ([source](https://strandsagents.com/docs/user-guide/sdk/multi-agent/multi-agent-patterns/))
- Swarm lets specialist agents hand tasks to each other with shared context, bounded by max handoffs, timeouts and repeated-handoff detection. ([source](https://strandsagents.com/docs/user-guide/sdk/multi-agent/swarm/))
- Graph runs agents, custom nodes or nested swarms along edges, with conditional edges and cyclic topologies for feedback loops. ([source](https://strandsagents.com/docs/user-guide/sdk/multi-agent/graph/))
- A2A in both directions: A2AAgent calls remote agents and A2AServer publishes a Strands agent, in Python and TypeScript. ([source](https://strandsagents.com/docs/user-guide/sdk/multi-agent/agent-to-agent/))
- MCPClient loads tools from MCP servers in Python and TypeScript, over stdio, Streamable HTTP or SSE. ([source](https://strandsagents.com/docs/user-guide/sdk/tools/mcp-tools/))
- Interrupts pause an agent (or a swarm or graph) for human input and resume from the same point. ([source](https://strandsagents.com/docs/user-guide/sdk/interrupts/))
- Session managers persist conversations and agent state, including Graph and Swarm state at the orchestrator. ([source](https://strandsagents.com/docs/user-guide/sdk/agents/session-management/))

## Architecture and orchestration pattern

Pattern: Supervisor.

A Strands `Agent` runs a model-driven loop: the model reads the conversation, decides on tool calls, the SDK executes them and feeds results back, and the loop ends on a stop reason, a turn or token limit, or cancellation. Hooks fire at each lifecycle event so code can log, validate or redirect a step. The newer Strands harness is a thin factory (`create_harness()` / `createHarness()`) that returns a pre-configured `Agent` with built-in tools, sub-agents, memory and context management.

Multi-agent work has four documented shapes. With agents as tools, an orchestrator agent calls specialist agents like any tool. `Swarm` hands a task between agents that choose their own successor, sharing a history of handoffs. `Graph` follows developer-defined nodes and edges, where conditional edges pick the path and cycles are allowed; nodes can themselves be swarms. A Workflow is a fixed DAG of tasks run as one tool. A2A connects agents across processes or frameworks.

State is kept per agent in its conversation and state objects and persisted through session managers (in Python `SnapshotSessionManager` for new single-agent sessions, `FileSessionManager` or `S3SessionManager` for Graph and Swarm). For multi-agent systems only the orchestrator holds a session manager. The harness also keeps long-term memory of distilled facts across sessions by default.

### Human in the loop

The SDK has an interrupt mechanism: a hook callback or tool raises an interrupt, the agent loop stops and returns the pending interrupts, and the caller supplies responses to resume from the same point. The `HumanInTheLoop` intervention handler builds on this to let a person approve, edit or reject a tool call, with modes for CLI, web or custom UIs and optional session-level trust. Interrupts also work inside Swarm and Graph runs, and the harness adds presets, natural-language rules and Cedar policies for gating tool calls.

### Harnesses it can drive

- Claude Code ([evidence](https://github.com/strands-agents/harness-sdk/blob/main/strands-mcp/README.md))

## Protocols

| Protocol | Support | Evidence | Note |
| --- | --- | --- | --- |
| MCP | Yes (checked 2026-09-30) | [link](https://strandsagents.com/docs/user-guide/sdk/tools/mcp-tools/) | Client in Python and TypeScript: MCPClient/McpClient loads an MCP server's tools into an agent. The repo also ships a separate documentation MCP server (strands-mcp). |
| A2A | Yes (checked 2026-09-30) | [link](https://strandsagents.com/docs/user-guide/sdk/multi-agent/agent-to-agent/) | Client and server: A2AAgent consumes remote A2A agents and A2AServer serves a Strands agent, with Python and TypeScript examples. |
| AG-UI | Partial (checked 2026-09-30) | [link](https://strandsagents.com/docs/integrations/integrations/ag-ui/) | The Strands docs mark the AG-UI integration as community/partner-maintained and Python-only (package ag-ui-strands), although the AG-UI README lists AWS Strands Agents under 1st Party. |

## Best for

- Teams on AWS that want Bedrock by default and documented deploy paths to Lambda, Fargate, EC2 or Bedrock AgentCore.
- Deployments that need policy-gated tool calls (human approval, Cedar policies) and IAM-authenticated MCP connections.
- TypeScript services that want the same agent, MCP, A2A and multi-agent APIs as the Python SDK.
- Running agents on local models through the Ollama provider.
- Comparing swarm, graph and agents-as-tools designs without switching frameworks.

## Not for

- Teams looking for a hosted control plane or managed agent service; Strands runs in your process.
- Quick trials without AWS setup unless you switch providers; the default model provider is Amazon Bedrock.
- Java or .NET projects.

## Quickstart

```sh
pip install strands-agents
```

Install not yet verified by this site.

```python
from strands import Agent
from strands.multiagent import Swarm

# Default model: Claude on Amazon Bedrock (us-west-2), so AWS credentials are needed.
researcher = Agent(name="researcher", system_prompt="Gather key facts, then hand off to the writer.")
writer = Agent(name="writer", system_prompt="Write a short, clear answer from the facts you receive.")

swarm = Swarm(
    [researcher, writer],
    entry_point=researcher,
    max_handoffs=6,
    execution_timeout=300.0,
)
result = swarm("Explain what a B-tree index is in three sentences.")
print(result.status, [node.node_id for node in result.node_history])
```

### Common pitfalls

- The Python SDK needs Python 3.10+; the TypeScript SDK (`npm install @strands-agents/sdk`) needs Node.js 22+.
- Amazon Bedrock is the default provider (Claude Sonnet in `us-west-2`): set `AWS_BEARER_TOKEN_BEDROCK` or normal AWS credentials, and enable model access in the Bedrock console. Other providers need extras such as `pip install 'strands-agents[anthropic]'`.
- Ready-made tools like `calculator` live in the separate `strands-agents-tools` package.
- The assembled harness is a different package (`pip install strands-harness`) from the SDK (`strands-agents`).
- Agents placed inside a Graph or Swarm must not have their own session manager; Python raises `ValueError`.
- README links under `/docs/user-guide/concepts/...` point to paths that moved; use the current docs navigation.

Official quickstart: https://strandsagents.com/docs/user-guide/sdk/quickstart/python/

## Pros

- One SDK covers agents as tools, Swarm, Graph and Workflow, with a documented comparison of trade-offs. ([source](https://strandsagents.com/docs/user-guide/sdk/multi-agent/multi-agent-patterns/))
- A2A client and server plus MCP client are available in both Python and TypeScript. ([source](https://strandsagents.com/docs/user-guide/sdk/multi-agent/agent-to-agent/))
- Interrupt-and-resume and a ready-made human approval handler, including for multi-agent runs. ([source](https://strandsagents.com/docs/user-guide/sdk/agents/interventions/human-in-the-loop/))
- Provider-agnostic model layer (Bedrock, Anthropic, OpenAI, Gemini, Ollama, LiteLLM and others). ([source](https://strandsagents.com/docs/user-guide/sdk/model-providers/))
- Frequent releases across packages (python/v1.57.1 and typescript/v1.19.0 in September 2026). ([source](https://github.com/strands-agents/harness-sdk/releases))

## Cons

- The repository was renamed and turned into a monorepo that merged the TypeScript SDK, docs and MCP server; package names stayed the same, but repo and docs links changed. ([source](https://github.com/strands-agents/harness-sdk/issues/2286))
- An open bug says MCPClient cannot connect to servers using the 2026-07-28 MCP protocol version because the SDK pins mcp<2.0.0. ([source](https://github.com/strands-agents/harness-sdk/issues/4038))
- An open bug reports Graph treating a cancelled child agent result as completed and routing it downstream. ([source](https://github.com/strands-agents/harness-sdk/issues/3798))
- Python and TypeScript are not at feature parity; an open tracking issue lists the gaps. ([source](https://github.com/strands-agents/harness-sdk/issues/2498))
- AG-UI support is a partner-maintained, Python-only integration rather than part of the SDK. ([source](https://strandsagents.com/docs/integrations/integrations/ag-ui/))

## Alternatives

- [OpenAI Agents SDK (Python)](https://multiagentguide.top/tools/openai-agents-sdk.md)
- [Google ADK (Python)](https://multiagentguide.top/tools/google-adk.md)
- [LangGraph](https://multiagentguide.top/tools/langgraph.md)
- [BeeAI Framework](https://multiagentguide.top/tools/beeai-framework.md)

## FAQ

### What happened to the strands-agents Python SDK repository?

It was consolidated into a monorepo with the TypeScript SDK, docs and MCP server and now lives at strands-agents/harness-sdk. The announcement says PyPI and npm package names and install commands did not change.

### Does Strands Agents support MCP, A2A and AG-UI?

MCP (client) and A2A (client and server) are built into both SDKs. AG-UI works through a partner-maintained, Python-only package according to the Strands docs.

### Is Strands Agents free?

The SDK is Apache-2.0 licensed and runs in your process with no hosted control plane. The default model provider, Amazon Bedrock, is billed by AWS; other providers bill separately.

### What is the difference between the Strands SDK and Strands harness?

The SDK (strands-agents) gives you the agent loop, tools, providers and multi-agent primitives. Strands harness (strands-harness) is a factory on top that returns a pre-configured agent with built-in tools, memory and context management.

### Which multi-agent pattern should I use in Strands?

The docs suggest Graph for fixed flows with conditional branches or loops, Swarm for open-ended collaboration through handoffs, Workflow for a repeatable DAG run as one tool, and agents as tools for simple delegation.

## Sources

- [Strands Agents GitHub repository (README)](https://github.com/strands-agents/harness-sdk)
- [Strands Agents documentation](https://strandsagents.com/)
- [NOTICE (Copyright Amazon.com, Inc.)](https://github.com/strands-agents/harness-sdk/blob/main/NOTICE)
- [Python SDK quickstart](https://strandsagents.com/docs/user-guide/sdk/quickstart/python/)
- [Strands harness](https://strandsagents.com/docs/user-guide/harness/)
- [Agent loop](https://strandsagents.com/docs/user-guide/sdk/agents/agent-loop/)
- [Multi-agent patterns](https://strandsagents.com/docs/user-guide/sdk/multi-agent/multi-agent-patterns/)
- [Swarm](https://strandsagents.com/docs/user-guide/sdk/multi-agent/swarm/)
- [Graph](https://strandsagents.com/docs/user-guide/sdk/multi-agent/graph/)
- [Agent-to-Agent (A2A)](https://strandsagents.com/docs/user-guide/sdk/multi-agent/agent-to-agent/)
- [Use MCP tools](https://strandsagents.com/docs/user-guide/sdk/tools/mcp-tools/)
- [Interrupts](https://strandsagents.com/docs/user-guide/sdk/interrupts/)
- [Human in the loop](https://strandsagents.com/docs/user-guide/sdk/agents/interventions/human-in-the-loop/)
- [Session management](https://strandsagents.com/docs/user-guide/sdk/agents/session-management/)
- [Model providers](https://strandsagents.com/docs/user-guide/sdk/model-providers/)
- [AG-UI integration (Strands docs)](https://strandsagents.com/docs/integrations/integrations/ag-ui/)
- [AG-UI README (integration list)](https://github.com/ag-ui-protocol/ag-ui/blob/main/README.md)
- [Strands MCP server README (Claude Code setup)](https://github.com/strands-agents/harness-sdk/blob/main/strands-mcp/README.md)
- [Releases](https://github.com/strands-agents/harness-sdk/releases)
- [Issue #2286: consolidating Strands SDK repositories into a monorepo](https://github.com/strands-agents/harness-sdk/issues/2286)
- [Issue #4038: MCPClient and the 2026-07-28 MCP protocol version](https://github.com/strands-agents/harness-sdk/issues/4038)
- [Issue #3798: Graph routes a cancelled child result downstream](https://github.com/strands-agents/harness-sdk/issues/3798)
- [Issue #2498: Python and TypeScript SDK parity tracking](https://github.com/strands-agents/harness-sdk/issues/2498)

---

Data as of 2026-09-30. Not affiliated with listed projects. HTML version: https://multiagentguide.top/tools/strands-agents
