Автономный агент тратит токены сам, без человека за плечом — значит, нужны тормоза. Недельный токен-бюджет бережёт кошелёк. Два замка — выключатель владельца и липкий замок администратора — гасят агента целиком: оба должны быть открыты, чтобы прогон стартовал. А жизненный цикл владельца не даёт уволенному оставить фоновых агентов жечь бюджет. Минимум рычагов — но закрывающий главные риски.
Все рычаги этой страницы сходятся в одно условие. Прогон стартует — по расписанию или вручную — только если открыты все четыре; закрытое любое гасит запуск целиком.
Пятое условие — владелец активен — не отдельная
ось: деактивация пишет тот же enabled=false
(жизненный цикл), поэтому
эффективно осей контроля четыре. Любой замок гейтит старт; уже
идущий прогон дорабатывает до конца — мгновенный обрыв
(kill switch) — v2.
Пустая база — не пятое условие. Когда искать нечем
(is_empty), агент всё равно стартует: ядро KS
производно не подаётся
(инструменты), и он
деградирует на внешних инструментах либо честно выходит. Это состояние
данных, не замок управления — наполнится база, ядро вернётся без
вмешательства.
Админ задаёт недельный потолок токенов на пользователя
— один на всех его агентов сразу. Расход
суммируется из журнала прогонов за текущую неделю
(agent_runs.tokens_used); отдельной таблицы-счётчика
нет — потолок производный. Перед стартом прогона движок сверяет сумму с
лимитом: уложился — поехали, перебрал — прогон не стартует.
За потолком прогоны помечаются skipped с причиной
«лимит превышён» и ждут сброса недели: расход обнуляется в
воскресенье 00:00 в зоне организации (неделя
календарная, не скользящая), агенты оживают сами. Потолок
предохраняет от разорения;
потолок итераций
страхует один прогон от зацикливания — разные тормоза.
Лимит — платформенная настройка на экране
Расходы AI
(platform_settings.agent_weekly_token_budget), единая на организацию;
там же расход по людям и справочный бюджет чата. Денежные бюджеты, алерты на
подходе к потолку и мгновенный kill switch — v2.
Прогон ведёт chat-модель,
выбранная владельцем из списка, что admin разрешил агентам
(agent_models). Выбор хранит
model_id —
ссылка на строку списка. Пока модель в списке, агент стартует; снял её
admin — SET NULL обнуляет ссылку, и
model_id IS NOT NULL в гейте становится ложным.
Снятая модель гасит агента, как замок: next_run_at
обнулён, планировщик строку не сканирует,
запись skipped не плодится. На экране агента — баннер
«модель не поддерживается, выберите другую»; владелец возвращает агента
в строй, выбрав модель из актуального списка. Неявного отката на дефолт
нет — NULL значит «модели нет», а не «взять дефолт».
Чтобы прогон стартовал, открытыми должны быть оба замка: выключатель владельца и замок администратора. Любой закрытый гасит агента целиком — ни по расписанию, ни вручную. Первый — рычаг хозяина агента, второй — рычаг надзора над чужим.
Закрытый замок гасит агента тихо: его
next_run_at
обнулён, планировщик строку не сканирует, кнопка ручного запуска
недоступна — durable-стоп не плодит записей skipped, он
виден статусом агента. Журналируется лишь рантайм-отказ, незаметный из
настройки агента: выбранный бюджет
и наложение на ещё идущий прогон. Чтобы стоп не был немым, владелец
узнаёт о паузе и снятой модели личным
уведомлением
(targeted на него) — обработчик, ставящий флаг, поднимает событие.
enabled.
Включён — агент рабочий: идёт по расписанию, доступна кнопка
«Запустить сейчас». Выключен — нерабочий: расписание молчит, ручной
запуск недоступен. Хозяин волен щёлкать им как угодно.
admin_paused,
липкий: админ останавливает конкретного агента, не
дожидаясь владельца и не удаляя его. Владелец снять его не может — на
экране агента висит баннер «приостановлен администратором». Это
единственный рычаг админа над чужим агентом.
Полноценный надзор над чужими агентами — массовые действия, правка, тонкие политики — это v2. У админа ровно замок: грубо, но достаточно, чтобы погасить проблему.
Агент живёт правами и кошельком владельца — значит, его судьба привязана к учётке. Два события решают всё: удаление учётки и деактивация (строка учётки остаётся). Главный риск, который оба закрывают: уволенный сотрудник не должен оставить позади фоновых агентов, что молча жгут бюджет и читают базу под его правами.
ON DELETE CASCADE), ничего не осиротевает.
enabled=false) у всех его агентов: учётка и история
целы, но прогоны замирают. Планировщик их не будит и журнала
skipped не копит — выключенный агент дремлет молча.
Реактивация выключатель не возвращает — вернувшийся
сотрудник включает агентов сам.
Каскад описан в модели данных: FK прогонов на агента и агента на владельца несут
ON DELETE CASCADE. Деактивация же отдельного состояния не
заводит — она пишет тот самый выключатель enabled, и
вернуть его вправе только владелец.