Nodes and media
Node'lar
Bir node, Gateway WebSocket'ine (operatörlerle aynı port) role: "node" ile bağlanan ve node.invoke üzerinden bir komut yüzeyi (örn. canvas.*, camera.*, device.*, notifications.*, system.*) sunan eşlikçi bir cihazdır (macOS/iOS/Android/headless). Protokol ayrıntıları: Gateway protokolü.
Eski taşıma: Bridge protokolü (TCP JSONL; mevcut node'lar için yalnızca tarihsel).
macOS ayrıca node modunda da çalışabilir: menü çubuğu uygulaması Gateway'in
WS sunucusuna bağlanır ve yerel canvas/camera komutlarını bir node olarak sunar (böylece
openclaw nodes … bu Mac'e karşı çalışır). Uzak gateway modunda, tarayıcı
otomasyonu yerel uygulama node'u tarafından değil, CLI node host'u (openclaw node run veya
kurulu node hizmeti) tarafından yönetilir.
Notlar:
- Node'lar çevre birimleridir, gateway değildir. Gateway hizmetini çalıştırmazlar.
- Telegram/WhatsApp/vb. mesajlar node'lara değil gateway'e ulaşır.
- Sorun giderme çalıştırma kitabı: /nodes/troubleshooting
Eşleme + durum
WS node'ları cihaz eşlemesi kullanır. Node'lar connect sırasında bir cihaz kimliği sunar; Gateway
role: node için bir cihaz eşleme isteği oluşturur. Cihazlar CLI'si (veya UI) üzerinden onaylayın.
Hızlı CLI:
openclaw devices list
openclaw devices approve <requestId>
openclaw devices reject <requestId>
openclaw nodes status
openclaw nodes describe --node <idOrNameOrIp>
Bir node değişen kimlik doğrulama ayrıntılarıyla (rol/kapsamlar/genel anahtar) yeniden denerse, önceki
bekleyen istek geçersiz kılınır ve yeni bir requestId oluşturulur. Onaylamadan önce
openclaw devices list komutunu yeniden çalıştırın.
Notlar:
nodes status, cihaz eşleme rolünodeiçerdiğinde bir node'u paired olarak işaretler.- Cihaz eşleme kaydı, dayanıklı onaylanmış rol sözleşmesidir. Token rotasyonu bu sözleşmenin içinde kalır; eşlenmiş bir node'u, eşleme onayının hiç vermediği farklı bir role yükseltemez.
node.pair.*(CLI:openclaw nodes pending/approve/reject/remove/rename) gateway'e ait ayrı bir node eşleme deposudur; WSconnectel sıkışmasını denetlemez.openclaw nodes remove --node <id|name|ip>, bu ayrı gateway'e ait node eşleme deposundan eski girdileri siler.- Onay kapsamı, bekleyen isteğin bildirdiği komutları izler:
- komutsuz istek:
operator.pairing - exec olmayan node komutları:
operator.pairing+operator.write system.run/system.run.prepare/system.which:operator.pairing+operator.admin
- komutsuz istek:
Uzak node host'u (system.run)
Gateway'iniz bir makinede çalışırken komutların başka bir makinede
çalışmasını istediğinizde bir node host'u kullanın. Model yine gateway ile konuşur; gateway
host=node seçildiğinde exec çağrılarını node host'una iletir.
Nerede ne çalışır
- Gateway host'u: mesajları alır, modeli çalıştırır, araç çağrılarını yönlendirir.
- Node host'u: node makinesinde
system.run/system.whichçalıştırır. - Onaylar: node host'unda
~/.openclaw/exec-approvals.jsonüzerinden uygulanır.
Onay notu:
- Onay destekli node çalıştırmaları tam istek bağlamına bağlanır.
- Doğrudan shell/runtime dosya çalıştırmaları için OpenClaw ayrıca en iyi çabayla tek bir somut yerel dosya operandını bağlar ve bu dosya yürütmeden önce değişirse çalıştırmayı reddeder.
- OpenClaw bir yorumlayıcı/runtime komutu için tam olarak bir somut yerel dosya belirleyemezse, tam runtime kapsamı varmış gibi davranmak yerine onay destekli yürütme reddedilir. Daha geniş yorumlayıcı semantiği için sandboxing, ayrı host'lar veya açıkça güvenilen bir allowlist/tam iş akışı kullanın.
Bir node host'u başlatın (foreground)
Node makinesinde:
openclaw node run --host <gateway-host> --port 18789 --display-name "Build Node"
SSH tüneliyle uzak gateway (loopback bind)
Gateway loopback'e bağlanıyorsa (gateway.bind=loopback, yerel modda varsayılan),
uzak node host'ları doğrudan bağlanamaz. Bir SSH tüneli oluşturun ve
node host'unu tünelin yerel ucuna yöneltin.
Örnek (node host -> gateway host):
# Terminal A (keep running): forward local 18790 -> gateway 127.0.0.1:18789
ssh -N -L 18790:127.0.0.1:18789 user@gateway-host
# Terminal B: export the gateway token and connect through the tunnel
export OPENCLAW_GATEWAY_TOKEN="<gateway-token>"
openclaw node run --host 127.0.0.1 --port 18790 --display-name "Build Node"
Notlar:
openclaw node runtoken veya parola kimlik doğrulamasını destekler.- Env var'lar tercih edilir:
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD. - Config fallback'i
gateway.auth.token/gateway.auth.passworddeğeridir. - Yerel modda node host'u bilerek
gateway.remote.token/gateway.remote.passworddeğerlerini yok sayar. - Uzak modda
gateway.remote.token/gateway.remote.password, uzak öncelik kurallarına göre uygundur. - Etkin yerel
gateway.auth.*SecretRef'leri yapılandırılmış ancak çözümlenmemişse, node-host kimlik doğrulaması güvenli biçimde başarısız olur. - Node-host kimlik doğrulama çözümlemesi yalnızca
OPENCLAW_GATEWAY_*env var'larını dikkate alır.
Bir node host'u başlatın (hizmet)
openclaw node install --host <gateway-host> --port 18789 --display-name "Build Node"
openclaw node start
openclaw node restart
Eşle + adlandır
Gateway host'unda:
openclaw devices list
openclaw devices approve <requestId>
openclaw nodes status
Node değişen kimlik doğrulama ayrıntılarıyla yeniden denerse, openclaw devices list
komutunu yeniden çalıştırın ve mevcut requestId değerini onaylayın.
Adlandırma seçenekleri:
openclaw node run/openclaw node installüzerinde--display-name(node üzerinde~/.openclaw/node.jsoniçinde kalıcı olur).openclaw nodes rename --node <id|name|ip> --name "Build Node"(gateway override'ı).
Komutları allowlist'e ekleyin
Exec onayları node host'u başına geçerlidir. Gateway'den allowlist girdileri ekleyin:
openclaw approvals allowlist add --node <id|name|ip> "/usr/bin/uname"
openclaw approvals allowlist add --node <id|name|ip> "/usr/bin/sw_vers"
Onaylar node host'unda ~/.openclaw/exec-approvals.json konumunda bulunur.
Exec'i node'a yöneltin
Varsayılanları yapılandırın (gateway config):
openclaw config set tools.exec.host node
openclaw config set tools.exec.security allowlist
openclaw config set tools.exec.node "<id-or-name>"
Ya da oturum başına:
/exec host=node security=allowlist node=<id-or-name>
Ayarlanınca, host=node içeren her exec çağrısı node host'unda çalışır (node
allowlist/onaylarına tabidir).
host=auto node'u kendi başına örtük olarak seçmez, ancak auto içinden açık bir çağrı başına host=node isteğine izin verilir. Node exec'in oturum için varsayılan olmasını istiyorsanız, tools.exec.host=node veya /exec host=node ... değerini açıkça ayarlayın.
İlgili:
Komut çağırma
Düşük düzey (ham RPC):
openclaw nodes invoke --node <idOrNameOrIp> --command canvas.eval --params '{"javaScript":"location.href"}'
Yaygın "ajane bir MEDIA eki ver" iş akışları için daha yüksek düzey yardımcılar vardır.
Komut politikası
Node komutları çağrılabilmeden önce iki kapıdan geçmelidir:
- Node, komutu WebSocket
connect.commandslistesinde bildirmelidir. - Gateway'in platform politikası bildirilen komuta izin vermelidir.
Windows ve macOS eşlikçi node'ları varsayılan olarak
canvas.*, camera.list, location.get ve screen.snapshot gibi güvenli bildirilen komutlara izin verir.
talk capability'sinin reklamını yapan veya talk.* komutlarını bildiren güvenilir node'lar
ayrıca platform etiketinden bağımsız olarak bildirilen push-to-talk komutlarına (talk.ptt.start, talk.ptt.stop,
talk.ptt.cancel, talk.ptt.once) varsayılan olarak izin verir.
camera.snap, camera.clip ve
screen.record gibi tehlikeli veya gizlilik açısından ağır komutlar yine
gateway.nodes.allowCommands ile açık opt-in gerektirir. gateway.nodes.denyCommands her zaman
varsayılanların ve ek allowlist girdilerinin önüne geçer.
Plugin'e ait node komutları bir Gateway node-invoke politikası ekleyebilir. Bu politika
allowlist denetiminden sonra ve node'a iletmeden önce çalışır; böylece ham
node.invoke, CLI yardımcıları ve özel ajan araçları aynı plugin
izin sınırını paylaşır. Tehlikeli plugin node komutları yine açık
gateway.nodes.allowCommands opt-in'i gerektirir.
Bir node bildirilen komut listesini değiştirdikten sonra, eski cihaz eşlemesini reddedin ve gateway'in güncellenmiş komut anlık görüntüsünü saklaması için yeni isteği onaylayın.
Ekran görüntüleri (canvas anlık görüntüleri)
Node Canvas'ı (WebView) gösteriyorsa, canvas.snapshot { format, base64 } döndürür.
CLI yardımcısı (geçici dosyaya yazar ve MEDIA:<path> yazdırır):
openclaw nodes canvas snapshot --node <idOrNameOrIp> --format png
openclaw nodes canvas snapshot --node <idOrNameOrIp> --format jpg --max-width 1200 --quality 0.9
Canvas kontrolleri
openclaw nodes canvas present --node <idOrNameOrIp> --target https://example.com
openclaw nodes canvas hide --node <idOrNameOrIp>
openclaw nodes canvas navigate https://example.com --node <idOrNameOrIp>
openclaw nodes canvas eval --node <idOrNameOrIp> --js "document.title"
Notlar:
canvas present, URL'leri veya yerel dosya yollarını (--target) ve konumlandırma için isteğe bağlı--x/--y/--width/--heightdeğerlerini kabul eder.canvas eval, satır içi JS (--js) veya konumsal bir arg kabul eder.
A2UI (Canvas)
openclaw nodes canvas a2ui push --node <idOrNameOrIp> --text "Hello"
openclaw nodes canvas a2ui push --node <idOrNameOrIp> --jsonl ./payload.jsonl
openclaw nodes canvas a2ui reset --node <idOrNameOrIp>
Notlar:
- Yalnızca A2UI v0.8 JSONL desteklenir (v0.9/createSurface reddedilir).
Fotoğraflar + videolar (node kamerası)
Fotoğraflar (jpg):
openclaw nodes camera list --node <idOrNameOrIp>
openclaw nodes camera snap --node <idOrNameOrIp> # default: both facings (2 MEDIA lines)
openclaw nodes camera snap --node <idOrNameOrIp> --facing front
Video klipler (mp4):
openclaw nodes camera clip --node <idOrNameOrIp> --duration 10s
openclaw nodes camera clip --node <idOrNameOrIp> --duration 3000 --no-audio
Notlar:
canvas.*vecamera.*için node foregrounded olmalıdır (arka plan çağrılarıNODE_BACKGROUND_UNAVAILABLEdöndürür).- Aşırı büyük base64 payload'larını önlemek için klip süresi sınırlandırılır (şu anda
<= 60s). - Android mümkün olduğunda
CAMERA/RECORD_AUDIOizinlerini sorar; reddedilen izinler*_PERMISSION_REQUIREDile başarısız olur.
Ekran kayıtları (node'lar)
Desteklenen node'lar screen.record (mp4) sunar. Örnek:
openclaw nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10
openclaw nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10 --no-audio
Notlar:
screen.recordkullanılabilirliği node platformuna bağlıdır.- Ekran kayıtları
<= 60sile sınırlandırılır. --no-audio, desteklenen platformlarda mikrofon yakalamayı devre dışı bırakır.- Birden fazla ekran varsa ekran seçmek için
--screen <index>kullanın.
Konum (node'lar)
Node'lar, ayarlarda Konum etkinleştirildiğinde location.get sunar.
CLI yardımcısı:
openclaw nodes location get --node <idOrNameOrIp>
openclaw nodes location get --node <idOrNameOrIp> --accuracy precise --max-age 15000 --location-timeout 10000
Notlar:
- Konum varsayılan olarak kapalıdır.
- "Always" sistem izni gerektirir; arka plan getirmesi en iyi çabadır.
- Yanıt lat/lon, doğruluk (metre) ve zaman damgası içerir.
SMS (Android node'ları)
Android node'ları, kullanıcı SMS izni verdiğinde ve cihaz telefoniyi desteklediğinde sms.send sunabilir.
Düşük düzey çağrı:
openclaw nodes invoke --node <idOrNameOrIp> --command sms.send --params '{"to":"+15555550123","message":"Hello from OpenClaw"}'
Notlar:
- Capability reklamı yapılmadan önce izin istemi Android cihazda kabul edilmelidir.
- Telefonisi olmayan yalnızca Wi-Fi cihazlar
sms.sendreklamını yapmaz.
Android cihaz + kişisel veri komutları
Android node'ları, ilgili capability'ler etkinleştirildiğinde ek komut ailelerini reklam edebilir.
Kullanılabilir aileler:
device.status,device.info,device.permissions,device.healthnotifications.list,notifications.actionsphotos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
Örnek çağrılar:
openclaw nodes invoke --node <idOrNameOrIp> --command device.status --params '{}'
openclaw nodes invoke --node <idOrNameOrIp> --command notifications.list --params '{}'
openclaw nodes invoke --node <idOrNameOrIp> --command photos.latest --params '{"limit":1}'
Notlar:
- Hareket komutları, kullanılabilir sensörlere göre yetenek kapılıdır.
Sistem komutları (node host / mac node)
macOS node, system.run, system.notify ve system.execApprovals.get/set sunar.
Headless node host, system.run, system.which ve system.execApprovals.get/set sunar.
Örnekler:
openclaw nodes notify --node <idOrNameOrIp> --title "Ping" --body "Gateway ready"
openclaw nodes invoke --node <idOrNameOrIp> --command system.which --params '{"name":"git"}'
Notlar:
system.run, payload içinde stdout/stderr/çıkış kodu döndürür.- Shell yürütmesi artık
host=nodeileexecaracı üzerinden geçer;nodes, açık node komutları için doğrudan RPC yüzeyi olarak kalır. nodes invoke,system.runveyasystem.run.preparesunmaz; bunlar yalnızca exec yolunda kalır.- Exec yolu, onaydan önce kanonik bir
systemRunPlanhazırlar. Bir onay verildiğinde Gateway, sonradan çağıran tarafından düzenlenmiş command/cwd/session alanlarını değil, saklanan o planı iletir. system.notify, macOS uygulamasındaki bildirim izni durumuna uyar.- Tanınmayan node
platform/deviceFamilymetadata'sı,system.runvesystem.whichkomutlarını dışarıda bırakan korumacı bir varsayılan izin listesi kullanır. Bilinmeyen bir platform için bu komutlara bilerek ihtiyaç duyuyorsanız, bunlarıgateway.nodes.allowCommandsüzerinden açıkça ekleyin. system.run,--cwd,--env KEY=VAL,--command-timeoutve--needs-screen-recordingdestekler.- Shell sarmalayıcıları (
bash|sh|zsh ... -c/-lc) için istek kapsamlı--envdeğerleri açık bir izin listesine indirgenir (TERM,LANG,LC_*,COLORTERM,NO_COLOR,FORCE_COLOR). - İzin listesi modunda her zaman izin ver kararlarında, bilinen gönderim sarmalayıcıları (
env,nice,nohup,stdbuf,timeout) sarmalayıcı yolları yerine iç yürütülebilir dosya yollarını kalıcı hale getirir. Sarmalamayı açmak güvenli değilse, hiçbir izin listesi girdisi otomatik olarak kalıcı hale getirilmez. - İzin listesi modundaki Windows node host'larında,
cmd.exe /cüzerinden shell sarmalayıcı çalıştırmaları onay gerektirir (izin listesi girdisi tek başına sarmalayıcı biçimini otomatik olarak izinli yapmaz). system.notify,--priority <passive|active|timeSensitive>ve--delivery <system|overlay|auto>destekler.- Node host'ları
PATHgeçersiz kılmalarını yok sayar ve tehlikeli başlangıç/shell anahtarlarını ayıklar (DYLD_*,LD_*,NODE_OPTIONS,PYTHON*,PERL*,RUBYOPT,SHELLOPTS,PS4). Ek PATH girdilerine ihtiyacınız varsa,PATHdeğerini--envile geçirmek yerine node host hizmet ortamını yapılandırın (veya araçları standart konumlara yükleyin). - macOS node modunda
system.run, macOS uygulamasındaki exec onayları tarafından kapılanır (Settings → Exec approvals). Ask/allowlist/full, headless node host ile aynı davranır; reddedilen istemlerSYSTEM_RUN_DENIEDdöndürür. - Headless node host'ta
system.run, exec onayları (~/.openclaw/exec-approvals.json) tarafından kapılanır.
Exec node bağlama
Birden fazla node kullanılabilir olduğunda exec'i belirli bir node'a bağlayabilirsiniz.
Bu, exec host=node için varsayılan node'u ayarlar (ve ajan başına geçersiz kılınabilir).
Global varsayılan:
openclaw config set tools.exec.node "node-id-or-name"
Ajan başına geçersiz kılma:
openclaw config get agents.list
openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
Herhangi bir node'a izin vermek için kaldırın:
openclaw config unset tools.exec.node
openclaw config unset agents.list[0].tools.exec.node
İzinler haritası
Node'lar, node.list / node.describe içinde izin adına göre anahtarlanmış (örn. screenRecording, accessibility) ve boolean değerlere sahip (true = verilmiş) bir permissions haritası içerebilir.
Headless node host (platformlar arası)
OpenClaw, Gateway
WebSocket'e bağlanan ve system.run / system.which sunan bir headless node host (UI yok) çalıştırabilir. Bu, Linux/Windows üzerinde
veya bir sunucunun yanında minimal bir node çalıştırmak için kullanışlıdır.
Başlatın:
openclaw node run --host <gateway-host> --port 18789
Notlar:
- Eşleme hâlâ gereklidir (Gateway bir cihaz eşleme istemi gösterir).
- Node host, node kimliğini, token'ını, görünen adını ve gateway bağlantı bilgilerini
~/.openclaw/node.jsoniçinde saklar. - Exec onayları yerel olarak
~/.openclaw/exec-approvals.jsonüzerinden uygulanır (bkz. Exec onayları). - macOS'te headless node host, varsayılan olarak
system.runkomutunu yerel olarak yürütür.system.runkomutunu eşlikçi uygulama exec host'u üzerinden yönlendirmek içinOPENCLAW_NODE_EXEC_HOST=appayarlayın; uygulama host'unu zorunlu kılmak ve kullanılamıyorsa kapalı başarısız olmak içinOPENCLAW_NODE_EXEC_FALLBACK=0ekleyin. - Gateway WS TLS kullanıyorsa
--tls/--tls-fingerprintekleyin.
Mac node modu
- macOS menü çubuğu uygulaması Gateway WS sunucusuna bir node olarak bağlanır (böylece
openclaw nodes …bu Mac'e karşı çalışır). - Uzak modda uygulama, Gateway portu için bir SSH tüneli açar ve
localhostkonumuna bağlanır.