Перейти к содержанию
Публикация AiManual

Managed Deep Agents v0.9: расписания, конфигурация на каждый запуск и реакции в Slack

LangChain выпустила Managed Deep Agents v0.9 в публичной бете: агенты создают расписания через Schedules SDK, настраиваются заново на каждом запуске и ставят ре

Коротко

Что будет в материале

  1. 01

    Что нового в Managed Deep Agents v0.9

  2. 02

    Расписания и повторяющиеся задачи: как работает Schedules SDK

  3. 03

    Конфигурация на каждый запуск: одна инсталляция вместо копий агента

  4. 04

    Контроль доступа и безопасность через конфигурацию

Что нового в Managed Deep Agents v0.9

LangChain выпустила Managed Deep Agents v0.9 в публичной бете 7 октября 2026 года. Релиз добавляет агенту три возможности: он создаёт расписания и повторяющиеся задачи прямо в диалоге через новый Schedules SDK, собирает свою конфигурацию заново на каждом запуске и ставит реакции в Slack, чтобы подтвердить получение сообщения до ответа. Анонс написал Nathan Drezner в блоге LangChain: What's New in Managed Deep Agents: schedules, per-run configuration, and Slack reactions.

Раньше эти задачи решались снаружи агента. Расписание жило в кроне или CI рядом с ним, а под каждую команду, канал или репозиторий держали свою почти одинаковую копию агента с урезанным набором инструментов. v0.9 переносит обе функции внутрь платформы. Фундамент для этого заложила предыдущая версия: v0.8 добавила user-owned credentials, пользовательскую память, HTTP-каналы и передачу файлов в Slack, о чём мы разбирали в статье Managed Deep Agents 0.8: пользовательская память, свои credentials и HTTP-каналы.

ВозможностьЧто делаетГде полезна
Schedules SDKАгент создаёт напоминания, фоллоу-апы и повторяющиеся задачи в ходе разговораДайджесты, напоминания, отложенные проверки
Конфигурация на каждый запускОдна деплой-инсталляция выбирает модель, инструкции, навыки, MCP-серверы и песочницу под конкретный запускОдин агент на несколько команд, каналов или репозиториев
Реакции в SlackАгент ставит 👀 по умолчанию на сообщение, пока обрабатывает запросВнутренние Slack-агенты с длинными задачами

Ограничения у беты тоже есть, и о них честнее сказать сразу: сроки выхода из беты в анонсе не названы, детали реализации реакций не раскрыты, а список поддерживаемых моделей и песочниц для конфигурации на каждый запуск не приводится. Ниже разберём каждую возможность по отдельности и посмотрим, что она даёт на практике.

Расписания и повторяющиеся задачи: как работает Schedules SDK

Schedules SDK позволяет агенту создавать напоминания, фоллоу-апы и повторяющиеся задачи прямо в ходе разговора. Реплика вида «Напомни мне об этом завтра» превращается в объект расписания, который живёт на стороне платформы, а не в голове модели. SDK принимает cron-выражение, таймзону и промпт: промпт описывает, что именно выполнить при срабатывании, cron задаёт ритм, таймзона привязывает его к реальному времени команды. Формулировки и код взяты из анонса релиза (источник).

Ключевая деталь: расписание выполняется от имени человека, который его запросил. Агент работает с его правами и подключениями, а не с безликим сервисным аккаунтом. Когда cron срабатывает, LangSmith запускает новый запуск с указанным промптом. Расписание наследует канал, в котором его создали, поэтому будничное напоминание, запрошенное в Slack, при каждом запуске публикует новое сообщение в тот же разговор. Результат возвращается туда, откуда пришёл запрос, и это снимает необходимость руками маппить выводы агента на нужный чат.

Пример создания расписания из запуска

Минимальный вызов выглядит так:

await schedules.create(
    owner={"type": "user"},
    cron="0 9 * * 1-5",
    timezone="America/Los_Angeles",
    prompt="Write the daily digest.",
)

Здесь owner={"type": "user"} означает запуск от имени пользователя, cron="0 9 * * 1-5" срабатывает в 9:00 по будням, а timezone задаёт, в какой зоне это время считать. Промпт не привязан к конкретной модели: его выполнит та конфигурация, которая достанется запуску.

Чтобы модель могла вызывать расписания в диалоге, создание удобно обернуть в инструмент. Схематично (пример сокращён, импорты и полный контекст окружения опущены):

@tool
async def remind_me(prompt: str, cron: str, timezone: str = "UTC") -> str:
    schedule = await schedules.create(
        owner={"type": "user"},
        cron=cron,
        timezone=timezone,
        prompt=prompt,
    )
    return schedule.id

Инструмент принимает текст задачи, расписание и таймзону, а возвращает идентификатор созданного расписания. Дальше агент может сослаться на него в ответе пользователю. Дополнительных полей SDK в анонсе не описано, так что не стоит рассчитывать на недокументированные параметры вроде приоритетов или цепочек запусков.

