2026 год — это год, когда обвязки агентов (agent harnesses) переходят в промышленную эксплуатацию. Программное обеспечение, управляющее доступом модели к внешнему миру — такие обвязки, как Codex, Claude Code, OpenCode, Pi и Project Think — достигло уровня зрелости, когда команды развёртывают агентов как реальную, несущую нагрузку инфраструктуру, а не просто прототипы.
Но создание агентов, способных выжить в продакшене, — сложная задача.
Мы узнали это на собственном опыте, разрабатывая Project Think как нашу собственную обвязку для агентов. В работе с нашими заказчиками по запуску агентов в продакшен мы обнаружили общий набор проблем распределённых систем, с которыми сталкивается каждый агент при работе в облаке. Когда агент прерывается, как он может автоматически и корректно возобновить работу с того места, где остановился, без потери контекста или напрасной траты токенов? Как агенты могут безопасно выполнять ненадёжный код? Как агенты могут использовать инструменты, для которых они были обучены?
Обвязка не может решить эти проблемы сама по себе. Они привязаны к состоянию, хранению и вычислениям — а значит, зависят от платформы, на которой работает агент. Вот почему мы берём наш опыт закалки Project Think для продакшена и привносим его в Cloudflare Agents SDK в качестве базового слоя. Надёжное выполнение (durable execution), динамическое выполнение кода, надёжная файловая система и динамические рабочие процессы — теперь доступны любой обвязке, построенной на Agents SDK.
В то же время над обвязкой появился новый слой. Фреймворки, такие как Flue, оборачивают обвязку структурами проектов, соглашениями, интеграциями и опытом разработчика, которые делают создание агентов продуктивным.
Чтобы решить эти проблемы масштабирования, появляется новый трёхслойный стек для создания ИИ промышленного уровня. Вот как части сочетаются друг с другом, от пользовательского опыта разработчика до базовых примитивов платформы:
-
Фреймворк (Flue) — структура проекта, соглашения, интеграции, CLI и опыт разработчика для создания агентов.
-
Обвязка (Harness) (Pi, Project Think) — агентный цикл, который вызывает инструменты, читает результаты, управляет контекстом и продолжает работу до завершения задачи.
-
Среда выполнения/платформа (Cloudflare Agents SDK) — примитивы вычислений, состояния и хранения, от которых зависит всё вышеперечисленное.
Agents SDK — это нижний слой: он делает такие примитивы, как надёжное выполнение, доступными любой обвязке и любому фреймворку. Flue, наш новый фреймворк с открытым исходным кодом от команды, стоящей за Astro, — первый, кто строится на нём. Вот как.
Flue
Flue выпустил бета-версию 1.0 на этой неделе, построенную на обвязке Pi, той же самой, на которой построен OpenClaw. Что делает его особенным как фреймворк для агентов — это подход: вы не прописываете сценарий действий агента, а описываете то, что он знает. Определите контекст, необходимый агенту — его модель, навыки, песочницу и инструкции — и он автономно решит любую поставленную задачу. Не нужно писать оркестрационный цикл.
Именно эта декларативная модель делает написание агентов простым: вот агент триажа, который перехватывает отчёт об ошибке, воспроизводит его в песочнице и диагностирует проблему менее чем в 25 строках.
Опыт разработчика Flue
Мощь Flue заключается в том, что агенты не существуют изолированно. Они созданы, чтобы находиться там, где уже работают ваши пользователи, и интегрироваться с вашими предпочитаемыми инструментами:
-
Агенты где угодно: Размещайте своих агентов в Slack, GitHub, Linear или Discord с предварительно настроенными каналами, которые автоматически обрабатывают верификацию событий и отправку.
-
Без головы, но готов к UI: Агенты не должны жить в чёрном ящике. Агенты Flue могут работать полностью без головы для фоновых задач, но @flue/react предоставляет нативные хуки фронтенда, которые передают состояние агента, выполнение инструментов и живые сообщения прямо в ваше фронтенд-приложение, без необходимости создавать собственный механизм реального времени с нуля.
-
Готовность к экосистеме: Flue упрощает добавление и обновление интеграций с помощью команд, таких как
flue add channel slack, генерируя Markdown-шаблон, который ваш собственный кодирующий агент может прочитать, изменить и чисто интегрировать прямо в вашу кодовую базу.
Спроектирован для продакшена, а не только для прототипов
Перенос агента из локального терминала в производственную экосистему вводит традиционные сбои распределённых систем. Сбои хоста, тайм-ауты API от LLM-провайдеров и неожиданные перезапуски угрожают стереть краткосрочную память текущего шага агента.
Flue решает эту проблему с помощью Durable Streams (Надёжные потоки). Каждое событие в истории выполнения добавляется в журнал только для добавления. Обрабатывая каждый запрос, ответ инструмента и выбор модели как неизменяемый реестр, состояние агента никогда не является временным. Если процесс умирает, другой просто подхватывает журнал и продолжает с того самого шага, на котором остановился.
Развёртывание где угодно, включая Cloudflare
Flue — это мультиоблачный фреймворк. На Node.js каждый агент работает как долгоживущий процесс. Вы можете развернуть его на любой виртуальной машине или в контейнере, запустить в GitHub Actions или встроить на существующий сервер. Но когда вы нацеливаетесь на Cloudflare, каждый агент становится Durable Object.
Запуская каждого агента Flue внутри собственного Durable Object, Cloudflare может автоматически масштабироваться до любого количества агентов, каждый с собственным изолированным хранилищем и вычислениями. Вам не нужно выделять серверы, управлять липкими сессиями или беспокоиться о шумных соседях. А когда агенты Flue развёрнуты на Cloudflare, они получают надёжное выполнение с использованием методов Agents SDK: runFiber(), stash() и onFiberRecovered(). Flue также использует @cloudflare/codemode и @cloudflare/shell для выполнения кода в песочнице в рамках надёжного рабочего пространства.
Что обвязкам нужно от агентной платформы
Цель Flue на Cloudflare работает так эффективно, потому что она чисто отображается на основные примитивы, которые мы встроили в Agents SDK. Вы даже можете заглянуть в исходный код Flue, чтобы понять, как Pi, базовая обвязка, адаптирована для работы на Cloudflare Agents SDK.
Вот как Flue использует Agents SDK под капотом и что нужно для надёжного запуска любой современной обвязки агентов в масштабе.
Каждой обвязке агента нужно надёжное выполнение (durable execution)
Шаг агента — это не одиночный запрос. Модель передаёт токены, вызывает инструменты, ждёт результатов, возможно, запрашивает одобрение человека или делегирует работу подагенту. Эта последовательность может занимать секунды или минуты, и в любой момент процесс может быть прерван или упасть. Когда это происходит, всё состояние агента, находившееся в памяти, теряется: потоковое соединение, ожидающие вызовы инструментов, место, где агент находился на своём шаге. Конечно, история разговора сохраняется на диске, но пользователь видит спиннер, который никогда не завершается. Это сломанный пользовательский опыт.
Fibers решают эту проблему, предоставляя нативный механизм контрольных точек прямо внутри базового Durable Object агента. runFiber() записывает прогресс в SQLite-хранилище Durable Object до начала работы на шаге агента и устанавливает контрольную точку с помощью stash() по мере продвижения шага. Когда после прерывания запускается новый экземпляр агента, onFiberRecovered() доставляет последнюю контрольную точку, так что ваш агент знает, что шаг был прерван, на каком этапе он остановился, и может решить, как продолжить.
import { Agent } from "agents";
import type { FiberRecoveryContext } from "agents";
class MyAgent extends Agent {
async doWork() {
await this.runFiber("my-task", async (ctx) => {
const step1 = await expensiveOperation();
ctx.stash({ step1 });
const step2 = await anotherExpensiveOperation(step1);
this.setState({ ...this.state, result: step2 });
});
}
async onFiberRecovered(ctx: FiberRecoveryContext) {
if (ctx.name !== "my-task") return;
const { step1 } = (ctx.snapshot ?? {}) as { step1?: unknown };
if (step1) {
const step2 = await anotherExpensiveOperation(step1);
this.setState({ ...this.state, result: step2 });
}
}
}
Flue использует runFiber() в своей цели на Cloudflare именно для этого. С помощью хука onFiberRecovered() ваша обвязка может решить, как возобновить выполнение шага — будь то попытка полной реконструкции модели, как в Project Think, которая восстанавливает состояние шага, или воспроизведение определённых частей шага.
Выполнение кода лучше, чем перегружать агентов инструментами
Оснастки агентов предоставляют моделям доступ к внешнему миру через инструменты. Но поверхность инструментов быстро растет, и модели хуже выбирают правильный инструмент, когда список становится длиннее, а контекстное окно заполняется определениями инструментов. Лучший шаблон: дать модели один инструмент, выполняющий код. Модель пишет функцию на TypeScript, которая вызывает нужные ей API, а оснастка выполняет ее. Мы писали об этом, когда представили Code Mode.
Вопрос в том, где выполняется этот код. Чтобы безопасно запускать код, сгенерированный LLM, нужна песочница. Но типичные песочницы были бы медленными, дорогостоящими и неэффективными для каждого вызова инструмента. Именно поэтому Agents SDK предоставляет @cloudflare/codemode, который оборачивает Dynamic Workers, чтобы выполнять код LLM в собственном изоляте Worker только с теми привязками, которые вы предоставляете.
Code Mode создает свежий Dynamic Worker для каждого фрагмента, запускает его и удаляет. Изоляты запускаются менее чем за 10 мс и $0,002 за загрузку, что делает выполнение значительно более быстрым и дешевым, чем загрузка контейнера каждый раз, когда вашему агенту нужно выполнить короткий кусок кода. Flue использует @cloudflare/codemode на своей цели Cloudflare для работы своего инструмента кода. Агент пишет JavaScript для рабочей области и запускает его с помощью Code Mode.
Для большинства задач рабочей области не нужен полный контейнер
Оснастки агентов часто нуждаются в файловой системе, будь то для чтения файлов, записи результатов, поиска по коду и понимания различий. Особенно агенты для кодирования живут в файловой системе. Но если оснастка работает в бессерверной среде, как она может получить надежную файловую систему, сохраняющуюся между выполнениями?
Обычный ответ — контейнер. Это работает, но дорого для того, что в основном делают агенты. Большинство операций с файловой системой в ходе работы агента — это текст. Рассмотрим агента рецензирования, который читает файлы, ищет в исходном коде или, возможно, пишет патч. Для этого не нужна полная загрузка Linux.
@cloudflare/shell предоставляет вашему агенту надежную виртуальную файловую систему внутри его Durable Object, поддерживаемую SQLite. Он предоставляет типизированные файловые операции — чтение, запись, редактирование, поиск, grep, diff — которые оснастки агентов могут использовать как инструменты.
Вместо вызова отдельных инструментов агент Flue, работающий на цели Cloudflare, пишет JavaScript для API виртуального состояния файлов рабочей области. Выполняя больше операций внутри Durable Object, агент получает выгоду от более эффективного процесса выполнения изолята, полностью избегая накладных расходов контейнера:
async () => {
const files = await state.glob("src/**/*.ts");
const results = [];
for (const file of files) {
const content = await state.readFile(file);
const todos = content.match(/// TODO:.*/g);
if (todos) results.push({ file, todos });
}
return results;
}
Это приводит к более быстрой и экономичной среде песочницы для агентов, которым нужно выполнять операции оболочки и файловой системы для выполнения своей работы. А для агентов, которым нужна полная ОС для запуска npm install, git или компиляторов, Cloudflare Containers предоставляет это. Мы также строим @cloudflare/workspace, чтобы синхронизировать виртуальную файловую систему заданного Durable Object с файловой системой контейнера, что позволяет плавно переходить от легковесных Workers к среде Linux только тогда, когда это необходимо.
Dynamic Workflows: позвольте агентам писать свои собственные рабочие процессы для последовательного повторения задач
Но что происходит, когда агенту нужно сделать больше, чем читать файлы или выполнять отдельные фрагменты кода? Что происходит, когда ему нужно оркестровать масштабный многоэтапный конвейер, который должен последовательно повторяться со временем, например, рецензирование кода, успешно устраняющее ошибки, или исследовательский процесс, дающий хорошие результаты? Оснастка не может сама обеспечить надежное многоэтапное выполнение. Ей нужна платформа для сохранения каждого шага, повторных попыток при сбоях и возобновления после прерываний.
Этот шаблон набирает популярность. Claude Code недавно выпустил dynamic workflows, где Claude пишет скрипт на JavaScript во время выполнения, чтобы передать работу десяткам подагентов, и среда выполнения надежно его исполняет. @cloudflare/dynamic-workflows предоставляет это для любой оснастки, работающей на Agents SDK. Ваш агент генерирует рабочий процесс во время выполнения, и движок Workflows сохраняет каждый шаг, повторяет сбои и может спать часами или ждать внешних событий, таких как одобрение человека.
Из класса Agent runWorkflow() подключает вашего агента к движку Workflows. Агент запускает рабочий процесс и может уснуть. Рабочий процесс вызывает агента через RPC, чтобы сообщить о прогрессе, обновить состояние или запросить одобрение. Когда рабочий процесс завершается, агент просыпается с результатом.
Прямой доступ к экосистеме Cloudflare
Помимо вычислений и хранения, оснасткам агентов нужен доступ к внешним возможностям: веб-браузинг, электронная почта, память, поиск, инференс. Оснастка не должна интегрировать каждую из них отдельно, управлять API-ключами для каждой или беспокоиться об утечке учетных данных через код, сгенерированный агентом.
Класс Agent предоставляет вашей оснастке доступ к остальной части Cloudflare через привязки: AI Gateway для отслеживания расходов и лимитов на агента, Browser Run для веб-автоматизации, Email Service для рабочих процессов с почтовыми ящиками, Agent Memory для постоянного припоминания, AI Search для поиска, Containers для рабочих нагрузок, требующих полной ОС, и инференс от 14+ поставщиков моделей. Привязки предоставляют возможности без раскрытия учетных данных: ваш агент использует их, но ключи никогда не попадают в код, сгенерированный агентом.
Перенесите своих агентов в агентное облако
Мы знаем, что этот подход работает, потому что это точная архитектурная основа, которую мы использовали для создания Project Think, нашей собственной оснастки агента. Хотя Project Think остается нашим высоко оптимизированным готовым решением для нативных агентских сред Cloudflare, Agents SDK гарантирует, что более широкое open-source сообщество сможет использовать те же самые проверенные в боях примитивы, включая Flue.
Если вы создаете агентов сегодня с помощью Flue, вы можете развернуть их в несколько кликов на Cloudflare. А если вы создаете свою собственную оснастку агента или фреймворк для агентов, нацеливайтесь на Agents SDK и получайте интеграцию с платформой бесплатно.
-
Agents SDK: developers.cloudflare.com/agents
-
Flue: flueframework.com,
npm install @flue/runtime -
Think: docs
-
Cloudflare Community: community.cloudflare.com