claude managed agents: ночная проверка новых отзывов о ресторанах с оценкой 1–2 звезды
Запускайте claude managed agents по расписанию cron, чтобы каждую ночь читать новые отзывы в Google, Yelp и Tripadvisor и отмечать отзывы с оценкой 1–2 звезды. Стоимость API: $0,0056 за заведение.

4 ноября 2026 года (по сингапурскому времени) мы с помощью API EveryInfra прочитали новые отзывы о Katz's Delicatessen в Нью-Йорке на Google Maps, Yelp и Tripadvisor. Главный вывод касается слова «новые»: N самых свежих отзывов охватывают на каждом сайте очень разные периоды. На Google это меньше 4 дней, а на Tripadvisor — почти 4 месяца. Страница 1 на Yelp не отсортирована по дате.
Через час повторное чтение нашло новый отзыв в Google. Время его публикации было раньше нашего первого вызова, но первый вызов его не вернул. Поэтому ночная задача должна определять «новые» отзывы по ID и запоминать, где остановилась. Нельзя просто брать N самых новых или доверять времени публикации.
Второй вывод касается стоимости. Плата за API небольшая: 4 вызова на заведение за ночь стоят меньше цента. Основная часть расходов приходится на токены модели на стороне Anthropic. По нашей оценке, с Sonnet 5.5 плата за модель более чем в десять раз превышает плату за API. Поэтому скрипт в песочнице должен отфильтровать сырые данные, оставив только отзывы с 1–2 звёздами, прежде чем их прочитает модель.
Эта статья отвечает на один конкретный вопрос. Операционный менеджер сети ресторанов в Нью-Йорке хочет каждый день получать отчёт до 7 утра. В отчёте должны быть все новые отзывы с 1–2 звёздами, появившиеся с прошлого вечера в Google Maps, Yelp и Tripadvisor. Для каждого отзыва нужно указать, в чём проблема (еда, обслуживание, очередь или цена) и ответил ли на него кто-нибудь.
Для этого мы используем развёртывания по расписанию (scheduled deployments) в Claude Managed Agents. Каждую ночь облако Anthropic запускает новую сессию по расписанию cron. Агент вызывает три эндпоинта отзывов EveryInfra по HTTP или через удалённый MCP, отбирает новые плохие отзывы, сортирует их по причинам и пишет отчёт. Затем вебхук сообщает вашему серверу, что запуск завершён.
Со стороны EveryInfra мы сделали 26 реальных вызовов, за 20 из них списали плату — всего $0,02778. Со стороны Anthropic мы ничего не развёртывали. Каждый факт о Managed Agents сопровождается ссылкой на документацию или примечания к релизам platform.claude.com, которые мы прочитали 4 ноября 2026 года.

Задача: один утренний отчёт о новых плохих отзывах на трёх сайтах
В качестве примера мы взяли два публичных заведения. Мы никак не связаны ни с одним из них, а пример отчёта только демонстрирует метод. Первое заведение — Katz's Delicatessen в Нижнем Ист-Сайде. У него рейтинг 4,5 и 56 460 отзывов в Google Maps и рейтинг 4,2 и 18 710 отзывов в Tripadvisor.
Сюда приходит много туристов, поэтому это хороший тест на вопрос «сколько новых отзывов появляется за ночь». Второе заведение — Haidilao Hot Pot во Флашинге (Куинс). У него рейтинг 4.8 и 8 792 отзыва на Google и рейтинг 4.8 и 2 643 отзыва на Yelp. Оно представляет заведения с высоким рейтингом и небольшим числом плохих отзывов.
Почему каждую ночь, а не раз в неделю? В реальном ответе Google для Katz's 100 самых новых отзывов охватывают 3,97 дня, то есть около 24,7 отзыва в день. 50 самых новых охватывают всего 1,80 дня, и 29 отзывов пришли за последние 24 часа. Плохой отзыв проще всего отработать в первые день-два.
Именно тогда ответ, предложение возврата средств или внутренняя проверка дают наибольший эффект. Еженедельной задаче нужно читать 4 страницы Google на заведение, и к приходу отчёта самому старому плохому отзыву уже шесть-семь дней. Ночная задача, которая читает 50 самых новых отзывов, охватывает всё с прошлой ночи и ещё одну ночь в запас.
| Сайт | Возможность | Отзывов за вызов | Порядок | Цена за вызов |
|---|---|---|---|---|
| Google Maps | google_maps_reviews/reviews | До 100, мы используем 50 | sort=newest и необязательная дата since | $0.001389 |
| Yelp | yelp/reviews | 10 на страницу, следующая страница через page_token | Порядок Yelp по умолчанию, не по дате | $0.001389 |
| Tripadvisor | tripadvisor/reviews | До 50 | Сортировки нет. В наших тестах сначала новые | $0.001389 |
| Поиск заведения | google_maps_reviews/search, yelp/search, tripadvisor/search | Один раз для каждого сайта при настройке | — | $0.001389 |
Цены взяты из бесплатного каталога https://api.everyinfra.com/api/v1/social/catalog, который мы прочитали 4 ноября в 00:13 по сингапурскому времени. Все три возможности для отзывов были в статусе available. Каждый вызов стоит 100 кредитов, то есть $0,001389. Три вызова поиска нужны только один раз на заведение. Они превращают название заведения в URL его страницы на каждом сайте, после чего ночная задача читает отзывы по URL.
Что такое claude managed agents: четыре объекта и расписание
Claude Managed Agents — это набор облачных API на Claude Platform. Вы задаёте модель, системный промпт и инструменты агента. Anthropic выполняет цикл агента в своём облаке: запускает контейнер-песочницу, выполняет вызовы инструментов и хранит запись сессии. Продукт запустили в режиме открытого бета-тестирования 8 апреля 2026 года. Каждый запрос должен содержать заголовок anthropic-beta: managed-agents-2026-04-01 (обзор, примечания к релизам).
В обзоре названы четыре основных понятия: агент (agent), окружение (environment), сессия (session) и vault. Развёртывание по расписанию — пятый объект. Оно появилось 9 июня 2026 года и само запускает сессии по расписанию (блог Anthropic). В таблице показано, как каждый объект используется в проверке отзывов.
| Объект | Что он определяет | Настройка для проверки отзывов | Документация |
|---|---|---|---|
| agent | Модель, системный промпт, инструменты, MCP-серверы, политики разрешений, с версиями | Sonnet 5.5. Оставьте bash и файловые инструменты. Отключите web_fetch и web_search. При работе через MCP разрешите только everyinfra_call_api | Define your agent |
| environment | Как собирается песочница и к каким хостам она может обращаться | Сеть в режиме limited, в allowed_hosts только api.everyinfra.com | Cloud environment setup |
| vault | Учётные данные, которые сессия получает во время выполнения | Один набор учётных данных environment_variable — EVERYINFRA_API_KEY; он подставляется в заголовки только для api.everyinfra.com | Authenticate with vaults |
| session | Один запуск: новый контейнер и запись диалога | Развёртывание создаёт одну сессию каждую ночь | Start a session |
| deployment | Запускает сессии по расписанию cron с бюджетом на каждый запуск | 30 6 * * * в America/New_York, 50 центов за запуск | Scheduled deployments |
Чаще всего упускают из виду, что окружение при каждом запуске новое. В документации о сессиях сказано, что каждая сессия получает свежий контейнер. Файлы, которые один запуск записал в песочницу, при следующем запуске исчезают (Start a session). Для проверки отзывов это очень важно.
Список «уже просмотренных отзывов» нельзя хранить в файле песочницы. Он должен храниться в хранилище памяти (memory store). Это отдельная бета-функция, которая монтируется в /mnt/memory/ (Using agent memory). Другой вариант: ваш сервер сохраняет список после каждого вебхука и передаёт его обратно в следующем начальном сообщении.
Развёртывания по расписанию: cron, часовой пояс, джиттер, бюджет и почему пропуски не наверстываются
Развёртывание по расписанию создаётся через POST /v1/deployments. Для него нужны агент, окружение, хотя бы одно начальное событие (обычно user.message) и schedule. В schedule указываются type: cron и expression в стандартном формате POSIX cron из 5 полей с точностью до минуты. Там же задаётся timezone с именем IANA, например America/New_York (Scheduled deployments).
Поля cron соответствуют POSIX crontab. Названия часовых поясов берутся из базы часовых поясов IANA; её последний релиз, 2026f, вышел 2026-10-27. Ответ на создание содержит время ближайших срабатываний в schedule.upcoming_runs_at, так что выражение можно проверить сразу.
Срок отчёта определяет одно предложение в документации. Время срабатывания точно соответствует расписанию, но к фактическому запуску добавляется джиттер до 15% интервала запуска. Минимум составляет 5 секунд, максимум — 9 минут. На графике ниже показано это правило.
Развёртывание, которое запускается каждые 5 минут, стартует с опозданием не более 45 секунд. Развёртывание, которое запускается каждый час или каждый день, стартует с опозданием не более 9 минут. Если отчёт должен прийти до 7:00, cron на 6:30 оставляет запас на 9 минут джиттера и 20-минутный запуск.

