| name | aws-strands |
| description | Build AI agents with Strands Agents SDK. Use when developing model-agnostic agents, implementing ReAct patterns, creating multi-agent systems, or building production agents on AWS. Triggers on Strands, Strands SDK, model-agnostic agent, ReAct agent. |
Strands Agents SDK
Build model-agnostic AI agents with the Strands framework.
Installation
pip install strands-agents strands-agents-tools
# Or with npm
npm install @strands-agents/sdk
Quick Start
from strands import Agent
from strands.tools import tool
@tool
def get_weather(city: str) -> str:
"""Get current weather for a city."""
# Implementation
return f"Weather in {city}: 72°F, Sunny"
agent = Agent(
model="anthropic.claude-3-sonnet",
tools=[get_weather]
)
response = agent("What's the weather in Seattle?")
print(response)
TypeScript/JavaScript
import { Agent, tool } from '@strands-agents/sdk';
const getWeather = tool({
name: 'get_weather',
description: 'Get current weather for a city',
parameters: {
city: { type: 'string', description: 'City name' }
},
handler: async ({ city }) => {
return `Weather in ${city}: 72°F, Sunny`;
}
});
const agent = new Agent({
model: 'anthropic.claude-3-sonnet',
tools: [getWeather]
});
const response = await agent.run('What\'s the weather in Seattle?');
Model Agnostic
Strands works with any LLM:
from strands import Agent
# Anthropic (default)
agent = Agent(model="anthropic.claude-3-sonnet")
# OpenAI
agent = Agent(model="openai.gpt-4o")
# Amazon Bedrock
agent = Agent(model="amazon.titan-text-premier")
# Custom endpoint
agent = Agent(
model="custom",
endpoint="https://your-model-endpoint.com",
api_key="..."
)
Tool Definition Patterns
Decorator Style
from strands.tools import tool
@tool
def search_database(query: str, limit: int = 10) -> list[dict]:
"""Search the product database.
Args:
query: Search query string
limit: Maximum results to return
"""
# Implementation
return results
Class Style
from strands.tools import Tool
class DatabaseSearchTool(Tool):
name = "search_database"
description = "Search the product database"
def parameters(self):
return {
"query": {"type": "string", "description": "Search query"},
"limit": {"type": "integer", "default": 10}
}
def run(self, query: str, limit: int = 10):
return self.db.search(query, limit)
ReAct Pattern
Built-in ReAct (Reasoning + Acting) support:
from strands import Agent, ReActStrategy
agent = Agent(
model="anthropic.claude-3-sonnet",
tools=[search_tool, calculate_tool],
strategy=ReActStrategy(
max_iterations=10,
verbose=True
)
)
# Agent will reason through complex multi-step tasks
response = agent("""
Find the top 3 products in our database,
calculate their average price,
and recommend if we should adjust pricing.
""")
Multi-Agent Systems
from strands import Agent, MultiAgentOrchestrator
# Specialist agents
researcher = Agent(
name="researcher",
model="anthropic.claude-3-sonnet",
tools=[web_search, document_reader],
system_prompt="You are a research specialist."
)
analyst = Agent(
name="analyst",
model="anthropic.claude-3-sonnet",
tools=[data_analyzer, chart_generator],
system_prompt="You are a data analyst."
)
writer = Agent(
name="writer",
model="anthropic.claude-3-sonnet",
tools=[document_writer],
system_prompt="You are a technical writer."
)
# Orchestrator
orchestrator = MultiAgentOrchestrator(
agents=[researcher, analyst, writer],
routing="supervisor" # or "round_robin", "intent"
)
response = orchestrator.run(
"Research AI trends, analyze the data, and write a report"
)
Streaming Responses
from strands import Agent
agent = Agent(model="anthropic.claude-3-sonnet")
# Stream response
for chunk in agent.stream("Explain quantum computing"):
print(chunk, end="", flush=True)
Memory Management
from strands import Agent
from strands.memory import ConversationMemory, SemanticMemory
agent = Agent(
model="anthropic.claude-3-sonnet",
memory=[
ConversationMemory(max_turns=10),
SemanticMemory(embedding_model="text-embedding-3-small")
]
)
# Memory persists across calls
agent("My name is Alice")
agent("What's my name?") # Remembers: "Your name is Alice"
AgentCore Integration
Use Strands with AWS Bedrock AgentCore:
from strands import Agent
from strands.tools import tool
import boto3
agentcore_client = boto3.client('bedrock-agentcore')
@tool
def query_cloudwatch(metric_name: str, namespace: str) -> dict:
"""Query CloudWatch metrics via AgentCore Gateway."""
return agentcore_client.invoke_tool(
tool_name="cloudwatch_query",
parameters={"metric": metric_name, "namespace": namespace}
)
agent = Agent(
model="anthropic.claude-3-sonnet",
tools=[query_cloudwatch]
)
Official Use Cases
Strands is featured in AWS AgentCore samples:
A2A Multi-Agent Incident Response: Uses Strands for monitoring agent
cd amazon-bedrock-agentcore-samples/02-use-cases/A2A-multi-agent-incident-response
# Monitoring agent uses Strands SDK for CloudWatch, logs, metrics
Resources
- Official Samples: https://github.com/awslabs/amazon-bedrock-agentcore-samples
- A2A Use Case: https://github.com/awslabs/amazon-bedrock-agentcore-samples/tree/main/02-use-cases/A2A-multi-agent-incident-response
- Integrations: https://github.com/awslabs/amazon-bedrock-agentcore-samples/tree/main/03-integrations