Anthropic учит агентов не путать сбой с тихим днём

Самый неприятный сбой агента на расписании выглядит как спокойный день. MCP-сервер упал или токен истёк, запуск всё равно начинается, и агент честно пишет «ничего нового». Эту и ещё несколько ловушек разбирает гайд Anthropic по автоматизациям на Claude Managed Agents (бета): в нём агент по cron читает Slack и GitHub и отправляет сводку в Slack.
Коротко
- Anthropic выложила эталонную реализацию агента, который по cron читает каналы Slack и пулреквесты GitHub, помнит, что изменилось с прошлого запуска, и публикует короткую сводку в один канал Slack.
- Агент собран из набора файлов: agent.md с моделью и шагами, deployment.md с расписанием и бюджетом, хранилища памяти и vault. Команда ant apply создаёт всё это в рабочем пространстве Claude API.
- Главная трудность здесь в честности отчёта, а не в коде: упавший источник, неподтверждённый пост и устаревший статус задачи подрывают доверие, поэтому на каждый такой случай в agent.md записаны свои правила.
Если вы не следили: по данным Claude Lab, Anthropic вывела Claude Managed Agents в публичную бету на Claude Platform 8 апреля 2026 года. Там же пишут, что сервис отличается от Claude Agent SDK, где инфраструктуру, цикл агента и среду выполнения разработчик держит сам. На сайте Claude Managed Agents описывают как набор API для облачных агентов: harness, состояние, память, права доступа и запуск по расписанию берёт на себя Anthropic.
Ключи от Slack и GitHub хранятся в vault и в песочницу агента не попадают
Собрать агента помогает команда /claude-api managed-agents-onboard в Claude Code: skill claude-api ведёт по шагам гайда. Для примера нужны Slack-приложение, созданное из манифеста, и токен GitHub. Как пишет ClaudeDevs, платить за работу можно новыми API-кредитами, которые входят в Max и Team.
Секреты лежат в vault, а настоящие значения остаются за пределами песочницы, где выполняется код Claude. Инструменты GitHub агент вызывает через MCP-прокси снаружи песочницы, и прокси сам берёт из vault ключ, у которого URL совпадает с адресом сервера.
Со Slack агент общается через curl из bash, и внутри песочницы есть только непрозрачная заглушка $SLACK_BOT_TOKEN. Настоящий токен платформа подставляет, когда запрос выходит наружу, и только для разрешённых хостов, в примере для slack.com. Vault создаётся командой ant apply vault.yaml, ключи добавляются через TypeScript SDK, а ID vault вписывается в поле vault_ids в deployment.md.
Вместо окна «последние 24 часа» агент ставит закладку на каждый источник
Фиксированное окно Anthropic называет типичной ошибкой: если запуск опоздал, остаётся дыра, а если прошёл раньше, старые пункты повторяются. Поэтому в конце каждого прогона агент записывает в bookmarks.json время самого свежего прочитанного пункта по каждому источнику, например "slack": "2026-09-14T13:02:11Z". Следующий запуск начинает с этих отметок, и окно само растягивается или сжимается.
Закладки лежат в хранилище памяти state. Это папка с текстовыми файлами, которую платформа монтирует в песочницу каждого запуска под /mnt/memory/ и сохраняет между запусками. Агент читает и пишет её обычными файловыми инструментами.
С отказами всё сложнее. Если сервер лежит, запуск идёт без его инструментов, ошибка попадает в лог сессии, а агент видит пустоту. На этот случай в agent.md три правила: закладка упавшего источника стоит на месте, сводка собирается из остальных источников, а последней строкой агент сообщает, что прочитать не удалось, например «pull requests unavailable this run».
Пост считается отправленным, только если Slack вернул ok: true и ts сообщения
Публикация занимает один запрос curl к chat.postMessage с тем же бот-токеном, которым агент читает каналы. Одобрять его никому не нужно: встроенный bash-инструмент по умолчанию работает без подтверждений, а slack.com внесён в allowlist окружения.
Риск в расхождении между постом и записями агента. Если агент запишет пост, который не дошёл, закладки уйдут вперёд и эти пункты пропадут. Если же он из осторожности отправит сводку ещё раз, читатели получат её дважды.
Отсюда три правила. Агент ищет сегодняшний заголовок среди свежих сообщений канала и не публикует сводку повторно. Реестр отправленных пунктов и закладки обновляются только после ответа с ok: true и ts. При неясном исходе запуск помечается «maybe posted», и больше ничего не меняется. Ход каждого запуска записывается в runs/<date>.md: сначала «posting», потом «posted» с ID сообщения.
Пункт попадает в сводку, только если по нему нужно действовать сегодня
Шаг 4 в agent.md отвечает за краткость. Строку получает то, по чему читатель будет действовать сегодня или что меняет его ближайшее решение, а при сомнении пункт выбрасывается. Счётчик вроде «12 open reviews» пунктом не считается. Открытый пункт из реестра идёт одной строкой с пометкой «still waiting, day 3», закрытый исчезает без комментариев.
Шаг 5 требует перепроверить всё прямо перед отправкой. То, что успели решить, удаляется, изменившееся правится, а неподтверждённое выбрасывается и попадает в список вырезанного. Ссылки копируются из полей самих источников, например html_url пулреквеста или пермалинка Slack. Обоснование в гайде такое:
One stale "still waiting on you" costs more trust than ten missing items, so never hedge an item's status: assert it or drop it.
Модель claude-sonnet-5-5 запускается по cron «32 7 * * 1-5» по времени Нью-Йорка
Агент в Managed Agents сам по себе ничего не запускает. Он представляет собой версионированную конфигурацию из модели, системного промпта и инструментов. В примере agent.md указывает claude-sonnet-5-5, отключает web_search и web_fetch и подключает GitHub с режимом always_allow: подтверждать вызовы MCP некому, поэтому токен выдан только на чтение.
Запускает агента deployment, в котором указаны расписание, vault, хранилища памяти, бюджет и первое сообщение. При каждом срабатывании платформа поднимает новую сессию на инфраструктуре Anthropic, так что держать что-то включённым на вашей машине не нужно. Представьте сменщика, который каждое утро приходит в пустой офис. Всё, что он знает, лежит в двух папках: preferences с вашими настройками он может только читать, а state ведёт сам.
Часовой пояс указан дважды. Поле timezone задаёт момент запуска, а строка в первом сообщении велит считать даты в America/New_York. Иначе агент возьмёт время сервера и назовёт сегодняшнее утро «вчера».
Слабое место видно из самого гайда. Защита от тихих сбоев, двойных постов и устаревших статусов записана правилами в тексте agent.md, и платформа, судя по всему, их исполнение не гарантирует. Размер лимита расходов на запуск и цена кредитов в опубликованном тексте не названы. На наш взгляд, лучшее в гайде как раз процитированное правило: один устаревший «всё ещё ждёт вас» обходится доверию дороже десяти пропущенных пунктов.
Ручной запуск до первого cron
Ждать расписания не обязательно. Первый прогон можно запустить вручную командой ant beta:deployments run --deployment-id с ID из claude-lock.json и сразу проверить, что агент соберёт. Managed Agents пока в бете, дату стабильной версии Anthropic не называет. Неизвестно и то, сколько API-кредитов из Max и Team будет уходить на ежедневную сводку: таких цифр в гайде нет.
Читайте также
- Просмотрщик сессий в ant CLI и режим auto у агентов Claude
- ant apply синхронизирует агентов Claude с репозиторием
- SDK для Claude сами ведут цикл computer use, браузер ваш
- Opus 5.5 подешевел, но ломает агентов ошибкой 400
- Торговые агенты на Claude: код открыт под Apache 2.0
- Правка истории диалога ломает запрос в Claude Fable 5.1
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.
