role: "node" を使って Gateway の WebSocket(operator と同じポート)へ接続し、node.invoke 経由で command surface(例: canvas.*、camera.*、device.*、notifications.*、system.*)を公開します。protocol の詳細は Gateway protocol を参照してください。
legacy transport は Bridge protocol です(TCP JSONL。現行 node では deprecated / removed)。
macOS は node mode でも動作できます。menubar app が Gateway の WS server に接続し、ローカルの canvas / camera command を node として公開するため、openclaw nodes ... をこの Mac 自身に対して使えます。
注:
- node は peripheral であり gateway ではありません。gateway service 自体は実行しません
- Telegram / WhatsApp などのメッセージは node ではなく gateway に着信します
- トラブルシューティング手順は /nodes/troubleshooting を参照してください
ペアリングと状態
WS node は device pairing を使います。 node はconnect 時に device identity を提示し、Gateway は role: node 用の device pairing request を作成します。承認は devices CLI(または UI)で行います。
クイック CLI:
nodes statusは、device pairing role にnodeが含まれている場合、その node を paired と表示しますnode.pair.*(CLI:openclaw nodes pending/approve/reject)は、gateway 管理の別の node pairing store です。WS のconnecthandshake を制御するものでは ありません
リモート node host(system.run)
Gateway が 1 台のマシンで動作しており、別のマシン上で command を実行したい場合は node host を使います。model は引き続き gateway と会話し、host=node が選ばれているときに gateway が exec call を node host へ転送します。
どこで何が実行されるか
- Gateway host: メッセージを受信し、model を実行し、tool call をルーティングする
- Node host: node 側マシンで
system.run/system.whichを実行する - Approvals: node host 上の
~/.openclaw/exec-approvals.jsonで適用される
node host を起動する(foreground)
node 側マシンで実行:SSH tunnel 経由で remote gateway に接続する(loopback bind)
Gateway が loopback に bind している場合(gateway.bind=loopback。local mode のデフォルト)、remote node host は直接接続できません。SSH tunnel を作成し、そのローカル終端へ node host を向けてください。
例(node host -> gateway host):
openclaw node runは token 認証と password 認証の両方をサポートします- 環境変数
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORDの利用を推奨します - config のフォールバックは
gateway.auth.token/gateway.auth.passwordです。remote mode ではgateway.remote.token/gateway.remote.passwordも候補になります - legacy の
CLAWDBOT_GATEWAY_*環境変数は、node-host 認証解決では意図的に無視されます
node host を起動する(service)
ペアリングと命名
gateway host 側:openclaw node run/openclaw node installの--display-name(node 側の~/.openclaw/node.jsonに永続化される)openclaw nodes rename --node <id|name|ip> --name "Build Node"(gateway 側 override)
command を allowlist に追加する
exec approval は node host ごと に管理されます。gateway 側から allowlist entry を追加できます。~/.openclaw/exec-approvals.json に保存されます。
exec を node に向ける
gateway config でデフォルトを設定:host=node 付きの exec call が node host 上で実行されます(node 側 allowlist / approval に従います)。
関連:
コマンドの呼び出し
低レベル(raw RPC):スクリーンショット(canvas snapshot)
node 上で Canvas(WebView)が表示されている場合、canvas.snapshot は { format, base64 } を返します。
CLI helper(temp file に書き出し、MEDIA:<path> を表示):
Canvas controls
canvas presentは URL またはローカルファイルパス(--target)を受け付け、必要なら--x/--y/--width/--heightで位置も指定できますcanvas evalは inline JS(--js)か、位置引数のどちらでも渡せます
A2UI(Canvas)
- サポートするのは A2UI v0.8 JSONL のみです(v0.9 / createSurface は拒否されます)
写真と動画(node camera)
写真(jpg):
mp4):
canvas.*とcamera.*は node が foreground のときだけ実行できます(background 呼び出しはNODE_BACKGROUND_UNAVAILABLE)- clip の duration は oversized な base64 payload を避けるため、現在
<= 60sにクランプされます - Android では、可能なら
CAMERA/RECORD_AUDIO権限要求が表示され、拒否された場合は*_PERMISSION_REQUIREDで失敗します
画面録画(nodes)
サポートされる node はscreen.record(mp4)を公開します。例:
screen.recordの可用性は node platform に依存します- 画面録画は
<= 60sに制限されます --no-audioは、対応 platform でマイクキャプチャを無効化します- 複数 display がある場合は
--screen <index>で対象 display を選択できます
位置情報(nodes)
settings で location が有効な場合、node はlocation.get を公開します。
CLI helper:
- 位置情報は デフォルトで off です
- “Always” は system permission を必要とし、background fetch は best-effort です
- 応答には lat / lon、accuracy(meter)、timestamp が含まれます
SMS(Android nodes)
ユーザーが SMS 権限を付与し、かつデバイスが telephony をサポートしている場合、Android node はsms.send を公開できます。
低レベル呼び出し:
- capability が advertise される前に、Android device 上で permission prompt を許可しておく必要があります
- telephony を持たない Wi-Fi 専用 device は
sms.sendを advertise しません
Android device と個人データ系コマンド
Android node は、対応 capability が有効な場合に追加の command family を advertise できます。 利用可能な family:device.status、device.info、device.permissions、device.healthnotifications.list、notifications.actionsphotos.latestcontacts.search、contacts.addcalendar.events、calendar.addmotion.activity、motion.pedometer
- motion command は、利用可能な sensor に応じて capability-gated されます
system command(node host / mac node)
macOS node はsystem.run、system.notify、system.execApprovals.get/set を公開します。headless node host は system.run、system.which、system.execApprovals.get/set を公開します。
例:
system.runは payload 内に stdout / stderr / exit code を返しますsystem.notifyは macOS app 側の通知権限状態に従います- 未認識の node
platform/deviceFamilymetadata には、system.runとsystem.whichを除外した保守的なデフォルト allowlist を適用します。未知の platform で意図的にこれらを許可したい場合はgateway.nodes.allowCommandsで明示追加してください system.runは--cwd、--env KEY=VAL、--command-timeout、--needs-screen-recordingをサポートします- shell wrapper(
bash|sh|zsh ... -c/-lc)では、request 単位の--env値は明示 allowlist(TERM、LANG、LC_*、COLORTERM、NO_COLOR、FORCE_COLOR)に縮約されます - allowlist mode での allow-always 決定では、既知の dispatch wrapper(
env、nice、nohup、stdbuf、timeout)については wrapper path ではなく内部 executable path を永続化します。安全に unwrap できない場合、allowlist entry は自動保存されません - Windows node host の allowlist mode では、
cmd.exe /c経由の shell-wrapper 実行には approval が必要です(allowlist entry だけでは wrapper 形式は自動許可されません) system.notifyは--priority <passive|active|timeSensitive>と--delivery <system|overlay|auto>をサポートします- node host は
PATH上書きを無視し、危険な startup / shell key(DYLD_*、LD_*、NODE_OPTIONS、PYTHON*、PERL*、RUBYOPT、SHELLOPTS、PS4)を除去します。追加の PATH entry が必要なら、--envでPATHを渡すのではなく、node host service 環境を設定するか標準パスへ tool を配置してください - macOS node mode では、
system.runは macOS app の exec approvals(Settings → Exec approvals)でゲートされます。Ask / allowlist / full の挙動は headless node host と同じで、拒否された prompt はSYSTEM_RUN_DENIEDを返します - headless node host では、
system.runは~/.openclaw/exec-approvals.jsonによる exec approvals でゲートされます
exec の node binding
複数 node が利用可能な場合、exec を特定の node へ bind できます。これによりexec host=node 用のデフォルト node が決まり、agent ごとに上書きも可能です。
グローバルデフォルト:
permissions map
node はnode.list / node.describe に permissions map を含める場合があります。キーは permission 名(例: screenRecording、accessibility)、値は boolean(true = granted)です。
headless node host(cross-platform)
OpenClaw は、UI を持たない headless node host を実行できます。これは Gateway WebSocket へ接続し、system.run / system.which を公開します。Linux / Windows や、server と並行して最小構成の node を動かしたい場合に有用です。
起動:
- pairing は引き続き必要で、Gateway 側には device pairing prompt が表示されます
- node host は node id、token、display name、gateway 接続情報を
~/.openclaw/node.jsonに保存します - exec approvals は
~/.openclaw/exec-approvals.jsonによりローカルで適用されます(Exec approvals を参照) - macOS では、headless node host はデフォルトで
system.runをローカル実行します。OPENCLAW_NODE_EXEC_HOST=appを設定すると companion app の exec host 経由に切り替わります。OPENCLAW_NODE_EXEC_FALLBACK=0を追加すると app host 必須となり、利用不能時は fail closed します - Gateway WS が TLS を使う場合は
--tls/--tls-fingerprintを追加してください
Mac node mode
- macOS menubar app は Gateway WS server に node として接続するため、
openclaw nodes ...をこの Mac に対して実行できます - remote mode では、アプリが Gateway port 向けの SSH tunnel を開き、
localhostへ接続します