Когда несколько агентов делят один удалённый Mac, инциденты начинаются не с «плохой модели», а с плоского домашнего каталога, потерянного родителя в дереве задач и отмены без каскада сигналов. Task Brain и flows дают управляемый контур только если вы явно фиксируете корневой идентификатор, журналируете дочерние шаги и закрываете группы процессов без сирот.

Оглавление: инициализация · flows и команды · изоляция каталогов · отмена и сироты · FAQ

Этот текст — оркестрационный туториал для команд, которые держат OpenClaw на арендованном удалённом Mac и хотят повторяемый контур: список задач, отмена поддерева, версии сценариев flows и отдельные каталоги идентичности агента на каждый репозиторий. Сопоставьте шлюзовые паттерны с LiteLLM Proxy и OpenClaw, многокомпонентные цепочки с CrewAI за шлюзом и графовые сценарии с LangGraph и инструментами. Публичные центр помощи, каталог блога, тарифы и покупка доступны без входа.

Инициализация

Создайте пользователя рантайма и корень /srv/openclaw/<project> с config, data, logs, flows. Активируйте venv, закрепите версии CLI в lock-файле, экспортируйте OPENCLAW_HOME и базовый URL шлюза на 127.0.0.1. Перед постановкой задач выполните openclaw doctor --json и убедитесь что маршруты зелёные, иначе Task Brain плодит ретраи без ясной стадии сбоя.

Заведите чек-лист инициализации после каждого обновления образа: версия macOS, hash бинарника шлюза, права на каталог данных, запас unified memory, JSON-лог. Зафиксируйте часовой пояс чтобы коррелировать отмены с CI.

Контрольный список из пяти шагов перед продом

  1. Выделить UID сервиса и запретить ему писать вне разрешённых корней.
  2. Сгенерировать короткоживущий токен шлюза и положить его в файл с правами 0600.
  3. Импортировать flows из git-тега и записать его в метаданные Task Brain.
  4. Создать пустой каталог identity для агента и проверить что предыдущие артефакты не подхватываются.
  5. Прогнать синтетическую цепочку из трёх дочерних задач и убедиться что отмена корня гасит весь подграф в журнале.

Flows: примеры команд (плейсхолдеры)

Ниже — условные вызовы для runbook: подставьте бинарь, профиль и флаги, которые приняты в вашей сборке OpenClaw. Цель блока — дать единый язык дежурной смены, а не дословный интерфейс конкретной ревизии.

# Плейсхолдеры операторского контура Task Brain и flows # openclaw task list --project <PROJECT> --state running --format json # openclaw task show --id <TASK_ID> --with-children # openclaw task cancel --id <TASK_ID> --reason timeout --cascade # openclaw flows validate --path ./flows --schema semver # openclaw flows apply --name release-check --dry-run # openclaw flows logs --name release-check --since 15m

Держите имя проекта и имя flow в каждой записи журнала Task Brain чтобы фильтры дашборда совпадали с тем, что вы экспортируете в наблюдаемость по матрице OpenTelemetry GenAI. Для структурированных ответов на границе шлюза напомним Instructor и JSON Schema.

Изоляция каталогов

Разнесите файлы идентичности агента: локальные профили инструментов, кэш разрешений, последние checkpoint-и и scratch для больших вложений должны жить под data/<agent_profile> внутри корня проекта, а не в общем ~/.cache, иначе параллельные прогоны смешают секреты и дадут немые повторы вызовов. На Apple Silicon дополнительно ограничьте одновременные тяжёлые ветки чтобы не упереться в давление памяти при нескольких агентах.

Артефакт Общий каталог Изолированный вариант Риск смешения
Профиль агента Домашний каталог пользователя /srv/openclaw/<project>/data/agent/<profile> Пересечение токенов и истории инструментов между клиентами
Журнал задач Единый файл на хосте Отдельный файл или поток на проект плюс корреляционный ключ Невозможность безопасно передать лог заказчику
Каталог flows Случайный путь из интерактивной сессии Версионируемый путь из git с тегом в метаданных Дрейф сценариев и немые расхождения на стейджинге
Временные файлы Системный /tmp scratch/ внутри проекта с TTL и квотой Утечки вложений и гонки имён между задачами

Отмена при сбое, родительские задачи и сиротские процессы

Долгая ветка хранит parent_task_id и child_task_id в одной строке журнала чтобы отмена корня обходила поддерево детерминированно. При таймауте пометьте стадию, выполните мягкую отмену с ожиданием, затем жёсткое завершение группы процессов — так меньше риска что воркер продолжит бить инструменты после успеха в UI.

Чтобы сократить сирот, запускайте команды в отдельной группе или под launchd с Stop, прокидывайте env с корневым task id и запретите двойной демон flow без lock на каталоге данных. После SIGTERM дождитесь кода или таймаута и зафиксируйте состояние каждого child чтобы ретраи не плодили дубликаты.

Ведите матрицу решений: сеть — отмена без повторного side-effect; JSON — отмена с пометкой схемы; память — пауза новых корней и отмена хвоста очереди. Свяжите с DSPy и удалённым узлом для ночных батчей.

Три инварианта для постмортема

  • Каждая дочерняя задача знает корень и не стартует без записи в журнале.
  • Любой долгий subprocess имеет владельца в виде task id и таймаут ожидания после SIGTERM.
  • Отмена фиксирует причину и correlation id которые уже есть в логах шлюза.

FAQ

Нужен ли отдельный профиль агента на каждый git-репозиторий? Да если репозитории принадлежат разным доверенным периметрам или разным секретам: общий профиль почти гарантированно приведёт к дрейфу кэша инструментов и сложностям с GDPR-подобным разграничением артефактов.

Как совместить Task Brain с ручными SSH-сессиями? Запретите интерактивные длинные команды в том же пользователе что и демон или используйте отдельный UID для людей и для сервиса чтобы человек не убивал чужие группы процессов случайным закрытием терминала.

Что делать если cancel завис на одном child? Пометьте ветку как частично завершённую, снимите метрику зависания, примените жёсткое завершение к конкретному PID с записью в журнал и откройте инцидент если повторяется на одном и том же инструменте.

Где продолжить чтение без регистрации? Откройте технический блог по тегам OpenClaw и агентам и центр помощи по SSH и VNC; для выделенного железа сравните тарифы и оформите покупку узла.

Кратко: воспроизводимость на удалённом Mac достигается связкой из четырёх элементов — версионируемые flows, изолированные каталоги идентичности, явное дерево parent и child в Task Brain и дисциплина отмены без сирот. Закрепите это в runbook рядом с шлюзовыми гайдами и держите публичные страницы помощи под рукой дежурным.