Как точечно гонять агента из подписки headless — не устроить абьюз и не снести сервер.
Точечные воркеры из подписки CLI — без превращения аккаунта в дешёвый «безлимитный API» и без сноса продакшена. Механика и числа с реального сервера; имена проектов убраны.
01 ДВА СЧЁТА
API против подписки CLI
02 HEADLESS
три флага, которые открывают дверь
03 РИСКИ
не всё автоматизировать; ToS
04 ПЯТЬ РОЛЕЙ
точечные воркеры на проде
05 ЛЕСТНИЦА
клетка от 0 до 7
06 ГРАБЛИ
что уже ломалось
07 СХЕМА СЕРВИСА
дирижёр и один такт
08 КОПИПАСТ
чеклист и промпты
09 ВЫВОД
формула с прода
У многих AI-инструментов есть два способа оплаты. Первый — API: каждый запрос считается в токенах, счёт растёт с каждым вызовом. Второй — подписка на CLI(программа в терминале: Claude Code, Antigravity, Grok CLI и похожие). Платишь фиксировано, сидишь в терминале, агент читает файлы и правит код.
Проблема: подписка обычно заточена под человека за клавиатурой. А на сервере иногда нужны короткие задачи без диалога: запустил → получил ответ → вышел. Такой режим называют headless (без «головы», без интерактивного экрана): агент работает как скрипт, а не как собеседник.
Отсюда соблазн: «подписка уже оплачена — накрутим на неё всё подряд». Так делать не надо. У провайдеров в правилах (ToS — условия использования) подписка почти всегда про человека и официальный продукт, а не про то, чтобы заменить собой платный API для ботов и массовых скриптов. Нарушение бьёт по аккаунту: 403, suspension, иногда перманентный бан. Параллельно есть второй риск — агент с shell на сервере сносит файлы, если нет клетки.
Этот выпуск — не рецепт «как бесплатно прокачать тысячи запросов». Это разбор осторожных, узких воркеров: тексты для «что нового», SEO-чат по кнопке, ночной отчёт раз в сутки, арбитраж ложного бана, автофикс с pull request без авто-мержа. Сначала — где граница здравого смысла и правила провайдеров, потом — как запускать и как держать в клетке.
РАЗДЕЛ 01
ДВА СЧЁТА ЗА ОДИН МОЗГ
Задача. Нужен ИИ в автоматике: не чат в браузере, а ответ по запросу сервиса.
Почему это важно. API удобен для встраивания, но каждый вызов — отдельная строка в биллинге. Подписка CLI уже оплачена; дублировать её pay-per-token бессмысленно, если модель та же и задача узкая.
Как. Сервис (бэкенд, systemd-демон, cron) в узких случаях не ходит в HTTP API вендора, а запускает официальный CLI-процесс с флагами «один промпт → ответ в stdout». Авторизация — как у интерактивной сессии (OAuth / login CLI), credentials — в отдельном HOME служебного пользователя.
Итог. Модель та же, что в терминале. Меняется оболочка: скрипт с таймаутом вместо человека. Это не означает «подписка = замена API на любом объёме» — см. раздел про риски.

Простая аналогия: API — такси по счётчику, когда поездок много и маршрут чужой. Подписка CLI — свой автомобиль для своих коротких поездок. Headless — автопилот на заранее прописанном маршруте: без тормозов и без прав на дорогу (ToS) заканчивается аварией.
РАЗДЕЛ 02
HEADLESS: ТРИ СЛОВА, КОТОРЫЕ ОТКРЫВАЮТ ДВЕРЬ
Почти у всех CLI один и тот же каркас:


