Nodes and media
โหนด
Node คืออุปกรณ์คู่หู (macOS/iOS/watchOS/Android/แบบไม่มีส่วนติดต่อผู้ใช้) ที่เชื่อมต่อกับ Gateway ด้วย role: "node" และเปิดเผยชุดคำสั่ง (เช่น canvas.*, camera.*, device.*, notifications.*, system.*) ผ่าน node.invoke Node ส่วนใหญ่ใช้ Gateway WebSocket บนพอร์ตของผู้ดำเนินการ ส่วน Node สำหรับ Apple Watch แบบเชื่อมต่อโดยตรงซึ่งเป็นตัวเลือกจะใช้การโพล HTTPS ที่ลงนามแล้วบนพอร์ตเดียวกัน เนื่องจาก watchOS ปิดกั้นการเชื่อมต่อเครือข่ายระดับต่ำทั่วไปสำหรับแอปทั่วไป รายละเอียดโปรโตคอล: โปรโตคอล Gateway
การรับส่งข้อมูลแบบเดิม: โปรโตคอล Bridge (TCP JSONL; มีไว้เป็นข้อมูลประวัติเท่านั้นสำหรับ Node ปัจจุบัน)
macOS ยังสามารถทำงานใน โหมด Node ได้ด้วย: แอปแถบเมนูจะเชื่อมต่อกับเซิร์ฟเวอร์
WS ของ Gateway ในฐานะ Node หนึ่งตัว (ดังนั้น openclaw nodes … จึงทำงานกับ Mac เครื่องนี้ได้) แอป
เพิ่มคำสั่งแบบเนทีฟสำหรับ Canvas, กล้อง, หน้าจอ, การแจ้งเตือน และการควบคุมคอมพิวเตอร์
ลงในชุดคำสั่งของโฮสต์ Node เดียวกันกับที่ openclaw node run ใช้ อย่าเริ่ม
Node CLI ตัวที่สองบน Mac เครื่องนั้น แอปจะเรียกใช้รันไทม์โฮสต์ Node ของ CLI ที่ตรงกันเป็น
เวิร์กเกอร์ภายใน และยังคงเป็นการเชื่อมต่อ Gateway และข้อมูลประจำตัวของ Node เพียงรายการเดียว
Node เป็น อุปกรณ์ต่อพ่วง ไม่ใช่ Gateway: Node ไม่ได้เรียกใช้บริการ Gateway และข้อความจากช่องทางต่างๆ (Telegram, WhatsApp ฯลฯ) จะมาถึง Gateway ไม่ใช่ Node
คู่มือแก้ไขปัญหา: /nodes/troubleshooting
การจับคู่ + สถานะ
Node ใช้ การจับคู่อุปกรณ์ เมื่อเชื่อมต่อ Node จะแสดงข้อมูลประจำตัวของอุปกรณ์ที่ลงนามแล้ว และ Gateway จะสร้างคำขอจับคู่อุปกรณ์สำหรับ role: node อนุมัติผ่าน CLI สำหรับอุปกรณ์ (หรือ UI) การตั้งค่า Apple Watch แบบเชื่อมต่อโดยตรงใช้รหัสตั้งค่าอายุสั้นสำหรับ Node เท่านั้นที่ผู้ดูแลระบบออกให้ เพื่ออนุมัติชุดคำสั่งความเสี่ยงต่ำแบบตายตัวของอุปกรณ์ การขยายความสามารถในภายหลังยังคงต้องได้รับการอนุมัติตามปกติ
openclaw devices listopenclaw devices approve <requestId>openclaw devices reject <requestId>openclaw nodes statusopenclaw nodes describe --node <idOrNameOrIp>คำขอจับคู่ที่รอดำเนินการจะหมดอายุ 5 นาทีหลังจากการลองใหม่ครั้งล่าสุดของอุปกรณ์ อุปกรณ์ที่เชื่อมต่อใหม่อย่างต่อเนื่องจะรักษาคำขอที่รอดำเนินการหนึ่งรายการ (และ requestId) ให้ใช้งานอยู่ แทนที่จะสร้างพรอมต์ใหม่ทุกๆ ไม่กี่นาที โปรดดูวงจรคำขอ/อนุมัติฉบับเต็มที่ การจับคู่ Node หาก Node ลองใหม่โดยมีรายละเอียดการตรวจสอบสิทธิ์เปลี่ยนไป (บทบาท/ขอบเขต/กุญแจสาธารณะ) คำขอที่รอดำเนินการก่อนหน้าจะถูกแทนที่และมีการสร้าง requestId ใหม่ ไคลเอนต์จะได้รับเหตุการณ์ device.pair.resolved สำหรับคำขอที่ถูกแทนที่ และควรเรียกใช้ openclaw devices list อีกครั้งก่อนอนุมัติ
nodes statusทำเครื่องหมายว่า Node จับคู่แล้ว เมื่อบทบาทการจับคู่อุปกรณ์มีnode- Mac แบบเนทีฟที่เชื่อมต่ออยู่และมีสิทธิ์การช่วยการเข้าถึงสามารถรายงานกิจกรรม
อินพุตทางกายภาพที่รวมไว้แล้วได้ Gateway จะทำเครื่องหมาย Mac ที่เข้าเกณฑ์และมีข้อมูลใหม่ที่สุดเป็น
activeมอบคำใบ้รหัส Node ที่คงที่ให้เอเจนต์ และส่งการแจ้งเตือนการเชื่อมต่อ Node ไปยังเครื่องนั้นก่อนใช้ทางเลือกสำรองหลังการหน่วงเวลา โปรดดูการตั้งค่า ความเป็นส่วนตัว เวลา และ การแก้ไขปัญหาที่ สถานะคอมพิวเตอร์ที่ใช้งานอยู่ - ระเบียนการจับคู่อุปกรณ์คือสัญญาบทบาทที่ได้รับอนุมัติและคงอยู่ถาวร การหมุนเวียนโทเค็นจะอยู่ภายในสัญญานั้น และไม่สามารถยกระดับ Node ที่จับคู่แล้วให้เป็นบทบาทที่ไม่เคยได้รับอนุมัติจากการจับคู่
node.pair.*(CLI:openclaw nodes pending/approve/reject/remove/rename) เป็นพื้นที่จัดเก็บการจับคู่ Node แยกต่างหากซึ่ง Gateway เป็นเจ้าของ โดยติดตามชุดคำสั่ง/ความสามารถที่ได้รับอนุมัติของ Node ระหว่างการเชื่อมต่อใหม่ พื้นที่จัดเก็บนี้ ไม่ได้ ควบคุมการตรวจสอบสิทธิ์ของการรับส่งข้อมูล เพราะการจับคู่อุปกรณ์เป็นผู้ควบคุมopenclaw nodes remove --node <id|name|ip>ลบการจับคู่ Node สำหรับ Node ที่มีอุปกรณ์รองรับ การดำเนินการนี้จะเพิกถอนบทบาทnodeของอุปกรณ์ในพื้นที่จัดเก็บอุปกรณ์ที่จับคู่แล้ว และยกเลิกการเชื่อมต่อเซสชันที่มีบทบาท Node ของอุปกรณ์นั้น: อุปกรณ์ที่มีหลายบทบาทจะคงแถวไว้และสูญเสียเฉพาะบทบาทnodeส่วนแถวของอุปกรณ์ที่มีเฉพาะบทบาท Node จะถูกลบ นอกจากนี้ยังล้างรายการที่ตรงกันออกจากพื้นที่จัดเก็บการจับคู่ Node แยกต่างหากด้วย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
- คำขอที่ไม่มีคำสั่ง:
ความคลาดเคลื่อนของเวอร์ชันและลำดับการอัปเกรด
Gateway WebSocket ยอมรับไคลเอนต์ Node ที่ผ่านการตรวจสอบสิทธิ์ภายในช่วงโปรโตคอล N-1
ดังนั้น Gateway v4 ปัจจุบันจึงยอมรับ Node v3 เมื่อการเชื่อมต่อประกาศ
ทั้ง role: "node" และ client.mode: "node" เซสชันของผู้ดำเนินการและ UI ยังคง
ต้องใช้โปรโตคอลปัจจุบัน
สำหรับการอัปเกรดกลุ่มอุปกรณ์เป็นระยะ ให้อัปเกรด Gateway ก่อน แล้วจึงอัปเกรด Node แต่ละตัว
Node แบบ N-1 จะยังคงมองเห็นและจัดการได้ระหว่างการอัปเกรด Gateway
จะบันทึก legacy node protocol accepted พร้อมคำแนะนำให้อัปเกรด การจับคู่
การตรวจสอบสิทธิ์อุปกรณ์ รายการคำสั่งที่อนุญาต และการอนุมัติ exec ยังคงมีผล
ความสามารถและคำสั่งที่ Plugin เป็นเจ้าของจะถูกซ่อนไว้จนกว่า Node จะอัปเกรดเป็น
โปรโตคอลปัจจุบัน Node ที่เก่ากว่า N-1 ต้องได้รับการอัปเกรดผ่านช่องทางอื่นก่อน
เชื่อมต่อใหม่
การรับส่งข้อมูล HTTPS ของ watchOS แบบเชื่อมต่อโดยตรงต้องใช้โปรโตคอลเวอร์ชันปัจจุบัน ให้อัปเดต แอปนาฬิกาพร้อมกับ Gateway ก่อนเปิดใช้โหมดเชื่อมต่อโดยตรง
โฮสต์ Node ระยะไกล (system.run)
ใช้ โฮสต์ Node เมื่อ Gateway ทำงานบนเครื่องหนึ่งและต้องการให้คำสั่งทำงานบนอีกเครื่องหนึ่ง โมเดลยังคงสื่อสารกับ Gateway ส่วน Gateway จะส่งต่อการเรียก exec ไปยัง โฮสต์ Node เมื่อเลือก host=node
| บทบาท | ความรับผิดชอบ |
|---|---|
| โฮสต์ Gateway | รับข้อความ เรียกใช้โมเดล และกำหนดเส้นทางการเรียกเครื่องมือ |
| โฮสต์ Node | เรียกใช้ system.run/system.which บนเครื่อง Node |
| การอนุมัติ | บังคับใช้บนโฮสต์ Node ผ่าน ~/.openclaw/exec-approvals.json |
หมายเหตุเกี่ยวกับการอนุมัติ:
- การทำงานของ Node ที่อาศัยการอนุมัติจะผูกกับบริบทคำขอที่แน่นอน เส้นทาง exec จะเตรียม
systemRunPlanแบบมาตรฐานก่อนการอนุมัติ เมื่ออนุมัติแล้ว Gateway จะส่งต่อแผนที่จัดเก็บไว้นั้น ไม่ใช่ฟิลด์คำสั่ง/cwd/เซสชันที่ผู้เรียกแก้ไขภายหลัง และจะตรวจสอบไดเรกทอรีทำงานอีกครั้งก่อนเรียกใช้ - สำหรับการเรียกใช้ไฟล์โดยตรงผ่านเชลล์/รันไทม์ OpenClaw จะพยายามผูกตัวถูกดำเนินการของไฟล์ภายในเครื่องที่เจาะจงหนึ่งไฟล์ด้วย และปฏิเสธการทำงานหากไฟล์นั้นเปลี่ยนแปลงก่อนดำเนินการ
- หาก OpenClaw ไม่สามารถระบุไฟล์ภายในเครื่องที่เจาะจงได้เพียงหนึ่งไฟล์สำหรับคำสั่งอินเทอร์พรีเตอร์/รันไทม์ การดำเนินการที่อาศัยการอนุมัติจะถูกปฏิเสธแทนการแสร้งว่าครอบคลุมรันไทม์อย่างสมบูรณ์ ใช้แซนด์บ็อกซ์ โฮสต์แยกต่างหาก หรือรายการที่อนุญาต/เวิร์กโฟลว์แบบเต็มที่เชื่อถืออย่างชัดเจนสำหรับความหมายของอินเทอร์พรีเตอร์ที่กว้างขึ้น
เริ่มโฮสต์ Node (เบื้องหน้า)
บนเครื่อง Node:
openclaw node run --host <gateway-host> --port 18789 --display-name "Build Node"node run ยังยอมรับ --context-path (พาธบริบท WS ของ Gateway), --tls, --tls-fingerprint <sha256> และ --node-id (แทนที่รหัสอินสแตนซ์ไคลเอนต์แบบเดิม การดำเนินการนี้ไม่รีเซ็ตการจับคู่) บน macOS ให้ส่ง --share-installed-apps เพื่อประกาศ device.apps โดยค่าเริ่มต้นการแชร์จะปิดอยู่ ใช้ --no-share-installed-apps เพื่อปิดการเลือกเข้าร่วมที่บันทึกไว้ก่อนหน้านี้
Gateway ระยะไกลผ่านอุโมงค์ SSH (ผูกกับลูปแบ็ก)
หาก Gateway ผูกกับลูปแบ็ก (gateway.bind=loopback, ค่าเริ่มต้นในโหมดภายในเครื่อง) โฮสต์ Node ระยะไกลจะไม่สามารถเชื่อมต่อโดยตรงได้ ให้สร้างอุโมงค์ SSH และชี้โฮสต์ Node ไปยังปลายอุโมงค์ฝั่งภายในเครื่อง
ตัวอย่าง (โฮสต์ Node -> โฮสต์ Gateway):
# เทอร์มินัล A (เปิดไว้ตลอด): ส่งต่อ 18790 ภายในเครื่อง -> Gateway 127.0.0.1:18789ssh -N -L 18790:127.0.0.1:18789 user@gateway-host # เทอร์มินัล B: ส่งออกโทเค็น Gateway และเชื่อมต่อผ่านอุโมงค์export OPENCLAW_GATEWAY_TOKEN="<gateway-token>"openclaw node run --host 127.0.0.1 --port 18790 --display-name "Build Node"หมายเหตุ:
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 จะล้มเหลวแบบปิดกั้น - การแก้ไขค่าการตรวจสอบสิทธิ์ของโฮสต์ Node จะยอมรับเฉพาะตัวแปรสภาพแวดล้อม
OPENCLAW_GATEWAY_*
เริ่มโฮสต์ Node (บริการ)
openclaw node install --host <gateway-host> --port 18789 --display-name "Build Node"openclaw node startopenclaw node restartnode install ยังยอมรับ --context-path, --tls, --tls-fingerprint, --node-id (เฉพาะรหัสอินสแตนซ์ไคลเอนต์แบบเดิม), --share-installed-apps / --no-share-installed-apps, --runtime <node> (ค่าเริ่มต้น: node) และ --force สำหรับติดตั้งใหม่ นอกจากนี้ยังมี node status, node stop และ node uninstall
จับคู่ + ตั้งชื่อ
บนโฮสต์ Gateway:
openclaw devices listopenclaw devices approve <requestId>openclaw nodes statusหาก Node ลองใหม่โดยมีรายละเอียดการตรวจสอบสิทธิ์เปลี่ยนไป ให้เรียกใช้ openclaw devices list อีกครั้งและอนุมัติ requestId ปัจจุบัน
ตัวเลือกการตั้งชื่อ:
--display-nameบนopenclaw node run/openclaw node install(คงอยู่ในแถว SQLite ของnode_host_configที่ใช้ร่วมกัน พร้อมกับรหัสอินสแตนซ์ไคลเอนต์และข้อมูลเมตาการเชื่อมต่อ Gateway)openclaw nodes rename --node <id|name|ip> --name "Build Node"(การแทนที่โดย Gateway)
เซิร์ฟเวอร์ MCP ที่โฮสต์บน Node
กำหนดค่าเซิร์ฟเวอร์ MCP ใน openclaw.json บนเครื่อง Node ไม่ใช่บน
Gateway:
{ nodeHost: { mcp: { servers: { localDocs: { command: "npx", args: ["-y", "@modelcontextprotocol/server-filesystem", "/srv/docs"], toolFilter: { include: ["read_*", "search"], }, }, internalApi: { url: "https://mcp.internal.example/mcp", transport: "streamable-http", headers: { Authorization: "Bearer ${INTERNAL_MCP_TOKEN}", }, }, }, }, },}โฮสต์ Node แบบไม่มีส่วนติดต่อผู้ใช้จะเริ่มเซิร์ฟเวอร์เหล่านี้ แสดงรายการเครื่องมือ และเผยแพร่
ตัวอธิบายหลังจากเชื่อมต่อ การเรียกเครื่องมือจะส่งกลับไปยัง Node นั้นผ่าน
mcp.tools.call.v1 โดย Gateway ไม่จำเป็นต้องมีการกำหนดค่า MCP ที่ตรงกันหรือ
Plugin JS เส้นทาง v1 ที่โฮสต์บน Node นี้ไม่รองรับเซิร์ฟเวอร์ OAuth MCP
โฮสต์ Node ปัจจุบันประกาศตระกูลคำสั่ง mcp.tools.call.v1 ในตัวระหว่าง
การจับคู่ครั้งแรก แม้จะไม่ได้กำหนดค่าเซิร์ฟเวอร์ MCP ไว้ก็ตาม Node ที่จับคู่บน
OpenClaw เวอร์ชันเก่าอาจร้องขอการอัปเกรดชุดคำสั่งแบบครั้งเดียวหลังจาก
อัปเดตโฮสต์ Node การเพิ่ม ลบ หรือกรองเซิร์ฟเวอร์หลังจากนั้นไม่
จำเป็นต้องจับคู่ใหม่ เนื่องจากตระกูลคำสั่งที่ได้รับอนุมัติไม่เปลี่ยนแปลง ให้เริ่ม
openclaw node run หรือ openclaw node restart ใหม่เพื่อใช้การเปลี่ยนแปลงการกำหนดค่า MCP ของ Node
โฮสต์ Node จะไม่เฝ้าดูการกำหนดค่านี้
ผู้ดำเนินการ Gateway สามารถเพิกเฉยต่อเครื่องมือทั้งหมดที่เอเจนต์มองเห็นซึ่งเผยแพร่โดย Node ที่จับคู่แล้ว
รวมถึงเครื่องมือ MCP ที่โฮสต์บน Node ด้วย
gateway.nodes.pluginTools.enabled: false การปฏิเสธคำสั่งที่ตรงกันทุกประการ เช่น
gateway.nodes.denyCommands: ["mcp.tools.call.v1"] จะปิดกั้นการดำเนินการด้วย
Skills ที่โฮสต์บน Node
ติดตั้ง Skills ไว้ในไดเรกทอรี Skills ของ OpenClaw ที่ใช้งานอยู่บนเครื่อง Node
โดยค่าเริ่มต้นคือ ~/.openclaw/skills ส่วน OPENCLAW_HOME, OPENCLAW_STATE_DIR และ
OPENCLAW_CONFIG_PATH จะย้ายโปรไฟล์ที่ใช้งานอยู่นั้น OPENCLAW_STATE_DIR มีลำดับความสำคัญ
เหนือกว่าสำหรับ Skills มิฉะนั้น skills/ จะอยู่ข้างพาธที่แสดงโดย
openclaw config file โฮสต์ Node แบบไม่มีส่วนติดต่อเผยแพร่ไฟล์ SKILL.md ที่ถูกต้อง
หลังจากเชื่อมต่อ และ Gateway จะเพิ่มไฟล์เหล่านั้นลงในสแนปช็อต Skills ของเอเจนต์เฉพาะขณะที่
Node นั้นยังเชื่อมต่ออยู่ ชื่อไดเรกทอรีของแต่ละ Skill ต้องตรงกับฟิลด์ frontmatter
name เพื่อให้ตัวระบุตำแหน่ง Node แบบนามธรรมแมปไปยังรายการเดียวโดยไม่ต้องเพิ่ม
ฟิลด์โปรโตคอลอีกฟิลด์
การจับคู่บทบาท Node ครั้งแรกเป็นการอนุมัติการเผยแพร่ Skills การเพิ่ม ลบ หรือ
เปลี่ยนแปลง Skills ไม่ต้องจับคู่อีกครั้งหรือเปลี่ยนแปลงการกำหนดค่า Gateway
รีสตาร์ต openclaw node run หรือ openclaw node restart หลังจากเปลี่ยนแปลง
ไฟล์ Skills ของ Node เนื่องจากโฮสต์ Node ไม่ได้เฝ้าดูไดเรกทอรี Skills
รายการ Skill ที่โฮสต์บน Node จะระบุ Node ของตนและมีตำแหน่งการดำเนินการ
ไฟล์ Skill พาธสัมพัทธ์ที่อ้างอิง และไบนารีจะยังคงอยู่บน Node นั้น
เอเจนต์อ่านตำแหน่ง node://.../SKILL.md ที่ประกาศไว้ด้วยเครื่องมือ
read ตามปกติ file_fetch ยอมรับพาธสัมบูรณ์บน Node ที่ผู้ปฏิบัติงานอนุมัติ
ไม่ใช่ตัวระบุตำแหน่ง Skill ของ Node ส่วนรันไทม์ที่ไม่มีเครื่องมืออ่านตามปกติสามารถเรียกใช้
cat SKILL.md ผ่าน exec host=node node=<node-id> แทน โดยใช้ไดเรกทอรี
node://.../skills/<name> ที่ประกาศไว้เป็น workdir ไฟล์และไบนารีที่อ้างอิง
ใช้เป้าหมาย exec และ workdir เดียวกัน โฮสต์ Node จะแปลงตัวระบุตำแหน่งนั้นเทียบกับ
ไดเรกทอรีสถานะ OpenClaw ที่ใช้งานอยู่ของตน ดังนั้นพาธสัมพัทธ์จึงถูกแปลงบน Node ไม่ใช่
เครื่อง Gateway Node ที่เผยแพร่ต้องได้รับอนุมัติ system.run
และนโยบาย exec ของเอเจนต์ต้องอนุญาต host=node มิฉะนั้น Skill จะไม่อยู่
ในสแนปช็อตของเอเจนต์นั้น
ตั้งค่า nodeHost.skills.enabled: false บน Node เพื่อหยุดการเผยแพร่ ผู้ปฏิบัติงาน Gateway
สามารถละเว้น Skills จาก Node ที่จับคู่ทั้งหมดได้ด้วย
gateway.nodes.skills.enabled: false
สถานะข้อมูลประจำตัวแบบไม่มีส่วนติดต่อ
Node แบบไม่มีส่วนติดต่อเก็บระเบียนสถานะแยกกันสามรายการ:
~/.openclaw/state/openclaw.sqlite(node_host_config): ID อินสแตนซ์ไคลเอนต์ ชื่อที่แสดง และข้อมูลเมตาการเชื่อมต่อ Gateway~/.openclaw/state/openclaw.sqlite(device_identities, คีย์primary): คู่คีย์อุปกรณ์ที่ลงนามและ ID อุปกรณ์เชิงการเข้ารหัสที่ได้มา~/.openclaw/identity/device-auth.json: โทเค็นการตรวจสอบสิทธิ์ของอุปกรณ์ที่จับคู่ ซึ่งจัดเก็บตาม ID อุปกรณ์เชิงการเข้ารหัสและบทบาท
สำหรับ Node ที่ลงนาม Gateway จะใช้ ID อุปกรณ์เชิงการเข้ารหัสสำหรับการจับคู่และ
การกำหนดเส้นทาง Node ส่วน ID อินสแตนซ์ไคลเอนต์เป็นเพียงข้อมูลเมตาการเชื่อมต่อ ดังนั้นการเปลี่ยน
--node-id หรือการย้าย node.json ที่เลิกใช้แล้วจะไม่รีเซ็ตการจับคู่ ดู
สถานะข้อมูลประจำตัวและการจับคู่ สำหรับ
ขั้นตอนการเพิกถอนและจับคู่ใหม่ที่รองรับ รวมถึงหมายเหตุการอัปเกรด
ไฟล์ identity/device.json ที่เลิกใช้แล้วหรือการอ้างสิทธิ์โดย Doctor ที่ถูกขัดจังหวะจะขัดขวาง
การใช้ข้อมูลประจำตัวตามปกติ หยุดโฮสต์ Node แล้วเรียกใช้ openclaw doctor --fix โดย Doctor จะนำเข้า
คู่คีย์ที่ผ่านการตรวจสอบแล้วลงใน SQLite ก่อนลบไฟล์เก่า การย้ายข้อมูลประจำตัว
จะไม่เปลี่ยนแปลง identity/device-auth.json
เพิ่มคำสั่งลงในรายการที่อนุญาต
การอนุมัติ exec เป็นแบบ ต่อโฮสต์ Node เพิ่มรายการที่อนุญาตจาก Gateway:
openclaw approvals allowlist add --node <id|name|ip> "/usr/bin/uname"openclaw approvals allowlist add --node <id|name|ip> "/usr/bin/sw_vers"การอนุมัติจะอยู่บนโฮสต์ Node ที่ ~/.openclaw/exec-approvals.json
กำหนดให้ exec ใช้ Node
กำหนดค่าเริ่มต้น (การกำหนดค่า Gateway):
openclaw config set tools.exec.host nodeopenclaw config set tools.exec.security allowlistopenclaw config set tools.exec.node "<id-or-name>"หรือกำหนดต่อเซสชัน:
/exec host=node security=allowlist node=<id-or-name>เมื่อตั้งค่าแล้ว การเรียก exec ใดๆ ที่มี host=node จะทำงานบนโฮสต์ Node (โดยขึ้นอยู่กับรายการที่อนุญาต/การอนุมัติของ Node)
host=auto จะไม่เลือก Node เองโดยปริยาย แต่อนุญาตคำขอ host=node ที่ระบุอย่างชัดเจนต่อการเรียกจาก auto หากต้องการให้ exec บน Node เป็นค่าเริ่มต้นสำหรับเซสชัน ให้ตั้งค่า tools.exec.host=node หรือ /exec host=node ... อย่างชัดเจน
ที่เกี่ยวข้อง:
การอนุมานโมเดลภายในเครื่อง
Node แบบเดสก์ท็อปหรือเซิร์ฟเวอร์สามารถเปิดให้ใช้โมเดลที่รองรับการแชตจากเซิร์ฟเวอร์ Ollama ที่ทำงานอยู่บน Node นั้นได้ เอเจนต์ใช้เครื่องมือ node_inference ของ Plugin Ollama เพื่อค้นหาโมเดลที่ติดตั้งและเรียกใช้พรอมต์ที่มีขอบเขตจำกัดจากระยะไกล โดย Gateway ไม่จำเป็นต้องเข้าถึง Ollama ผ่านเครือข่ายโดยตรง ดู การอนุมาน Ollama ภายใน Node สำหรับการตั้งค่า การกรองโมเดล และคำสั่งตรวจสอบโดยตรง
เซสชันและทรานสคริปต์ Codex
Plugin อย่างเป็นทางการ codex สามารถเปิดให้ใช้เซสชัน Codex ที่ยังไม่ได้เก็บถาวรบน
โฮสต์ Node แบบไม่มีส่วนติดต่อหรือ Node macOS แบบเนทีฟได้ การลงทะเบียนแค็ตตาล็อกไม่ขึ้นอยู่กับ
supervision.enabled อีกต่อไป โดยตัวเลือกนั้นใช้ควบคุมเครื่องมือกำกับดูแลสำหรับเอเจนต์
ตั้งค่า sessionCatalog.enabled: false ในการกำหนดค่า Plugin Codex เพื่อปิดใช้งาน
แค็ตตาล็อกผู้ปฏิบัติงานและคำสั่งแค็ตตาล็อก Node ที่จับคู่ โดยไม่ปิดใช้งาน
ผู้ให้บริการหรือชุดเครื่องมือ
Plugin ยังคงต้องทำงานอยู่บนคอมพิวเตอร์ทั้งสองเครื่อง และการตั้งค่าของ Node ยังคงเป็น
ความยินยอมภายในเครื่อง การเปิดใช้งานเฉพาะ Gateway ไม่สามารถอ่านสถานะ Codex
ของคอมพิวเตอร์เครื่องอื่นได้
Node จะประกาศคำสั่งแบบอ่านอย่างเดียวที่มีการกำหนดเวอร์ชัน
codex.appServer.threads.list.v1 และ
codex.appServer.thread.turns.list.v1 โฮสต์ Node แบบเนทีฟที่มี
Codex CLI พร้อมใช้งานจะประกาศ codex.terminal.resume.v1 ด้วย อนุมัติการอัปเกรดการจับคู่ Node
เมื่อคำสั่งเหล่านั้นปรากฏเป็นครั้งแรก Gateway จะเรียกใช้คำสั่งผ่าน
นโยบาย Node ของ Plugin ตามปกติและแยกความล้มเหลวตามโฮสต์
แถวของ Node ที่จับคู่จะปรากฏเป็นกลุ่ม Codex ในแถบด้านข้างเซสชันตามปกติ
ภายในแต่ละโฮสต์ แถวจะจัดกลุ่มตามโฟลเดอร์โปรเจกต์โดยค่าเริ่มต้น ไดเรกทอรีทำงาน
ภายใต้ .claude/worktrees/<name> จะถูกรวมเข้ากับรีโพซิทอรีต้นทาง และกลุ่มโปรเจกต์
สามารถยุบได้เช่นเดียวกับส่วนอื่นๆ ในแถบด้านข้าง ใช้ไอคอนโฟลเดอร์ในส่วนหัวแค็ตตาล็อก
เพื่อแสดงกลุ่มโปรเจกต์แบบแบนหรือคืนค่าการจัดกลุ่ม การจัดกลุ่มเดียวกันนี้ใช้กับ
แค็ตตาล็อกเซสชัน Claude ด้วย
โดยค่าเริ่มต้น การเลือกแถวจะเปิดบานหน้าต่าง Chat ตามปกติและอ่านทรานสคริปต์ที่จัดเก็บไว้
ผ่านการเรียก thread/turns/list ที่มีขอบเขตจำกัด แบ่งหน้าโดยใช้เคอร์เซอร์
และฉายข้อมูลรายการแบบเต็ม ใช้เมนูของแถว ส่วนหัวตัวดู หรือการตั้งค่า เปิดเซสชัน Codex/Claude ใน เพื่อเริ่ม codex resume <thread-id> ในเทอร์มินัลของผู้ปฏิบัติงานบนคอมพิวเตอร์ที่เป็นเจ้าของเซสชัน พาธเทอร์มินัลของ Node ที่จับคู่เป็นรีเลย์ PTY ในรายการที่อนุญาตซึ่ง Plugin Codex เป็นเจ้าของ ไม่ใช่การดำเนินคำสั่งใดๆ บน Node ตามอำเภอใจ
รีเลย์ไม่ได้ให้สัญญาการทำงานต่อของชุดเครื่องมือ OpenClaw แบบเต็มและสัญญาความเป็นเจ้าของการเก็บถาวร ดังนั้น ดำเนินการต่อ และ เก็บถาวร จึงใช้ไม่ได้กับแถวระยะไกล บนคอมพิวเตอร์ Gateway แถวที่จัดเก็บและไม่มีการใช้งาน สามารถเริ่มสาขา Chat แยกต่างหากที่ล็อกกับโมเดลได้ ทั้งสองแบบสามารถเก็บถาวรได้เฉพาะ หลังจากผู้ปฏิบัติงานยืนยันว่าไม่มีไคลเอนต์ Codex อื่นกำลังใช้งานอยู่ โดยกิจกรรมสดของ แถวที่จัดเก็บยังคงไม่ทราบ แถวที่กำลังใช้งานไม่สามารถแยกสาขาหรือเก็บถาวรได้
ดู กำกับดูแลเซสชัน Codex สำหรับการตั้งค่า การแบ่งหน้า การทำงานต่อภายในเครื่อง และขอบเขตความปลอดภัยของข้อมูลเมตา
เซสชันและทรานสคริปต์ Claude
Plugin anthropic ที่รวมมาให้จะค้นหาเซสชัน Claude CLI และ Claude
Desktop ที่ยังไม่ได้เก็บถาวรบน Gateway และ Node ที่จับคู่โดยค่าเริ่มต้น ตั้งค่า
plugins.entries.anthropic.config.sessionCatalog.enabled: false เพื่อปิดใช้งาน
แค็ตตาล็อกผู้ปฏิบัติงานและคำสั่งแค็ตตาล็อก Node ที่จับคู่ โดยไม่ปิดใช้งานโมเดล Anthropic
หรือแบ็กเอนด์ Claude CLI
Node แอป macOS ระยะไกลจะประกาศ
anthropic.claude.sessions.list.v1 และ anthropic.claude.sessions.read.v1
เมื่อเปิดใช้งาน Plugin Anthropic และมี ~/.claude/projects/ อยู่ อนุมัติ
การอัปเกรดการจับคู่ Node เมื่อคำสั่งเหล่านั้นปรากฏเป็นครั้งแรก
โฮสต์ Node แบบเนทีฟที่มี Claude CLI พร้อมใช้งานจะประกาศ
anthropic.claude.terminal.resume.v1 ด้วย แถว CLI และ Desktop ที่เข้าเกณฑ์สามารถเปิด
claude --resume <session-id> ในเทอร์มินัลของผู้ปฏิบัติงานบนโฮสต์ที่เป็นเจ้าของ
การดำเนินการนี้เป็นการเข้าควบคุมเซสชันแบบเนทีฟ ซึ่งต่างจากการนำเข้าโดย OpenClaw ตรงที่ไม่ได้
แยกเซสชัน Claude ก่อน
แค็ตตาล็อกรวมระเบียนดัชนีโปรเจกต์ Claude CLI ที่ถูกต้องเข้ากับคำนำหน้าข้อมูลเมตา
ที่มีขอบเขตจำกัดจากไฟล์ JSONL sdk-cli ปัจจุบัน ข้อมูลเมตาภายในเครื่องของ Claude Desktop
ให้ชื่อ Desktop และสถานะการเก็บถาวร ข้อมูลเมตา Desktop มีลำดับความสำคัญเหนือกว่าเมื่อ
ทั้งสองแหล่งอ้างถึง ID เซสชัน Claude Code เดียวกัน ทรานสคริปต์ที่มีเฉพาะ CLI
ยังคงมองเห็นได้เนื่องจาก CLI ไม่มีแฟล็กการเก็บถาวร การอ่านทรานสคริปต์ใช้เคอร์เซอร์
ออฟเซ็ตไบต์แบบทึบและการอ่านไฟล์ย้อนหลังที่มีขอบเขตจำกัด ดังนั้นการเลือกเซสชันขนาดใหญ่
หรือโหลดหน้าที่เก่ากว่าจะไม่อ่านประวัติ JSONL ทั้งหมดลงในการตอบกลับ Gateway ครั้งเดียว
คำสั่งแสดงรายการและอ่านเป็นแบบอ่านอย่างเดียว โดยเปิดเผยข้อมูลเมตาแค็ตตาล็อกและเนื้อหา
ทรานสคริปต์ผ่านเมธอดทั่วไป sessions.catalog.list และ
sessions.catalog.read เท่านั้น ไปยังการเชื่อมต่อผู้ปฏิบัติงานที่ผ่านการตรวจสอบสิทธิ์และมี
operator.write แถว Claude CLI ภายใน Gateway สามารถนำเข้าจากตัวเขียนข้อความ Chat
ตามปกติได้ โดย OpenClaw จะนำเข้าประวัติที่มองเห็นซึ่งมีขอบเขตจำกัด ทำงานต่อด้วย
--fork-session ในเทิร์นแรก และไม่เปลี่ยนแปลงทรานสคริปต์ต้นทาง
โฮสต์ Node แบบไม่มีส่วนติดต่อสามารถเลือกใช้ขั้นตอนการทำงานต่อแบบเดียวกันได้:
{ nodeHost: { agentRuns: { claude: { enabled: true }, }, },}Node จะประกาศ agent.cli.claude.run.v1 เฉพาะเมื่อเปิดใช้งานการตั้งค่าภายใน Node นี้
และสามารถแปลงตำแหน่งไฟล์ปฏิบัติการ claude บน Node นั้นได้ Gateway ไม่สามารถ
เปิดใช้งานจากระยะไกลได้ คำสั่งนี้ยังต้องผ่านนโยบายการอนุมัติ exec ที่มีอยู่ของ Node ด้วย
เมื่อคำสั่ง Claude ทั้งสามถูกประกาศและได้รับอนุญาตจากนโยบายคำสั่ง Node ของ Gateway
แถว Claude CLI บน Node นั้นจะสามารถทำงานต่อได้ โดย OpenClaw จะนำเข้าประวัติที่มีขอบเขตจำกัด ผูก
เซสชันที่นำเข้ากับ Node และไดเรกทอรีทำงานที่แค็ตตาล็อกรายงาน และ
เรียกใช้แต่ละเทิร์นแบบครั้งเดียว claude -p ที่นั่น เทิร์นแรกยังคงใช้
--fork-session เพื่อคงทรานสคริปต์ต้นทางไว้
เทิร์นที่ทำงานบน Node จะใช้ค่าเริ่มต้น Claude ของ Node ใน v1 เทิร์นเหล่านี้จะไม่ได้รับ การกำหนดค่า MCP แบบลูปแบ็กของ Gateway หรือ Plugin Skills ของ Gateway ไม่สามารถเริ่มข้อมูลตั้งต้นใหม่จาก ทรานสคริปต์ Gateway และจะปฏิเสธไฟล์แนบและรูปภาพ แถว Claude Desktop และ Node ที่ไม่ประกาศคำสั่งเรียกใช้จะยังคงดูได้อย่างเดียว Node แอป macOS ยังไม่ประกาศคำสั่งนี้ ดังนั้นแถวของแอปจึงยังคงดูได้อย่างเดียว
ดู Anthropic: เซสชัน Claude ข้ามคอมพิวเตอร์ สำหรับพฤติกรรมของ Control UI และแหล่งจัดเก็บข้อมูล
เซสชัน OpenCode และ Pi
Plugin OpenCode และ ACPX ที่รวมมาให้ยังค้นหาแค็ตตาล็อกเซสชันแบบเนทีฟ
ที่อ่านอย่างเดียวบน Gateway และ Node ที่จับคู่ด้วย Node จะประกาศ
opencode.sessions.list.v1 / opencode.sessions.read.v1 เมื่อติดตั้ง CLI opencode
และประกาศ acpx.pi.sessions.list.v1 / acpx.pi.sessions.read.v1
เมื่อมีไดเรกทอรีเซสชันของ Pi อนุมัติการอัปเกรดการจับคู่ Node เมื่อคำสั่งใหม่
ปรากฏเป็นครั้งแรก เมื่อ CLI ที่ตรงกันพร้อมใช้งานด้วย Node จะเพิ่ม
opencode.terminal.resume.v1 หรือ acpx.pi.terminal.resume.v1 จากนั้นเมนูแถว
และส่วนหัวตัวดูที่มีอยู่จะสามารถเปิดเซสชันที่เลือกอีกครั้งในเทอร์มินัลที่เป็นเจ้าของ
ด้วย opencode --session <id> หรือ pi --session <id>
OpenCode อ่านผ่านพื้นผิว JSON/export ของ CLI อย่างเป็นทางการ ส่วน Pi อ่าน
ที่เก็บเซสชัน JSONL ที่จัดทำเอกสารไว้ รวมถึงไดเรกทอรีเซสชัน settings.json
ระดับโปรเจกต์และส่วนกลาง ตลอดจนการแทนที่ PI_CODING_AGENT_DIR และ
PI_CODING_AGENT_SESSION_DIR แค็ตตาล็อกทั้งสองเปิดใช้งานโดยค่าเริ่มต้น
ปิดได้ใน Web UI ภายใต้ Config > Plugins
การทำงานต่อในเทอร์มินัลใช้ไดเรกทอรีทำงานที่จัดเก็บไว้ของเซสชันและ รีเลย์ PTY แบบสองทิศทางในรายการที่อนุญาตเดียวกับ Codex และ Claude โดยไม่เปิดให้ ดำเนินคำสั่งใดๆ บน Node ตามอำเภอใจ
การอัปโหลดไฟล์ผ่านเทอร์มินัล
Control UI สามารถลากไฟล์ไปยังเทอร์มินัลของ Node ที่จับคู่ซึ่งเปิดอยู่ได้ โฮสต์ Node แบบเนทีฟจะประกาศคำสั่ง terminal.upload สำหรับผู้ดูแลระบบเท่านั้น โปรดอนุมัติการอัปเกรดการจับคู่เมื่อคำสั่งนี้ปรากฏเป็นครั้งแรก แต่ละไฟล์จำกัดไว้ที่ 16 MiB โดยจะจัดเตรียมไว้ในไดเรกทอรีชั่วคราวส่วนตัวบน Node นั้น และส่งคืนให้เทอร์มินัลเป็นพาธที่ใส่เครื่องหมายอัญประกาศสำหรับเชลล์โดยไม่เรียกใช้ไฟล์นั้น
การแทรกพาธรองรับ PowerShell, cmd.exe และเชลล์ POSIX ที่รู้จัก (sh, Bash, Dash, Ash, Ksh, Zsh และ Fish) รวมถึง Git Bash บน Windows ระบบจะปฏิเสธการแทนที่ด้วยเชลล์อื่น เนื่องจากไม่สามารถอนุมานกฎการใส่เครื่องหมายคำพูดของเชลล์เหล่านั้นได้อย่างปลอดภัย สำหรับพาธ WSL แบบเนทีฟ ให้เรียกใช้โฮสต์ Node ภายใน WSL นอกจากนี้ ระบบยังปฏิเสธพาธ cmd.exe ที่มี % หรือ ! เนื่องจากเชลล์ดังกล่าวจะขยายอักขระเหล่านั้นแม้จะอยู่ภายในเครื่องหมายคำพูดคู่
การเรียกใช้คำสั่ง
ระดับต่ำ (RPC ดิบ):
openclaw nodes invoke --node <idOrNameOrIp> --command canvas.eval --params '{"javaScript":"location.href"}'nodes invoke บล็อก system.run และ system.run.prepare; คำสั่งเหล่านั้นทำงานผ่านเครื่องมือ exec ที่มี host=node เท่านั้น (ดูด้านบน) มีตัวช่วยระดับสูงสำหรับเวิร์กโฟลว์ทั่วไปที่ใช้ "ส่งไฟล์แนบ MEDIA ให้เอเจนต์" (Canvas, กล้อง, หน้าจอ, ตำแหน่ง ตามด้านล่าง)
คำสั่ง Node แบบสตรีมมิงที่ทำงานเป็นเวลานานใช้เหตุการณ์ node.invoke.progress
แบบเพิ่มเติม แต่ละเหตุการณ์มี ID การเรียกใช้ หมายเลขลำดับที่เริ่มจากศูนย์ และส่วนข้อความ
UTF-8 ที่มีขนาดจำกัด โดย Gateway จะจัดลำดับส่วนต่างๆ ก่อนส่งให้
ผู้เรียก ส่วน node.invoke.result ที่มีอยู่ยังคงเป็นการตอบกลับสุดท้าย
รายการเดียว ผู้เรียกแบบสตรีมมิงสามารถกำหนดกำหนดเวลาหมดอายุเมื่อไม่มีกิจกรรม ซึ่งเริ่มนับเมื่อมี
เหตุการณ์ความคืบหน้าครั้งแรกและเริ่มนับใหม่หลังจากความคืบหน้าครั้งต่อๆ ไป ขณะที่ยังคง
การหมดเวลาแบบตายตัวแยกต่างหากของการเรียกใช้ระหว่างการอนุมัติและการดำเนินการ ผลลัพธ์ การหมดเวลา
แบบตายตัว การหมดเวลาเมื่อไม่มีกิจกรรม และการตัดการเชื่อมต่อของ Node ล้วนทำให้สถานะสตรีม
ที่รอดำเนินการถูกละทิ้ง การยกเลิกโดยผู้เรียกจะส่ง node.invoke.cancel; จากนั้นโฮสต์ Node
จะยุติแผนผังกระบวนการที่ตรงกัน คำสั่งแบบคำขอ/การตอบกลับที่มีอยู่ไม่มีการเปลี่ยนแปลง
นโยบายคำสั่ง
คำสั่ง Node ต้องผ่านเกตสองรายการก่อนจึงจะเรียกใช้ได้:
- Node ต้องประกาศคำสั่งในข้อมูลเมตาการเชื่อมต่อที่ผ่านการตรวจสอบสิทธิ์แล้ว (
connect.commands) - รายการอนุญาตของ Gateway ซึ่งได้มาจากแพลตฟอร์มและการอนุมัติต้องมีคำสั่งที่ประกาศไว้
รายการอนุญาตเริ่มต้นตามแพลตฟอร์ม (ก่อนค่าเริ่มต้นของ Plugin และการแทนที่ด้วย allowCommands/denyCommands):
| แพลตฟอร์ม | คำสั่งที่อนุญาตโดยค่าเริ่มต้น |
|---|---|
| iOS | camera.list, location.get, device.info, device.status, contacts.search, calendar.events, reminders.list, photos.latest, motion.activity, motion.pedometer, system.notify |
| watchOS | device.info, device.status, system.notify |
| Android | camera.list, location.get, notifications.list, notifications.actions, system.notify, device.info, device.status, device.permissions, device.health, device.apps, contacts.search, calendar.events, callLog.search, reminders.list, photos.latest, motion.activity, motion.pedometer |
| macOS | camera.list, location.get, device.info, device.status, device.apps, contacts.search, calendar.events, reminders.list, photos.latest, motion.activity, motion.pedometer, system.notify |
| Windows | camera.list, location.get, device.info, device.status, system.notify |
| Linux | system.notify (คำสั่งโฮสต์ Node เช่น system.run ต้องผ่านการอนุมัติ ดูด้านล่าง) |
แถวเหล่านี้อธิบายเพดานนโยบายของ Gateway ไม่ใช่คำสั่งที่แอป Node ทุกแอปนำไปใช้ คำสั่งจะใช้งานได้ก็ต่อเมื่อ Node ที่เชื่อมต่อประกาศคำสั่งนั้นด้วย โดยเฉพาะอย่างยิ่ง แอป macOS ปัจจุบันไม่ได้ประกาศกลุ่มคำสั่งเกี่ยวกับอุปกรณ์และข้อมูลส่วนบุคคลที่แสดงในแถวนโยบาย macOS
คำสั่ง canvas.* (canvas.present, canvas.hide, canvas.navigate, canvas.eval, canvas.snapshot, canvas.a2ui.*) เป็นค่าเริ่มต้นของ Plugin บน iOS, Android, macOS, Windows, Linux และแพลตฟอร์มที่ไม่รู้จัก Node บน Linux จะประกาศคำสั่งเหล่านี้เฉพาะเมื่อมีซ็อกเก็ต Canvas ภายในเครื่องของแอปเดสก์ท็อป คำสั่ง Canvas ทั้งหมดบน iOS ถูกจำกัดให้ใช้ได้เฉพาะขณะอยู่เบื้องหน้า
talk.ptt.start, talk.ptt.stop, talk.ptt.cancel และ talk.ptt.once ได้รับอนุญาตโดยค่าเริ่มต้นสำหรับ Node ใดๆ ที่โฆษณาความสามารถ talk หรือประกาศคำสั่ง talk.* โดยไม่ขึ้นกับป้ายกำกับแพลตฟอร์ม
คำสั่งโฮสต์เดสก์ท็อป (system.run, system.run.prepare, system.which, browser.proxy, mcp.tools.call.v1 และ screen.snapshot บน macOS/Windows) ไม่ได้เป็นส่วนหนึ่งของตารางค่าเริ่มต้นแบบคงที่ของแพลตฟอร์มด้านบน คำสั่งเหล่านี้จะพร้อมใช้งานเมื่อผู้ดำเนินการอนุมัติคำขอจับคู่ที่ประกาศคำสั่งเหล่านี้แล้ว หลังจากนั้นชุดคำสั่งที่ได้รับอนุมัติของ Node จะคงคำสั่งเหล่านี้ไว้เมื่อเชื่อมต่อใหม่
คำสั่งที่อันตรายหรือเกี่ยวข้องกับความเป็นส่วนตัวสูงยังคงต้องเลือกเข้าร่วมอย่างชัดแจ้งด้วย gateway.nodes.allowCommands แม้ว่า Node จะประกาศคำสั่งเหล่านั้นก็ตาม: camera.snap, camera.clip, screen.record, computer.act, contacts.add, calendar.add, reminders.add, health.summary, sms.send, sms.search ทั้งนี้ gateway.nodes.denyCommands มีผลเหนือกว่าค่าเริ่มต้นและรายการเพิ่มเติมในรายการอนุญาตเสมอ โปรดดู ข้อมูลสรุป HealthKit สำหรับเกตความยินยอมบน iPhone และ การใช้คอมพิวเตอร์ สำหรับเกตเพิ่มเติมเกี่ยวกับ macOS นโยบายเครื่องมือ และการเตรียมพร้อมสำหรับอินพุตเดสก์ท็อป
คำสั่ง Node ที่ Plugin เป็นเจ้าของสามารถเพิ่มนโยบายการเรียกใช้ Node ของ Gateway ได้ นโยบายดังกล่าวทำงานหลังการตรวจสอบรายการอนุญาตและก่อนส่งต่อไปยัง Node ดังนั้น node.invoke แบบดิบ ตัวช่วย CLI และเครื่องมือเฉพาะของเอเจนต์จึงใช้ขอบเขตสิทธิ์ของ Plugin เดียวกัน คำสั่ง Node ของ Plugin ที่เป็นอันตรายยังคงต้องเลือกเข้าร่วมอย่างชัดแจ้งผ่าน gateway.nodes.allowCommands
หลังจาก Node เปลี่ยนรายการคำสั่งที่ประกาศ ให้ปฏิเสธการจับคู่อุปกรณ์เดิมและอนุมัติคำขอใหม่ เพื่อให้ Gateway จัดเก็บสแนปช็อตคำสั่งที่อัปเดตแล้ว
การกำหนดค่า (openclaw.json)
การตั้งค่าที่เกี่ยวข้องกับ Node อยู่ภายใต้ gateway.nodes และ tools.exec:
{ gateway: { nodes: { // อนุมัติการจับคู่ Node ครั้งแรกจากเครือข่ายที่เชื่อถือโดยอัตโนมัติ (รายการ CIDR) // ปิดใช้งานเมื่อไม่ได้ตั้งค่า ใช้เฉพาะกับคำขอ role:node ครั้งแรก // ที่ไม่ขอขอบเขตใดๆ และจะไม่อนุมัติการอัปเกรดโดยอัตโนมัติ pairing: { autoApproveCidrs: ["192.168.1.0/24"], // การอนุมัติอัตโนมัติที่ตรวจสอบผ่าน SSH (ค่าเริ่มต้น: เปิดใช้งาน) อนุมัติการจับคู่ // Node ครั้งแรกเมื่อคีย์อุปกรณ์ที่อ่านกลับผ่าน SSH ตรงกันทุกประการ sshVerify: true, }, // เชื่อถือเครื่องมือ Plugin ที่เอเจนต์มองเห็นซึ่งเผยแพร่โดย Node ที่จับคู่แล้ว (ค่าเริ่มต้น: true) pluginTools: { enabled: true, }, // เลือกเข้าร่วมเพื่อใช้คำสั่ง Node ที่อันตราย/เกี่ยวข้องกับความเป็นส่วนตัวสูง (camera.snap เป็นต้น) allowCommands: ["camera.snap", "screen.record"], // บล็อกชื่อคำสั่งที่ตรงกันทุกประการ แม้ว่าค่าเริ่มต้นหรือ allowCommands จะรวมคำสั่งเหล่านั้นไว้ denyCommands: ["camera.clip"], }, }, tools: { exec: { // โฮสต์ exec เริ่มต้น: "node" จะส่งการเรียก exec ทั้งหมดไปยัง Node ที่จับคู่แล้ว host: "node", // โหมดความปลอดภัยสำหรับ exec บน Node: อนุญาตเฉพาะคำสั่งที่ได้รับอนุมัติ/อยู่ในรายการอนุญาต security: "allowlist", // ตรึง exec ไว้กับ Node เฉพาะ (ID หรือชื่อ) ไม่ต้องระบุเพื่ออนุญาตให้ใช้ Node ใดก็ได้ node: "build-node", }, },}ใช้ชื่อคำสั่ง Node ที่ตรงกันทุกประการ denyCommands จะนำคำสั่งออก แม้ว่าค่าเริ่มต้นของแพลตฟอร์มหรือรายการ allowCommands จะอนุญาตไว้ก็ตาม โดยค่าเริ่มต้น Node ที่จับคู่แล้วอาจเผยแพร่ตัวอธิบายเครื่องมือ Plugin ที่เอเจนต์มองเห็นได้ แต่คำสั่งของตัวอธิบายแต่ละรายการยังคงต้องอยู่ในพื้นผิวคำสั่งที่ได้รับอนุมัติของ Node ตั้งค่า gateway.nodes.pluginTools.enabled: false เพื่อเพิกเฉยต่อตัวอธิบายดังกล่าวทั้งหมด โปรดดู ข้อมูลอ้างอิงการกำหนดค่า Gateway สำหรับรายละเอียดฟิลด์การจับคู่ Node และนโยบายคำสั่งของ Gateway
การแทนที่ Node สำหรับ exec แยกตามเอเจนต์:
{ agents: { list: [ { id: "main", tools: { exec: { node: "build-node" } }, }, ], },}ภาพหน้าจอ (สแนปช็อต Canvas)
หาก Node กำลังแสดง Canvas (WebView) canvas.snapshot จะส่งคืน { format, base64 }
ตัวช่วย CLI (เขียนลงไฟล์ชั่วคราวและพิมพ์พาธที่บันทึกไว้):
openclaw nodes canvas snapshot --node <idOrNameOrIp> --format pngopenclaw nodes canvas snapshot --node <idOrNameOrIp> --format jpg --max-width 1200 --quality 0.9การควบคุม Canvas
openclaw nodes canvas present --node <idOrNameOrIp> --target https://example.comopenclaw nodes canvas hide --node <idOrNameOrIp>openclaw nodes canvas navigate https://example.com --node <idOrNameOrIp>openclaw nodes canvas eval --node <idOrNameOrIp> --js "document.title"หมายเหตุ:
canvas presentยอมรับ URL หรือพาธไฟล์ภายในเครื่อง (--target) บน Node ที่รองรับพาธภายในเครื่อง รวมถึง--x/--y/--width/--heightซึ่งเป็นตัวเลือกสำหรับการจัดตำแหน่ง Canvas บน Linux ยอมรับ URL แบบ HTTP(S) หรือตัวเรนเดอร์ A2UI ที่รวมมาให้canvas evalยอมรับ JS แบบอินไลน์ (--js) หรืออาร์กิวเมนต์ตามตำแหน่ง
A2UI (Canvas)
openclaw nodes canvas a2ui push --node <idOrNameOrIp> --text "Hello"openclaw nodes canvas a2ui push --node <idOrNameOrIp> --jsonl ./payload.jsonlopenclaw nodes canvas a2ui reset --node <idOrNameOrIp>หมายเหตุ:
- Node บนอุปกรณ์เคลื่อนที่และเดสก์ท็อป Linux ใช้หน้า A2UI ที่รวมมาให้และแอปเป็นเจ้าของสำหรับการเรนเดอร์ที่รองรับการดำเนินการ
- รองรับเฉพาะ A2UI v0.8 JSONL (ระบบจะปฏิเสธ v0.9/createSurface)
- iOS และ Android เรนเดอร์หน้า Gateway Canvas ระยะไกล แต่การดำเนินการของปุ่ม A2UI จะถูกส่งจากหน้า A2UI ที่รวมมาให้และแอปเป็นเจ้าของเท่านั้น หน้า A2UI แบบ HTTP/HTTPS ที่โฮสต์โดย Gateway บนไคลเอ็นต์อุปกรณ์เคลื่อนที่เหล่านั้นใช้สำหรับการเรนเดอร์เท่านั้น
- macOS สามารถส่งการดำเนินการจากหน้า Gateway A2UI ที่จำกัดขอบเขตตามความสามารถและแอปเลือกไว้โดยตรง หน้า HTTP/HTTPS อื่นๆ ยังคงใช้สำหรับการเรนเดอร์เท่านั้น
- Linux ส่งการดำเนินการจากหน้า A2UI ที่รวมมาให้เท่านั้น หน้า HTTP/HTTPS อื่นๆ ยังคงใช้สำหรับการเรนเดอร์เท่านั้น และ Node บน Linux แบบไม่มีส่วนติดต่อซึ่งไม่มีแอปเดสก์ท็อปจะไม่โฆษณา Canvas
รูปภาพและวิดีโอ (กล้องของ Node)
รูปภาพ (jpg):
openclaw nodes camera list --node <idOrNameOrIp>openclaw nodes camera snap --node <idOrNameOrIp> # ค่าเริ่มต้น: กล้องทั้งสองด้าน (MEDIA 2 บรรทัด)openclaw nodes camera snap --node <idOrNameOrIp> --facing frontopenclaw nodes camera snap --node <idOrNameOrIp> --device-id <id> --max-width 1200 --quality 0.9 --delay-ms 2000คลิปวิดีโอ (mp4):
openclaw nodes camera clip --node <idOrNameOrIp> --duration 10sopenclaw nodes camera clip --node <idOrNameOrIp> --duration 3000 --no-audioหมายเหตุ:
- Node ต้องอยู่ใน เบื้องหน้า สำหรับ
canvas.*และcamera.*(การเรียกในเบื้องหลังจะส่งคืนNODE_BACKGROUND_UNAVAILABLE) - Node จำกัดระยะเวลาคลิปเพื่อควบคุมขนาดเพย์โหลด base64 ให้จัดการได้ (ดูขีดจำกัดที่แน่นอนของแต่ละแพลตฟอร์มที่ การจับภาพจากกล้อง) เครื่องมือเอเจนต์
nodesยังจำกัดค่าdurationMsที่ร้องขอไว้ที่ 300000 (5 นาที) ก่อนส่งต่อการเรียก โดยตัว Node เองจะบังคับใช้ขีดจำกัดที่เข้มงวดกว่า - Android จะแจ้งขอสิทธิ์
CAMERA/RECORD_AUDIOเมื่อทำได้ หากถูกปฏิเสธสิทธิ์ การดำเนินการจะล้มเหลวพร้อม*_PERMISSION_REQUIRED
การบันทึกหน้าจอ (Node)
Node ที่รองรับจะเปิดให้ใช้ screen.record (mp4) ตัวอย่าง:
openclaw nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10openclaw nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10 --no-audioหมายเหตุ:
- ความพร้อมใช้งานของ
screen.recordขึ้นอยู่กับแพลตฟอร์มของ Node - เครื่องมือเอเจนต์
nodesจำกัดค่าdurationMsที่ร้องขอไว้ที่ 300000 (5 นาที) โดย Node อาจบังคับใช้ขีดจำกัดที่เข้มงวดกว่าเพื่อจำกัดขนาดเพย์โหลดที่ส่งคืน --no-audioปิดการจับเสียงจากไมโครโฟนบนแพลตฟอร์มที่รองรับ- ใช้
--screen <index>เพื่อเลือกจอแสดงผลเมื่อมีหลายหน้าจอ (0 = จอหลัก)
ตำแหน่งที่ตั้ง (Node)
Node จะเปิดให้ใช้ location.get เมื่อเปิดใช้งานตำแหน่งที่ตั้งในการตั้งค่า
ตัวช่วย CLI:
openclaw nodes location get --node <idOrNameOrIp>openclaw nodes location get --node <idOrNameOrIp> --accuracy precise --max-age 15000 --location-timeout 10000หมายเหตุ:
- ตำแหน่งที่ตั้ง ปิดอยู่โดยค่าเริ่มต้น
- "Always" ต้องใช้สิทธิ์จากระบบ การดึงข้อมูลในเบื้องหลังจะดำเนินการเท่าที่ทำได้
- การตอบกลับประกอบด้วยละติจูด/ลองจิจูด ความแม่นยำ (เมตร) และการประทับเวลา
- รูปแบบพารามิเตอร์/การตอบกลับและรหัสข้อผิดพลาดทั้งหมด: คำสั่งตำแหน่งที่ตั้ง
SMS (Node Android)
Node Android สามารถเปิดให้ใช้ sms.send และ sms.search เมื่อผู้ใช้ให้สิทธิ์ SMS และอุปกรณ์รองรับระบบโทรศัพท์ ทั้งสองคำสั่งมีสถานะอันตรายโดยค่าเริ่มต้น ผู้ดูแล Gateway ต้องเพิ่มคำสั่งเหล่านี้ลงใน gateway.nodes.allowCommands ด้วยจึงจะเรียกใช้ได้ (ดู นโยบายคำสั่ง)
สำหรับการค้นหา SMS แบบอ่านอย่างเดียว ให้เลือกเข้าร่วมอย่างชัดเจนใน openclaw.json:
{ gateway: { nodes: { allowCommands: ["sms.search"], }, },}เพิ่ม sms.send แยกต่างหากเฉพาะเมื่อ Node ควรส่งข้อความได้ด้วย สิทธิ์ของ Android และการอนุญาตคำสั่งของ Gateway เป็นอิสระจากกัน การให้สิทธิ์บนโทรศัพท์จะไม่แก้ไขนโยบายของ Gateway
การเรียกใช้ระดับล่าง:
openclaw nodes invoke --node <idOrNameOrIp> --command sms.send --params '{"to":"+15555550123","message":"Hello from OpenClaw"}'หมายเหตุ:
- อาจประกาศ
sms.searchก่อนให้สิทธิ์READ_SMSเพื่อให้การเรียกใช้สามารถส่งคืนข้อมูลวินิจฉัยสิทธิ์ได้ แต่การอ่านข้อความยังคงต้องใช้สิทธิ์ Android ดังกล่าว - อุปกรณ์ที่ใช้ได้เฉพาะ Wi-Fi และไม่มีระบบโทรศัพท์จะไม่ประกาศ
sms.send - ข้อผิดพลาด
requires explicit gateway.nodes.allowCommands opt-inหมายความว่าโทรศัพท์ประกาศคำสั่งแล้ว แต่ผู้ดูแล Gateway ยังไม่ได้อนุญาต
คำสั่งข้อมูลอุปกรณ์และข้อมูลส่วนบุคคล
Node iOS และ Android ประกาศคำสั่งข้อมูลแบบอ่านอย่างเดียวหลายรายการโดยค่าเริ่มต้น (ดูตาราง นโยบายคำสั่ง) นอกจากนี้ Android ยังเปิดให้ใช้ชุดคำสั่งขนาดใหญ่กว่าซึ่งควบคุมด้วยการตั้งค่าภายในแอปของตนเอง โฮสต์ Node TypeScript บน macOS หรือ Mac แบบไม่มีส่วนติดต่อผู้ใช้จะประกาศ device.apps หลังจากผู้ดูแลเปิดใช้การแชร์แอปที่ติดตั้งด้วย --share-installed-apps เท่านั้น
กลุ่มคำสั่งที่ใช้ได้:
device.status,device.info— iOS, Android, Windowsdevice.permissions,device.health— เฉพาะ Androiddevice.apps— Node Android, macOS และ Mac แบบไม่มีส่วนติดต่อผู้ใช้ Android ต้องเปิดการแชร์แอปที่ติดตั้งใน Settings และส่งคืนแอปที่มองเห็นได้ในตัวเรียกใช้งานโดยค่าเริ่มต้น โฮสต์ Node TypeScript จะปิดการแชร์ไว้โดยค่าเริ่มต้นและรองรับquery,limitและincludeSystemโดยผลลัพธ์บน macOS ประกอบด้วยlabel,bundleId,pathและsystemnotifications.list,notifications.actions— เฉพาะ Androidphotos.latest— iOS, Androidcontacts.search— iOS, Android (อ่านอย่างเดียวโดยค่าเริ่มต้น);contacts.addเป็นคำสั่งอันตรายและต้องใช้gateway.nodes.allowCommandscalendar.events— iOS, Android (อ่านอย่างเดียวโดยค่าเริ่มต้น);calendar.addเป็นคำสั่งอันตรายและต้องใช้gateway.nodes.allowCommandsreminders.list— iOS, Android (อ่านอย่างเดียวโดยค่าเริ่มต้น);reminders.addเป็นคำสั่งอันตรายและต้องใช้gateway.nodes.allowCommandscallLog.search— เฉพาะ Androidmotion.activity,motion.pedometer— iOS, Android; จำกัดตามความสามารถของเซ็นเซอร์ที่มีอยู่
ตัวอย่างการเรียกใช้:
openclaw nodes invoke --node <idOrNameOrIp> --command device.status --params '{}'openclaw nodes invoke --node <idOrNameOrIp> --command device.apps --params '{"limit":10}'openclaw nodes invoke --node <idOrNameOrIp> --command notifications.list --params '{}'openclaw nodes invoke --node <idOrNameOrIp> --command photos.latest --params '{"limit":1}'คำสั่งระบบ (โฮสต์ Node / Node Mac)
Node macOS เปิดให้ใช้ system.run, system.which, system.notify และ system.execApprovals.get/set โฮสต์ Node แบบไม่มีส่วนติดต่อผู้ใช้เปิดให้ใช้ system.run.prepare, system.run, system.which และ system.execApprovals.get/set
ตัวอย่าง:
openclaw nodes notify --node <idOrNameOrIp> --title "Ping" --body "Gateway ready"openclaw nodes invoke --node <idOrNameOrIp> --command system.which --params '{"bins":["git"]}'หมายเหตุ:
system.runส่งคืน stdout/stderr/รหัสออกในเพย์โหลด- ขณะนี้การดำเนินการเชลล์จะผ่านเครื่องมือ
execพร้อมhost=node; ส่วนnodesยังคงเป็นพื้นผิว RPC โดยตรงสำหรับคำสั่ง Node ที่ระบุอย่างชัดเจน nodes invokeไม่เปิดให้ใช้system.runหรือsystem.run.prepare; ทั้งสองรายการยังคงอยู่เฉพาะบนเส้นทาง exec- เส้นทาง exec จะเตรียม
systemRunPlanมาตรฐานก่อนการอนุมัติ เมื่อได้รับการอนุมัติแล้ว Gateway จะส่งต่อแผนที่จัดเก็บไว้นั้น ไม่ใช่ฟิลด์คำสั่ง/cwd/เซสชันที่ผู้เรียกแก้ไขในภายหลัง system.notifyปฏิบัติตามสถานะสิทธิ์การแจ้งเตือนในแอป macOS และรองรับ--priority <passive|active|timeSensitive>กับ--delivery <system|overlay|auto>- ข้อมูลเมตา
platform/deviceFamilyของ Node ที่ไม่รู้จักจะใช้รายการอนุญาตเริ่มต้นแบบรัดกุม ซึ่งไม่รวมsystem.runและsystem.whichหากตั้งใจต้องใช้คำสั่งเหล่านั้นสำหรับแพลตฟอร์มที่ไม่รู้จัก ให้เพิ่มอย่างชัดเจนผ่านgateway.nodes.allowCommands system.runรองรับ--cwd,--env KEY=VAL,--command-timeoutและ--needs-screen-recording- สำหรับตัวห่อหุ้มเชลล์ (
bash|sh|zsh ... -c/-lc) ค่า--envที่กำหนดขอบเขตตามคำขอจะถูกลดเหลือรายการอนุญาตที่ระบุชัดเจน (TERM,LANG,LC_*,COLORTERM,NO_COLOR,FORCE_COLOR) - สำหรับการตัดสินใจอนุญาตเสมอในโหมดรายการอนุญาต ตัวห่อหุ้มการส่งต่อที่รู้จัก (
env,flock,nice,nohup,stdbuf,timeout) จะบันทึกพาธของไฟล์ปฏิบัติการภายในแทนพาธของตัวห่อหุ้ม หากไม่สามารถแกะตัวห่อหุ้มได้อย่างปลอดภัย ระบบจะไม่บันทึกรายการอนุญาตโดยอัตโนมัติ - บนโฮสต์ Node Windows ในโหมดรายการอนุญาต การเรียกใช้ผ่านตัวห่อหุ้มเชลล์ด้วย
cmd.exe /cต้องได้รับการอนุมัติ (รายการในรายการอนุญาตเพียงอย่างเดียวจะไม่อนุญาตรูปแบบตัวห่อหุ้มโดยอัตโนมัติ) - โฮสต์ Node จะเพิกเฉยต่อการแทนที่
PATHใน--envและลบตัวแปรเริ่มต้นของอินเทอร์พรีเตอร์/เชลล์ชุดใหญ่ที่มีการบำรุงรักษาอยู่ (ตัวอย่างเช่นNODE_OPTIONS,PYTHONPATH,BASH_ENV,DYLD_*,LD_*) ก่อนเรียกใช้คำสั่ง หากต้องการเพิ่มรายการ PATH ให้กำหนดค่าสภาพแวดล้อมของบริการโฮสต์ Node (หรือติดตั้งเครื่องมือในตำแหน่งมาตรฐาน) แทนการส่งPATHผ่าน--env - ในโหมด Node บน macOS การใช้งาน
system.runจะถูกควบคุมด้วยการอนุมัติ exec ในแอป macOS (Settings → Exec approvals) Ask/allowlist/full ทำงานเหมือนกับโฮสต์ Node แบบไม่มีส่วนติดต่อผู้ใช้ ส่วนพรอมต์ที่ถูกปฏิเสธจะส่งคืนSYSTEM_RUN_DENIED - บนโฮสต์ Node แบบไม่มีส่วนติดต่อผู้ใช้ การใช้งาน
system.runจะถูกควบคุมด้วยการอนุมัติ exec (~/.openclaw/exec-approvals.json); สำหรับ macOS โดยเฉพาะ โปรดดูตัวแปรสภาพแวดล้อมการกำหนดเส้นทางโฮสต์ exec ใน โฮสต์ Node แบบไม่มีส่วนติดต่อผู้ใช้ ด้านล่าง
การผูก Node สำหรับ exec
เมื่อมี Node หลายรายการ สามารถผูก exec กับ Node ที่ระบุได้ การตั้งค่านี้กำหนด Node เริ่มต้นสำหรับ exec host=node (และสามารถแทนที่แยกตามเอเจนต์ได้)
ค่าเริ่มต้นส่วนกลาง:
openclaw config set tools.exec.node "node-id-or-name"การแทนที่แยกตามเอเจนต์:
openclaw config get agents.listopenclaw config set 'agents.list[0].tools.exec.node' "node-id-or-name"ยกเลิกการตั้งค่าเพื่ออนุญาต Node ใดก็ได้:
openclaw config unset tools.exec.nodeopenclaw config unset 'agents.list[0].tools.exec.node'แผนผังสิทธิ์
Node อาจมีแผนผัง permissions ใน node.list / node.describe โดยใช้ชื่อสิทธิ์เป็นคีย์ (เช่น screenRecording, accessibility, location) และใช้ค่าบูลีน (true = ได้รับสิทธิ์แล้ว)
โฮสต์ Node แบบไม่มีส่วนติดต่อผู้ใช้ (ข้ามแพลตฟอร์ม)
OpenClaw สามารถเรียกใช้ โฮสต์ Node แบบไม่มีส่วนติดต่อผู้ใช้ (ไม่มี UI) ซึ่งเชื่อมต่อกับ Gateway WebSocket และเปิดให้ใช้ system.run / system.which ซึ่งมีประโยชน์บน Linux/Windows หรือสำหรับเรียกใช้ Node ขนาดเล็กควบคู่กับเซิร์ฟเวอร์
เริ่มการทำงาน:
openclaw node run --host <gateway-host> --port 18789หมายเหตุ:
- ยังคงต้องจับคู่ (Gateway จะแสดงพรอมต์จับคู่อุปกรณ์)
- ข้อมูลเมตาของอินสแตนซ์ไคลเอนต์ ข้อมูลประจำตัวอุปกรณ์ที่ลงนาม และการยืนยันตัวตนสำหรับการจับคู่ ใช้ระเบียนสถานะแยกกัน โปรดดู สถานะข้อมูลประจำตัวแบบไม่มีส่วนติดต่อผู้ใช้
- การอนุมัติ exec ถูกบังคับใช้ภายในเครื่องผ่าน
~/.openclaw/exec-approvals.json(ดู การอนุมัติ exec) - บน macOS โฮสต์ Node แบบไม่มีส่วนติดต่อผู้ใช้จะดำเนินการ
system.runภายในเครื่องโดยค่าเริ่มต้น ตั้งค่าOPENCLAW_NODE_EXEC_HOST=appเพื่อกำหนดเส้นทางsystem.runผ่านโฮสต์ exec ของแอปคู่หู และเพิ่มOPENCLAW_NODE_EXEC_FALLBACK=0เพื่อกำหนดให้ต้องใช้โฮสต์ของแอปและปฏิเสธการทำงานหากโฮสต์ไม่พร้อมใช้งาน - เพิ่ม
--tls/--tls-fingerprintเมื่อ Gateway WS ใช้ TLS
โหมด Node บน Mac
- แอปแถบเมนู macOS เชื่อมต่อกับเซิร์ฟเวอร์ Gateway WS ในฐานะ Node (ดังนั้น
openclaw nodes …จึงทำงานกับ Mac เครื่องนี้) - ในโหมดระยะไกล แอปจะเปิดอุโมงค์ SSH สำหรับพอร์ต Gateway และเชื่อมต่อกับ
localhost