В марте 2025 года Cloudflare представила Agents SDK — инструмент для запуска агентов как stateful-исполнителей поверх Durable Objects. Каждый агент получает собственную идентичность, персистентное состояние, SQLite-базу данных, WebSocket-соединения и встроенный планировщик задач. При отсутствии активности агент переходит в режим hibernation и не потребляет ресурсы. При поступлении HTTP-запроса, WebSocket-сообщеения, электронного письма или срабатывания будильника — агент пробуждается вместе со своим состоянием.
Cloudflare Agents SDK — это TypeScript-класс Agent, который разворачивается в Durable Object. На каждого пользователя, сессию или игровую комнату создается отдельная персистентная инстанция с собственной идентичностью, SQLite-базой (до 10 GB) и hibernation. Инструмент успешно комбинируется с OpenAI Agents SDK и функционирует как remote MCP-сервер.
Проблема stateless-архитектуры
Традиционный LLM-API сервер работает по stateless-принципу. На каждый запрос требуется извлечь историю диалога из внешней базы, скомпоновать контекст, отправить в модель, обработать ответ и записать результат обратно. Агентские сценарии добавляют дополнительную сложность:
- длительные циклы размышлений с 5–20 вызовами инструментов;
- пробуждение по расписанию (например, отправка сводки в понедельник в 9:00);
- взаимодействие в реальном времени через WebSocket или телефонные звонки;
- механизм human-in-the-loop с ожиданием подтверждения от пользователя.
В stateless-контексте это приводит к необходимости реализации очередей, внешних баз данных, механизмов блокировок и retry-логики. Cloudflare предлагает альтернативу: actor model поверх Durable Objects.
Архитектура Durable Object
Durable Object представляет собой микросервер в сети Cloudflare со следующими характеристиками:
- уникальный адрес по имени (один инстанс на ключ, например user:42 или session:abc);
- все запросы с одинаковым ключом направляются в один инстанс (single-writer);
- встроенная SQLite-база данных объемом до 10 GB;
- WebSocket hibernation: соединение сохраняется, инстанс спит;
- встроенный планировщик (alarms);
- глобальный деплой без необходимости в собственной инфраструктуре.
Agents SDK надстраивает над этой примитивной моделью API для агентов.
Реализация агента
import { Agent } from "agents"
export class SupportAgent extends Agent<Env> {
initialState = { messages: [] as Message[] }
async onMessage(message: string) {
const next = [...this.state.messages, { role: "user", text: message }]
const reply = await this.env.AI.run("@cf/meta/llama-3.3-70b-instruct", {
messages: next,
})
this.setState({ messages: [...next, { role: "assistant", text: reply.response }] })
return reply.response
}
async onConnect(connection: Connection) {
connection.send(JSON.stringify(this.state))
}
}
Ключевые аспекты реализации:
- Agent — базовый класс, Env содержит биндинги Workers (KV, R2, AI, секреты);
- состояние хранится в SQLite, но взаимодействие происходит через обычный JSON;
- setState автоматически рассылает изменения WebSocket-клиентам;
- обработчики onMessage, onConnect, onRequest, onEmail служат точками входа в агента;
- для клиентского взаимодействия доступны хуки useAgent и AgentClient для React.
Ключевые возможности
Персистентное состояние без внешней базы
Поле this.state служит оперативной памятью, а SQLite внутри Durable Object — долговременным хранилищем. Возможно хранение истории диалога, кэша эмбеддингов и пользовательских данных в одном месте.
Планировщик задач и alarms
Расписания типа «подумать через час», «проверять папку раз в день» или «отправить напоминание в пятницу» встроены в SDK. Это исключает необходимость в отдельном cron-сервисе или выделенном воркере для напоминаний.
WebSocket и real-time UI
Клиент и агент поддерживают постоянное соединение. Обновления состояния доставляются в UI без polling. Hibernation делает долгоживущие соединения экономически эффективными: оплата начисляется только за время работы, а не за idle.
Email-вход
Агент может пробуждаться на входящее письмо через Cloudflare Email Routing. Это удобно для сценариев, где пользователь отправляет письмо и получает сформированный ответ.
MCP-сервер из агента
Агент может быть опубликован как remote MCP-сервер. Например, компания Knock использует Cloudflare Agents SDK для remote MCP, который подключают клиенты из ChatGPT или Claude.
Workflows для длительных задач
Для агентов с длительными исследовательскими циклами (например, сравнение GitHub-репозиториев по теме) Cloudflare предлагает Workflows — durable execution с retry, step.sleep, waitForEvent. Каждый LLM-вызов и tool call формирует отдельный checkpoint: падение не приводит к потере всего прогресса.
Интеграция с OpenAI Agents SDK
Cloudflare предлагает разделение ролей между двумя фреймворками:
- OpenAI Agents SDK отвечает за reasoning loop, выбор инструментов и планирование;
- Cloudflare Agents SDK отвечает за идентичность, память, runtime и расписание.
Логика мышления агента пишется на OpenAI SDK внутри метода onMessage Cloudflare-агента. Состояние и история берутся из this.state. Абстракция над LLM не является монолитной — возможно использование любого другого фреймворка (Vercel AI SDK, LangGraph) или прямой fetch.
Критерии применимости
| Сценарий | Рекомендация |
|---|---|
| Чаты с памятью на каждого клиента | Да — идеальный кейс |
| Real-time коллаборация, multiplayer, один инстанс на комнату | Да — native поддержка |
| Агенты с cron или отложенными задачами | Да — встроенные alarms |
| Remote MCP-сервер с hibernation и SQLite | Да — из коробки |
| Явный vendor-lock по данным (PostgreSQL в AWS, Redis в GCP) | Осторожно — выигрыш меньше |
| Одноразовые stateless вызовы LLM | Нет — обычный Worker дешевле и проще |
Агенты SDK существуют внутри экосистемы Cloudflare. Перенос логики без модификаций невозможен — SQLite, hibernation, alarms и actor-модель являются инфраструктурными особенностями платформы. Рекомендуется трезво оценивать риск vendor lock, особенно если агентская функциональность составляет ядро продукта.
Практические сценарии
Customer-success бот с памятью
Один агент на клиента. История переписки, предпочтения, текущие тикеты хранятся в SQLite. Ответы формируются в реальном времени в веб-виджете и параллельно в email.
Исследовательский агент
Запускается через Workflows, выполняет 60+ вызовов. При падении на 30-м вызове поднимается с того же места без потери прогресса. Промежуточные результаты стримятся в веб-UI.
Multi-agent система
Triage-агент (router) распределяет задачи по специализированным агентам (Sales, Billing, Tech). Каждый специализированный агент — отдельный Durable Object с собственной памятью.
Phone-call агент
WebSocket от Twilio Media Streams направляется прямо в Cloudflare-агент. Аудио обрабатывается в потоке, результаты фиксируются в SQLite.
Агент на AI-сгенерированное приложение
Функция Durable Object Facets (апрель 2026) позволяет изолированно хранить состояние каждого под-приложения в dynamic worker.
Быстрый старт
Создание проекта из шаблона:
npm create cloudflare@latest -- --template cloudflare/agents-starter
Установка в существующий проект:
npm install agents
Конфигурация wrangler.toml для Durable Object с SQLite:
[[durable_objects.bindings]]
name = "AGENT"
class_name = "SupportAgent"
[[migrations]]
tag = "v1"
new_sqlite_classes = ["SupportAgent"]
Клиент на React:
import { useAgent } from "agents/react"
const agent = useAgent({ agent: "support-agent", name: "user:42" })
await agent.send({ type: "message", text: "Как отменить подписку?" })
Ценообразование и лимиты
| Параметр | Описание |
|---|---|
| Hibernation | Idle Durable Object почти не потребляет ресурсы. Оплата за wall-time и память только во время работы. |
| SQLite | До 10 GB на объект. Биллинг по операциям. |
| Масштабирование | Один Durable Object — до ~1000 RPS. Горизонтальное масштабирование через разбиение на ключи. |
| AI-вызовы | Оплачиваются отдельно через Workers AI или внешнего провайдера. |