Strands Agents — Open Source AI Agent SDK for Python & TypeScriptPythonTypeScriptStrands Harness<br>PYPython SDK↗TSTypeScript SDK↗<br>Strands<br>EVEvals↗SHShell↗<br>Organizations<br>strands-agents↗strands-labs↗
Select themeDarkLightAuto
The open source toolkit for buildingproduction agents.<br>Get StartedGitHub<br>pip install strands-agents<br>npm install @strands-agents/sdk
6,900+ GitHub stars · Built from production systems inside Amazon
For humansFor agents<br>str:<br>"""Save a research report to disk."""<br>path = f"reports/{title}.md"<br>Path(path).write_text(content)<br>return f"Saved {path}"
def require_sources(event: BeforeToolCallEvent):<br>name = event.tool_use["name"]<br>inp = str(event.tool_use["input"])<br>if name == "save_report" and "[source]" not in inp:<br>event.cancel_tool = "Add source citations."
agent = Agent(<br>tools=[save_report],<br>hooks=[require_sources],<br>agent("Research AI agent frameworks")">research_agent.py<br>from strands import Agent, tool<br>from strands.hooks import BeforeToolCallEvent<br>from pathlib import Path
@tool<br>def save_report(title: str, content: str) -> str:<br>"""Save a research report to disk."""<br>path = f"reports/{title}.md"<br>Path(path).write_text(content)<br>return f"Saved {path}"
def require_sources(event: BeforeToolCallEvent):<br>name = event.tool_use["name"]<br>inp = str(event.tool_use["input"])<br>if name == "save_report" and "[source]" not in inp:<br>event.cancel_tool = "Add source citations."
agent = Agent(<br>tools=[save_report],<br>hooks=[require_sources],<br>agent("Research AI agent frameworks")<br>from strands import Agent, tool<br>from strands.hooks import BeforeToolCallEvent<br>from pathlib import Path
@tool<br>def save_report(title: str, content: str) -> str:<br>"""Save a research report to disk."""<br>path = f"reports/{title}.md"<br>Path(path).write_text(content)<br>return f"Saved {path}"
def require_sources(event: BeforeToolCallEvent):<br>name = event.tool_use["name"]<br>inp = str(event.tool_use["input"])<br>if name == "save_report" and "[source]" not in inp:<br>event.cancel_tool = "Add source citations."
agent = Agent(<br>tools=[save_report],<br>hooks=[require_sources],<br>agent("Research AI agent frameworks")
writeFileSync(`reports/${title}.md`, content)<br>return `Saved ${title}.md`<br>},<br>})
const agent = new Agent({ tools: [saveReport] })
agent.addHook(BeforeToolCallEvent, (event) => {<br>const inp = String(event.toolUse.input)<br>if (event.toolUse.name === 'save_report') {<br>if (!inp.includes('[source]')) {<br>event.cancel = 'Add source citations.'<br>})
await agent.invoke('Research AI agent frameworks')">research_agent.ts<br>import {<br>Agent, tool, BeforeToolCallEvent<br>} from '@strands-agents/sdk'<br>import z from 'zod'<br>import { writeFileSync } from 'fs'
const saveReport = tool({<br>name: 'save_report',<br>description: 'Save a research report.',<br>inputSchema: z.object({<br>title: z.string(),<br>content: z.string(),<br>}),<br>callback: ({ title, content }) => {<br>writeFileSync(`reports/${title}.md`, content)<br>return `Saved ${title}.md`<br>},<br>})
const agent = new Agent({ tools: [saveReport] })
agent.addHook(BeforeToolCallEvent, (event) => {<br>const inp = String(event.toolUse.input)<br>if (event.toolUse.name === 'save_report') {<br>if (!inp.includes('[source]')) {<br>event.cancel = 'Add source citations.'<br>})
await agent.invoke('Research AI agent frameworks')<br>import {<br>Agent, tool, BeforeToolCallEvent<br>} from '@strands-agents/sdk'<br>import z from 'zod'<br>import { writeFileSync } from 'fs'
const saveReport = tool({<br>name: 'save_report',<br>description: 'Save a research report.',<br>inputSchema: z.object({<br>title: z.string(),<br>content: z.string(),<br>}),<br>callback: ({ title, content }) => {<br>writeFileSync(`reports/${title}.md`, content)<br>return `Saved ${title}.md`<br>},<br>})
const agent = new Agent({ tools: [saveReport] })
agent.addHook(BeforeToolCallEvent, (event) => {<br>const inp = String(event.toolUse.input)<br>if (event.toolUse.name === 'save_report') {<br>if (!inp.includes('[source]')) {<br>event.cancel = 'Add source citations.'<br>})
await agent.invoke('Research AI agent frameworks')
Set up with your coding agent<br>Claude CodeCursorKiroVS Code<br>Other<br>Run in your terminal:<br>claude mcp add strands uvx strands-agents-mcp-server<br>claude mcp add strands uvx strands-agents-mcp-server
Add to ~/.cursor/mcp.json:<br>"mcpServers": {<br>"strands-agents": {<br>"command": "uvx",<br>"args": ["strands-agents-mcp-server"]<br>"mcpServers": {<br>"strands-agents": {<br>"command": "uvx",<br>"args": ["strands-agents-mcp-server"]
Add to ~/.kiro/settings/mcp.json:<br>"mcpServers": {<br>"strands-agents": {<br>"command": "uvx",<br>"args": ["strands-agents-mcp-server"],<br>"disabled": false,<br>"autoApprove": ["search_docs", "fetch_doc"]<br>"mcpServers": {<br>"strands-agents": {<br>"command": "uvx",<br>"args": ["strands-agents-mcp-server"],<br>"disabled": false,<br>"autoApprove": ["search_docs", "fetch_doc"]
Add to your mcp.json:<br>"servers": {<br>"strands-agents": {<br>"command": "uvx",<br>"args": ["strands-agents-mcp-server"]<br>"servers": {<br>"strands-agents": {<br>"command": "uvx",<br>"args": ["strands-agents-mcp-server"]
Or paste this prompt:<br>Add the Strands Agents SDK to my project. Docs: https://strandsagents.com/llms.txt
llms.txtllms-full.txtBuild with...