Режим работы
Workflow, который вызывающая сторона может захотеть запустить без присмотра, объявляет режим работы:
interactive, где сохраняются все гейты согласования, и autonomous, где workflow обходит ожидания
человека и вместо них выдаёт финальный отчёт. Режим — это одна объявленная глобальная переменная и
условие перед каждым гейтом, а не вторая версия workflow и не флаг внутри каждой ноды.
Объявление режима
Объявите ровно одну глобальную переменную реестра с перечислением из двух значений:
{ "variableRegistry": { "operating_mode": { "type": "string", "enum": ["autonomous", "interactive"], "description": "How this run treats the user before the final result: autonomous skips the plan approval and the acceptance question, interactive keeps them" } }}Разрешение режима один раз
Первая нода, которая и так разговаривает с пользователем, определяет режим в том же шаге, указав его
в inputSchema.globalInputs. Отдельный шаг, единственный вывод которого — это значение, добавляет
ход без новой работы. Директива говорит агенту использовать режим, уже названный пользователем;
вывести однозначный режим — в том числе для запуска, начатого как дочерний процесс уже автономного
родителя; и в остальных случаях спросить один раз, назвав последствие. Режим действует на весь
запуск и больше не запрашивается.
Обход гейта
Нода condition по этой глобальной переменной стоит перед каждым гейтом согласования и отправляет
автономную ветку туда, куда гейт ведёт при согласии. Сам гейт сохраняет директиву, схему и
интерактивные маршруты, включая ветку отказа:
{ "id": "route-operating-mode-plan-approval", "type": "condition", "condition": { "operator": "eq", "left": { "contextPath": "operating_mode" }, "right": "autonomous" }, "connections": { "true": "check-steps-remaining", "false": "present-plan" }}Переведите на это условие все входящие связи гейта. Одна оставшаяся обратная связь, ведущая прямо в гейт — например, из цикла исправления, — всё равно остановит автономный запуск на согласовании.
Что автономность убирает и что не убирает никогда
Автономный режим убирает только ожидания человека: согласования, приёмку, запросы обратной связи и решения, которые агент может вывести из уже имеющихся доказательств.
Он не убирает независимые агентские ревью, валидацию, маршруты пересмотра плана и восстановления. Он не убирает и гейт полномочий: публикация, разрушительные операции и внешние изменения остаются санкционированными пользователем, а в автономном режиме такая нода разрешается в безопасный ответ без вопроса, а не обходится маршрутом. Финальный отчёт пользователь получает в обоих режимах, поэтому автономной ветке нужна нода отчёта там, где интерактивная и отчитывается, и спрашивает.
inputSchema не умеет ветвиться по переменной контекста, поэтому режим обрабатывается маршрутами.
Не добавляйте статусы, счётчики, флаги *_skipped, синонимы режима и вопрос о режиме внутри
каждого гейта.
Связанное
- Ветвление — механика condition, на которой держатся маршруты
- Эскалация — что всё же доходит до пользователя, когда запуск не может продолжаться
- Пересмотр процесса — пересмотр проходит те же гейты в обоих режимах
- Антипаттерны — флаги и синонимы, которых режим не вводит