Рецепт: kill switch для estate (и как его тренировать)
Цель: когда агент идёт вразнос на машинной скорости, остановить его — или всё — сейчас, одним аутентифицированным вызовом, и снять остановку позже под двойным контролем, имея весь инцидент на записи.
Асимметрия и есть замысел: задействование быстрое (admin-уровень, без шлюза одобрений — экстренная остановка никогда не должна ждать в очереди), повторное включение медленное (два разных человека, и инцидент оставляет пакет доказательств для пост-ревью). Вокруг остановки намеренно нет break-glass: остановлено и есть безопасное состояние.
Задействовать
Заголовок раздела «Задействовать»# Stop the whole estate:curl -ks -X POST "$BASE/v1/m/governance/killswitch" \ -H "Authorization: Bearer $ADMIN_TOKEN" -H "X-Olivares-Tenant: $TENANT" \ -H 'Content-Type: application/json' \ -d '{"scope_kind":"estate","reason":"runaway agent incident #1234"}'
# Or stop one agent (by UUID or external id):curl -ks -X POST "$BASE/v1/m/governance/killswitch" \ -H "Authorization: Bearer $ADMIN_TOKEN" -H "X-Olivares-Tenant: $TENANT" \ -d '{"scope_kind":"agent","scope_ref":"agent:billing-reconciler","reason":"…"}'Что останавливается немедленно и fail-closed: управляемые поверхности
актуации — claude.tool.use, mcp.tool.call, deploy.apply,
deploy.retire, orchestration.schedule.fire, voice.session.open.
Ожидающие одобрения актуации в области действия отменяются в той же
транзакции, так что ничто одобренное-но-ещё-не-запущенное не проскочит после
остановки.
Что намеренно не останавливается: наблюдение и сам governance (находки,
жизненный цикл идентичностей, compliance) — вы по-прежнему можете видеть и
управлять, пока всё остановлено. Повторное задействование уже остановленной
области возвращает 409 (это идемпотентно по области, а не стек).
# Live posture — is anything stopped right now?curl -ks "$BASE/v1/m/governance/killswitch/state" \ -H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT"Правила guardian могут задействовать ту же остановку автоматически (действия
stop_agent / stop_estate), когда срабатывает правило сдерживания — авто-путь
и человеческий путь это один и тот же шлюз, а авто-остановка порождает находку
CRITICAL.
Повторно включить (двойной контроль)
Заголовок раздела «Повторно включить (двойной контроль)»curl -ks -X POST "$BASE/v1/m/governance/killswitch/$STOP_ID/reenable" \ -H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" \ -d '{"reason":"root cause fixed: …"}'Это открывает одобрение, а не снимает остановку напрямую. Действие предклассифицировано как CRITICAL: два разных человека-одобряющих, сильная (AAL3) аутентификация на каждое решение — и порог в два человека структурен, обеспечивается в транзакции, даже если политика одобрений пытается понизить уровень. Запросивший не может быть принимающим решение; отклонённый или истёкший запрос открывает свежий кворум.
После повторного включения пост-ревью ещё одним человеком (отличным от задействовавшего, запросившего и повторно включивших) закрывает инцидент — пока оно не зафиксировано, ту же область нельзя снова остановить-и-включить без ревью:
curl -ks -X POST "$BASE/v1/m/governance/killswitch/$STOP_ID/review" …curl -ks "$BASE/v1/m/governance/killswitch/$STOP_ID/evidence" # the evidence packЭндпоинт evidence возвращает пакет доказательств инцидента — остановку, отменённые одобрения, решения и след — готовый для аудитора.
Консоль
Заголовок раздела «Консоль»Kill switch в разделе Management — это вариант того же шлюза в один клик, с живым состоянием и потоком повторного включения:
Тренировка
Заголовок раздела «Тренировка»Kill switch, который вы никогда не дёргали, — это гипотеза. Ежеквартально, в окне обслуживания:
- Задействуйте остановку с областью agent на малозначимом агенте; убедитесь, что его вызовы инструментов отклоняются и находка срабатывает.
- Пройдите повторное включение: два одобряющих, пост-ревью, пакет доказательств вытянут и заархивирован.
- Замерьте цикл от начала до конца — это число и есть ваша реальная задержка сдерживания, а тренировка оставляет полный след в ledger в подтверждение.