Перейти к содержимому

Рецепт: 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: состояние estate и история по каждой остановке. Вид консоли Kill switch: состояние estate и история по каждой остановке.

Kill switch, который вы никогда не дёргали, — это гипотеза. Ежеквартально, в окне обслуживания:

  1. Задействуйте остановку с областью agent на малозначимом агенте; убедитесь, что его вызовы инструментов отклоняются и находка срабатывает.
  2. Пройдите повторное включение: два одобряющих, пост-ревью, пакет доказательств вытянут и заархивирован.
  3. Замерьте цикл от начала до конца — это число и есть ваша реальная задержка сдерживания, а тренировка оставляет полный след в ledger в подтверждение.