В марте 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: "Как отменить подписку?" })

Ценообразование и лимиты

ПараметрОписание
HibernationIdle Durable Object почти не потребляет ресурсы. Оплата за wall-time и память только во время работы.
SQLiteДо 10 GB на объект. Биллинг по операциям.
МасштабированиеОдин Durable Object — до ~1000 RPS. Горизонтальное масштабирование через разбиение на ключи.
AI-вызовыОплачиваются отдельно через Workers AI или внешнего провайдера.