Узлы
Узел — это сопутствующее устройство (macOS/iOS/Android/безголовое), которое подключается к WebSocket Gateway (шлюза) (тот же порт, что и у операторов) сrole: "node" и предоставляет поверхность команд (например, canvas.*, camera.*, system.*) через node.invoke. Подробности протокола: Протокол Gateway.
Устаревший транспорт: Протокол Bridge (TCP JSONL; устарел/удалён для текущих узлов).
macOS также может работать в режиме узла: приложение в строке меню подключается к WS‑серверу Gateway (шлюза) и предоставляет свои локальные команды canvas/камеры как узел (так что openclaw nodes … работает с этим Mac).
Примечания:
- Узлы — это периферийные устройства, а не шлюзы. Они не запускают сервис шлюза.
- Сообщения Telegram/WhatsApp и т. п. поступают на gateway (шлюз), а не на узлы.
- Runbook по устранению неполадок: /nodes/troubleshooting
Сопряжение + статус
WS‑узлы используют сопряжение устройств. Узлы предъявляют идентификатор устройства во времяconnect; Gateway (шлюз)
создаёт запрос на сопряжение устройства для role: node. Подтвердите через CLI устройства (или UI).
Быстрый CLI:
nodes statusпомечает узел как сопряжённый, когда роль сопряжения устройства включаетnode.node.pair.*(CLI:openclaw nodes pending/approve/reject) — это отдельное, принадлежащее шлюзу хранилище сопряжений узлов; оно не блокирует WS‑рукопожатиеconnect.
Удалённый хост узла (system.run)
Используйте хост узла, когда ваш Gateway (шлюз) работает на одной машине, а вы хотите выполнять команды на другой. Модель по‑прежнему общается с gateway (шлюзом); шлюз перенаправляет вызовыexec на хост узла, когда выбран host=node.
Что где выполняется
- Хост шлюза Gateway: принимает сообщения, запускает модель, маршрутизирует вызовы инструментов.
- Хост узла: выполняет
system.run/system.whichна машине узла. - Подтверждения: применяются на хосте узла через
~/.openclaw/exec-approvals.json.
Запуск хоста узла (в фоне терминала)
На машине узла:Удалённый шлюз через SSH‑туннель (привязка к loopback)
Если Gateway (шлюз) привязывается к loopback (gateway.bind=loopback, по умолчанию в локальном режиме),
удалённые хосты узлов не могут подключаться напрямую. Создайте SSH‑туннель и укажите
хосту узла локальный конец туннеля.
Пример (хост узла → хост шлюза):
- Токен — это
gateway.auth.tokenиз конфига шлюза (~/.openclaw/openclaw.jsonна хосте шлюза). openclaw node runчитаетOPENCLAW_GATEWAY_TOKENдля аутентификации.
Запуск хоста узла (как сервиса)
Сопряжение + имя
На хосте шлюза:--display-nameвopenclaw node run/openclaw node install(сохраняется в~/.openclaw/node.jsonна узле).openclaw nodes rename --node <id|name|ip> --name "Build Node"(переопределение на стороне шлюза).
Разрешённый список команд
Подтверждения выполнения команд — для каждого хоста узла. Добавляйте записи allowlist со стороны шлюза:~/.openclaw/exec-approvals.json.
Направление exec на узел
Настройка значений по умолчанию (конфиг шлюза):exec с host=node выполняется на хосте узла (с учётом
allowlist/подтверждений узла).
Связанное:
Вызов команд
Низкоуровневый (сырой RPC):Скриншоты (снимки canvas)
Если узел отображает Canvas (WebView),canvas.snapshot возвращает { format, base64 }.
Помощник CLI (записывает во временный файл и печатает MEDIA:<path>):
Управление Canvas
canvas presentпринимает URL или локальные пути к файлам (--target), а также необязательный--x/--y/--width/--heightдля позиционирования.canvas evalпринимает встроенный JS (--js) или позиционный аргумент.
A2UI (Canvas)
- Поддерживается только A2UI v0.8 JSONL (v0.9/createSurface отклоняется).
Фото + видео (камера узла)
Фото (jpg):
mp4):
- Узел должен быть на переднем плане для
canvas.*иcamera.*(вызовы в фоне возвращаютNODE_BACKGROUND_UNAVAILABLE). - Длительность клипа ограничивается (в настоящее время
<= 60s), чтобы избежать чрезмерно больших base64‑полезных нагрузок. - Android по возможности запрашивает разрешения
CAMERA/RECORD_AUDIO; отклонённые разрешения завершаются ошибкой*_PERMISSION_REQUIRED.
Записи экрана (узлы)
Узлы предоставляютscreen.record (mp4). Пример:
screen.recordтребует, чтобы приложение узла было на переднем плане.- Android покажет системный запрос захвата экрана перед записью.
- Записи экрана ограничиваются
<= 60s. --no-audioотключает захват микрофона (поддерживается на iOS/Android; macOS использует системный звук захвата).- Используйте
--screen <index>для выбора дисплея при наличии нескольких экранов.
Геолокация (узлы)
Узлы предоставляютlocation.get, когда геолокация включена в настройках.
Помощник CLI:
- Геолокация по умолчанию выключена.
- Режим «Всегда» требует системного разрешения; фоновое получение — по принципу best‑effort.
- Ответ включает широту/долготу, точность (в метрах) и временную метку.
SMS (узлы Android)
Узлы Android могут предоставлятьsms.send, когда пользователь предоставляет разрешение SMS и устройство поддерживает телефонию.
Низкоуровневый вызов:
- Запрос разрешения должен быть принят на устройстве Android до объявления возможности.
- Устройства только с Wi‑Fi без телефонии не будут объявлять
sms.send.
Системные команды (хост узла / узел mac)
Узел macOS предоставляетsystem.run, system.notify и system.execApprovals.get/set.
Безголовый хост узла предоставляет system.run, system.which и system.execApprovals.get/set.
Примеры:
system.runвозвращает stdout/stderr/код выхода в полезной нагрузке.system.notifyучитывает состояние разрешений на уведомления в приложении macOS.system.runподдерживает--cwd,--env KEY=VAL,--command-timeoutи--needs-screen-recording.system.notifyподдерживает--priority <passive|active|timeSensitive>и--delivery <system|overlay|auto>.- Узлы macOS игнорируют переопределения
PATH; безголовые хосты узлов принимаютPATHтолько когда он предваряет PATH хоста узла. Если вам нужны дополнительные записи PATH, настройте окружение службы node host (или установите инструменты в стандартные каталоги) вместо передачиPATHчерез--env. - В режиме узла macOS
system.runограничен подтверждениями exec в приложении macOS (Настройки → Exec approvals). Ask/allowlist/full ведут себя так же, как на безголовом хосте узла; отклонённые запросы возвращаютSYSTEM_RUN_DENIED. - На безголовом хосте узла
system.runограничен подтверждениями exec (~/.openclaw/exec-approvals.json).
Привязка exec к узлу
Когда доступно несколько узлов, можно привязать exec к конкретному узлу. Это задаёт узел по умолчанию дляexec host=node (и может быть переопределено для каждого агента).
Глобальное значение по умолчанию:
Карта разрешений
Узлы могут включать картуpermissions в node.list / node.describe, с ключами по имени разрешения (например, screenRecording, accessibility) и булевыми значениями (true = предоставлено).
Безголовый хост узла (кросс‑платформенный)
OpenClaw может запускать безголовый хост узла (без UI), который подключается к WebSocket Gateway (шлюза) и предоставляетsystem.run / system.which. Это полезно на Linux/Windows
или для запуска минимального узла рядом с сервером.
Запуск:
- Сопряжение по‑прежнему требуется (Gateway покажет запрос на одобрение узла).
- Хост узла хранит свой id узла, токен, отображаемое имя и информацию о подключении к шлюзу в
~/.openclaw/node.json. - Подтверждения exec применяются локально через
~/.openclaw/exec-approvals.json(см. Подтверждения Exec). - На macOS безголовый хост узла предпочитает exec‑хост сопутствующего приложения, если он доступен, и
откатывается к локальному выполнению, если приложение недоступно. Установите
OPENCLAW_NODE_EXEC_HOST=app, чтобы требовать приложение, илиOPENCLAW_NODE_EXEC_FALLBACK=0, чтобы отключить откат. - Добавьте
--tls/--tls-fingerprint, когда Gateway WS использует TLS.
Режим узла mac
- Приложение macOS в строке меню подключается к WS‑серверу Gateway как узел (так что
openclaw nodes …работает с этим Mac). - В удалённом режиме приложение открывает SSH‑туннель для порта шлюза и подключается к
localhost.