Операционная оркестрация агентов держится на том, что тяжёлый code review уезжает в дочернюю сессию: в релизах 2026.4.x для sessions_spawn задаётся fork или isolated контекст, а родитель получает только сжатый JSON — не полный лог и не сырой completion.

После материалов о маршрутизации CrewAI и AutoGen за шлюзом этот гайд фиксирует границу доверия вокруг Session tools: как совместить Bearer шлюза, видимость sessions_spawn и глубину рекурсии на арендованном Apple Silicon.

Оглавление: риски · fork и isolated · токен и шлюз · шаги · шаблон ответа · якоря · без логина

Три узких места до первого ночного прогона

  1. Загрязнение родителя: длинные diff и ошибки инструментов в одной транскрипции раздувают контекст и ломают решения оркестратора о маршруте модели.
  2. Скрытый запрет на spawn: при политике шлюза по умолчанию Session tools могут быть в deny list — агент не увидит sessions_spawn, хотя Bearer формально «живой».
  3. Неконтролируемая рекурсия: дочерний ревьюер снова вызывает spawn и опасные write tools, пока не заданы maxSpawnDepth и узкий набор ролей allowAgents.

Граница изоляции: родитель, fork и isolated

Ниже — практическая матрица без подмены спецификации Session API: выбор режима должен быть записан в runbook рядом с шаблоном PR.

Измерение Оркестратор Дочерняя fork Дочерняя isolated
Наследование транскрипта Политика маршрута и ответы наружу Релевантные фрагменты для согласованности с PR Чистый старт, история чувствительных команд не тянется
Типичная работа Делегирование, слияние итогов, эскалация человеку Анализ diff с обоснованием в терминах запроса Скан плагинов, недоверенный ввод, песочный прогон
Ограничитель риска maxSpawnDepth, allowAgents Без повторного spawn у листа, без высокорисковых писателей Минимальный набор read и статических проверок

В шаблоне оркестрации закрепите именованного координатора: он держит цель спринта, решает эскалации и отвечает человеку, а дочерние агенты получают только модуль task с явным объёмом файлов и запретом на побочные ветки. Так проще писать постмортемы: каждая пара runId и childSessionKey однозначно указывает, какая ревизия PR прошла разбор, без споров о том, чей транскрипт «смешался» с чужим. На удалённом Mac зафиксируйте те же переменные окружения и базовый URL шлюза, что в staging, иначе коллега воспроизведёт другой периметр инструментов.

Связка Bearer, политики шлюза и полосы субагента

Аспект Ожидание Заметка по внедрению
Транспорт Один краткоживущий Bearer на тенанта к шлюзу TTL и ротация фиксируйте в журнале изменений, не кладите полный токен в артефакты CI
Полоса Дети идут через subagent lane Эффективный периметр задаёт шлюз и патчи сессии, владельческие admin tools не наследуются молча
Лист ревьюера Только чтение и статика Запретите повторный sessions_spawn и классы gateway с эскалацией прав
HTTP tools/invoke sessions_spawn явно в allow Ретраи, идемпотентность и разбор 401 обрабатывайте в своём адаптере

Минимально воспроизводимые шаги под 2026.4.x

1) Установите Node.js 22+, зафиксируйте вывод node -v в runbook узла.

2) Обновите CLI: npm i -g [email protected] или другую зафиксированную строку 2026.4.x; сверьте openclaw --version с примечаниями к релизу.

3) Выполните openclaw doctor (при необходимости --json): вычистите доверие TLS, права на OPENCLAW_HOME, прокси-переменные и несогласованные endpoint шлюза.

4) Выпустите Bearer в панели; включите видимость Session tools для оркестратора; если путь идёт через HTTP tools/invoke, снимите sessions_spawn с дефолтного deny минимально достаточным правилом.

5) В агенте-оркестраторе задайте maxSpawnDepth и allowAgents; вызывайте sessions_spawn с context: "fork" для наследуемого смысла или "isolated" для жёсткой изоляции; в task укажите ссылку на PR, границы путей и явные запреты на запись.

6) Завершайте дочернюю ветку через согласованный sessions_yield или коллбек; в родителя поднимайте только структурированную сводку по полям ниже — без полной транскрипции ребёнка.

Для разовых CLI-сценариев без смешения истории допустимо сочетать openclaw agent --spawn; это другой контур автоматизации, не замена политикам Session tools. Логируйте оба пути отдельно, чтобы метрики не смешивались и отчётность оставалась прозрачной.

Приёмка: смоделируйте таймаут и 401 на шлюзе и убедитесь, что correlation_id в JSON совпадает со строкой трассы — иначе постмортемы расходятся с фактами.

Шаблон failure summary для обратной связи родителю

Оркестратор мержит канонические поля; так проще аудит, SIEM и гейты CI без утечки промптов. Добавляйте tools_policy_version и ревизию схемы, если сравниваете прогоны между ветками.

{ "stage": "code_review", "result": "pass | fail | partial", "blocking_issues": ["блокер с указанием файла и строки"], "non_blocking": ["рекомендации"], "tool_error_class": "auth | timeout | schema | upstream", "retry_hint_sec": 0, "child_session_key": "<из ответа spawn>", "correlation_id": "<шлюз и структурный лог>" }

Три опорных факта из линейки Session tools

  • sessions_spawn документирован как неблокирующий и возвращает runId с childSessionKey для сквозной корреляции.
  • Различие fork и isolated — это решение по доверию к входу, а не косметика модели; фиксируйте его в шаблоне задачи.
  • Устойчивость цепочки вызовов усиливают схемы и ретраи на шлюзе; см. JSON Schema и повторы как соседний контур жёсткости.

Публичные страницы без обязательного входа

Когда цепочка на ноутбуке стабильна, перенесите те же версии Node, CLI и политики на постоянно доступный удалённый Mac и прогоните ночной soak без сна диска. Тарифы, покупка и аренда, документация и блог открываются без логина.

Итог: Сборка 2026.4.x на Node 22 с прохождением openclaw doctor плюс согласованный Bearer и явный allow для sessions_spawn даёт воспроизводимую оркестрацию субагентов: fork или isolated режут риск утечки контекста, а фиксированный JSON возвращает инженерный сигнал без шума.