sessions_spawn задаётся fork или isolated контекст, а родитель получает только сжатый JSON — не полный лог и не сырой completion.
После материалов о маршрутизации CrewAI и AutoGen за шлюзом этот гайд фиксирует границу доверия вокруг Session tools: как совместить Bearer шлюза, видимость sessions_spawn и глубину рекурсии на арендованном Apple Silicon.
Оглавление: риски · fork и isolated · токен и шлюз · шаги · шаблон ответа · якоря · без логина
Три узких места до первого ночного прогона
- Загрязнение родителя: длинные diff и ошибки инструментов в одной транскрипции раздувают контекст и ломают решения оркестратора о маршруте модели.
- Скрытый запрет на spawn: при политике шлюза по умолчанию Session tools могут быть в deny list — агент не увидит
sessions_spawn, хотя Bearer формально «живой». - Неконтролируемая рекурсия: дочерний ревьюер снова вызывает 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 возвращает инженерный сигнал без шума.