Без «пропустить подтверждения» headless не работает: агент честно ждёт человека. С «пропустить подтверждения» без клетки headless опасен: агент может выполнить rm, git push --force, остановить сервис.
ПРАВИЛОSkip-permissions и sandbox (или эквивалент) продаются пакетом. Одно без другого — либо мёртвый воркер, либо бомба с таймером.
РАЗДЕЛ 03
НЕ НАДО АВТОМАТИЗИРОВАТЬ «ВСЁ». РИСКИ АККАУНТА
ДВЕ РАЗНЫЕ ОПАСНОСТИ
Говоря «безопасно», часто смешивают две вещи.


Клетка на диске (sandbox, non-root, clone) не защищает от второго. Даже идеальный systemd не отменяет ToS. И наоборот: «мы вроде в рамках правил» не отменяет rm -rf, если skip-permissions без ограничений.
ЧТО ПРОВАЙДЕРЫ ЯВНО НЕ ЛЮБЯТ
Картина на 2026 год (отчёты пользователей, обсуждения, заявления в docs/форумах; это не юридическая консультация — перед боем читайте актуальный ToS своего тарифа):
-
Anthropic (Claude Pro/Max). Жёстко режут OAuth-токен подписки в чужих CLI и обвязках (OpenClaw, OpenCode и аналоги). Подписка — для официальных продуктов (в т.ч. Claude Code / claude.ai); программный доступ «сбоку» — через API. Официальный headless (
claude -p) обычно часть продукта; «выдернули токен и крутим как API» — высокий риск бана. -
Google (Gemini / Antigravity). В начале 2026 были массовые 403 ToS Violation у тех, кто гонял подписку через third-party harnesses. Официально: запрет harvest / piggyback on OAuth — «подоить» авторизацию чужим инструментом. Часть аккаунтов разбанивали с recertification; повтор — путь к перманентному бану. Официальный
agy/ Gemini CLI — другой разговор, чем «чужой бот на вашем OAuth». -
OpenAI (ChatGPT Plus/Pro). Риск ниже «сразу за любой скрипт», выше за heavy automation: тысячи запросов, spam-like паттерны. Официальный Codex CLI на подписке — штатный путь.
-
xAI (Grok / SuperGrok). Официально поддерживают headless в Grok Build CLI (
grok -p) под скрипты на подписке — заявленный путь, не обход. Злоупотребление volume всё равно упрётся в лимиты продукта.
Общий смысл: подписка — не безлимитный API для фермы ботов. Если картина снаружи выглядит как «тысячи дешёвых токенов в обход API» — ждут детекты и баны.
ЧЕГО НЕ СТОИТ ДЕЛАТЬ
-
Не превращать один Max/Pro в бэкенд для публичного SaaS (чужие пользователи жрут ваш OAuth).
-
Не гонять тысячи однотипных запросов в сутки «потому что подписка безлимит».
-
Не тащить third-party harness, который подставляет OAuth вместо официального бинаря — зона массовых банов 2026.
-
Не обходить антифрод fingerprint’ами и «антидетектом» — это уже осознанный обход.
-
Не автоматизировать критичные деньги и доступы без человека: выплаты, массовый разбан, деплой в main, смена секретов.
Если нужен стабильный поток «как у API» — платите за API. Headless на подписке — для редких, узких, своих задач.
КАК ВЫГЛЯДЯТ «НАШИ» ЗАДАЧИ (ТОЧЕЧНО, НЕ ФЕРМА)
Ниже — не оправдание «можно всё», а калибр: маленький радиус поражения и низкая частота.


Общий рисунок: событие → один (или несколько) коротких вызовов → узкий артефакт. Не цикл «пока квота не кончится». Не витрина «бесплатный Claude для клиентов».
ТРИ ВОПРОСА ПЕРЕД КОДОМ

