.claude/skills/aws-strands/SKILL.md
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.
npx skillsauth add Oratias07/CHAM-Agent aws-strandsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Build model-agnostic AI agents with the Strands framework.
pip install strands-agents strands-agents-tools
# Or with npm
npm install @strands-agents/sdk
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)
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?');
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="..."
)
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
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)
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.
""")
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"
)
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)
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"
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]
)
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
development
Build accessible web applications following WCAG guidelines. Use when implementing ARIA patterns, keyboard navigation, screen reader support, or ensuring accessibility compliance. Triggers on accessibility, a11y, WCAG, ARIA, screen reader, keyboard navigation.
devops
Deploy and configure applications on Vercel. Use when deploying Next.js apps, configuring serverless functions, setting up edge functions, or managing Vercel projects. Triggers on Vercel, deploy, serverless, edge function, Next.js deployment.
development
Build consistent design systems with tokens, components, and theming. Use when creating component libraries, implementing design tokens, building theme systems, or ensuring design consistency. Triggers on design system, design tokens, component library, theming, dark mode.
development
Generate images with Google's Nano Banana Pro (Gemini 3 Pro Image). Use when generating AI images via Gemini API, creating professional visuals, or building image generation features. Triggers on Nano Banana Pro, Gemini 3 Pro Image, gemini-3-pro-image-preview, Google image generation.