Cursor Agent SDK или cron-обёртки Claude Code: что выбрать для ИИ-агентов
Cursor Agent SDK (октябрь 2026) описывает ИИ-агента папкой с кодом, проверяет его evals и запускает по событиям GitHub, Slack, вебхукам и cron. Переносить на него cron-обёртки вокруг Claude Code стоит, если большинство триггеров агента - GitHub и Slack. Если агент живёт по расписанию, работает с вашим сервером и Telegram, переезд даст в основном переписывание готовой обвязки.
Cursor Agent SDK: агенты как код, evals и триггеры по cron и вебхукам. Сравниваю с 23 своими cron-обёртками вокруг Claude Code и объясняю, когда переезд оправдан.

В статье · 8 разделовразвернутьсвернуть
Cursor Agent SDK - это набор инструментов от Cursor, в котором ИИ-агент описан папкой с кодом: промпт, типизированные тулы, скиллы, каналы. Агента можно проверить evals и задеплоить в облако Cursor или к себе. Будить его умеют события GitHub, GitLab и Bitbucket, сообщения в Slack, вебхуки и cron. Свои 23 cron-обёртки вокруг Claude Code я на него переносить не стал, и ниже объясню, по какому критерию решал.
Немного контекста. У меня на сервере крутится конвейер статей для этого блога. Темы, черновики, фактчек, обложки, публикация - всё это делают ИИ-агенты, которых bash-скрипты по расписанию дёргают через claude -p. Репо живёт с 10 июля 2026, за это время в нём набралось 535 коммитов, а в папке cron/ лежат 23 скрипта run-*.sh. 20 октября 2026 Cursor выкатил Agent SDK, и по описанию это ровно то, что я руками строил четыре месяца. Пришлось сесть и честно сравнить.
Что такое Cursor Agent SDK
Cursor Agent SDK - это npm-пакет @cursor/agent-sdk и CLI agent-sdk, которые превращают ИИ-агента в обычный проект с кодом. Агента создают командой npx @cursor/agent-sdk init, гоняют локально в плейграунде через agent-sdk dev, проверяют agent-sdk eval и выкатывают agent-sdk deploy. Анонс вышел 20 октября 2026, в changelog SDK назван generally available.
Формулировка из анонса: агент - это проект. Внутри папки:
instructions.md- промпт агента;tools/- каждый файл это одно типизированное действие, которое модель может вызвать;skills/- процедуры, которые модель подгружает по требованию;mcp-connections/- тулы из MCP-серверов;channels/- где агент принимает сообщения и куда отвечает.
Если вы живёте в Claude Code, это выглядит знакомо до смешного. Мой агент-генератор черновиков - это SKILL.md плюс папка references/ с профилем площадки и правилами. По сути тот же instructions.md и skills/, только без типизированных тулов: агент пользуется встроенными Bash, Read и Write, а за базу отвечает CLI-скрипт scripts/bp_db.py.
Ещё в анонсе есть agent-sdk validate (проверка проекта), agent-sdk info (что SDK нашёл в папке) и шаблоны для init --template: ревьюер безопасности, автофиксер PR, триажер задач из Linear или Jira. Все шаблоны про код и тикеты, и это сразу показывает, для кого делали.
Cursor Agent SDK или cron-обёртки вокруг Claude Code: сравнение
Cursor Agent SDK даёт из коробки триггеры, сессии, evals и деплой с URL, а самодельные cron-обёртки вокруг Claude Code дают полный контроль над окружением, модель Anthropic напрямую и любые каналы, включая Telegram. Разница не в возможностях, а в том, кто пишет обвязку: в SDK её написал Cursor, в обёртках - вы.
Сводка по данным changelog Cursor (20.10.2026) и моему репо (проверено 06.11.2026):
| Что сравниваем | Cursor Agent SDK | Мои cron-обёртки + Claude Code |
|---|---|---|
| Где описан агент | папка проекта: instructions.md, tools/, skills/, channels/ | SKILL.md + references/ в скилле, bash-скрипт cron/run-*.sh |
| Триггеры | события GitHub, GitLab, Bitbucket, Slack, вебхуки, cron | только cron и кнопка в админке, которая зовёт тот же скрипт |
| Проверка поведения | agent-sdk eval: фиксированное сообщение и проверка, какие тулы вызваны и с каким входом | строка-контракт ИТОГ: в выводе + 61 файл pytest на скрипты вокруг агента |
| Память между запусками | сессия на тред: ответ в PR или в треде Slack продолжает ту же сессию | нет, каждый claude -p стартует с нуля, состояние в SQLite |
| Где работает | локально, в облаке Cursor, на своей инфраструктуре | свой VPS |
| Уведомления | Slack из коробки | Telegram через curl к Bot API, свой код |
| Модель | из каталога Cursor | закреплена в env: BP_CLAUDE_MODEL, по умолчанию claude-opus-5-5 |
Главное, что бросается в глаза: у Cursor нет Telegram в списке каналов. Его можно прикрутить через вебхуки, но тогда половину моей обвязки придётся написать заново, просто внутри чужого SDK.
Читайте такжеRoutines в Claude Code против моего парка cron-обёрток на VPS: что уехало в облако, а что нетRoutines в Claude Code запускают агентов по расписанию, вебхуку и событию GitHub. Разбираю на парке из 11 cron-обёрток, что реально уехало в облако, а что осталось на VPS и почему.Как запустить ИИ-агента по cron или вебхуку
Запустить ИИ-агента по расписанию можно двумя путями: отдать триггер платформе (Cursor Agent SDK, Routines в Claude Code) или повесить headless-вызов агента на системный cron. В первом случае расписание, повторы и логи - забота платформы. Во втором вы сами пишете lock, таймауты, алерты и проверку результата, зато агент видит всё ваше окружение.
В Cursor Agent SDK cron стоит в одном списке с GitHub и Slack. Отдельно в анонсе есть приятная деталь: события GitHub идут через аккаунт Cursor, публичный URL под вебхук поднимать не нужно. Для соло-разработчика без белого IP и домена под API это реально снимает кусок возни. Похожая механика есть в Automations от Cursor, и там честно предупреждают: запуск по расписанию может прийти с задержкой, но раньше назначенного времени не стартует.
У меня то же самое сделано руками. Вот ядро обёртки генерации черновиков, дословно из cron/run-generate.sh (выкинул ветки выбора темы):
source "$(dirname "$0")/lib.sh"
bp_init
REQ_ID="${1:-}"
# авто-прогон плавает внутри окна (claude-d7n); кнопка админки идёт сразу
[ -z "$REQ_ID" ] && jitter 40
# кнопка (есть id) ждёт освобождения lock'а; авто-cron молча уступает
exec 9>data/generate.lock
if [ -n "$REQ_ID" ]; then flock 9; else flock -n 9 || exit 0; fi
claude --model "$BP_CLAUDE_MODEL" -p "/blog-draft $TOPIC_ID" --permission-mode acceptEdits >"$OUT" 2>&1 \
|| { cat "$OUT"; exit 12; }
grep -q '^ИТОГ: дубль' "$OUT" && exit 102
grep -q '^ИТОГ: черновик #' "$OUT" || exit 13Что тут происходит по шагам:
bp_initподгружает.env, проверяет, что есть токен Telegram для алертов, и пишет heartbeat-файл "джоб стартовал".jitter 40- случайная пауза от 0 до 40 минут. Ровный ритм "каждый час в :23" - часть машинного отпечатка конвейера, поэтому генерация плавает внутри окна.flockне даёт двум генерациям столкнуться. Cron молча уступает, кнопка из админки ждёт.- Сам агент - одна строка
claude -pс явной моделью и режимом прав. - Результат проверяется грепом по последней строке вывода, а коды выхода 12, 13 и 102 разводят ошибки по разным алертам.
Вебхуков у меня нет вообще. "Триггер" от человека - это кнопка в админке, которая вызывает тот же скрипт с id темы. Хотите реакцию на событие - ставьте маленький HTTP-обработчик, который делает ровно это: кладёт задачу и дёргает обёртку. Для большинства соло-задач cron раз в 2 часа хватает с головой.
Что такое evals для ИИ-агента и чем они лучше грепа по логу
Eval для ИИ-агента - это автотест поведения: агенту отправляют фиксированное сообщение и проверяют, что он сделал, какие тулы вызвал, с какими аргументами и в какой форме ответил. В Cursor Agent SDK evals запускаются командой agent-sdk eval локально или в CI, а живые события GitHub можно сохранить фикстурами через agent-sdk github replay.
Вот тут мне стало немного стыдно :) Мой "eval" - это строка grep -q '^ИТОГ: черновик #'. Агент обязан закончить ответ ровно такой строкой, иначе обёртка считает прогон упавшим и возвращает тему в беклог. Это контракт на форму ответа, но не на поведение. Если агент написал черновик без единой внутренней ссылки или выдумал цифру, греп этого не увидит.
Ловит такое отдельная стадия - второй агент blog-check со скоркартой на 100 баллов и фактчеком каждого URL из факт-листа. Но это проверка результата на проде, а не тест перед выкаткой. Поменял я промпт скилла - узнаю, что сломал, только на следующем живом прогоне. А 61 файл pytest в репо проверяет скрипты вокруг агента: базу, публикацию, нарезку сообщений. Самого агента там нет.
Идея evals из Cursor переносится без всякого SDK, и это главное, что я из анонса забираю:
- взять 5-10 реальных тем из базы как фикстуры;
- прогонять на них
claude -pв песочнице с копией базы; - проверять не текст, а действия: вызван ли
draft-create, есть ли в теле 2+ ссылок наsunm8.ru/blog/, не превышен ли title в 75 символов; - запускать на каждое изменение
SKILL.md, а не по крону.
Звучит как неделя работы? Скорее вечер. Просто раньше не было готовой формы, как это назвать и разложить.
Как я держу 23 агентские обёртки без SDK
Самодельный парк cron-обёрток вокруг Claude Code держится на четырёх вещах, которые SDK обещает дать из коробки: lock от двойного запуска, сторож молчащих джобов, надёжные алерты и деградация при сбоях сети. Каждую из них я дописал после конкретного инцидента, и почти все инциденты были тихими, без единой ошибки в логах.
Немного хронологии по cron/lib.sh и scripts/health_check.py:
- 01-09.08.2026 сбор SEO-метрик стоял девять дней. Джоб падал до первой строчки лога, почта на сервере не настроена, а понедельничный дайджест исправно приходил со старыми цифрами. После этого появился
health_check.py: каждый джоб при старте пишет heartbeat, сторож раз в сутки сверяет возраст с порогом. Сейчас в его таблице 26 джобов, 4 из них на паузе. - 01.09.2026 дайджест подбора ключей на 12,5 КБ пропал молча: Telegram не принимает сообщения длиннее 4096 символов и отвечает 400, а ответ уходил в
/dev/null. Теперь алерт режется на куски, а отказ API пишется в лог. - В тот же день сторож дал ложный алерт по тому же джобу: он ходит 1-го и 15-го, и разрыв с 15-го по 1-е в 31-дневном месяце - 408 часов. Порог подняли до 420.
- 29.09.2026 сервер потерял доступ к GitHub, и каждый запуск висел минуты на
git pull. Теперь pull с таймаутом 60 секунд и работой на текущем коде, если не прошёл.
И любимая деталь, которую без опыта не придумаешь. Обёртки шлют в алерт хвост лога через tail -c 1200. tail -c режет по байтам, а кириллица в UTF-8 - по два байта на букву. Разрезанная пополам буква делает сообщение невалидным, Telegram отвечает 400, и алерт о падении... тоже падает. Молча. Лечится одной строкой с iconv -c в общей функции alert(), но найти это - отдельное удовольствие.
Вот это и есть цена самодельного решения. Не код обёртки (он короткий), а вот эти 4 инцидента, каждый из которых я заметил по отсутствию сообщения, а не по сообщению. Как я встраиваю человека в такой конвейер, писал отдельно - про апрув контента кнопками в Telegram.
Стоит ли переносить агентские обёртки на Cursor Agent SDK
Переносить агентов на Cursor Agent SDK стоит, если они живут вокруг кода и командной переписки: ревью PR, автофикс CI, триаж задач, ответы в Slack. Если агент работает с вашим сервером, локальной базой и Telegram, а модель вы берёте у Anthropic по подписке Claude Code, переезд даст в основном переписывание уже работающей обвязки.
Мой критерий - фраза-граница, которую я себе вывел: если больше половины триггеров агента - события из GitHub или Slack, бери SDK; если больше половины - время и твоя же админка, оставайся на cron. У меня из 23 обёрток к GitHub не привязана ни одна. Решение принялось само.
Второй вопрос - деньги и модель. Про цены в анонсе Agent SDK ничего нет. В документации Cursor SDK для TypeScript сказано, что запуски через SDK тарифицируются так же, как в IDE и Cloud Agents, а по разбору agentpatterns.ai "локальный" запуск означает, где крутится цикл агента и доступ к файлам, а не где работает модель. Оговорюсь: это разные продукты Cursor с похожими названиями, и для Agent SDK это может работать иначе. Но если так, то даже self-hosted агент платит за инференс через план Cursor. Мой конвейер сидит на подписке Claude Code, и как я сравнивал эти тарифы по деньгам, есть в статье Claude Code, Codex или Cursor: что выгоднее.
Третий - зависимость от вендора. Схема "агент - это папка" хороша, пока папку читает один CLI. Мой SKILL.md - это markdown, который я могу скормить любому агенту. tools/ в формате Cursor - уже нет.
Когда Cursor Agent SDK не нужен
Cursor Agent SDK не нужен, если агент запускается по расписанию, работает с локальными файлами и базой на вашем сервере и отчитывается в Telegram. В этом случае SDK заменяет только триггер и деплой, а это 10-15 строк bash. Lock, сторож и алерты всё равно придётся писать, просто в другом месте.
Ещё случаи, когда я бы не трогал:
- агентов меньше пяти, и все они на cron: обвязка займёт вечер, а не квартал;
- модель жёстко Claude и у вас подписка: смена рантайма - это смена биллинга;
- нужен кастомный канал, которого нет в SDK (тот же Telegram или почта);
- агент правит прод-базу: в своей обёртке я точно знаю, какие у него права и через какой CLI он ходит.
А вот evals - нужны всем, и это не про SDK. Я начну с пяти фикстур на генератор черновиков, а SDK оставлю на случай, если когда-нибудь заведу агента на ревью PR. Такие дела.
Частые вопросы
Cursor Agent SDK бесплатный?
В анонсе Agent SDK от 20.10.2026 цен нет. В документации Cursor SDK для TypeScript сказано, что запуски через SDK тарифицируются так же, как в IDE и Cloud Agents, то есть по плану Cursor. Перед переездом стоит проверить актуальную страницу тарифов Cursor.
Можно ли запускать Claude Code по расписанию без SDK?
Да. Claude Code умеет headless-режим через claude -p, и его можно повесить на обычный cron на своём сервере. Придётся самому написать lock от двойного запуска, таймауты, алерты и проверку результата, зато агент видит локальные файлы и базу. Облачная альтернатива у Anthropic - Routines.
Поддерживает ли Cursor Agent SDK Telegram?
Среди встроенных каналов в анонсе 20.10.2026 Telegram нет: там GitHub, GitLab, Bitbucket, Slack, вебхуки и cron. Telegram-бота можно подключить через вебхуки, но обработку сообщений и ответы придётся писать самому.
Как готовился материал: черновик собран моим AI-конвейером по темам и заметкам из практики, факты сверены с первоисточниками, финальный текст я прочитал, поправил и утвердил перед публикацией. Обложку к статье тоже рисует нейросеть. Про сам конвейер — в разделе обо мне.