node adalah perangkat pendamping (macOS/iOS/Android/headless) yang terhubung ke WebSocket Gateway (port yang sama dengan operator) denganDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
role: "node" dan mengekspos permukaan perintah (mis. canvas.*, camera.*, device.*, notifications.*, system.*) melalui node.invoke. Detail protokol: Protokol Gateway.
Transport lama: Protokol Bridge (TCP JSONL;
hanya historis untuk node saat ini).
macOS juga dapat berjalan dalam mode node: aplikasi bilah menu terhubung ke
server WS Gateway dan mengekspos perintah canvas/camera lokalnya sebagai node (sehingga
openclaw nodes … berfungsi terhadap Mac ini). Dalam mode gateway jarak jauh, otomasi
browser ditangani oleh host node CLI (openclaw node run atau layanan node
yang terpasang), bukan oleh node aplikasi native.
Catatan:
- Node adalah periferal, bukan gateway. Node tidak menjalankan layanan gateway.
- Pesan Telegram/WhatsApp/dll. masuk ke gateway, bukan ke node.
- Runbook pemecahan masalah: /nodes/troubleshooting
Penyandingan + status
Node WS menggunakan penyandingan perangkat. Node menyajikan identitas perangkat selamaconnect; Gateway
membuat permintaan penyandingan perangkat untuk role: node. Setujui melalui CLI perangkat (atau UI).
CLI cepat:
requestId baru dibuat. Jalankan ulang
openclaw devices list sebelum menyetujui.
Catatan:
nodes statusmenandai node sebagai tersanding saat role penyandingan perangkatnya mencakupnode.- Catatan penyandingan perangkat adalah kontrak role yang disetujui dan tahan lama. Rotasi token tetap berada di dalam kontrak itu; rotasi tidak dapat meningkatkan node tersanding menjadi role berbeda yang tidak pernah diberikan oleh persetujuan penyandingan.
node.pair.*(CLI:openclaw nodes pending/approve/reject/remove/rename) adalah penyimpanan penyandingan node terpisah milik gateway; ini tidak membatasi handshake WSconnect.openclaw nodes remove --node <id|name|ip>menghapus entri usang dari penyimpanan penyandingan node terpisah milik gateway tersebut.- Cakupan persetujuan mengikuti perintah yang dideklarasikan permintaan tertunda:
- permintaan tanpa perintah:
operator.pairing - perintah node non-exec:
operator.pairing+operator.write system.run/system.run.prepare/system.which:operator.pairing+operator.admin
- permintaan tanpa perintah:
Host node jarak jauh (system.run)
Gunakan host node saat Gateway Anda berjalan di satu mesin dan Anda ingin perintah dieksekusi di mesin lain. Model tetap berbicara ke gateway; gateway meneruskan panggilanexec ke host node saat host=node dipilih.
Apa yang berjalan di mana
- Host Gateway: menerima pesan, menjalankan model, merutekan panggilan alat.
- Host node: mengeksekusi
system.run/system.whichpada mesin node. - Persetujuan: diberlakukan pada host node melalui
~/.openclaw/exec-approvals.json.
- Eksekusi node berbasis persetujuan mengikat konteks permintaan yang tepat.
- Untuk eksekusi file shell/runtime langsung, OpenClaw juga berupaya mengikat satu operand file lokal konkret dan menolak eksekusi jika file itu berubah sebelum eksekusi.
- Jika OpenClaw tidak dapat mengidentifikasi tepat satu file lokal konkret untuk perintah interpreter/runtime, eksekusi berbasis persetujuan ditolak alih-alih berpura-pura memiliki cakupan runtime penuh. Gunakan sandboxing, host terpisah, atau allowlist/alur kerja penuh tepercaya yang eksplisit untuk semantik interpreter yang lebih luas.
Mulai host node (foreground)
Pada mesin node:Gateway jarak jauh melalui tunnel SSH (bind loopback)
Jika Gateway bind ke loopback (gateway.bind=loopback, default dalam mode lokal),
host node jarak jauh tidak dapat terhubung langsung. Buat tunnel SSH dan arahkan
host node ke ujung lokal tunnel.
Contoh (host node -> host gateway):
openclaw node runmendukung autentikasi token atau kata sandi.- Env var lebih disukai:
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD. - Fallback konfigurasi adalah
gateway.auth.token/gateway.auth.password. - Dalam mode lokal, host node sengaja mengabaikan
gateway.remote.token/gateway.remote.password. - Dalam mode jarak jauh,
gateway.remote.token/gateway.remote.passwordmemenuhi syarat sesuai aturan prioritas jarak jauh. - Jika SecretRef
gateway.auth.*lokal aktif dikonfigurasi tetapi tidak terselesaikan, autentikasi host node gagal tertutup. - Resolusi autentikasi host node hanya menghormati env var
OPENCLAW_GATEWAY_*.
Mulai host node (layanan)
Sandingkan + beri nama
Pada host gateway:openclaw devices list
dan setujui requestId saat ini.
Opsi penamaan:
--display-namepadaopenclaw node run/openclaw node install(bertahan di~/.openclaw/node.jsonpada node).openclaw nodes rename --node <id|name|ip> --name "Build Node"(override gateway).
Allowlist perintah
Persetujuan exec bersifat per host node. Tambahkan entri allowlist dari gateway:~/.openclaw/exec-approvals.json.
Arahkan exec ke node
Konfigurasikan default (konfigurasi gateway):exec dengan host=node berjalan pada host node (tunduk pada
allowlist/persetujuan node).
host=auto tidak akan secara implisit memilih node dengan sendirinya, tetapi permintaan eksplisit per panggilan host=node diizinkan dari auto. Jika Anda ingin exec node menjadi default untuk sesi, atur tools.exec.host=node atau /exec host=node ... secara eksplisit.
Terkait:
Memanggil perintah
Tingkat rendah (RPC mentah):Kebijakan perintah
Perintah node harus melewati dua gerbang sebelum dapat dipanggil:- Node harus mendeklarasikan perintah dalam daftar WebSocket
connect.commandsmiliknya. - Kebijakan platform gateway harus mengizinkan perintah yang dideklarasikan.
canvas.*, camera.list, location.get, dan screen.snapshot secara default.
Perintah berbahaya atau berat privasi seperti camera.snap, camera.clip, dan
screen.record tetap memerlukan opt-in eksplisit dengan
gateway.nodes.allowCommands. gateway.nodes.denyCommands selalu mengalahkan
default dan entri allowlist tambahan.
Perintah node milik Plugin dapat menambahkan kebijakan pemanggilan node Gateway. Kebijakan itu
berjalan setelah pemeriksaan allowlist dan sebelum diteruskan ke node, sehingga
node.invoke mentah, helper CLI, dan alat agen khusus berbagi batas izin Plugin
yang sama. Perintah node Plugin yang berbahaya tetap memerlukan opt-in eksplisit
gateway.nodes.allowCommands.
Setelah node mengubah daftar perintah yang dideklarasikan, tolak penyandingan perangkat lama
dan setujui permintaan baru agar gateway menyimpan snapshot perintah yang diperbarui.
Tangkapan layar (snapshot canvas)
Jika node menampilkan Canvas (WebView),canvas.snapshot mengembalikan { format, base64 }.
Helper CLI (menulis ke file sementara dan mencetak MEDIA:<path>):
Kontrol Canvas
canvas presentmenerima URL atau path file lokal (--target), plus--x/--y/--width/--heightopsional untuk penempatan.canvas evalmenerima JS inline (--js) atau argumen posisional.
A2UI (Canvas)
- Hanya A2UI v0.8 JSONL yang didukung (v0.9/createSurface ditolak).
Foto + video (kamera node)
Foto (jpg):
mp4):
- Node harus berada di foreground untuk
canvas.*dancamera.*(panggilan latar belakang mengembalikanNODE_BACKGROUND_UNAVAILABLE). - Durasi klip dibatasi (saat ini
<= 60s) untuk menghindari payload base64 yang terlalu besar. - Android akan meminta izin
CAMERA/RECORD_AUDIOjika memungkinkan; izin yang ditolak gagal dengan*_PERMISSION_REQUIRED.
Rekaman layar (node)
Node yang didukung mengeksposscreen.record (mp4). Contoh:
- Ketersediaan
screen.recordbergantung pada platform node. - Rekaman layar dibatasi hingga
<= 60s. --no-audiomenonaktifkan penangkapan mikrofon pada platform yang didukung.- Gunakan
--screen <index>untuk memilih tampilan saat beberapa layar tersedia.
Lokasi (node)
Node mengeksposlocation.get saat Lokasi diaktifkan di pengaturan.
Helper CLI:
- Lokasi nonaktif secara default.
- “Selalu” memerlukan izin sistem; pengambilan latar belakang bersifat upaya terbaik.
- Respons mencakup lat/lon, akurasi (meter), dan timestamp.
SMS (node Android)
Node Android dapat mengekspossms.send saat pengguna memberikan izin SMS dan perangkat mendukung telefoni.
Pemanggilan tingkat rendah:
- Prompt izin harus diterima pada perangkat Android sebelum kapabilitas diiklankan.
- Perangkat khusus Wi-Fi tanpa telefoni tidak akan mengiklankan
sms.send.
Perintah perangkat Android + data pribadi
Node Android dapat mengiklankan keluarga perintah tambahan saat kapabilitas terkait diaktifkan. Keluarga yang tersedia:device.status,device.info,device.permissions,device.healthnotifications.list,notifications.actionsphotos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
- Perintah gerakan dibatasi kemampuan berdasarkan sensor yang tersedia.
Perintah sistem (host node / node mac)
Node macOS mengekspossystem.run, system.notify, dan system.execApprovals.get/set.
Host node tanpa antarmuka mengekspos system.run, system.which, dan system.execApprovals.get/set.
Contoh:
system.runmengembalikan stdout/stderr/kode keluar dalam payload.- Eksekusi shell sekarang melalui alat
execdenganhost=node;nodestetap menjadi permukaan RPC langsung untuk perintah node eksplisit. nodes invoketidak mengekspossystem.runatausystem.run.prepare; keduanya tetap hanya berada di jalur exec.- Jalur exec menyiapkan
systemRunPlankanonis sebelum persetujuan. Setelah persetujuan diberikan, Gateway meneruskan rencana tersimpan itu, bukan field command/cwd/session yang kemudian diedit pemanggil. system.notifymematuhi status izin notifikasi pada aplikasi macOS.- Metadata node
platform/deviceFamilyyang tidak dikenali menggunakan allowlist default konservatif yang mengecualikansystem.rundansystem.which. Jika Anda sengaja memerlukan perintah tersebut untuk platform yang tidak dikenal, tambahkan secara eksplisit melaluigateway.nodes.allowCommands. system.runmendukung--cwd,--env KEY=VAL,--command-timeout, dan--needs-screen-recording.- Untuk pembungkus shell (
bash|sh|zsh ... -c/-lc), nilai--envbercakupan permintaan dikurangi menjadi allowlist eksplisit (TERM,LANG,LC_*,COLORTERM,NO_COLOR,FORCE_COLOR). - Untuk keputusan selalu izinkan dalam mode allowlist, pembungkus dispatch yang dikenal (
env,nice,nohup,stdbuf,timeout) mempertahankan path executable bagian dalam, bukan path pembungkus. Jika pembukaan pembungkus tidak aman, tidak ada entri allowlist yang dipertahankan secara otomatis. - Pada host node Windows dalam mode allowlist, proses pembungkus shell melalui
cmd.exe /cmemerlukan persetujuan (entri allowlist saja tidak otomatis mengizinkan bentuk pembungkus). system.notifymendukung--priority <passive|active|timeSensitive>dan--delivery <system|overlay|auto>.- Host node mengabaikan override
PATHdan menghapus kunci startup/shell berbahaya (DYLD_*,LD_*,NODE_OPTIONS,PYTHON*,PERL*,RUBYOPT,SHELLOPTS,PS4). Jika Anda memerlukan entri PATH tambahan, konfigurasikan lingkungan layanan host node (atau instal alat di lokasi standar), bukan meneruskanPATHmelalui--env. - Pada mode node macOS,
system.rundibatasi oleh persetujuan exec di aplikasi macOS (Settings → Exec approvals). Ask/allowlist/full berperilaku sama seperti host node tanpa antarmuka; prompt yang ditolak mengembalikanSYSTEM_RUN_DENIED. - Pada host node tanpa antarmuka,
system.rundibatasi oleh persetujuan exec (~/.openclaw/exec-approvals.json).
Pengikatan node exec
Saat beberapa node tersedia, Anda dapat mengikat exec ke node tertentu. Ini menetapkan node default untukexec host=node (dan dapat dioverride per agen).
Default global:
Peta izin
Node dapat menyertakan petapermissions dalam node.list / node.describe, dengan kunci berupa nama izin (mis. screenRecording, accessibility) dan nilai boolean (true = diberikan).
Host node tanpa antarmuka (lintas platform)
OpenClaw dapat menjalankan host node tanpa antarmuka (tanpa UI) yang terhubung ke WebSocket Gateway dan mengekspossystem.run / system.which. Ini berguna di Linux/Windows
atau untuk menjalankan node minimal bersama server.
Mulai:
- Pairing tetap diperlukan (Gateway akan menampilkan prompt pairing perangkat).
- Host node menyimpan id node, token, nama tampilan, dan info koneksi gateway di
~/.openclaw/node.json. - Persetujuan exec diberlakukan secara lokal melalui
~/.openclaw/exec-approvals.json(lihat Persetujuan exec). - Pada macOS, host node tanpa antarmuka menjalankan
system.runsecara lokal secara default. TetapkanOPENCLAW_NODE_EXEC_HOST=appuntuk merutekansystem.runmelalui host exec aplikasi pendamping; tambahkanOPENCLAW_NODE_EXEC_FALLBACK=0untuk mewajibkan host aplikasi dan gagal tertutup jika tidak tersedia. - Tambahkan
--tls/--tls-fingerprintsaat WS Gateway menggunakan TLS.
Mode node Mac
- Aplikasi menubar macOS terhubung ke server WS Gateway sebagai node (sehingga
openclaw nodes …bekerja terhadap Mac ini). - Dalam mode jarak jauh, aplikasi membuka tunnel SSH untuk port Gateway dan terhubung ke
localhost.