Strands Harness: универсальный агентный harness с экономией токенов
Создать собственного AI-агента сложнее, чем подключить к нему хорошую модель. Модель умеет рассуждать, но для практической работы ей нужны shell, файлы, web-инструменты, долговременная память и способность вовремя ужимать контекст. Strands Harness собирает эти части в готовый универсальный agent harness, который можно запускать локально или переносить в облако без переписывания агента под каждого model provider.
Проект позиционируется не как узкий coding agent, а как базовый runtime для широкого круга задач: исследований, работы с документами, автоматизации и разработки. Он распространяется по лицензии Apache 2.0, а исходный код Strands Harness SDK доступен на GitHub.
Что даёт готовый harness
Главная идея Strands Harness — не заставлять разработчика вручную связывать model API, tool calling, файловую систему, память и управление контекстом. Функция create_harness() возвращает уже настроенного агента. Разработчику остаётся выбрать модель и передать задачу.
Базовый агент сразу включает:
- shell, чтение, запись и редактирование файлов;
- web-инструменты;
- управление контекстным окном;
- prompt caching;
- долговременную память между запусками;
- продолжение диалога по session ID;
- встроенного helper agent для открытых подзадач;
- checklist для многошаговой работы;
- загрузку skills, если они доступны.
Такой подход ближе к набору готовых defaults, чем к пустому фреймворку. При этом Strands Harness остаётся настраиваемым: разработчик может заменить модель, изменить настройки, добавить инструменты или перейти глубже к Strands Harness SDK, если готовой конфигурации недостаточно.
Результаты бенчмарков
Команда Strands утверждает, что при использовании одинаковых Claude и GPT на шести бенчмарках Strands Harness расходует на 28% меньше токенов, чем другие протестированные harnesses. По их данным, результаты при этом примерно сопоставимы или выше, чем у Claude Code, Codex и других популярных систем.
Тестирование проводилось как distributed benchmarking на EC2 с использованием Harbor. Отдельно авторы сообщают, что с Fable 5 Strands Harness стоит на 77% дешевле Claude Code и получает более высокий результат в Terminal Bench 2.1. При этом они признают, что DeepSeek Harness оказался самым экономичным по токенам в общем сравнении, но обычно показывал самые низкие результаты точности.
Эти данные показывают важный компромисс: token efficiency и качество выполнения задач нельзя считать одним и тем же показателем. Самая дешёвая по токенам система проигрывает, если слишком сильно сокращает полезный контекст или совершает больше ошибочных действий. Именно поэтому Strands сосредоточен не только на экономии, но и на качестве.
Полная методика и подробные результаты в статье не приведены. Команда обещает опубликовать отдельную исследовательскую работу о бенчмарках, поэтому пока заявленные проценты стоит воспринимать как результаты тестирования авторов проекта, а не как независимое сравнение.
Управление контекстом
Основной механизм экономии в Strands Harness — работа с контекстом. По умолчанию система использует prompt caching, сокращает объёмные результаты инструментов, включает summarization при приближении к пределу окна и пытается восстановить контекст при overflow.
| Механизм | Поведение по умолчанию | Зачем он нужен |
|---|---|---|
| Prompt caching | Повторно использует неизменные части запросов | Снижает расход и задержку |
| Обрезка tool results | Сокращает результаты инструментов объёмом примерно больше 1500 токенов | Не даёт одному вызову занять всё окно |
| Summarization | Запускает compaction, когда заполнение контекста превышает 85% | Сохраняет рабочее пространство для следующих шагов |
| Context recovery | Срабатывает внутри цикла при overflow | Помогает продолжить работу после переполнения окна |
Смысл этих настроек прост: агентные циклы быстро накапливают результаты shell-команд, чтения файлов, web-запросов и промежуточных рассуждений. Если возвращать каждый результат в следующий запрос без изменений, стоимость длинной задачи быстро растёт. Strands Harness вместо этого заранее задаёт пороги, при которых контекст нужно сократить или восстановить.
Минимальный пример на Python
Для запуска достаточно создать harness и указать модель. Например, Amazon Bedrock подключается строкой с идентификатором модели:
from strands_harness import create_harness
agent = create_harness(
model="bedrock/global.anthropic.claude-opus-5"
)
agent(
"Исследуй три ведущие vector databases, "
"сравни цены и ограничения, затем запиши результат в comparison.md"
)
Для локальной модели через Ollama можно передать готовый объект OllamaModel:
from strands_harness import create_harness
from strands.models.ollama import OllamaModel
model = OllamaModel(
host="http://localhost:11434",
model_id="llama3.1"
)
agent = create_harness(model=model)
agent("Подготовь краткое сравнение двух локальных моделей")
Минимальный пример на TypeScript
TypeScript-вариант использует тот же подход и тоже позволяет выбрать модель строкой:
import { createHarness } from "@strands-agents/harness";
const agent = await createHarness({
model: "anthropic/claude-opus-5"
});
await agent(
"Исследуй три ведущие vector databases, " +
"сравни цены и ограничения, затем запиши результат в comparison.md"
);
Помимо прямого вызова createHarness(), проект поддерживает Amazon Bedrock, Anthropic, OpenAI, Google, локальные модели Ollama и прокси LiteLLM. Это полезно для сценариев, где один и тот же агент должен работать с разными моделями или переезжать между локальной средой и облачным сервисом.
Strands CLI и экспорт кода
Strands CLI позволяет прототипировать агента без первоначального написания большого количества кода. Пользователь подключает model provider, описывает поведение обычными prompts, добавляет инструменты и наблюдает работу агента в интерактивном режиме.
Команда /export сохраняет конфигурацию в виде готового кода на TypeScript или Python. Полученный проект можно продолжить в привычном coding agent, изменить вручную и подготовить к развёртыванию. В одном из показанных сценариев через агента добавили Playwright MCP, проверили работу инструментов и затем экспортировали конфигурацию, в которой этот MCP уже был подключён.
Сам CLI устанавливается глобально:
npm install -g @strands-agents/cli
Для программного использования доступны пакеты Python и TypeScript:
pip install strands-harness
npm install @strands-agents/harness
Развёртывание
Strands Harness можно переносить в любую подходящую инфраструктуру с Linux container. В статье перечислены Modal, Cloudflare Containers, Azure Container Apps, Google Cloud Run, Amazon ECS и Amazon Bedrock AgentCore. Таким образом, перенос из локального прототипа в production не привязывает проект к одному облачному провайдеру.
Перед переносом всё равно нужно самостоятельно проверить модельные credentials, доступность tools, лимиты провайдера, хранение состояния и правила безопасного выполнения команд. Универсальность harness означает возможность разместить его во многих средах, но не отменяет требований к production-конфигурации.
Где настраивать и расширять
Готовый harness удобен как стартовая точка, но Strands Harness не предполагает, что разработчик навсегда останется на уровне defaults. Можно постепенно заменять его части вплоть до Strands Harness SDK. Подход позволяет сначала проверить идею агента, затем добавить собственные инструменты или изменить поведение отдельных компонентов, не начиная проект с пустого runtime.
Это разделяет задачи, которые обычно смешиваются при создании агента:
- Быстро проверить сценарий на готовом runtime.
- Выбрать подходящую модель и provider.
- Заменить или расширить инструменты.
- Настроить память, session ID и управление контекстом.
- Перенести готовую конфигурацию в контейнерную среду.
- При необходимости перейти ниже к Strands Harness SDK.
Strands Harness в экосистеме агентов
Strands Harness предлагает редкое сочетание: быстрый старт без минимального boilerplate, поддержку нескольких model providers, готовые механизмы работы с длинным контекстом и возможность постепенно перейти к более низкоуровневой разработке. Его главный аргумент — не новая агентная архитектура как таковая, а набор практичных defaults: shell и файловые инструменты, память, checklist, helper agent, prompt caching, summarization и context recovery.
Заявленная экономия токенов делает проект интересным для длинных агентных циклов, где каждый повторный запрос с полной историей заметно увеличивает стоимость. Но реальный выигрыш зависит от задач, модели и настроек. Поэтому 28% из результатов авторов стоит рассматривать вместе с качеством выполнения и будущим независимым исследованием.