-
Это официальный CLI провайдера (или его заявленный headless) — или чужая обёртка на OAuth?
-
Частота — раз в день / по кнопке / по ошибке, или «тысячи в час»?
-
Выход — черновик/вердикт/PR, или «сразу в прод и к клиентам»?
Два «нет» или одно «тысячи / публичный SaaS» — не headless на подписке, а API.
РАЗДЕЛ 04
ПЯТЬ РОЛЕЙ, ОДИН ПРИЁМ
На одном железе одновременно живут разные headless-воркеры. Общее — spawn официального CLI. Разница — насколько жёсткая клетка и что агенту разрешено менять.
4.1. ЧЕРНОВИК «ЧТО НОВОГО» (ТОЛЬКО ЧТЕНИЕ)
Задача. Из коммитов сделать человеческие карточки для колокольчика обновлений: без жаргона, без внутренних id.
Почему. Коммиты пишут разработчики и агенты. Пользователю нужно «появилась озвучка», а не feat(tts): wire clone voices.
Как. Скрипт берёт коммиты только с прошлого успешного запуска (курсор в state-файле). Shell отбрасывает шум (deploy, deps, sentry…). Дальше Grok CLI headless: --yolo, не больше 6 ходов, инструменты только чтение (файлы, поиск, список каталогов), прокси вычищены. Результат — markdown-черновик. В прод-список обновлений агент не пишет.
Итог. LLM переписывает смысл; человек решает, что попадёт в UI. Цена ошибки — плохой черновик, не сломанный сайт.
4.2. SEO-ЧАТ В ПАНЕЛИ АНАЛИТИКИ
Задача. В дашборде спросить про запросы и семантику — с доступом к Wordstat (частотность Яндекса).
Почему. Чистый API без tools не «знает» Wordstat. CLI с MCP (подключаемый инструмент) может вызвать его.
Как. Маленький bridge на localhost: POST → spawn Antigravity (agy) с --print и skip-permissions. HOME и workspace отдельные. --sandbox выключен, потому что Wordstat MCP ходит наружу по HTTPS. Компенсация: bridge только на 127.0.0.1, не торчит в интернет.
Итог. Подписка Gemini через Antigravity закрывает SEO-чат без отдельного API-ключа в приложении. Цена — skip-permissions + сеть MCP.
4.3. НОЧНОЙ ОТЧЁТ ПО АНАЛИТИКЕ
Задача. Раз в сутки разобрать цифры продукта и отправить сжатый отчёт в Telegram.
Почему. Человек не обязан каждую ночь открывать дашборд. Но модель не должна сама считать — она врёт в арифметике.
Как. Сначала скрипт детерминированно собирает пакет чисел. Потом веер из трёх модулей Antigravity: --print --sandbox --dangerously-skip-permissions, Gemini 3.5 Flash (High), пустой workspace, таймаут модуля порядка 9 минут. Синтез — Claude CLI (Opus, max thinking). Второе мнение — короткий DeepSeek по API (pay-per-token на маленьком объёме). В БД — только цельный отчёт.
Итог. Подписочные CLI интерпретируют; цифры — из кода.
4.4. АРБИТР ЛОЖНЫХ БАНОВ
Задача. Система безопасности банит IP. Иногда это обычный пользователь. Нужен разбор: false positive или реальная атака.
Почему. Четыре часа бана = потерянный клиент. Авторазбан всего = открытая дверь сканерам.
Как. Страница «это не я» → JSON (решения бана, кусок access-лога) →
agy --sandbox --print "<промпт + JSON>"
Таймаут 45 секунд. Ответ — строго JSON: false_positive или real_attack. Отдельный системный пользователь (не root), credentials 700/600, systemd: ProtectSystem=strict, ProtectHome=true, PrivateTmp=true. Если CLI упал — 503, попытку не сжигают.
Итог. Только классификация. Самый узкий радиус поражения из пятёрки.