Вторая ловушка связана с переходом на летнее время. В документации сказано, что cron сопоставляет время буквально по настенным часам. Поэтому 0 20 * * * в America/New_York срабатывает в 8 вечера по местному времени и в EST, и в EDT. В день перевода часов вперёд несуществующее время, например 2 часа ночи, не срабатывает.
В день перевода часов назад запуск, назначенный на время, которое наступает дважды, тоже происходит дважды. Документация советует избегать интервала с 1 до 3 часов ночи по местному времени или использовать UTC. В 2026 году летнее время в США закончилось 1 ноября. Поэтому с этой недели 30 6 * * * в Нью-Йорке соответствует 11:30 UTC, а в период летнего времени — 10:30 UTC.
Третий момент касается бюджета. Развёртывание может содержать необязательный параметр budget той же структуры, что и бюджет сессии: {"type": "limit", "max_list_cost": {"amount": "50", "currency": "USD"}}. Сумма указывается целым числом центов США в виде строки, так что "50" означает 50 центов (Session budgets). Развёртывание копирует этот лимит в каждую новую сессию. Значит, лимит действует на каждый запуск, а не на сумму за месяц. Пример из документации показывает это наглядно: развёртывание с лимитом "2000" может тратить около $20 на каждом запуске.
Бюджет учитывает токены модели, веб-поиск ($10 за 1 000) и время работы сессии ($0.08 в час) по публичным прейскурантным ценам. Платформа проверяет его между запросами к модели и при достижении лимита приостанавливает сессию со статусом budget_reached. Плата за API EveryInfra в бюджет не входит. Она зависит только от числа вызовов, а оно фиксировано: 4 на заведение за ночь.
Четвёртый момент касается сбоев. Если поставить развёртывание на паузу, запуски по расписанию прекращаются, но уже запущенная сессия продолжает работу до завершения. После снятия с паузы расписание возобновляется со следующего запланированного времени. В документации сказано: «Missed triggers are not backfilled», то есть пропущенные срабатывания не наверстываются. Каждое срабатывание создаёт запись о запуске развёртывания. Неудачные запуски можно получить через GET /v1/deployment_runs?deployment_id=…&has_error=true.
Типичные ошибки: environment_archived_error, agent_archived_error и session_rate_limited_error. Последняя фиксируется, но повторная попытка для неё не выполняется. В каждой организации может быть до 1000 запланированных развёртываний. Поэтому задание, формирующее отчёт, должно само обрабатывать ситуацию «прошлой ночью запуск не состоялся». Следующий запуск не должен читать только последние 24 часа. Он должен читать данные вплоть до последнего ID отзыва, который сохранил последний успешный запуск.
Где хранится ключ: два типа учётных данных vault
Ключ EveryInfra используется либо MCP-подключением, либо curl в песочнице. Этим двум способам соответствуют два типа учётных данных vault (Authenticate with vaults). Учётные данные MCP бывают типов mcp_oauth и static_bearer, и они привязаны к mcp_server_url. Когда сессия подключается к MCP-серверу по этому URL, токен добавляется автоматически.
Учётные данные environment_variable привязаны к secret_name. В песочнице хранится только непрозрачная заглушка. Настоящее значение заменяет заглушку на границе сети только для хостов из networking.allowed_hosts, а injection_location позволяет ограничить подстановку только заголовками запросов.

