role: "node" і надає поверхню команд (наприклад, canvas.*, camera.*, device.*, notifications.*, system.*) через node.invoke. Деталі протоколу: протокол Gateway.
Застарілий транспорт: протокол Bridge (TCP JSONL;
лише історичний для поточних Node).
macOS також може працювати в режимі Node: застосунок у рядку меню підключається до
WS-сервера Gateway і надає свої локальні команди canvas/camera як Node (тому
openclaw nodes … працює з цим Mac). У режимі віддаленого Gateway автоматизацію
браузера виконує хост CLI Node (openclaw node run або встановлена служба Node),
а не Node нативного застосунку.
Примітки:
- Node — це периферійні пристрої, а не gateway-и. Вони не запускають службу gateway.
- Повідомлення Telegram/WhatsApp/тощо надходять на gateway, а не на Node.
- Runbook для усунення несправностей: /nodes/troubleshooting
Спарювання + стан
WS Node використовують спарювання пристроїв. Node подають ідентичність пристрою під часconnect; Gateway
створює запит на спарювання пристрою для role: node. Схваліть через CLI пристроїв (або UI).
Швидкий CLI:
requestId. Повторно виконайте
openclaw devices list перед схваленням.
Примітки:
nodes statusпозначає Node як спарений, коли його роль спарювання пристрою міститьnode.- Запис спарювання пристрою є довговічним контрактом схваленої ролі. Ротація токенів залишається всередині цього контракту; вона не може підвищити спарений Node до іншої ролі, яку схвалення спарювання ніколи не надавало.
node.pair.*(CLI:openclaw nodes pending/approve/reject/remove/rename) — це окреме сховище спарювання Node, яким володіє gateway; воно не обмежує handshake WSconnect.openclaw nodes remove --node <id|name|ip>видаляє спарювання Node. Для Node, прив’язаного до пристрою, це відкликає рольnodeпристрою вdevices/paired.jsonі відключає сеанси цього пристрою з роллю Node — пристрій зі змішаними ролями зберігає свій рядок і втрачає лише рольnode, тоді як рядок пристрою лише з роллю Node видаляється. Це також очищає будь-який відповідний запис з окремого сховища спарювання Node, яким володіє gateway.operator.pairingможе видаляти рядки Node, що не є операторами; викликач із токеном пристрою, який відкликає власну роль Node на пристрої зі змішаними ролями, додатково потребуєoperator.admin.- Область дії схвалення відповідає заявленим командам очікуваного запиту:
- запит без команд:
operator.pairing - команди Node без exec:
operator.pairing+operator.write system.run/system.run.prepare/system.which:operator.pairing+operator.admin
- запит без команд:
Віддалений хост Node (system.run)
Використовуйте хост Node, коли ваш Gateway працює на одній машині, а команди мають виконуватися на іншій. Модель усе ще спілкується з gateway; gateway пересилає викликиexec до хоста Node, коли вибрано host=node.
Що де виконується
- Хост Gateway: отримує повідомлення, запускає модель, маршрутизує виклики інструментів.
- Хост Node: виконує
system.run/system.whichна машині Node. - Схвалення: застосовуються на хості Node через
~/.openclaw/exec-approvals.json.
- Запуски Node із підтримкою схвалень прив’язують точний контекст запиту.
- Для прямих виконань shell/runtime файлів OpenClaw також, наскільки можливо, прив’язує один конкретний локальний файловий операнд і відхиляє запуск, якщо цей файл змінюється до виконання.
- Якщо OpenClaw не може ідентифікувати рівно один конкретний локальний файл для команди інтерпретатора/runtime, виконання із підтримкою схвалення відхиляється замість удаваного повного покриття runtime. Використовуйте sandboxing, окремі хости або явний довірений allowlist/повний workflow для ширшої семантики інтерпретатора.
Запуск хоста Node (foreground)
На машині Node:Віддалений gateway через SSH-тунель (loopback bind)
Якщо Gateway прив’язується до loopback (gateway.bind=loopback, типовий варіант у локальному режимі),
віддалені хости Node не можуть підключитися напряму. Створіть SSH-тунель і спрямуйте
хост Node на локальний кінець тунелю.
Приклад (хост Node -> хост gateway):
openclaw node runпідтримує автентифікацію токеном або паролем.- Змінні середовища бажані:
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD. - Резервна конфігурація:
gateway.auth.token/gateway.auth.password. - У локальному режимі хост Node навмисно ігнорує
gateway.remote.token/gateway.remote.password. - У віддаленому режимі
gateway.remote.token/gateway.remote.passwordпридатні відповідно до правил пріоритету віддаленого режиму. - Якщо налаштовано активні локальні SecretRefs
gateway.auth.*, але їх не розв’язано, автентифікація хоста Node завершується fail-closed. - Розв’язання автентифікації хоста Node враховує лише змінні середовища
OPENCLAW_GATEWAY_*.
Запуск хоста Node (service)
Спарювання + назва
На хості gateway:openclaw devices list
і схваліть поточний requestId.
Варіанти іменування:
--display-nameуopenclaw node run/openclaw node install(зберігається в~/.openclaw/node.jsonна Node).openclaw nodes rename --node <id|name|ip> --name "Build Node"(перевизначення gateway).
Додайте команди до allowlist
Схвалення exec є окремими для кожного хоста Node. Додайте записи allowlist з gateway:~/.openclaw/exec-approvals.json.
Спрямуйте exec на Node
Налаштуйте типові значення (конфігурація gateway):exec з host=node виконується на хості Node (з урахуванням
allowlist/схвалень Node).
host=auto не вибере Node неявно самостійно, але явний запит host=node для окремого виклику дозволений з auto. Якщо потрібно, щоб exec на Node був типовим для сеансу, явно встановіть tools.exec.host=node або /exec host=node ....
Пов’язане:
Локальне виведення моделі
Desktop або серверний Node може надавати моделі з можливістю чату з сервера Ollama, що працює на цьому Node. Агенти використовують інструментnode_inference Plugin Ollama, щоб
виявляти встановлені моделі та запускати обмежений prompt віддалено; Gateway
не потребує прямого мережевого доступу до Ollama. Див. локальне для Node виведення Ollama
для налаштування, фільтрації моделей і команд прямої перевірки.
Виклик команд
Низькорівнево (raw RPC):Політика команд
Команди Node мають пройти двоє воріт, перш ніж їх можна буде викликати:- Node має оголосити команду у своєму списку WebSocket
connect.commands. - Політика платформи gateway має дозволити оголошену команду.
canvas.*, camera.list, location.get і screen.snapshot.
Довірені Node, які рекламують capability talk або оголошують команди talk.*,
також за замовчуванням дозволяють оголошені команди push-to-talk (talk.ptt.start, talk.ptt.stop,
talk.ptt.cancel, talk.ptt.once), незалежно від мітки платформи.
Небезпечні або чутливі до приватності команди, як-от camera.snap, camera.clip і
screen.record, усе ще потребують явного opt-in через
gateway.nodes.allowCommands. gateway.nodes.denyCommands завжди має перевагу над
типовими значеннями та додатковими записами allowlist.
Команди Node, якими володіє Plugin, можуть додати політику node-invoke Gateway. Ця політика
виконується після перевірки allowlist і перед пересиланням до Node, тому raw
node.invoke, CLI helper-и та спеціалізовані інструменти агента мають однакову межу
дозволів Plugin. Небезпечні команди Node від Plugin усе ще потребують явного
opt-in gateway.nodes.allowCommands.
Після того як Node змінює свій оголошений список команд, відхиліть старе спарювання пристрою
і схваліть новий запит, щоб gateway зберіг оновлений snapshot команд.
Конфігурація (openclaw.json)
Налаштування, пов’язані з Node, розташовані в gateway.nodes і tools.exec:
denyCommands вилучає команду навіть тоді, коли
типове значення платформи або запис allowCommands інакше дозволив би її. Див.
довідник конфігурації Gateway
для деталей полів спарювання Node gateway і політики команд.
Перевизначення exec Node для окремого агента:
Скриншоти (snapshots canvas)
Якщо Node показує Canvas (WebView),canvas.snapshot повертає { format, base64 }.
CLI helper (записує у тимчасовий файл і друкує збережений шлях):
Елементи керування Canvas
canvas presentприймає URL-адреси або локальні файлові шляхи (--target), а також необов’язкові--x/--y/--width/--heightдля позиціювання.canvas evalприймає inline JS (--js) або позиційний аргумент.
A2UI (Canvas)
- Мобільні вузли використовують вбудовану сторінку A2UI, що належить застосунку, для рендерингу з підтримкою дій.
- Підтримується лише A2UI v0.8 JSONL (v0.9/createSurface відхиляється).
- iOS і Android рендерять віддалені сторінки Gateway Canvas, але дії кнопок A2UI надсилаються лише з вбудованої сторінки A2UI, що належить застосунку. Сторінки A2UI HTTP/HTTPS, розміщені на Gateway, на цих мобільних клієнтах доступні лише для рендерингу.
Фото + відео (камера вузла)
Фото (jpg):
mp4):
- Вузол має бути на передньому плані для
canvas.*іcamera.*(фонові виклики повертаютьNODE_BACKGROUND_UNAVAILABLE). - Тривалість кліпу обмежується (зараз
<= 60s), щоб уникнути надмірно великих base64-навантажень. - Android за можливості запитає дозволи
CAMERA/RECORD_AUDIO; відхилені дозволи завершуються помилкою*_PERMISSION_REQUIRED.
Записи екрана (вузли)
Підтримувані вузли надаютьscreen.record (mp4). Приклад:
- Доступність
screen.recordзалежить від платформи вузла. - Записи екрана обмежуються до
<= 60s. --no-audioвимикає захоплення мікрофона на підтримуваних платформах.- Використовуйте
--screen <index>, щоб вибрати дисплей, коли доступно кілька екранів.
Геолокація (вузли)
Вузли надаютьlocation.get, коли геолокацію ввімкнено в налаштуваннях.
Допоміжна команда CLI:
- Геолокація вимкнена за замовчуванням.
- “Завжди” потребує системного дозволу; фонове отримання виконується за принципом best-effort.
- Відповідь містить lat/lon, точність (метри) і мітку часу.
SMS (вузли Android)
Вузли Android можуть надаватиsms.send, коли користувач надає дозвіл SMS, а пристрій підтримує телефонію.
Низькорівневий виклик:
- Запит дозволу потрібно прийняти на пристрої Android, перш ніж можливість буде оголошена.
- Пристрої лише з Wi-Fi без телефонії не оголошуватимуть
sms.send.
Команди пристрою Android + особистих даних
Вузли Android можуть оголошувати додаткові сімейства команд, коли ввімкнено відповідні можливості. Доступні сімейства:device.status,device.info,device.permissions,device.healthdevice.apps, коли в налаштуваннях Android увімкнено спільний доступ до встановлених застосунківnotifications.list,notifications.actionsphotos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
device.appsє opt-in і за замовчуванням повертає застосунки, видимі в лаунчері.- Команди руху обмежуються можливостями доступних датчиків.
Системні команди (хост вузла / вузол Mac)
Вузол macOS надаєsystem.run, system.notify і system.execApprovals.get/set.
Headless-хост вузла надає system.run, system.which і system.execApprovals.get/set.
Приклади:
system.runповертає stdout/stderr/код виходу в payload.- Виконання shell тепер проходить через інструмент
execзhost=node;nodesзалишається поверхнею direct-RPC для явних команд вузла. nodes invokeне надаєsystem.runабоsystem.run.prepare; вони залишаються лише на шляху exec.- Шлях exec готує канонічний
systemRunPlanперед схваленням. Щойно схвалення надано, gateway пересилає цей збережений план, а не будь-які пізніше змінені викликачем поля command/cwd/session. system.notifyповажає стан дозволу на сповіщення в застосунку macOS.- Нерозпізнані метадані вузла
platform/deviceFamilyвикористовують консервативний allowlist за замовчуванням, який виключаєsystem.runіsystem.which. Якщо вам навмисно потрібні ці команди для невідомої платформи, додайте їх явно черезgateway.nodes.allowCommands. system.runпідтримує--cwd,--env KEY=VAL,--command-timeoutі--needs-screen-recording.- Для shell-обгорток (
bash|sh|zsh ... -c/-lc) значення--envу межах запиту скорочуються до явного allowlist (TERM,LANG,LC_*,COLORTERM,NO_COLOR,FORCE_COLOR). - Для рішень allow-always у режимі allowlist відомі dispatch-обгортки (
env,flock,nice,nohup,stdbuf,timeout) зберігають шляхи внутрішніх виконуваних файлів замість шляхів обгорток. Якщо розгортання небезпечне, жоден запис allowlist не зберігається автоматично. - На хостах вузлів Windows у режимі allowlist запуски shell-обгорток через
cmd.exe /cпотребують схвалення (самого запису allowlist недостатньо, щоб автоматично дозволити форму обгортки). system.notifyпідтримує--priority <passive|active|timeSensitive>і--delivery <system|overlay|auto>.- Хости вузлів ігнорують перевизначення
PATHі видаляють небезпечні ключі запуску/shell (DYLD_*,LD_*,BASHOPTS,FPATH,KSH_ENV,NODE_OPTIONS,NODE_REDIRECT_WARNINGS,NODE_REPL_EXTERNAL_MODULE,NODE_REPL_HISTORY,NODE_V8_COVERAGE,PYTHON*,PERL*,RUBYOPT,SHELLOPTS,PS4,TCLLIBPATH). Якщо вам потрібні додаткові записи PATH, налаштуйте середовище служби хоста вузла (або встановіть інструменти в стандартних розташуваннях) замість передаванняPATHчерез--env. - У режимі вузла macOS
system.runобмежується схваленнями exec у застосунку macOS (Settings → Exec approvals). Ask/allowlist/full поводяться так само, як headless-хост вузла; відхилені запити повертаютьSYSTEM_RUN_DENIED. - На headless-хості вузла
system.runобмежується схваленнями exec (~/.openclaw/exec-approvals.json).
Прив’язування вузла exec
Коли доступно кілька вузлів, ви можете прив’язати exec до певного вузла. Це встановлює вузол за замовчуванням дляexec host=node (і може бути перевизначено для кожного агента).
Глобальне значення за замовчуванням:
Мапа дозволів
Вузли можуть містити мапуpermissions у node.list / node.describe, індексовану за назвою дозволу (наприклад, screenRecording, accessibility) з булевими значеннями (true = надано).
Headless-хост вузла (кросплатформний)
OpenClaw може запускати headless-хост вузла (без UI), який підключається до WebSocket Gateway і надаєsystem.run / system.which. Це корисно на Linux/Windows
або для запуску мінімального вузла поруч із сервером.
Запустіть його:
- Сполучення все одно потрібне (Gateway покаже запит на сполучення пристрою).
- Хост вузла зберігає свій id вузла, токен, відображуване ім’я та інформацію про підключення до gateway у
~/.openclaw/node.json. - Схвалення exec застосовуються локально через
~/.openclaw/exec-approvals.json(див. Схвалення exec). - На macOS headless-хост вузла за замовчуванням виконує
system.runлокально. УстановітьOPENCLAW_NODE_EXEC_HOST=app, щоб спрямуватиsystem.runчерез хост exec у супровідному застосунку; додайтеOPENCLAW_NODE_EXEC_FALLBACK=0, щоб вимагати хост застосунку й завершуватися fail closed, якщо він недоступний. - Додайте
--tls/--tls-fingerprint, коли Gateway WS використовує TLS.
Режим вузла Mac
- Застосунок панелі меню macOS підключається до сервера Gateway WS як вузол (тож
openclaw nodes …працює з цим Mac). - У віддаленому режимі застосунок відкриває SSH-тунель для порту Gateway і підключається до
localhost.