4.5. АВТОФИКС ОШИБОК → PULL REQUEST
Задача. Поймать продовую ошибку, понять «баг / шум / инфра / нужен человек», при реальном баге — правка и PR без авто-мержа.
Почему. Ночной on-call без человека. Но агент, который мержит сам, опаснее ошибки, которую чинит.
Как (общие принципы).
-
Не live-дерево прод-репо. Полный
git cloneв каталог под/var/tmp/...(не/tmp: часто RAM; клоны забивают tmpfs). -
Из env вырезают переменные с
DATABASE, чтобы тесты не подключились к боевой базе. -
Промпт запрещает commit/push; контроль — снаружи.
-
Вердикт в машинном блоке stdout — сервис решает, открывать ли PR.
Реализация A — Antigravity в служебной панели (поток Sentry). agy --print --dangerously-skip-permissions в клоне. Вердикты: real_bug / noise / infra / needs_human. PR только на real_bug.
Реализация B — официальный CLI DeepSeek V4 (deepcode) для демона автофикса.Триаж DeepSeek V4 Flash; фикс — deepcode + DeepSeek V4 Pro. Нюансы: deepcode требует TTY → pseudo-TTY (script); сам не выходит → маркер status: completed + kill; запасной таймаут 20 минут; в промпте запрет commit/push/PR.
Итог. Два CLI, одна философия: изолированный клон + вырезанные секреты + человек на merge.

РАЗДЕЛ 05
ЛЕСТНИЦА БЕЗОПАСНОСТИ
Не «включите sandbox и спите спокойно», а набор слоёв. Чем шире права агента, тем больше слоёв.


Практика на тех же ролях: колокольчик → 1+7; SEO → 3, без 2 (MCP); ночь → 0+2+3; арбитр → 0+2+3+6+короткий timeout; автофикс → 3…7.
CLI, установленный «на всю систему», не значит «процесс = root». Бинарь может быть в /usr/local/bin, процесс — под служебным пользователем. Credentials — в home сервиса (700), не session разработчика.
РАЗДЕЛ 06
ГРАБЛИ, КОТОРЫЕ НЕ ВЫДУМАНЫ
-
Skip-permissions без RW-ограничений. Агент с full shell и env root = разработчик root без тормозов.
-
ProtectHome=true и бинарь в /root/… Сервис не стартует (203/EXEC). Лечится: ProtectHome=read-only + ReadWritePaths для кэша CLI, либо бинари вне home.
-
/tmp для клонов. Часто RAM. Песочницы —
/var/tmp/...на диске. -
DATABASE в env родителя. Перед spawn вырезать ключи с
DATABASE(и write-DSN). -
CLI, который «не умеет headless». Требовал TTY и не выходил → pseudo-TTY + маркер + SIGKILL.
-
Sandbox vs MCP. Нужен внешний API — sandbox может мешать. Честно: sandbox выкл + localhost + отдельный user.
-
Авто-merge. PR always, merge never automatic.
-
«Подписка = бесплатный API для всего продукта». Публичный endpoint + высокая частота + third-party = бан. См. раздел 03.
РАЗДЕЛ 07
КАК ЭТО ВЫГЛЯДИТ В ГОЛОВЕ СЕРВИСА


