// AI NATIVE STACK

AI Native › AI Agent › Agent Framework › Strands Agents

CRASH COURSE · AI-NATIVE · beginner · 12 min read · v0.1

Strands Agents — AWS's open-source agent SDK.

agent-framework ai-native strands-agents aws bedrock python

TL;DR — Strands Agents is AWS's open-source Python SDK for building AI agents. It uses a simple model-driven loop: the model decides what to do, calls tools, observes results, and repeats — no graph DSL, no chain abstractions. First-class integration with Amazon Bedrock but works with any provider. Tools are plain Python functions with docstrings. Built for AWS shops that want agents without framework overhead.

What it is

Strands gives you an Agent class that runs a tool-calling loop powered by the model's native tool-use capability. You define tools as decorated Python functions, point at a model (Bedrock, OpenAI, Anthropic, Ollama), and call agent(). The SDK handles the loop, streaming, and tool execution. No chains, no graphs — the model is the control flow.

Why it exists

AWS teams building on Bedrock needed an agent SDK that felt native to their stack — IAM auth, Bedrock model IDs, CloudWatch logging — without pulling in LangChain's entire ecosystem. Strands is that: minimal, model-driven, AWS-native by default but provider-agnostic by design.

Install & setup

pip install strands-agents strands-agents-tools
# For Bedrock (default):
export AWS_REGION=us-east-1
# For OpenAI:
export OPENAI_API_KEY=sk-...

Basic agent

from strands import Agent, tool

@tool
def get_weather(city: str) -> str:
    """Get the current weather for a city."""
    return f"Sunny, 22°C in {city}"

agent = Agent(tools=[get_weather])
response = agent("What's the weather in Seattle?")
print(response)

Using with Bedrock

from strands import Agent
from strands.models.bedrock import BedrockModel

model = BedrockModel(model_id="us.anthropic.claude-sonnet-4-20250514")
agent = Agent(model=model, tools=[get_weather])

Using with OpenAI

from strands.models.openai import OpenAIModel

model = OpenAIModel(model_id="gpt-4o")
agent = Agent(model=model, tools=[get_weather])

Streaming

agent = Agent(tools=[get_weather])
for event in agent.stream("What's the weather in London?"):
    if event.get("data"):
        print(event["data"], end="", flush=True)

Multi-agent

Wrap an agent as a tool for another agent — the sub-agent pattern:

researcher = Agent(tools=[search_tool], system_prompt="You research topics.")

@tool
def ask_researcher(question: str) -> str:
    """Ask the research agent a question."""
    return str(researcher(question))

manager = Agent(tools=[ask_researcher])
manager("Research and summarize vLLM's architecture")

When to use, when to skip

Use it if you're on AWS/Bedrock and want a simple, no-framework-overhead agent SDK. The model-driven philosophy means less to learn and debug.

Skip it if you need rich orchestration (LangGraph), middleware (LangChain), or multi-agent conversation patterns (AutoGen). The ecosystem is young.

vs the alternatives

ToolBest forTrade-off
Strands AgentsAWS/Bedrock, minimal SDKYoung ecosystem, fewer integrations
LangChainRich ecosystem, provider portabilityHeavier
Pydantic AIType-safe, testableNot AWS-native
AgnoLightweight, fastDifferent defaults

Verified against Strands Agents docs (strandsagents.com), May 2026.

← AI Native Stack
© cvam — written in plaintext, served warm