The Claude Agent SDK and AWS Strands Agents both run an agent loop for you, so the real Claude Agent SDK vs Strands choice is model lock-in versus portability. The Claude Agent SDK keeps Claude Code's agent loop inside a Claude-only application, while Strands runs multiple model providers and adds multi-agent orchestration. Choose the SDK for Claude-native tooling; choose Strands when you need to change models or clouds.
I installed both into clean environments on an M1 Mac on October 3, 2026. A plain install resolved claude-agent-sdk 0.2.163 and strands-agents 1.57.2, and the package metadata settles a common misreading: the Claude Agent SDK's code is MIT-licensed, so the lock-in comes from the model it drives, not from its license. Neither SDK's constructor requires an argument; the practical difference shows up when you choose a model.
The Short Answer: Same Job, Opposite Bets
An AI agent, in the SDK sense, is a loop: a model reads a goal, picks a tool, reads the result, and repeats until it is done. Both SDKs implement that loop for you so you do not have to write the retry and tool-dispatch logic yourself.
Where they split is the bet each vendor made. The Claude Agent SDK bets that most teams standardizing on Claude want the exact agent loop, context management, and tool set that already powers Claude Code, just callable as a library. Strands Agents bets that teams want to swap models and clouds without rewriting their agent logic, so it treats the model as a pluggable dependency behind a common interface. Neither bet is wrong; they serve different constraints.
What Strands Agents 1.0 Actually Shipped
Strands launched as a preview in May 2025, then reached its 1.0 milestone with a post titled "Introducing Strands Agents 1.0: Production-Ready Multi-Agent Orchestration Made Simple," published by AWS engineers Ryan Coleman and Belle Guttman. That release added four multi-agent primitives: Agents-as-Tools (specialized agents exposed as callable tools), Handoffs (an agent passing a task to another agent or a human), Swarms, and Graphs (explicit, conditional-routing workflows).
The same release added support for A2A, an open protocol that lets agents built on different frameworks discover and call each other through auto-generated capability cards, and a SessionManager abstraction that persists conversation state to an external store such as Amazon S3 so an agent survives a restart or a scaling event. Coleman and Guttman framed the release as closing a gap between prototype and production: "Strands 1.0 brings the same level of simplicity to multi-agent applications that Strands has provided for single agents," they wrote, pairing that simplicity with the new A2A support. Anthropic is also listed as one of the model-provider contributors to Strands, alongside Meta, OpenAI, Cohere, Mistral, Stability, and Writer, which means Claude can run inside a Strands agent even though Strands is not an Anthropic product.
Why This Comparison Matters Now
A framework decision made in a preview month rarely stays interesting a year later, but Strands kept compounding. When my script ran on October 3, 2026, the strands-agents Python package had 36,490,610 downloads in the last month by pypistats.org's count; download stats for the package are also on pepy.tech. The GitHub repo, renamed from strands-agents/sdk-python to strands-agents/harness-sdk, had 8,636 stars, with python/v1.57.2 as its latest Python release. The same script counted 6,773 stars and 34.6 million monthly downloads on August 2, so both figures are still climbing.
That scale is why the comparison is no longer academic. Teams choosing an agent SDK in 2026 are choosing between a fast-growing, cloud-agnostic default and a narrower, deeply integrated one, and the wrong call is expensive to unwind once tool integrations and prompts are written against a specific API.
Claude Agent SDK: What You Get
Install it with pip install claude-agent-sdk (Python 3.10 or later required) or npm install @anthropic-ai/claude-agent-sdk. According to Anthropic's Agent SDK overview, you get the same agent loop, context management, and 10 built-in tools that ship inside Claude Code: Read, Write, Edit, Bash, Monitor, Glob, Grep, WebSearch, WebFetch, and AskUserQuestion.
Subagents are defined in-process with AgentDefinition, letting a main agent delegate a focused task (say, a code review) to a specialized one and read back the result. MCP, the Model Context Protocol that lets an agent call external tools and data sources through a common interface, attaches with a single dict, for example mcp_servers={"playwright": {"command": "npx", "args": ["@playwright/mcp@latest"]}}, and hooks like PreToolUse and PostToolUse let you log, block, or transform tool calls. Cloud auth is a single environment variable: CLAUDE_CODE_USE_BEDROCK=1, CLAUDE_CODE_USE_VERTEX=1, or CLAUDE_CODE_USE_FOUNDRY=1 for Bedrock, Vertex AI, or Azure Foundry respectively. Anthropic's own guidance is blunt about where the SDK fits: interactive development and one-off tasks stay on the Claude Code CLI, while CI/CD pipelines, custom applications, and production automation move to the SDK.
Licensing and Vendor Lock-In
This is the part most comparisons skip, and it is the one that determines whether you can change your mind later. Strands ships under Apache-2.0, is free to fork, and already runs Bedrock, Anthropic, OpenAI, Gemini, Ollama, and custom model providers behind one interface. Swapping the underlying model is a config change, not a rewrite.
The Claude Agent SDK's code is MIT-licensed; that is what the license field on its PyPI package read when I installed it. What Anthropic's Commercial Terms of Service govern is using it against the Claude API. That distinction matters if you assumed the SDK itself carries usage restrictions. It doesn't: you're free to read, fork, or vendor the code. You just can't point it at a model other than Claude, and calling the API at all still requires an Anthropic account under those terms.
Claude Agent SDK vs Strands Agents at a Glance
The feature and licensing rows below come from each vendor's own documentation, Anthropic's Agent SDK overview and the AWS Strands 1.0 announcement, not from a third-party summary.
| Claude Agent SDK | AWS Strands Agents | |
|---|---|---|
| License | Anthropic Commercial Terms | Apache-2.0 |
| Model support | Claude models only | Bedrock, Anthropic, OpenAI, Gemini, Ollama, custom |
| Multi-agent patterns | Subagents (in-process delegation) | Agents-as-Tools, Handoffs, Swarm, Graph |
| Cross-framework protocol | Not built-in | A2A (Agent2Agent) |
| Tool protocol | MCP (single dict config) | MCP-native |
| Install | pip install claude-agent-sdk | pip install strands-agents strands-agents-tools |
| Cloud auth | Env-var flags for Bedrock, Vertex, Azure Foundry | AWS-native, IAM-aware |
| Best for | Claude-only stacks wanting Claude Code's exact loop | Multi-model, multi-cloud, or cross-framework agent systems |
The license row for the Claude Agent SDK describes the terms for using it with Claude; as covered above, the SDK's code itself is MIT-licensed.
What a fresh install and the public numbers say today
The numbers in this section come from one script that builds both venvs from scratch and pulls the live GitHub and PyPI data, so it can be re-run at any time; the method is in the testing section below.
A plain pip install claude-agent-sdk resolved claude-agent-sdk==0.2.163 under the declared >=3.10 Python requirement. pip install strands-agents resolved 1.57.2, which matches the latest python/v1.57.2 release tag in the Strands repo. The GitHub repo backing it has also been renamed, from strands-agents/sdk-python to strands-agents/harness-sdk, and the old path now redirects.
Neither SDK's constructor actually requires an argument. ClaudeAgentOptions() and Agent() both build with zero required fields, and Agent's model parameter defaults to None. The practical difference is at call time, not construction time: the Claude Agent SDK resolves a working model from ANTHROPIC_API_KEY alone, while Strands' model=None still needs a provider chosen (Bedrock, Anthropic, OpenAI, Gemini, Ollama, or custom) before an agent can actually run.
| Measurement | Claude Agent SDK | AWS Strands Agents |
|---|---|---|
| Version resolved (plain install) | 0.2.163 | 1.57.2 |
| PyPI code license | MIT | Apache-2.0 |
| GitHub stars | n/a (part of Claude Code repo) | 8,636 |
| PyPI downloads, last month | not published | 36,490,610 |
When to Pick Each
If your team already standardized on Claude and wants the shortest path from prototype to production, the Claude Agent SDK wins on integration depth: subagents, hooks, and session resume all come from the same codebase that powers Claude Code, so behavior transfers directly between the CLI and your service. LOW/CODE Agency's Claude vs Strands comparison makes the same point.
Pick Strands when any of these apply: you need to run more than one model provider behind the same agent code, your infrastructure is AWS-native and you want IAM-aware tools and Lambda-friendly deployment, or you are building a multi-agent system that needs Swarm or Graph coordination or has to hand off work to agents built on a different framework entirely via A2A.
Expect one extra setup step with Strands. Starting from pip install claude-agent-sdk versus pip install strands-agents strands-agents-tools on a clean virtualenv, the Claude SDK reaches a working query() call in one file with a single ANTHROPIC_API_KEY export, while the Strands quickstart needs a model-provider choice and, for Bedrock, an IAM role before the first agent runs. That extra step buys Strands its portability; it is not free.
Can Strands use Claude without the Claude Agent SDK?
Yes. Strands documents an Anthropic model provider, so a Strands agent can call Claude models while Strands remains the framework coordinating tools and state. That is different from embedding the Claude Agent SDK's runtime. If you need Strands orchestration but prefer Claude as the model, prototype that provider directly. If your requirement depends on Claude Code-style agent behavior, test the Agent SDK separately. Compare permissions, tool execution, tracing, and error handling in the same task before calling either framework a drop-in replacement.
How I tested this
The install checks were re-run on October 3, 2026 on an Apple M1 (arm64) with macOS 26.3 and Python 3.13.5. The script creates two fresh uv venvs, installs claude-agent-sdk in one and strands-agents with strands-agents-tools in the other, and reads each package's resolved version, Python requirement, and license from the installed metadata. It then counts the required constructor arguments for ClaudeAgentOptions and Strands' Agent, and pulls the Strands repo name, star count, and latest Python release tag from the GitHub API and the last-month download count from pypistats.org.
The version, license, and constructor checks are reproducible; the star and download figures are live numbers that drift on every re-run. I did not run an agent task on either SDK, so nothing here measures speed, cost, or output quality. The raw test record has every value, and the harness script is in the same folder.
FAQ
Is AWS Strands Agents only for AWS?
No. Strands runs on Amazon Bedrock, but the same interface also supports the direct Anthropic API, OpenAI, Gemini, Ollama for local development, and custom model providers. The framework itself is a Python and TypeScript package that deploys anywhere those runtimes run, including Lambda, Fargate, EKS, Docker, or a plain server outside AWS entirely.
Does the Claude Agent SDK support multi-agent orchestration?
It supports subagents: a main agent delegates a focused task, like a code review, to a specialized in-process agent defined with AgentDefinition, then reads back the result. It does not ship Strands-style Swarm or Graph primitives, and it has no native A2A protocol support for discovering or calling agents built outside its own process.
Is the Claude Agent SDK a harness?
Effectively yes. It exposes the same agent harness that runs Claude Code: the agent loop, built-in tools, hooks, and subagent system, packaged as a library you call from your own code. Unlike a multi-provider framework such as Strands, it is Claude's own runtime scaffolding, not a model-agnostic orchestration layer.
Related coverage
- Claude Agent SDK vs Claude Code
- MCP vs RAG: Differences, Use Cases, and a 12-Query Test, a measured comparison of MCP tools, document retrieval, and hybrid routing
References
- AWS Strands Agents 1.0 Announcement - https://aws.amazon.com/blogs/opensource/introducing-strands-agents-1-0-production-ready-multi-agent-orchestration-made-simple/
- Claude Agent SDK Overview (Anthropic) - https://code.claude.com/docs/en/agent-sdk/overview
- Claude vs Strands Agents (LOW/CODE Agency) - https://www.lowcode.agency/blog/claude-vs-strands
- PyPI Download Stats (pepy.tech) - https://pepy.tech/projects/strands-agents
- Strands Agents (official docs) - https://strandsagents.com/
- Strands model providers - https://strandsagents.com/docs/user-guide/sdk/model-providers/
- strands-agents/sdk-python (GitHub) - https://github.com/strands-agents/sdk-python