Сервис — дирижёр. CLI — музыкант на один такт. Без метронома (timeout) и сцены (sandbox) палочку на ночь не отдают.
РАЗДЕЛ 08
ЧТО СКОПИРОВАТЬ СЕБЕ
В копируемых блоках ниже длинные тире заменены на запятые и двоеточия — удобнее в рабочих markdown-файлах. В тексте статьи тире обычные.
P01 ЧЕКЛИСТ ПЕРЕД ПЕРВЫМ HEADLESS-ВОРКЕРОМ
Чеклист headless CLI-воркера0) СТОП-фильтр ToS (если хоть один пункт "да" — бери API, не подписку): - это публичный сервис для чужих пользователей на моём OAuth? - ожидаются сотни/тысячи запросов в сутки без человека? - кручу third-party CLI/harness вместо официального бинаря провайдера? - цель: заменить платный API "дешёвой" подпиской на потоке?1) Задача точечная: по кнопке / по ошибке / раз в день, узкий выход (черновик, JSON, PR).2) Официальный CLI провайдера + его headless-флаги. Не "выдернуть токен в свой HTTP".3) Режим: один промпт, ответ в stdout (--print / -p).4) Без интерактива: skip-permissions или yolo. Рядом обязательно клетка.5) Отдельный OS-user или отдельный HOME с credentials (права 700/600).6) Рабочая директория: empty workspace ИЛИ git clone в /var/tmp/..., никогда live prod tree.7) Env: вырезать DATABASE* и лишние секреты; в логах маскировать токены.8) Tools: allowlist по минимуму. Если только текст, tools не давать.9) Timeout + kill. Если CLI не выходит сам, ловить маркер завершения.10) Успех узкий: черновик / JSON-вердикт / PR. Никакого auto-merge и auto-deploy.11) Systemd: ProtectSystem=strict, PrivateTmp, ReadWritePaths только state+sandbox.12) Мониторинг: journald, алерт на ненулевой exit, метрика "завис дольше N".13) Документ компромиссов: где sandbox выключен и почему (например MCP наружу).14) Прочитал актуальный ToS/docs тарифа (правила меняются; 2026 уже показал волны банов).
P02 КЛАССИФИКАТОР (УЗКИЙ BLAST RADIUS)
Ты классификатор. Тебе дают факты в JSON. Инструменты для записи файлов не используй.Верни ТОЛЬКО JSON одного вида:{"verdict":"false_positive|real_attack","reason":"одна-две фразы по-русски"}Не чини системы. Не предлагай команды. Не выходи за verdict/reason.Факты:<вставить JSON>
P03 ФИКС В КЛОНЕ (С ВОРОТАМИ)
Ты в ИЗОЛИРОВАННОМ клоне репозитория. Текущая папка: корень клона.Задача: минимально починить ТОЛЬКО описанную ошибку.Правила:- Никакого рефакторинга "заодно".- Не трогай миграции, .env, секреты без прямой связи с ошибкой.- НЕ делай git commit, git push, PR: только правки файлов. Коммит сделает обёртка.- В конце выведи блок:<<<VERDICT>>>{"verdict":"real_bug|noise|infra|needs_human","summary":"2-4 предложения по-русски для не-разработчика"}<<<END>>>Ошибка:<вставить>
P04 АУДИТ УЖЕ ЗАПУЩЕННОГО CLI-СЕРВИСА
Проверь headless CLI-воркер на этом сервере.Найди unit systemd / cron / bridge, команду spawn, user, HOME, cwd, флаги CLI,timeout, куда пишет, есть ли auto-merge/deploy.Выдай таблицу:слой | есть/нет | доказательство (файл/строка unit) | риск если нетСлои: non-root, sandbox/allowlist, clone not live tree, strip DATABASE,timeout kill, no auto-merge, credentials 600, listen localhost only.Не чини, пока не попросим. Только отчёт.
РАЗДЕЛ 09
ЧТО ИЗ ЭТОГО СЛЕДУЕТ
Headless CLI — не «хак вместо API» и не лицензия автоматизировать всё подряд. Это тот же агент, что в терминале, иногда встроенный в прод как короткий точечный worker. Экономия на API имеет смысл только там, где официальный CLI уместен, частота низкая, а выход узкий. Цена ошибки двойная: shell на диске и бан аккаунта.
Рабочая формула:
-
Сначала ToS и калибр — официальный CLI, не ферма, не публичный SaaS на личном OAuth. Сомневаешься — API.
-
--print+ skip-permissions — чтобы работало без человека. -
Клетка по размеру задачи — от allowlist tools до clone + systemd + non-root.
-
Узкий выход — JSON, черновик, PR; никогда «делай что хочешь с продом».
-
Человек на необратимом — merge, деплой, разбан при сомнении.
«CLI стоит в системе» ≠ «процесс = root». Бинарь общий, процесс — служебный, home — свой, sandbox — на диске, merge — руками. И ещё: не всё, что технически запускается, стоит запускать.

ссылка на оригинал статьи https://habr.com/ru/articles/1059454/