В инженерном блоге часто обсуждают создание эффективных агентов и проектирование каркасов для задач длительного выполнения. Такие каркасы включают предположения о возможностях Claude, которые быстро устаревают по мере улучшения моделей.
Например, ранее выяснилось, что Claude Sonnet 4.5 преждевременно завершал задания, приближаясь к пределу контекста — это называлось "тревогой контекста". Проблему решали перезагрузкой контекста в каркасе. Однако с Claude Opus 4.5 этого уже не требовалось, и перезагрузки стали лишними.
Каркасы продолжают развиваться, поэтому создали Управляемые агенты — сервис в платформе Claude для запуска агентов долгосрочного действия через стабильные интерфейсы, независимые от текущих реализаций.
Разработка Управляемых агентов решила классическую задачу: создание системы для будущих программ. Операционные системы когда-то виртуализировали аппаратное обеспечение в общие абстракции вроде процесса и файла. Команда read() одинаково работает с дисками 1970-х или современными SSD, пока интерфейсы стабильны, а реализации меняются.
Управляемые агенты применяют тот же подход. Виртуализированы ключевые части агента: сессия (неизменяемый лог событий), каркас (цикл вызовов Claude и маршрутизации инструментов) и песочница (среда для выполнения кода и правок файлов). Это позволяет менять реализации независимо, фиксируя только форму интерфейсов.

Не заводите домашнего питомца
Сначала все компоненты агента поместили в один контейнер: сессия, каркас и песочница делили среду. Плюсы включали прямые системные вызовы для правок файлов без границ сервисов.
Но такая связка создала проблему: получился "питомец" по аналогии с pets-vs-cattle. Питомец — это уникальный экземпляр, требующий ручного ухода, в отличие от interchangeable скота. Сервер стал питомцем: сбой контейнера уничтожал сессию, а зависший требовал реанимации.
Отладка зависших сессий проходила через WebSocket-поток событий, который не показывал источник сбоя — будь то ошибка в каркасе, потеря пакета или отключение контейнера. Инженеру приходилось заходить в shell контейнера с данными пользователей, что делало диагностику невозможной.
Каркас предполагал, что ресурсы Claude находятся в том же контейнере. При запросах подключения к частным облакам клиентов приходилось либо соединять сети, либо переносить каркас. Предположение стало барьером.
Решение — разграничить "мозг" (Claude и каркас) от "рук" (песочниц и инструментов) и сессии (лога событий). Каждый элемент стал независимым интерфейсом, устойчивым к сбоям.
Каркас выходит из контейнера. Мозг теперь вызывает контейнер как инструмент: execute(name, input) → string. Контейнеры превратились в скот. При сбое каркас ловит ошибку инструмента и передает Claude. При повторной попытке создается новый контейнер по рецепту: provision({resources}). Больше не нужно спасать контейнеры.
Восстановление после сбоя каркаса. Каркас тоже стал скотом. Сессионный лог вне его, так что при крахе новый запускается командой wake(sessionId), загружает лог через getSession(id) и продолжает с последнего события. В цикле агента каркас фиксирует события: emitEvent(id, event).

Граница безопасности. В связанной схеме любой ненадежный код от Claude выполнялся в контейнере с учетными данными — инъекция промта позволяла их прочитать. С токенами злоумышленник мог создавать неограниченные сессии. Ограничение области помогало, но Claude становится умнее. Структурное решение: токены недоступны из песочницы.
Применены два подхода. Авторизацию пакуют с ресурсом или хранят во внешнем хранилище. Для Git токен репозитория используется при инициализации песочницы для клонирования, интегрируется в локальный remote. Внутри push и pull работают без передачи токена агенту. Для пользовательских инструментов — поддержка MCP с OAuth в хранилище. Claude вызывает через прокси с токеном сессии, прокси берет credentials и звонит сервису. Каркас не видит учетных данных.
Сессия — не окно контекста Claude
Задачи долгого горизонта превышают окно контекста Claude. Стандартные методы включают необратимые выборы: что сохранить. Ранее изучали компакцию для суммирования окна, инструмент памяти для записи в файлы и обрезку старых результатов или мыслей.
Но необратимость приводит к сбоям: неизвестно, какие токены понадобятся позже. При компакции удаленные сообщения восстанавливаемы только при хранении. Исследования предлагали хранить контекст вне окна, как объект в REPL, доступный кодом для фильтрации.

В Управляемых агентах сессия дает то же преимущество: объект контекста вне окна Claude, надежно в логе. Интерфейс getEvents() позволяет выбирать срезы по позициям. Мозг гибко использует: продолжает с последней точки, отматывает для предыстории или перечитывает перед действием.
Загруженные события трансформируются в каркасе перед окном Claude — для организации, кэша промтов или инженерии контекста. Разделены хранилище в сессии и управление в каркасе, так как будущее инженеринга непредсказуемо. Интерфейсы гарантируют только доступность лога.
Много мозгов, много рук
Много мозгов. Разграничение решило жалобу клиентов: для ресурсов в их VPC требовалось соединение сетей, так как каркас ожидал ресурсы рядом. Без контейнера предположение исчезло. Плюс производительность: раньше каждый мозг требовал контейнер с полной инициализацией — клонирование, загрузка событий.
Это проявлялось в time-to-first-token (TTFT) — задержке до первого токена ответа, наиболее заметной для пользователя.
Теперь контейнеры создаются по необходимости через execute(name, input) → string. Без нужды в песочнице вывод начинается сразу после загрузки событий. p50 TTFT упал на 60%, p95 — более чем на 90%. Масштаб — запуск stateless каркасов с подключением рук по делу.
Много рук. Нужно подключать мозг к нескольким средам, решая, куда делегировать — сложнее одной shell. Раньше модели не справлялись, контейнер ограничивал: сбой терял состояние всех рук.
Каждая рука — инструмент execute(name, input) → string: имя и вход, строка на выходе. Поддерживает любые инструменты, MCP, свои. Каркас не знает, контейнер это или эмулятор. Руки не привязаны, мозги передают их друг другу.

Заключение
Задача старая: системы для несуществующих программ. ОС выжили десятилетиями благодаря абстракциям над железом. Управляемые агенты создают платформу для будущих каркасов и компонентов вокруг Claude.
Это мета-каркас без мнения о конкретных реализациях для Claude. Система с общими интерфейсами для разных каркасов. Например, Claude Code отлично работает в задачах, специализированные — в нишах. Подходит под любые, адаптируясь к росту интеллекта Claude.
Мета-дизайн фиксирует интерфейсы вокруг Claude: манипуляция состоянием (сессия), вычисления (песочница). Масштаб на мозги и руки. Интерфейсы обеспечивают надежность и безопасность на длинных горизонтах без предположений о количестве или размерах.