Для этой задачи мы рекомендуем учётные данные типа «переменная окружения», и тому есть три причины. Во-первых, ключ может попасть только в одно место. В allowed_hosts этих учётных данных указан только api.everyinfra.com. Если вредоносная строка в отзыве велит модели обратиться к другому URL, в такой запрос будет подставлена только заглушка.
Во-вторых, allowed_hosts учётных данных определяет, какие запросы получают ключ, но не то, какие запросы могут покинуть песочницу. За второе отвечает параметр networking окружения. Если в обоих указан только api.everyinfra.com, вы получаете два замка: один на сеть и один на ключ.
В-третьих, при работе через HTTP сырой ответ сначала попадает в файл в песочнице. Затем фильтр jq передаёт модели только нужные записи; сколько токенов это экономит, показано в разделе о стоимости. У учётных данных типа «переменная окружения» есть и ограничения. Они пока не работают с самостоятельно размещёнными песочницами. Vault может содержать до 20 наборов учётных данных. Платформа не проверяет учётные данные при создании, поэтому о неверном ключе вы узнаёте только во время выполнения.
Последний пункт мы проверили на стороне EveryInfra. В 00:22 по сингапурскому времени мы вызвали tools/call удалённого MCP-сервера без ключа. HTTP-статус был 200. В теле ответа isError было равно true, а текст сообщал, что вызов не авторизован и «Nothing was charged».
Поэтому неверный или просроченный ключ в vault не вызывает ошибки при подключении сессии к MCP. Ошибка возникает при первом вызове инструмента в виде результата с ошибкой. В промпте агента нужно указать: при ошибке авторизации остановиться и написать «ключ недействителен» в начале отчёта. Повторять попытку с другими параметрами агент не должен.
Почему не стоит читать страницы отзывов через web_fetch
В Managed Agents есть встроенный инструмент web_fetch, и он кажется самым простым путём: указать три URL заведений в промпте и поручить агенту читать страницы каждую ночь. Мы проверили документацию и файлы robots.txt трёх сайтов. Для ночной задачи без присмотра этот путь подходит плохо. Причины приведены в таблице.
| Путь | Можно ли каждую ночь читать новые отзывы? | Источник |
|---|---|---|
web_fetch для страниц заведений | Ненадёжно. С 2026-10-07 он загружает только URL, которые уже появлялись в сессии, причём URL из системного промпта или из вывода MCP не учитываются. Он не выполняет JavaScript и соблюдает robots.txt | Release notes 2026-10-07, Web fetch tool |
| Веб-страницы Yelp | robots.txt Yelp разрешает Claude-User доступ только к /article, а для остального задано Disallow: / (прочитано 2026-11-04) | yelp.com/robots.txt, статья Anthropic о краулере |
| Google Places API | До 5 отзывов на место, в порядке релевантности | Place Details |
| Google Business Profile API | Только для точек, которыми вы управляете, через OAuth | Review data |
| Yelp Fusion API | До 3 фрагментов отзывов на компанию, в порядке Yelp по умолчанию | Yelp Fusion reviews |
| Tripadvisor Content API | До 5 самых новых отзывов на точку | Location reviews |
| Эндпоинты отзывов EveryInfra | Google: до 100 за вызов, сначала новые. Yelp: 10 на страницу с пагинацией. Tripadvisor: до 50 за вызов | Каталог |
Первое ограничение часто упускают из виду. В заметке о релизе от 7 октября 2026 года сказано, что web_fetch теперь загружает только те URL, которые уже встречались в сессии. Так снижается риск утечки данных. Засчитываются URL из сообщения пользователя или из результатов web_search. Не засчитываются URL, которые есть только в собственном выводе Claude, системном промпте, прикреплённом документе или выводе bash либо инструментов MCP. Для таких URL вызов возвращает url_not_in_prior_context.
В тот же день вышла вторая заметка о сетевом режиме limited. В этом режиме список allowed_hosts окружения распространяется и на web_fetch, и на web_search (Restrict web search and web fetch domains). С 20 октября администратор организации также может отключить web_fetch на странице Capabilities в консоли. В этом случае каждый вызов web_fetch в сессии Managed Agents возвращает ошибку. С учётом всех трёх правил ночная задача с фиксированными URL зависит от слишком многих условий.
Но главная проблема в самих страницах. Список отзывов в Google Maps загружается через JavaScript, а в документации web_fetch сказано, что сайты с отрисовкой на JavaScript не поддерживаются. Страницы заведений на Yelp закрыты для Claude-User. В robots.txt Tripadvisor для ClaudeBot прописано Disallow: /.
Claude-User там не упомянут, поэтому на него действуют общие правила. У всех официальных API небольшие лимиты: 5 отзывов в Google Places, 3 фрагмента отзывов в Yelp Fusion и 5 отзывов в Tripadvisor Content API. Katz's получает около 25 отзывов за ночь, так что этих лимитов явно недостаточно. Для такой задачи остаётся один вариант: вызывать API отзывов по HTTP или через удалённый MCP и получать структурированный JSON.
Удалённый MCP или HTTP: два пути с разной стоимостью
Первый путь — удалённый MCP. MCP-сервер EveryInfra доступен по адресу https://api.everyinfra.com/mcp и использует транспорт Streamable HTTP (MCP transports). Его tools/list возвращает 12 инструментов, из них платный только everyinfra_call_api (см. страницу MCP-сервера). В агенте вы объявляете MCP-сервер с type: url и добавляете mcp_toolset. Хранилище учётных данных предоставляет учётные данные static_bearer, привязанные к URL сервера (MCP connector). Этот путь требует меньше всего настройки, но в нём есть две ловушки.
Первая ловушка — подтверждение. В документации по политикам разрешений сказано, что набор инструментов агента по умолчанию работает с always_allow, а наборы инструментов MCP — с always_ask (Permission policies). Перед каждым вызовом MCP сессия приостанавливается и ждёт подтверждения. Ночью подтверждать некому, поэтому сессия продолжает ждать.
Задайте для набора инструментов default_config.enabled: false, чтобы отключить все его инструменты, а затем включите always_allow только для everyinfra_call_api. У этого инструмента есть аннотации readOnlyHint: false и destructiveHint: true, потому что каждый вызов платный. Поэтому даже политика auto может запросить подтверждение. Эти аннотации определены в спецификации инструментов MCP.
Вторая ловушка — размер ответа. В документации по коннектору MCP указан лимит в 100 000 символов (около 25 000 токенов). Если вывод инструмента превышает этот лимит, он записывается в файл в песочнице, а модель получает только короткий фрагмент. Наш реальный ответ Google со 100 самыми новыми отзывами о Katz's занял 105 266 символов, лишь немного превысив этот порог.
Во втором раунде реальный вызов MCP для 50 самых новых отзывов вернул 53 364 символа. Ответ Tripadvisor с 50 отзывами занял 54 739 символов, а одна страница Yelp с 10 отзывами — около 10 000 символов. На графике каждый реальный ответ показан рядом с этим порогом.
Второй путь — HTTP с учётными данными в переменной окружения. Агент через встроенный инструмент bash запускает curl с заголовком Authorization: Bearer $EVERYINFRA_API_KEY. В песочнице эта переменная содержит только заглушку, а настоящий ключ подставляется при отправке запроса. JSON-ответ сразу сохраняется в файл в песочнице. Затем фильтр jq пропускает только отзывы с 1–2 звёздами, которых нет в последнем списке ID.
В итоге модель видит десяток отфильтрованных отзывов, а не 128 000 символов сырых данных на каждое заведение. За это приходится использовать более длинный промпт с чётко описанными шагами скрипта и добавить jq в окружение. Можно разрешить окружению использовать менеджеры пакетов или установить jq заранее. Для ночного запуска мы рекомендуем путь через HTTP. MCP оставьте для ручных проверок. В ручной сессии агент может вызвать everyinfra_list_requests, чтобы посмотреть статус и стоимость отдельного вызова. Этот инструмент бесплатный.
Примеры конфигурации: окружение, агент, хранилище учётных данных и деплоймент
Четыре файла ниже мы составили по полям из документации platform.claude.com. Это примеры конфигурации, в организации мы их не создавали. CLI ant умеет превращать файл Markdown с YAML-заголовком в объект командой ant apply. ID сохраняется в claude-lock.json (Define your agent). Начнём с окружения.
# Configuration example: environment (fields from the Cloud environment setup doc; not tested by us)
name: review-patrol-env
config:
type: cloud
networking:
type: limited
allowed_hosts:
- api.everyinfra.com
allow_package_managers: true # to install jq; turn off after you preinstall it
allow_mcp_servers: falseСледом идёт конфигурация агента. Системный промпт задаёт три правила: вызывать только четыре эндпоинта, определять «новые» отзывы по ID и останавливаться при ошибке авторизации.
---
# Configuration example: agent.md (fields from Define your agent, Tools and Permission policies; not tested by us)
name: Nightly review patrol
model: claude-sonnet-5-5
tools:
- type: agent_toolset_20260401
configs:
- name: web_fetch
enabled: false
- name: web_search
enabled: false
---
Each night, read new reviews for every store in the store list. Use only bash and curl to call
https://api.everyinfra.com/api/v1/social with the header "Authorization: Bearer $EVERYINFRA_API_KEY".
Make 4 calls per store: google_maps_reviews/reviews (sort=newest, limit=50), yelp/reviews pages 1 and 2,
and tripadvisor/reviews. Save each response to /tmp/<store>-<site>.json.
Use jq to drop review IDs that are already in /mnt/memory/review-patrol/seen.json. Read only 1-2 star reviews.
Give each bad review one or more labels: food, service, line and seating, price and hype, venue, online order.
Translate reviews that are not in English before you label them.
If a response says unauthorized, stop. Write "EveryInfra key not valid" as the first line of the report. Do not retry.
At the end, write all review IDs from this run back to /mnt/memory/review-patrol/seen.json,
and write the report to /mnt/session/outputs/report.md.Для хранилища учётных данных нужна одна запись. На своём компьютере считывайте secret_value из переменной окружения, чтобы ключ никогда не попадал в файл.
# Configuration example: add an environment variable credential to a vault (fields from Authenticate with vaults; not tested by us)
curl --fail-with-body -sS "https://api.anthropic.com/v1/vaults/$VAULT_ID/credentials" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
-H "content-type: application/json" \
-d "$(jq -n --arg v "$EVERYINFRA_API_KEY" '{
auth: {
type: "environment_variable",
secret_name: "EVERYINFRA_API_KEY",
secret_value: $v,
networking: {type: "limited", allowed_hosts: ["api.everyinfra.com"]},
injection_location: {header: true}
},
display_name: "EveryInfra key for nightly review patrol"
}')"Последним идёт запланированный деплоймент. В документации сказано, что деплоймент принимает те же настройки, что и новая сессия. Агент и окружение обязательны. Файлы, хранилища памяти и хранилища учётных данных необязательны. Список заведений передаётся в начальном сообщении, а бюджет составляет 50 центов на запуск. Поле amount задаётся в центах, поэтому "50" — это $0,50, а не $50. Хранилище памяти монтируется в /mnt/memory/ под своим отображаемым именем, так что хранилище с именем review-patrol находится в /mnt/memory/review-patrol/.
{
"name": "Nightly review patrol (NYC)",
"agent": "agent_01...",
"environment_id": "env_01...",
"vault_ids": ["vlt_01..."],
"resources": [
{"type": "memory_store", "memory_store_id": "memstore_01...", "access": "read_write",
"instructions": "seen.json holds the review IDs from the last run, grouped by site."}
],
"initial_events": [
{
"type": "user.message",
"content": [{"type": "text", "text": "Store list: Katz's Delicatessen and Haidilao Hot Pot Flushing. URLs are in stores.json. Read all new reviews since the last run and write the morning report."}]
}
],
"schedule": {"type": "cron", "expression": "30 6 * * *", "timezone": "America/New_York"},
"budget": {"type": "limit", "max_list_cost": {"amount": "50", "currency": "USD"}}
}Как получить результат? Вебхуки отправляют сокращённый набор данных: только тип события, ID и метку времени, без полного объекта. Сам объект нужно получить GET-запросом (Subscribe to webhooks). Достаточно двух типов событий. Учтите, что session.status_idled означает «агент остановился и ждёт ввода».
Это событие приходит и после завершения запуска, и когда запуск ждёт подтверждения. Поэтому ваш сервер должен получить сессию через GET и прочитать stop_reason.type в последнем событии session.status_idle (Session event stream). deployment_run.failed означает, что запуск в эту ночь не создал сессию. Ручные запуски через эндпоинт run не отправляют события deployment_run, поэтому не ждите их в тесте.
Для каждого события делается до 3 попыток доставки с экспоненциальной задержкой со случайным разбросом от 5 до 120 секунд. После последней неудачной попытки событие отбрасывается и в очередь не попадает. Поэтому ваш сервер должен убирать дубликаты по event.id и каждое утро проверять список запусков деплоймента. Секрет подписи начинается с whsec_. Заголовки называются webhook-id, webhook-timestamp и webhook-signature, формат тот же, что у Standard Webhooks.
| `stop_reason.type` | Что это означает | Что делает ваш сервер после вебхука |
|---|---|---|
end_turn | Агент завершил свой ход | Получите /mnt/session/outputs/report.md через Files API и отправьте дежурному менеджеру |
requires_action | Вызов инструмента ждёт подтверждения, например если для MCP-инструмента всё ещё задано always_ask | Отправьте оповещение и исправьте политику разрешений агента. Не подтверждайте вызовы ночью скриптом |
budget_reached | Стоимость запуска по прейскуранту достигла лимита бюджета | Отправьте оповещение и проверьте, не зациклился ли агент на повторных попытках. На следующий день скорректируйте бюджет |
Один реальный цикл: что отправляет модель и что приходит в ответ
Мы не разворачивали деплоймент на стороне Anthropic. Но запрос, который агент отправляет в EveryInfra через MCP, на нашей стороне выглядит так же, как запрос через curl. Ниже приведён реальный запрос, который мы отправили в 00:21:42 по сингапурскому времени через tools/call удалённого MCP. Он получает страницу 2 отзывов о Katz's на Yelp. page_token взят из next_page_token в ответе для страницы 1, здесь мы его сократили.
{"jsonrpc": "2.0", "id": 7, "method": "tools/call",
"params": {"name": "everyinfra_call_api",
"arguments": {"platform": "yelp", "action": "reviews",
"params": {"url": "https://www.yelp.com/biz/katzs-delicatessen-new-york",
"page_token": "pt1.4EnA2jhN8mJn…"}}}}Ответ пришёл с кодом HTTP 200 через 24,9 секунды. В content[0].text было 9 675 символов JSON с 10 отзывами, за вызов списано $0,001389. У каждого отзыва есть поля id, rating, posted_at, text и другие. Важнее всего поле id, потому что от него зависит проверка на «новизну». В таблице перечислены все вызовы первого раунда (T1) для Katz's.
| Сингапурское время | Возможность | Путь | Записи | Время | Символы | Списание |
|---|---|---|---|---|---|---|
| 00:18:04 | google_maps_reviews/search | REST | 3 | 72.5 s | 3,915 | $0.001389 |
| 00:19:21 | google_maps_reviews/reviews, самые новые, 100 | REST | 100 | 9.2 s | 105,266 | $0.001389 |
| 00:19:46 | yelp/reviews, страница 1 | REST | 10 | 24.6 s | 11,825 | $0.001389 |
| 00:20:22 | tripadvisor/search | REST | 1 | 15.2 s | 1,741 | $0.001389 |
| 00:20:43 | tripadvisor/reviews | REST | 50 | 11.1 s | 54,739 | $0.001389 |
| 00:21:02 | yelp/reviews, URL с sort_by=date_desc | REST | 10 | 27.4 s | 11,825 | $0.001389 |
| 00:21:42 | yelp/reviews, страница 2 | MCP | 10 | 24.9 s | 9,675 | $0.001389 |
Первый вызов в 00:17:32 получил ответ 429. Для нашего тестового ключа действует лимит запросов: 10 вызовов в минуту. Плата за этот вызов не списывалась, а повторная попытка через 30 секунд прошла успешно. Затем мы сделали ещё 13 вызовов для Haidilao и Contramar в Мехико.
Четыре из них были поисковыми запросами без результата, и API оформил возврат средств за каждый из них со статусом empty_result_refunded. В первом раунде плата была списана за 15 вызовов на общую сумму $0,020835. Вместе с 5 вызовами второго раунда в 01:20 плата была списана за 20 вызовов на общую сумму $0,02778. Поиск мест в Google ничего не нашёл для двух заведений за пределами США (Botín в Мадриде и Contramar в Мехико). Тогда мы вызвали google_maps_reviews/reviews с URL поиска Google Maps и получили 50 отзывов о Contramar.

