OpenClaw на фронтенде в 2026 году — практика на удалённом Mac:
приём webhook превью, Lighthouse CLI, пороги JSON, коды выхода и сводка для pull request
Для кого: команды, у которых на арендованном удалённом Mac уже крутится шлюз OpenClaw и нужна одна воспроизводимая цепочка от вебхука превью-деплоя до Lighthouse CLI, файла порогов JSON, предсказуемых кодов выхода и короткого Markdown для GitHub. Slug: 2026-openclaw-remote-mac-preview-lighthouse-webhook.html. См. также Deployments API + Lighthouse и смоук заголовков Vercel deploy hook; для регулярных прогонов — Lighthouse и алерты по перфомансу.
Вебхуки деплоя несут preview_url и метаданные коммита. Типовой Linux CI не воспроизводёт композитинг Apple и ветку, которую видят пользователи в Safari / WebKit. Шлюз OpenClaw на удалённом Mac завершает TLS, проверяет подпись, нормализует JSON, ставит задачу воркеру, запускает Lighthouse CLI (лабораторный Chromium), сравнивает lhr.json с порогами из репозитория, мапит регрессию на код выхода 2, а сетевые и инфраструктурные сбои после контролируемого повтора — на код 3, после чего публикует читаемую сводку в PR или в строку статуса деплоя.
Результат. Один HTTPS-endpoint, артефакты в .openclaw/reports/ и блок Markdown, который можно отправить в API комментариев GitHub без утечки секретов в тело PR.
Какие боли снимает схема
- Неаутентифицированные hook. Прямой
curlиз CI в произвольный shell открывает путь к повторному воспроизведению запросов и усложняет аудит. - Вердикт только в консоли. Если числа Lighthouse не доходят до GitHub, ревьюеры мержат, пока отказ живёт в прокрутке терминала.
- Дрожащие сравнения. Без закреплённого Chromium, прогрева и машиночитаемых порогов в JSON порог «на глаз» быстро превращается в шум.
01 Почему именно шлюз OpenClaw должен принимать deploy hook
OpenClaw на практике даёт единую точку входа: TLS, HMAC или mTLS, лимиты по клиентам, нормализация полей и поток NDJSON для наблюдаемости. Когда Vercel, Netlify, Cloudflare Pages или ваш CI шлёт deployment webhook, подпись проверяется здесь; дедупликация по Idempotency-Key не даёт двойному событию дважды запустить Lighthouse; токены GitHub остаются на стороне воркера Mac, а не на публичном edge. Тот же ingress переиспользуйте для predeploy Lighthouse или сводок метрик сборки в PR.
После прогона Lighthouse добавьте на том же хосте короткий Safari / WebKit смоук (Playwright webkit или ручной сценарий): лабораторные баллы Chromium и сигнал движка пользователей оказываются в одном отчёте. При необходимости вынесите WebKit в предупреждение без блокировки merge отдельным кодом или флагом политики.
02 Матрица входа: шлюз против «только GitHub»
| Подход | Плюс | Минус |
|---|---|---|
| Webhook шлюза OpenClaw | Центральная проверка подписи, единый формат payload, дедуп, следующий хоп — Apple Silicon рядом с воркером. | Сертификаты TLS, политики повтора и квоты вы настраиваете сами. |
Только repository_dispatch |
Аудит внутри GitHub из коробки. | Сложнее стримить тёплые трассы и Mac-локальный NDJSON без дублирования токенов в Actions. |
03 Воспроизводимый HowTo
- Опубликуйте маршрут hook. Принимайте POST с JSON на HTTPS OpenClaw; проверяйте HMAC и «свежесть» временной метки.
- Нормализуйте поля. Смапьте поля провайдера на
PREVIEW_URL, сохранитеGIT_SHA,PR_NUMBER, сгенерируйтеOPENCLAW_RUN_ID. - Поставьте задачу на Mac. Запись в
.openclaw/queue/+ launchd или watcher, чтобы обрыв SSH не терял работу. - Прогрейте превью. Два GET (HTML и основной JS) с user-agent, близким к Lighthouse; backoff на
429. - Запустите Lighthouse CLI. Например:
pnpm exec lighthouse "$PREVIEW_URL" --only-categories=performance --output=json --output-path=".openclaw/reports/${OPENCLAW_RUN_ID}.lhr.json" --chrome-flags="--headless=new"; версию Chrome закрепляйте по ветке или неделе. - Сравните с порогами. Читайте
perf/thresholds.jsonна том же SHA; пишитеverdict.jsonдля артефактов. - Коды выхода.
0— ок;2— регрессия по метрикам;3— инфраструктура после одного повтора. - Отправьте digest. Заполните шаблон ниже, POST в комментарий PR или в deployment status; в NDJSON добавьте
phase=preview_lighthouse.
# Минимальная проверка перед форком воркера
set -euo pipefail
test -n "${PREVIEW_URL:-}" && test -n "${GIT_SHA:-}" || exit 3
# openclaw-hook-verify --secret "$HOOK_SECRET" --body "$RAW_BODY" --sig "$SIG_HEADER" || exit 3
04 Таблица порогов, пример JSON и коды выхода
| Метрика | Пример бюджета | Действие при провале |
|---|---|---|
| Performance score | >= 0.85 на мобильном пресете |
Выход 2; в сводке — дельта к baseline-артефакту. |
| LCP / CLS / TBT | LCP <= 2500 мс, CLS <= 0.08, TBT <= 200 мс |
Выход 2; сначала укажите худшую метрику. |
| Таймаут навигации | maxWaitForLoad <= 45000 |
Один retry, затем выход 3, чтобы merge-queue отличал инфраструктуру от регрессии. |
{
"performance": { "minScore": 0.85 },
"metrics": {
"largest-contentful-paint": { "maxNumericValue": 2500 },
"cumulative-layout-shift": { "maxNumericValue": 0.08 },
"total-blocking-time": { "maxNumericValue": 200 }
}
}
Код 0 — все бюджеты соблюдены. Код 2 — осознанный отказ по перфомансу (блок merge). Код 3 — сеть, авторизация, зависший провайдер: эскалация в ops, а не переписывание кода.
05 Шаблон сводки, удобной для чтения в PR
Держите блок около 4 КБ, чтобы мобильный GitHub не резал разметку. Тот же текст можно дублировать в статус деплоя при связке из статьи Deployments + Lighthouse.
### OpenClaw · гейт Lighthouse по превью
- **Прогон** `OPENCLAW_RUN_ID` @ `GIT_SHA` на удалённом Mac (Chromium закреплён)
- **URL** `PREVIEW_URL`
- **Баллы** perf **{{score}}** (Δ {{delta}} к baseline)
- **Метрики** LCP **{{lcp}}мс**, CLS **{{cls}}**, TBT **{{tbt}}мс**
- **Вердикт** {{pass_or_fail}} — лог `.openclaw/reports/{{run}}.lhr.json`
Еженедельно пиньте Chromium; храните lhr.json как .openclaw/reports/${OPENCLAW_RUN_ID}.lhr.json; в подвал комментария добавьте одну строку о статусе WebKit-смоука на том же Mac.
06 Реальный Safari / WebKit и автоматизация рядом
Lighthouse остаётся эталоном для стабильных лабораторных метрик в Chromium. На удалённом Mac с тем же образом окружения добавьте короткий прогон WebKit: те же cookies/заголовки прогрева, те же переменные OPENCLAW_RUN_ID, но отчёт в формате, удобном дизайнерам (скрин, трассировка или один булевый «WebKit OK»). Так вы связываете то, что видит пользователь в Safari, с тем, что блокирует merge по числам — без смешения движков в одном бинарнике Lighthouse.
07 FAQ: 403, таймауты, дубликаты hook
Почему Lighthouse видит HTTP 403 на превью?
Часто виноваты защита превью, антибот или отсутствие Authorization у headless Chrome. Переиспользуйте заголовки из смоука deploy-hook, добавьте egress IP Mac в allowlist провайдера или передайте короткоживущий токен через секрет CI — не через текст PR.
Как не дать флейковым таймаутам блокировать merge?
Один повтор с тем же OPENCLAW_RUN_ID, чуть увеличьте --max-wait-for-load, зафиксируйте версию Chromium; при повторном таймауте завершайте с 3, чтобы очередь слияний трактовала инцидент как инфраструктуру.
Провайдер шлёт дублирующие webhook?
Требуйте Idempotency-Key: ${GIT_SHA}:${OPENCLAW_RUN_ID}:lighthouse и пропускайте задачу, если файл очереди уже существует — так два одинаковых события не запустят двойной Lighthouse.
Тот же Apple Silicon, на котором крутятся ваши гейты
Откройте главную, загляните в помощь по SSH и VNC, сравните тарифы и оформите покупку или аренду узла без обязательного входа в облако. Каталог материалов — в блоге.