Одноразовые расписания и фоллоу-апы в треде

Если вместо cron указать at, расписание сработает один раз и ответит в исходном треде. Это ровно тот сценарий, где нужен фоллоу-ап: «проверь этот деплой через час» вернёт результат в ту же ветку, где прозвучал запрос, и контекст обсуждения не потеряется. Повторяющиеся расписания лучше держать на ежедневных дайджестах, еженедельных отчётах и регулярных напоминаниях, где результат логично публиковать новым сообщением.

Конфигурация на каждый запуск: одна инсталляция вместо копий агента

Вторая возможность меняет то, как агент собирается перед работой. Теперь агент оформляется как вызываемая функция: она получает runtime в начале каждого запуска и возвращает определение define_deep_agent. В этом определении выбираются модель, инструкции, навыки, MCP-серверы и песочница для конкретного запуска. Одна деплой-инсталляция обслуживает несколько команд или репозиториев, вместо того чтобы поддерживать почти одинаковые копии агента для каждой группы (источник).

Как устроена функция define_deep_agent

Логика укладывается в условную ветку: функция смотрит на контекст запуска и возвращает подходящее определение. Схематичный набросок без привязки к конкретным именам полей runtime:

# схематично: имена полей runtime зависят от контекста запуска

def build_agent(runtime):
    if is_billing_context(runtime):
        return define_deep_agent(
            model=...,
            instructions=...,
            skills=[...],
            mcp_servers=[...],
            sandbox=...,
        )
    return define_deep_agent(...)

Разница с подсказками в промпте принципиальная. Инструкция «используй этот навык, когда речь о биллинге» оставляет решение модели, и инструмент всё равно присутствует в контексте. Функция же собирает конфигурацию до запуска модели, поэтому лишние навыки и MCP-инструменты в контекст не попадают вовсе.

Экономия на контексте здесь не абстрактная. LangChain последовательно сокращает базовую обвязку агента: в v0.7 входные токены упали с ~6k до ~2k, то есть на 65%, за счёт удаления стандартного системного промпта и сжатия описаний инструментов (подробности в разборе Deep Agents v0.7: как LangChain сократил входные токены на 65%). Конфигурация на каждый запуск работает в ту же сторону: агент несёт только те схемы инструментов, которые нужны текущей задаче.

MCP-серверы для агентов: динамический выбор и изоляция

MCP-серверы выбираются в конфигурации на каждый запуск, и это главный практический выигрыш. Агент не видит MCP-инструменты вне своей конфигурации: если в запуске не указан сервер, его инструментов для модели просто не существует. Типичная раскладка для внутреннего Slack-агента: запуск из канала финансов получает billing-навыки и серверы для работы с платежными системами, а запуск из канала платформенной команды получает MCP-сервер для incident-response. Инструкции у этих запусков тоже разные, хотя деплой один.

Побочный эффект приятный: контекст остаётся компактным. Чем меньше схем инструментов висит перед моделью, тем меньше токенов уходит на каждый шаг и тем реже агент тянется к инструменту, который ему не нужен.

Контроль доступа и безопасность через конфигурацию

Конфигурация задаётся до запуска модели, и это ключевое свойство с точки зрения доступа. Агент физически не может вызвать инструмент, которого нет в его конфигурации, потому что модель не получает его схему. Такой подход отличается от разграничения прав через инструкции: там модель видит инструмент и должна сама решить, что он ей не положен. Здесь решение принимает код до старта модели.

Второй контур ограничений связан с расписаниями. Они выполняются от имени пользователя, который их запросил, с его набором прав и подключений. Если у сотрудника нет доступа к репозиторию или внешнему сервису, то и запуск по расписанию туда не попадёт. Это удобно для аудита: за каждым отложенным действием стоит конкретный человек, а не общий сервисный аккаунт с широкими правами.

Важно не переоценивать эффект. Конфигурация на каждый запуск сужает поверхность атаки и держит контекст в узде, но не заменяет управление секретами, аудит вызовов и нормальные права в самих системах. Если у пользователя широкие права, расписание от его имени унаследует ту же широту. Границы доступа всё равно задаются там, где живут данные и API.

Реакции в Slack: подтверждение получения сообщения

Третья возможность касается обратной связи в интерфейсе. Агенты научились ставить реакции в Slack, чтобы подтвердить получение сообщения до ответа. По умолчанию используется 👀. Для длинных задач это заметно улучшает восприятие: пользователь видит, что запрос принят и обрабатывается, и не пишет повторно через минуту. Раньше в такой ситуации оставалось только ждать сообщения от бота.

Как настроить эмодзи и отключить реакции

Релиз упоминает, что эмодзи можно отключить или выбирать функцией, в том числе через дешёвую модель: тогда решение о реакции принимает не человек, а отдельный вызов небольшой модели. Подробностей реализации в анонсе нет, поэтому стоит проверять поведение на своём рабочем пространстве Slack, а не закладывать конкретную схему в документацию команды. Если канал забит служебными реакциями или они мешают в тредах с внешними участниками, реакции проще выключить точечно.