Тест 1: сколько дней охватывают «N самых новых» отзывов на каждом сайте
Сколько отзывов нужно читать каждую ночь, зависит от того, какой период охватывает одна страница. Мы взяли posted_at первого и последнего отзыва в каждом ответе и вычислили разницу. Результат показан на графике. В середине списка Google оказались два старых отредактированных отзыва (от 23 октября и 10 августа). В справке Google сказано, что у отредактированного отзыва показывается дата редактирования (справка Google Business Profile), поэтому эти два отзыва мы не учитывали при расчёте периода.
| Сайт | Прочитано записей | Период, охваченный списком | 1–2 звезды | Ответы владельца | В хронологическом порядке? |
|---|---|---|---|---|---|
| 100 | 3,97 дня | 10 | 10 | Да, кроме 2 отредактированных отзывов | |
| Yelp, страницы 1 и 2 | 20 | 68,84 дня | 1 | 0 | Нет |
| Tripadvisor | 50 | 119 дней | 10 | 0 | Да |
«50 самых новых» отзывов охватывают меньше двух дней для Katz's в Google и больше года для Contramar на Tripadvisor. Такой разрыв объясняется двумя факторами: числом отзывов о заведении и языком отзывов. Оба ответа Tripadvisor были полностью на английском. Все 50 отзывов о Katz's были на английском. Для Contramar мы использовали URL мексиканского сайта tripadvisor.com.mx, и все 50 отзывов всё равно оказались на английском, с 2025-09-02 по 2026-10-21.
Значит, этот эндпоинт читает англоязычные отзывы на Tripadvisor, а испанских отзывов в ответе нет. У заведения, куда ходят в основном местные гости, новый отзыв на Tripadvisor в конкретную ночь будет появляться редко. Одно чтение стоит всего $0,001389, так что его всё равно стоит оставить в задаче.
Yelp ведёт себя иначе. На странице 1 для Katz's было 10 отзывов с 20 сентября по 2 ноября вперемешку. На странице поддержки Yelp сказано, что порядок по умолчанию учитывает свежесть, голоса и качество отзыва, поэтому старые отзывы могут стоять выше новых. Выбрать «Newest First» могут только авторизованные пользователи (справка Yelp).
Мы добавили sort_by=date_desc в URL и повторили вызов. Все 10 ID отзывов совпали, то есть этот параметр URL ни на что не повлиял. На странице 2 был отзыв от 1 ноября, и 5 из 10 её отзывов оказались новее самого старого отзыва на странице 1. Поэтому ночная задача должна читать как минимум две страницы Yelp и определять «новые» отзывы по ID. Верхний отзыв на странице 1 не годится в качестве надёжной метки.
Тест 2: как распределяются негативные отзывы и о чём в них пишут
На графике показана доля оценок каждого уровня в каждом ответе. Из 100 самых новых отзывов о Katz's в Google у 10 было 1–2 звезды, то есть 10%. На Tripadvisor 1–2 звезды было у 10 из 50 отзывов, то есть 20%. На Yelp только у 1 из 20 отзывов на двух страницах была оценка в 1 звезду.
У Haidilao 49 из 50 отзывов в Google были на 5 звёзд и 1 на 3 звезды, негативных отзывов не нашлось. Все 10 отзывов на странице 1 Haidilao в Yelp были на 4 или 5 звёзд. Среди 50 отзывов о Contramar в Google был один отзыв на 1 звезду и один на 2 звезды.
Мы прочитали полный текст 10 негативных отзывов о Katz's в Google и 10 негативных отзывов на Tripadvisor. Каждый отзыв мы разметили вручную, причём у одного отзыва может быть несколько меток. Из 10 отзывов в Google 6 касались еды (сухое мясо, разваливающийся хлеб), а в 7 говорилось, что заведение переоценено или слишком дорогое. Ещё 3 касались персонала, 2 — тесноты или зала и 1 — очереди.
Из 10 отзывов на Tripadvisor 7 касались еды, 6 — цены и ажиотажа, 5 — обслуживания и 3 — очереди и рассадки. Ещё два были об онлайн-заказах и доставке, а не о посещении ресторана. Такое разделение полезно для отчёта. Жалобы на онлайн-заказы нужно передавать команде e-commerce, и их не следует записывать на счёт персонала заведения.
Ещё два наблюдения меняют промпт. Во-первых, 6 из 10 негативных отзывов в Google были не на английском: 2 на итальянском, 2 на немецком, 1 на турецком и 1 на испанском. Параметр lang задаёт язык интерфейса и не переводит отзывы, поэтому агент должен сначала перевести отзыв, а затем присвоить ему метки. Во-вторых, у 10 из 100 самых новых отзывов в Google был ответ владельца. Все 10 ответов были отправлены 2 ноября с 21:10 до 21:32 UTC, в пределах 22 минут.
Девять из 10 ответов были на отзывы с 5 звёздами. Только один ответ был на отзыв с 1 звездой, в котором рассказывалось о человеке, пролезшем без очереди. Этот ответ появился примерно через 35 часов после отзыва. Значит, это заведение отвечает пачками и в первую очередь на хорошие отзывы. Столбец «Ответ» в отчёте выводит наверх негативные отзывы, которыми никто не занялся.
Тест 3: как определить «новые» отзывы по двум снимкам
Первый раунд (T1) прошёл с 00:19 до 00:21 по сингапурскому времени, второй (T2) — в 01:20. Промежуток примерно в час имитирует интервал между «прошлой ночью» и «сегодняшней ночью». В T2 мы прочитали 50 самых новых отзывов о Katz's в Google через удалённый MCP. Ещё раз прочитали Google через REST с since=2026-11-03, а также по одному разу страницу 1 Yelp и Tripadvisor.
Это 4 вызова на $0,005556. Ещё один вызов yelp/search нашёл страницу Contramar на Yelp для испанской версии. Правило «новизны» умещается в одну строку: отзыв новый, если его ID нет в наборе из прошлого запуска.
| Сайт | Записи в T1 | Записи в T2 | ID, которых не было в T1 | Из них с 1–2 звёздами |
|---|---|---|---|---|
| Google, 50 самых новых (MCP) | 100 | 50, 53 364 символа | 3, все на 5 звёзд | 0 |
Google since=2026-11-03 (REST) | — | 17, 21 588 символов, следующей страницы нет | 3 (остальные 14 были в T1) | 0 |
| Yelp, страница 1 | 10 | 10, те же ID в том же порядке, что и в T1 | 0 | 0 |
| Tripadvisor | 50 | 50 | 0 | 0 |
Самая полезная деталь — время публикации 3 новых отзывов в Google: 17:15, 16:49 и 14:54 UTC. Первые два опубликованы позже вызова T1 в 16:19 UTC, так что это обычные новые отзывы. Третий, опубликованный в 14:54, появился за 1 час 25 минут до вызова T1. Он был опубликован даже раньше самого нового отзыва в T1 (15:52), но в списке из 100 отзывов T1 его не было.
Значит, отзыв может появиться в Google позже указанного у него времени публикации. Правило вроде «читать только отзывы с posted_at позже последнего самого нового» пропустит такой отзыв навсегда. Поймать его можно только сравнением ID. У отзывов, которые есть и в T1, и в T2, не изменились ни posted_at, ни оценка, ни ответ владельца.
Параметр since тоже стоит описать в промпте. Он задаёт дату, а не время. since=2026-11-03 вернул все 17 отзывов за 3 ноября по UTC, и 14 из них уже были в T1. Поэтому проверку по ID он не заменяет. Но он сократил ответ с 53 364 до 21 588 символов, примерно на 60%, и сильнее всего это помогает на пути через MCP.
Наш совет: задавайте since на день раньше даты последнего успешного запуска, оставляйте sort=newest и убирайте дубликаты по ID. Оставьте limit равным 50 как страховку на случай, если since указан неверно. На Yelp и Tripadvisor за этот час новых отзывов не было, и 10 ID на странице 1 Yelp сохранили прежний порядок. То, что страница 1 не изменилась, ещё не доказывает, что не изменилась страница 2, поэтому читайте обе. Отчёт за эту ночь умещается в одну строку: «За последний час на трёх сайтах появилось 3 новых отзыва, все на 5 звёзд. Новых негативных отзывов нет».
От этого сравнения зависит и то, что хранить в хранилище памяти. Достаточно набора недавних ID отзывов для каждого сайта. Для Google храните последние 400 ID, потому что эндпоинт возвращает с пагинацией до 400 записей. Для Yelp и Tripadvisor храните последние 100 ID. Также сохраняйте дату последнего успешного запуска. Не ограничивайтесь «временем самого нового отзыва»: вспомните отзыв от 14:54, описанный выше.
Как выглядит утренний отчёт
Пропишите правила разметки в промпте: для каждой метки одну строку определения и несколько подсказок. Иначе один и тот же отзыв сегодня попадёт в «Обслуживание», а завтра в «Очередь», и итоги на конец месяца нельзя будет сравнить. Шесть меток ниже мы составили по полному тексту 28 негативных отзывов: 21 о Katz's и 7 о Contramar. Каждая подсказка взята из слов, которые раз за разом встречались в этих отзывах. У отзыва может быть несколько меток. Если агент не уверен, пусть добавит ещё одну метку, а не пытается выбрать только одну.
| Метка | Определение | Подсказки в отзывах | Кому передать |
|---|---|---|---|
| Еда | Проблема с самой едой | Сухо, солёно, жирно, безвкусно, несвежее, хлеб разваливается | Руководитель кухни |
| Обслуживание | Отношение или действия персонала | Грубили, нас игнорировали, швырнули пакет, добавили чаевые без спроса | Управляющий заведением |
| Очередь и рассадка | Ожидание, схема рассадки, выбор места | Длинная очередь, кто-то пролез без очереди, только места у стойки, столы слишком близко | Менеджер зала |
| Цена и ажиотаж | Не стоит своих денег, или известность заведения не соответствует качеству еды | Слишком дорого, переоценено, популярное в соцсетях место, не стоит поездки | Маркетинг и ценообразование |
| Помещение | Зал и оснащение | Тесно, столы близко, за соседним столом курят вейп | Управляющий заведением |
| Онлайн-заказ | Заказы на сайте, отправка, доставка | Заказ пришёл через неделю, проблема с приправами, купленными онлайн | Команда e-commerce |
В примере ниже использованы 10 негативных отзывов о Katz's в Google из ответа T1. Каждый отзыв мы перевели и сократили. Даты указаны в UTC. В настоящем отчёте у каждого отзыва должна быть ещё и ссылка, чтобы дежурный менеджер мог открыть его и ответить.
| Опубликован (UTC) | Звёзды | Язык | Кратко | Метки | Ответ |
|---|---|---|---|---|---|
| 11-03 02:40 | 1 | Итальянский | Сотрудники у стойки с напитками и гарнирами грубили и швырнули пакет гостю | Обслуживание | Нет |
| 11-01 17:59 | 1 | Английский | Еда годами становится хуже. Сегодняшний пастрами был жирным и безвкусным | Еда, цена и ажиотаж | Нет |
| 11-01 10:08 | 1 | Английский | Кто-то пролез без очереди, а повар велел автору отзыва ждать дальше | Очередь и рассадка | Да |
| 10-31 15:07 | 1 | Турецкий | Переоценено, не стоит поездки на такси | Цена и ажиотаж | Нет |
| 10-31 12:55 | 2 | Испанский | Мужчина, который резал мясо, был неприветлив | Обслуживание | Нет |
| 10-31 08:34 | 2 | Итальянский | Мясо на вкус варёное и сухое, плохой хлеб, очень высокие цены | Еда, цена и ажиотаж, помещение | Нет |
| 10-31 02:53 | 2 | Немецкий | Еда сильно разочаровала. Только зал напоминал классическую американскую дели; ажиотаж и цена не соответствуют качеству еды | Еда, цена и ажиотаж | Нет |
| 10-31 02:51 | 1 | Немецкий | Сухое мясо без приправ, не стоит ни ажиотажа, ни денег | Еда, цена и ажиотаж | Нет |
| 10-30 23:33 | 1 | Английский | Сэндвич с пастрами за $31, очень сухой и слишком жёсткий, чтобы его разрезать | Еда, цена и ажиотаж | Нет |
| 10-30 16:33 | 2 | Английский | Главная проблема — грубый официант, который их не обслуживал, но отчитал за то, что они передвинули стол; к тому же заведение переоценено, еда так себе, а столы стоят слишком близко | Обслуживание, еда, помещение, цена и ажиотаж | Нет |
Отчёт должен начинаться с краткой сводки, а не с длинного списка. По таблице выше сводка может быть такой: «За последние 4 дня в Google появилось 10 новых отзывов с 1–2 звёздами. В 7 говорится, что заведение переоценено или не стоит своих денег, 6 касаются еды. 6 отзывов написаны не на английском. На 9 нет ответа, и 3 из них касаются персонала. Сегодня в первую очередь ответьте на эти 3».
Не указывайте в тексте отчёта имена авторов отзывов и сотрудников. Оставляйте только ссылки. Кроме того, в тексте отзывов о Contramar в Google встречаются теги переноса строки <br> (в 6 из 30 отзывов с текстом), поэтому агент должен удалить их перед составлением отчёта.
Сколько стоит Claude Managed Agents: плата за API и расходы на стороне Anthropic
Расходы складываются из двух частей. Со стороной EveryInfra всё просто. Каждому заведению нужно 4 вызова за ночь по $0,001389, то есть $0,005556 за ночь и $0,1667 за 30 ночей. Для 10 заведений это $1,6668 в месяц, для 50 заведений — $8,334.
Абонентской платы нет. За пустые результаты средства возвращаются. Три вызова для поиска заведений выполняются только при настройке (см. страницу тарифов).
Что касается Anthropic, на странице цен, которую мы прочитали 4 ноября 2026 года, сказано, что Managed Agents тарифицируется по двум статьям. Токены оплачиваются по прейскурантной цене модели. Время работы сессии стоит $0,08 в час, учитывается с точностью до миллисекунды и только пока сессия находится в статусе running. Время простоя бесплатно.
Веб-поиск в рамках сессии стоит $10 за 1 000 запросов, и скидка Batch API на него не распространяется (Pricing). На той же странице указаны цены Opus 5.5: $4 за миллион входных токенов и $20 за миллион выходных. У Sonnet 5.5 — $2 и $10. У Haiku 5.5 для промптов до 100 000 токенов — $0.10 и $0.50.
Расход токенов мы не измеряли, поэтому дальнейшие цифры являются оценками. Мы приводим допущения, чтобы вы могли подставить свои. Одно заведение за одну ночь даёт 129 603 символа сырых ответов (реальный ответ Google на 50 отзывов из второго раунда, две страницы Yelp и 50 отзывов Tripadvisor). В глоссарии сказано, что у старых моделей на один токен приходится около 3,5 символа английского текста. Модели 4.7 и новее расходуют на тот же текст примерно на 30% больше токенов (Glossary). Мы взяли 2,69 символа на токен, так что сырые ответы составляют около 48 138 токенов.
Цикл агента может читать контекст несколько раз. Измерить, сколько именно, мы не можем, поэтому приводим два уровня. 1x (каждый ответ попадает в контекст один раз) — нижняя граница, 3x — верхняя. Для обоих уровней мы добавили 15 000 токенов на системный промпт и описание инструментов, а также 3 000 выходных токенов. Скидку за кэширование промптов мы не учитывали. При работе через MCP, когда все сырые данные находятся в контексте, на одну ночь требуется примерно от 63 138 до 159 414 входных токенов.
На пути через HTTP, где jq пропускает только записи с 1–2 звёздами, на одну ночь нужно примерно от 17 854 до 23 564 входных токенов. На уровне 3x это примерно на 85% меньше. Число символов на токен тоже оценочное. Чтобы получить более точную цифру, прогоните свои ответы через эндпоинт подсчёта токенов Anthropic. Для времени работы мы взяли измеренные 69,8 секунды на 4 вызова инструментов плюс 60 секунд работы модели, что даёт $0,00288 за ночь.
| Одно заведение | За ночь (от 1x до 3x) | За месяц (30 ночей, 3x) |
|---|---|---|
| Плата за API EveryInfra (4 вызова, цена по каталогу) | $0.005556 | $0.1667 |
| Время работы сессии (оценка: 129,8 с) | $0.00288 | $0.0864 |
| Haiku 5.5, HTTP с фильтром | от $0,0033 до $0,0039 | $0.117 |
| Haiku 5.5, MCP с полными данными | от $0,0078 до $0,0174 | $0.522 |
| Sonnet 5.5, HTTP с фильтром | от $0,0657 до $0,0771 | $2.313 |
| Sonnet 5.5, MCP с полными данными | от $0,1563 до $0,3488 | $10.464 |
| Opus 5.5, HTTP с фильтром | от $0,1314 до $0,1543 | $4.629 |
Плата за API — небольшая фиксированная сумма. Итоговая стоимость зависит от модели и от того, сколько сырых данных попадает в контекст. С Sonnet 5.5 на пути через HTTP одно заведение обходится в сумме примерно от $0,074 до $0,086 за ночь. На плату за API из этого приходится лишь от 6,5% до 7,5%. Та же модель на пути через MCP с полными данными стоит примерно от $0,165 до $0,357 за ночь, то есть в 2,2–4,2 раза больше. Для разметки и перевода отзывов, скорее всего, хватит Haiku 5.5, и тогда одно заведение обойдётся меньше чем в $0,40 в месяц.
Чтобы задать бюджет деплоймента, используйте формулу «число заведений × оценка на заведение × 3». Для 10 заведений на Sonnet с HTTP оценка составляет около $0,86 за ночь. Бюджет "300" ($3) остановит зациклившийся запуск и при этом даст обычному запуску завершиться. Один пользователь Reddit писал, что за три попытки запуска Managed Agents он потратил на API около $6 (ветка на Reddit). Поэтому задайте бюджет с первого дня. В таблице итоги пересчитаны на большее число заведений на уровне 3x. Предполагается, что стоимость на одно заведение не меняется и что одна сессия читает все заведения.
| Заведения | API EveryInfra в месяц | Итого с Haiku 5.5, HTTP (оценка) | Итого с Sonnet 5.5, HTTP (оценка) | Бюджет на запуск, Sonnet |
|---|---|---|---|---|
| 1 | $0.1667 | $0.369 | $2.565 | "30" |
| 10 | $1.667 | $3.69 | $25.65 | "300" |
| 50 | $8.334 | $18.45 | $128.25 | "1300" |
Claude Managed Agents, Agent SDK или расписания в Claude Code и Cowork: что выбрать
Сейчас у Anthropic есть как минимум четыре способа запускать Claude по расписанию. Выбор зависит от того, кто выполняет цикл, кто платит и где хранится ключ. Agent SDK — это библиотека. Она встраивает цикл агента Claude Code в ваш собственный процесс.
Машину и планировщик предоставляете вы (Agent SDK overview, руководство по хостингу). Managed Agents предоставляет размещённый в облаке цикл агента и песочницу. Routines в Claude Code и scheduled tasks в Cowork — функции приложений по подписке, они расходуют лимиты вашего плана.
| Деплоймент Managed Agents | Agent SDK | Routines в Claude Code | Scheduled tasks в Cowork | |
|---|---|---|---|---|
| Кто выполняет цикл | Облако Anthropic | Ваш сервер или контейнер | Облако Anthropic | Облако Anthropic |
| Расписание | Cron + часовой пояс IANA, разброс до 9 мин | Ваш собственный cron или очередь задач | Cron, интервал не меньше 1 часа | Частота выбирается в приложении |
| Оплата | Токены API + $0,08 в час | Токены API | Лимиты тарифа | Лимиты тарифа |
| Подходит для | Продакшен-задачи для многих заведений с бюджетами и вебхуками | Команды, у которых уже есть свои серверы и которым нужен полный контроль | Личный дайджест разработчика | Личный еженедельный отчёт |
| Источник | Scheduled deployments, Pricing | Agent SDK overview, руководство по хостингу | Routines | Справка Cowork |
Ранее мы опубликовали две статьи на близкие темы. В первой используются Routines в Claude Code: они каждую ночь читают Reddit и составляют сводку болевых точек пользователей. В том тесте одна страница со 100 постами охватила всего 18,7 часа (запланированные задачи Claude Code для Reddit). Во второй запланированные задачи Cowork каждый понедельник собирают таблицу цен и отзывов конкурентов (таблица цен конкурентов в Cowork).
Если сравнить все три статьи, получается так. Для еженедельного отчёта, который вы читаете сами, проще всего Cowork. Для задачи разработчика рядом с репозиторием кода подойдёт Claude Code. Для десятков магазинов каждую ночь, с лимитом бюджета, оповещениями о сбоях и отправкой результатов в вашу собственную систему используйте развёртывание Managed Agents по расписанию.
В документации Claude Code сказано, что Routines запускаются не чаще раза в час и расходуют лимиты тарифного плана (Routines). Задачи Cowork выполняются в облаке, даже когда ваш компьютер в спящем режиме (справка Cowork). Если вам нужны только отзывы Google Maps в таблице, без агента, читайте статью как парсить отзывы Google Maps.
Когда что-то сломалось: какой уровень проверять первым
Когда ночная задача падает, в отчёте часто написано только «нет данных». Таблица собирает в одном месте вероятные сбои трёх уровней: развёртывание и сессия Anthropic, vault и сеть, API EveryInfra. В левой колонке указан симптом, который вы видите. Правые колонки подсказывают, куда смотреть в первую очередь. Ситуации из всех строк EveryInfra мы воспроизвели при реальных вызовах 4 ноября. Строки об Anthropic основаны на тексте документации об ошибках и состояниях.
| Симптом | Вероятный уровень | Что проверить сначала | Как исправить |
|---|---|---|---|
| Утром нет ни отчёта, ни вебхука | Развёртывание не создало сессию, или все 3 попытки доставки вебхука завершились ошибкой | GET /v1/deployment_runs?has_error=true | Один раз вызовите POST /v1/deployments/{id}/run вручную |
| Сессия ждёт, а файл отчёта не появляется | Для набора MCP-инструментов всё ещё стоит always_ask | stop_reason последнего события idle | Установите always_allow для everyinfra_call_api |
| Результат инструмента сообщает unauthorized и «Nothing was charged» | Неверный ключ в vault или неверный allowed_hosts у учётных данных | secret_name и networking учётных данных | Исправьте учётные данные. Не давайте агенту делать повторные попытки |
curl получает 403 с именем хоста | В allowed_hosts окружения нет этого хоста | networking окружения | Добавьте api.everyinfra.com |
| Модель видит только короткое превью | Вывод MCP-инструмента длиннее 100 000 символов | limit этого вызова | Запрашивайте 50 отзывов или перейдите на HTTP с jq |
| API возвращает 429 | Исчерпан поминутный лимит запросов ключа | retry_after в ответе | Подождите указанное число секунд. За 429 плата не списывается |
| Поиск не дал результата, средства возвращены | Поиск места не дал результатов для этого магазина | reason в ответе | Читайте отзывы по URL поиска Google Maps |
За этой таблицей стоит одно правило. Каждая ошибка должна попасть в отчёт, и агент не должен сам её обходить. Агенты хорошо умеют «попробовать ещё раз с другими параметрами». Эта задача стоит денег и работает ночью, когда никто за ней не следит.
Здесь обходной путь часто означает выбор не того магазина, повторное чтение или ошибку конфигурации, которая не устраняется месяц. Поэтому в промпте должно быть указано: при unauthorized, 403 или приостановке из-за бюджета остановиться и записать причину. Только при 429 допускается одна повторная попытка после ожидания.
Ограничения и открытые вопросы
Во-первых, сторону Anthropic мы не тестировали. Развёртывания по расписанию, подмена ключей через vault, политики разрешений и вебхуки приведены как примеры конфигурации из документации platform.claude.com по состоянию на 4 ноября 2026 года. Managed Agents всё ещё в бета-версии, и поля могут измениться. Поля vault_ids и resources мы взяли из примеров в документации по сессиям и по памяти. Прежде чем что-либо создавать, сверьте их со справочником по развёртываниям для вашей версии SDK.
Во-вторых, Tripadvisor возвращает только отзывы на английском языке. Отзывов на испанском, китайском и других языках в ответе нет. В-третьих, поиск мест в Google не дал результата для обоих магазинов за пределами США (средства возвращены). Прямое чтение по URL поиска Google Maps сработало, поэтому каждый новый URL магазина один раз проверяйте вручную. В-четвёртых, на Yelp страница 1 не отсортирована по дате, а параметр сортировки в URL ни на что не влияет. Читайте ещё одну страницу и определяйте «новые» отзывы по ID.
В-пятых, текст отзывов нужно считать недоверенными входными данными. В документации по памяти предупреждают, что содержимое хранилища памяти может содержать промпт-инъекцию, и у текста отзывов тот же риск. Кто угодно может написать в отзыве «игнорируй свои инструкции». Путь через HTTP и jq сохраняет отзывы как данные. Окружение разрешает только api.everyinfra.com, а vault подставляет ключ только для этого хоста. Поэтому, даже если модель введут в заблуждение, ключ никуда не уйдёт.
В-шестых, используйте отчёт только для улучшения собственных магазинов. Правило FTC 2024 года запрещает фейковые отзывы, оплату отзывов с заранее заданным мнением и подавление негативных отзывов (пресс-релиз FTC). Негативные отзывы стоит отслеживать каждую ночь, но правильно будет ответить на отзыв и устранить проблему, а не давить на его автора. Статья описывает только методы работы с данными и не является юридической консультацией.
Последние изменения
Эти обновления за последний месяц затрагивают нашу задачу. Все они описаны в «Claude Platform release notes». С 2026-10-07 web_fetch загружает только URL, которые уже встречались в сессии, а allowed_hosts при сетевом режиме limited применяется к web_fetch и web_search. 2026-10-09 в Managed Agents появились динамические рабочие процессы (dynamic workflows), которые запускают много агентов поэтапно. Они могут пригодиться, если у вас сотни магазинов, но мы их не тестировали. 2026-10-14 развёртывания по расписанию стали доступны в Claude Platform on AWS.
2026-10-20 администраторы организаций получили в консоли переключатель, который отключает web fetch или ограничивает его домены, и сессии Managed Agents ему подчиняются. 2026-10-29 вышла бета-версия Usage and Cost Analytics API. Этот API разбивает токены и затраты по модели, рабочему пространству и API-ключу, что помогает проверять месячную стоимость ночного мониторинга.
FAQ
Чем Claude Managed Agents отличаются от Routines в Claude Code?
Этот вопрос взят из поисковых подсказок «claude managed agents vs claude code» и «claude managed agents vs routines», а также из поста на Reddit «What is the point of Managed Agents» (тред на Reddit). Оба варианта работают в облаке Anthropic. Routines в Claude Code расходуют лимиты тарифного плана и запускаются не чаще раза в час (Routines). Развёртывания Managed Agents оплачиваются по API-токенам плюс $0,08 за час сессии и запускаются по cron с точностью до минуты. Они ограничивают каждый запуск жёстким бюджетом и отправляют результаты через вебхук (Scheduled deployments). Для продакшен-задач команды или клиентов выбирайте второй вариант.
Как устроены тарифы Claude Managed Agents и сколько стоит одна ночь?
Этот вопрос взят из подсказок «claude managed agents pricing» и «claude managed agents cost». Плата взимается за две вещи. Токены модели оплачиваются по прайс-листу, а время работы сессии стоит $0,08 в час и учитывается только в состоянии running (Pricing, по состоянию на 2026-11-04). По нашей оценке, один магазин на Sonnet 5.5 с HTTP-путём стоит за ночь около $0,077 за модель и $0,0029 за время работы. Добавьте $0,0056 за API EveryInfra, и в сумме выйдет около $0,0855 при верхней оценке с коэффициентом 3x.
Claude Managed Agents или Agent SDK: что выбрать?
Этот вопрос взят из подсказки «claude managed agents vs agent sdk». Agent SDK — это библиотека. Цикл агента работает в вашем собственном процессе, а машину, расписание, секреты и логи вы обслуживаете сами (Agent SDK overview). Managed Agents берёт на себя цикл, изолированную среду, расписание, подмену учётных данных и запись сессии. Выбирайте SDK, если у вас уже есть серверы и очередь задач и вам нужен полный контроль. Выбирайте Managed Agents, если вам нужны вебхуки и бюджет на каждый запуск без собственного планировщика.
Могут ли Managed Agents читать отзывы Google Maps или Yelp через web_fetch?
Этот вопрос взят из подсказки «claude managed agents web». Надёжно не могут. web_fetch не выполняет JavaScript, а с 2026-10-07 загружает только URL, которые уже появлялись в сессии (release notes). Файл robots.txt Yelp разрешает Claude-User только раздел /article (yelp.com/robots.txt). Структурированный API отзывов надёжнее.
Что будет, если развёртывание по расписанию пропустит запуск?
Этот вопрос взят из подсказки «claude managed agents schedule». Триггеры, пропущенные во время паузы, задним числом не выполняются. Если на создании сессии срабатывает лимит запросов, этот запуск получает запись session_rate_limited_error, а повторной попытки не будет (Scheduled deployments). Поэтому следующий запуск должен дочитывать до последнего ID отзыва, который сохранил последний успешный запуск, а не ограничиваться последними 24 часами. В Google limit=50 покрывает около двух дней для такого популярного магазина, как Katz's, так что одна пропущенная ночь всё равно покрывается.
Видит ли модель ключ в vault?
Этот вопрос взят из подсказок «claude managed agents vault» и «claude managed agents credential vault». Нет. Учётные данные типа «переменная окружения» содержат в изолированной среде только заглушку. Реальное значение подставляется на выходе и только для хостов из allowed_hosts (Authenticate with vaults). В блоге Anthropic тоже сказано, что агент никогда не видит ваш ключ (блог Anthropic).
С чего начать
- Получите API-ключ EveryInfra. Пройдите Быстрый старт и по одному разу вызовите
google_maps_reviews/search,yelp/searchиtripadvisor/search, чтобы найти URL трёх магазинов. - Один раз вызовите
google_maps_reviews/reviews,yelp/reviewsиtripadvisor/reviewsчерез curl на своём компьютере. Проверьте поля и размер ответа. О пути через MCP читайте на странице MCP-сервера. - В консоли Claude создайте окружение с сетевым режимом
limitedи единственным хостомapi.everyinfra.com. Создайте vault с одной записью учётных данныхEVERYINFRA_API_KEY. Создайте агента с отключённымиweb_fetchиweb_search. - Запустите одну сессию вручную или вызовите
POST /v1/deployments/{id}/run, чтобы проверить формат отчёта и стоимость. Затем создайте развёртывание с cron30 6 * * *и бюджетом на каждый запуск. Подпишитесь наsession.status_idledиdeployment_run.failed. - Описание каждого API отзывов смотрите на странице отзывов Google Maps, странице Yelp и странице Tripadvisor. Еженедельный отчёт по пяти сайтам отзывов описан в статье мониторинг отзывов через OpenAI Agents API.
Источники
- «Claude Managed Agents overview», документация Anthropic, дата обращения: 2026-11-04.
- «Scheduled deployments», документация Anthropic, дата обращения: 2026-11-04.
- «Authenticate with vaults», документация Anthropic, дата обращения: 2026-11-04.
- «Cloud environment setup», документация Anthropic, дата обращения: 2026-11-04.
- «Tools», документация Anthropic, дата обращения: 2026-11-04.
- «MCP connector», документация Anthropic, дата обращения: 2026-11-04.
- «Permission policies», документация Anthropic, дата обращения: 2026-11-04.
- «Session budgets», документация Anthropic, дата обращения: 2026-11-04.
- «Subscribe to webhooks», документация Anthropic, дата обращения: 2026-11-04.
- «Reference», документация Anthropic, дата обращения: 2026-11-04.
- «Using agent memory», документация Anthropic, дата обращения: 2026-11-04.
- «Restrict web search and web fetch domains», документация Anthropic, дата обращения: 2026-11-04.
- «Web fetch tool», документация Anthropic, дата обращения: 2026-11-04.
- «Pricing», документация Anthropic, дата обращения: 2026-11-04.
- «Claude Platform release notes», Anthropic, дата обращения: 2026-11-04.
- «Define your agent», документация Anthropic, дата обращения: 2026-11-04.
- «Start a session», документация Anthropic, дата обращения: 2026-11-04.
- «Session event stream», документация Anthropic, дата обращения: 2026-11-04.
- «Glossary», документация Anthropic, дата обращения: 2026-11-04.
- «Agent SDK overview», документация Claude Code, дата обращения: 2026-11-04.
- «Hosting the Agent SDK», документация Claude Code, дата обращения: 2026-11-04.
- «Routines», документация Claude Code, дата обращения: 2026-11-04.
- «Schedule recurring tasks in Claude Cowork», Справочный центр Claude, дата обращения: 2026-11-04.
- «Does Anthropic crawl data from the web», Справочный центр Claude, дата обращения: 2026-11-04.
- «New in Claude Managed Agents: run agents on a schedule», блог Anthropic, дата обращения: 2026-11-04.
- «Claude Managed Agents: get to production 10x faster», блог Anthropic, дата обращения: 2026-11-04.
- «MCP Transports», спецификация Model Context Protocol, дата обращения: 2026-11-04.
- «MCP Tools», спецификация Model Context Protocol, дата обращения: 2026-11-04.
- «Place Details (New)», Google for Developers, дата обращения: 2026-11-04.
- «Work with review data», документация Google Business Profile, дата обращения: 2026-11-04.
- «Read and reply to reviews», справка Google Business Profile, дата обращения: 2026-11-04.
- «Business Reviews», документация Yelp Fusion, дата обращения: 2026-11-04.
- «How is the order of reviews determined?», поддержка Yelp, дата обращения: 2026-11-04.
- «yelp.com/robots.txt», Yelp, дата обращения: 2026-11-04.
- «Location Reviews», документация Tripadvisor Content API, дата обращения: 2026-11-04.
- «tripadvisor.com/robots.txt», Tripadvisor, дата обращения: 2026-11-04.
- «crontab», The Open Group Base Specifications Issue 8, дата обращения: 2026-11-04.
- «Time Zones», IANA, дата обращения: 2026-11-04.
- «Standard Webhooks», Standard Webhooks, дата обращения: 2026-11-04.
- «FTC final rule banning fake reviews», Федеральная торговая комиссия США (FTC), опубликовано 2024-08-14, дата обращения: 2026-11-04.
- «What is the point of Managed Agents?», Reddit r/ClaudeAI, дата обращения: 2026-11-04.
- Каталог API EveryInfra, EveryInfra, дата обращения: 2026-11-04, 00:13 по сингапурскому времени.
Справка BL-79