Anthropic Tool Runner: удобный beta-цикл с ясной границей
Tool Runner в SDK автоматически управляет циклом, состоянием, валидацией и обёрткой ошибок - он избавляет от ручного loop. Но у него есть чёткая граница: по официальной документации для human in the loop, условного исполнения и полного custom logging следует использовать manual loop.
Что берёт на себя Tool Runner, а что всё равно остаётся на вас, стоит держать перед глазами.
Tool Runner делает · Ваш код все равно делает
- Вызывает Messages API до финального ответа - Authorization и trusted context
- Исполняет зарегистрированные функции - Risk classification и approval boundary
- Формирует tool results - Redaction и лимит размера результата
- Хранит message history внутри runner - Ваш event log и retention
- Ограничивает
max_iterations- Wall time, cost budget и circuit breaker
Runner вызывает Messages API, исполняет зарегистрированные функции, формирует tool results и хранит историю внутри себя. Но authorization и trusted context, risk classification и approval boundary, redaction и лимит размера, ваш event log, wall time и cost budget - всё это остаётся вашим кодом. Runner ускоряет цикл, а не заменяет безопасность.
И оговорка про статус, из-за которой не стоит копировать старые сниппеты.
Статус beta важен. Не копируйте непроверенный snippet из старой статьи. Откройте текущую TypeScript-вкладку Tool Runner для установленной версии SDK и зафиксируйте её в lockfile. Контракт прямого Messages API из предыдущей главы остаётся стабильной точкой понимания.
Manual loop стоит оставить в нескольких случаях, и их полезно знать заранее.
- Нужно остановить выполнение перед preview или side effect.
- Разные tools имеют разные concurrency и retry policy.
- Нужно сохранять каждый normalized event в общей cross-provider форме.
- Вы запускаете один eval suite против трёх адаптеров.
Остался третий провайдер. У Google свой недавний способ вести agent loop - Interactions API.