Strands Agents — SDK для создания и запуска AI-агентов на Python и TypeScript
📂 Исходный код на GitHubOpen-source SDK для создания и запуска AI-агентов на Python и TypeScript. В монорепозитории собраны готовый Strands harness, CLI, Python и TypeScript SDK, документация, MCP-сервер и инструменты для разработки агентных приложений.
Strands Agents — это open-source SDK для создания и запуска AI-агентов на Python и TypeScript. Он рассчитан на сценарии, в которых больше не хочется самостоятельно писать agent loop и всю обвязку вокруг него: ограничение числа ходов и токенов, отмену задач, инструменты, память, сессии, streaming, MCP, guardrails, tracing и evals.
Агент работает в процессе приложения, без отдельного hosted control plane. При этом Strands можно начать использовать как полностью собранный harness, а затем перейти к SDK, если стандартных настроек недостаточно.
Что входит в проект
Репозиторий собран как монорепозиторий. В нём одновременно находятся SDK для двух экосистем, готовые harness-пакеты, CLI, документация и MCP-сервер.
| Пакет | Назначение |
|---|---|
harness-py/ |
Python harness: собранный агент через create_harness() |
harness-ts/ |
TypeScript harness: собранный агент через createHarness() |
strands-cli/ |
strands CLI для прототипирования и общения с harness-агентом в терминале |
strands-py/ |
Python SDK: agent loop, model providers и tools |
strands-ts/ |
TypeScript SDK: agent loop, model providers и tools |
site/ |
Исходники сайта документации на Astro и Starlight |
team/ |
Документы по governance, решениям и совместимости между SDK |
Отдельный strands-mcp/ содержит MCP-сервер, а примеры использования вынесены в отдельный репозиторий samples.
Два уровня работы
Готовый Strands harness
Для быстрого старта доступен Strands harness. Один вызов создаёт агента с оптимизированными настройками для модели, инструментов, памяти, сессий и управления контекстом. Эти настройки основаны на benchmarked defaults, но их можно переопределить через конфигурацию.
В Python установка выглядит так:
pip install strands-harness
Минимальный запуск:
from strands_harness import create_harness
agent = create_harness()
agent("Find the slowest test in this repo and explain why it's slow")
В TypeScript используется пакет @strands-agents/harness:
npm install @strands-agents/harness
import { createHarness } from '@strands-agents/harness'
const agent = await createHarness()
await agent.invoke('Find the slowest test in this repo and explain why it\'s slow')
Такой путь подходит, когда нужен готовый агент с разумными настройками по умолчанию. Документация описывает harness quickstart и configuration reference.
Работа напрямую с SDK
Если стандартных defaults недостаточно, можно взять управление agent loop, tools, model providers, memory, sessions и hooks на себя. Ниже — минимальные примеры из README.
Для Python нужен Python 3.10+ и пакеты strands-agents и strands-agents-tools:
pip install strands-agents strands-agents-tools
from strands import Agent
from strands_tools import calculator
agent = Agent(tools=[calculator])
agent('What is the square root of 1764')
Для TypeScript указан Node.js 22+:
npm install @strands-agents/sdk
import { Agent } from '@strands-agents/sdk'
const agent = new Agent()
const result = await agent.invoke('What is the square root of 1764?')
console.log(result)
Отдельные README пакетов подробнее описывают tools, model providers, MCP, bidirectional streaming, Zod-typed tools, structured output и multi-agent patterns.
Почему Strands называют agent harness
Обычный вызов LLM API отвечает только за один запрос и один ответ. По мере усложнения приложения вокруг него появляются дополнительные задачи: ограничить число итераций, учитывать token budget, отменять работу, передавать результаты инструментов, сохранять сессии, управлять контекстом, логировать решения и проверять результат перед передачей пользователю.
Strands объединяет этот слой в SDK. В перечень встроенных возможностей входят:
- lifecycle controls: turn limits, token budgets, cancellation и stop reasons;
- tools и structured output;
- MCP и multi-agent patterns;
- memory и sessions;
- model portability;
- streaming;
- guardrails;
- tracing и evals.
Это позволяет менять backend модели или облако, не переписывая всю прикладную логику агента. Strands поддерживает Amazon Bedrock, Anthropic, OpenAI и Gemini, а также другие провайдеры и custom providers.
Model-agnostic подход
Один из ключевых принципов проекта — не привязывать приложение к единственному model provider. В документации перечислены Amazon Bedrock, Anthropic, OpenAI, Gemini и Ollama среди провайдеров, с которыми можно начать работу. Agent loop при этом остаётся частью приложения, а не hosted control plane.
Второй принцип — контроль над каждым решением агента. По умолчанию цикл трассирует решения, а hooks позволяют перехватить любой шаг, чтобы записать его, проверить или изменить направление выполнения. Guardrails помогают ловить ошибки до того, как они приведут к нежелательному действию, а steering handlers дают агенту возможность исправить курс вместо молчаливого сбоя.
Практический сценарий
Для прототипа можно установить Strands harness, создать агента одной функцией и передать ему задачу. Если прототип требует собственной логики, переход на SDK позволяет подключить только нужные tools и model providers, не отказываясь от уже знакомого API Agent.
Для приложения с терминальным интерфейсом доступен strands CLI. Он позволяет прототипировать и общаться с harness-агентом прямо в терминале. Для внешних систем в репозитории есть MCP-сервер, а документация охватывает deployment и production-запуск.
Когда стоит посмотреть на Strands
Проект выглядит релевантным, если вы:
- строите собственный agent loop вместо использования готового coding agent;
- хотите один подход для Python и TypeScript;
- работаете с несколькими model providers и планируете менять backend;
- нуждаетесь в инструментах, MCP, памяти, сессиях и structured output;
- хотите ограничивать стоимость и количество итераций агента;
- добавляете tracing, evals, guardrails и hooks в приложение с агентами.
Strands Agents не сводит агентную систему к одному вызову модели. Это набор взаимосвязанных слоёв — от готового harness и CLI до низкоуровневого SDK, памяти, инструментов и наблюдаемости. Такой диапазон позволяет начать с короткого прототипа и постепенно добавлять контроль, необходимый для production.