Практические сценарии для внутренних агентов в Slack и собственных каналах

Три возможности хорошо складываются друг с другом. Агент принимает запрос, ставит 👀, а дальше либо отвечает сразу, либо поручает продолжение расписанию. Всё это укладывается в один деплой с конфигурацией под конкретный канал.

Ежедневный дайджест и повторяющиеся задачи

Самый простой сценарий, который прямо описан в релизе: cron="0 9 * * 1-5", timezone="America/Los_Angeles", prompt="Write the daily digest.". Результат публикуется в тот же канал, где попросили дайджест. По этой схеме собирают утренние сводки по метрикам, отчёты по инцидентам, напоминания о дежурстве и регулярные выгрузки. Пользователь формулирует задачу один раз в разговоре, дальше расписание живёт само.

Фоллоу-апы и проверка деплоя

Одноразовое расписание закрывает отложенные проверки. Пример из релиза: «проверь этот деплой через час». Ответ приходит в исходный тред, и обсуждение не расползается по каналам. Тот же приём работает для напоминаний вернуться к задаче, проверки статуса сборки или уточнения, пришёл ли ответ от внешней команды.

Конфигурация на каждый запуск добавляет к этому разделение ролей. Канал разработки получает один набор MCP-серверов и инструкций, канал поддержки другой, а канал финансов третий, хотя агент один. Реакции дают быстрый отклик в обоих случаях: пользователь видит, что сообщение в работе, независимо от того, ответит агент сразу или поставит задачу в расписание.

Для команд, которым важна автономность, есть и открытые альтернативы с похожей логикой: проект Agenta позволяет запускать агентов по расписанию и триггерам из внешних приложений, подключать self-hosted модели и менять обвязки. Если критично держать инфраструктуру у себя, такой вариант стоит сравнить с Managed Deep Agents до того, как строить на нём рутину.

Ограничения и подводные камни v0.9

Начнём с очевидного: это публичная бета. Сроков выхода из неё в анонсе нет, значит возможны изменения API и нестабильность поведения. Не стоит ставить на расписания критичные процессы без ручного контроля.

Расписания зависят от двух внешних условий. Первое: запуск в момент срабатывания cron выполняет LangSmith, так что без него история не работает. Второе: сами расписания выполняются от имени пользователя с его правами и подключениями, поэтому после смены роли, отзыва OAuth-гранта или увольнения сотрудника расписание может перестать работать или, наоборот, сохранить доступ дольше, чем нужно. Это требует регламента: кто чистит расписания, когда человек уходит из команды.

Таймзона указывается явно. В распределённой команде это самая частая причина сюрпризов: дайджест «в 9 утра» окажется ночным сообщением для половины участников. Проверяйте, в какой зоне создаётся расписание, особенно если запрос пришёл из канала с людьми из разных регионов.

Реакции в Slack зависят от самой платформы и её разрешений. Деталей реализации в анонсе мало, а публичного описания кастомизации логики эмодзи нет, поэтому рассчитывать на тонкую настройку поведения не стоит до появления документации. Что касается конфигурации на каждый запуск, в релизе не перечислены поддерживаемые модели и песочницы, так что проверять совместимость придётся на своём стеке.

Стоит ли внедрять и как начать

v0.9 закрывает три боли, знакомые тем, кто уже держит агентов в Slack. Расписание больше не нужно вешать на внешний крон, копии агента под каждую команду не нужны, а молчание бота во время долгой обработки перестаёт раздражать. Для команд, которые живут в Slack и уже используют Managed Deep Agents, обновление выглядит логичным продолжением: это меньше инфраструктуры и меньше дублирующихся конфигураций.

Порядок действий разумно держать таким. Сначала пилот на одном канале: одна деплой-инсталляция, функция сборки конфигурации с ветками под два-три сценария, простые расписания вроде будничного дайджеста. Дальше стоит проверить, как ведут себя права: создайте расписание от имени обычного сотрудника, а не администратора, и посмотрите, что произойдёт, когда у него заберут доступ к нужному сервису. Отдельно решите судьбу реакций в каналах с внешними участниками.

Расширять стоит по мере появления реальных задач, а не заранее. Как только расписаний станет много, понадобится учёт: кто их создал, что они делают, когда последний раз запускались. Инструменты для долговременного состояния проекта и заметок между сессиями агента тоже пригодятся, чтобы отложенные запуски опирались на актуальный контекст, а не на устаревшие договорённости: пример такого подхода разобран в материале про Later Bender.

Начните с одного расписания и одного канала. Если через неделю оно приносит пользу без ручного вмешательства, добавляйте второй сценарий, а бета-статус держите в голове как повод не строить на v0.9 ничего критичного.

Подписаться на канал