macOS companion app
การควบคุมระยะไกล
โฟลว์นี้ทำให้แอป macOS ทำหน้าที่เป็นรีโมตคอนโทรลเต็มรูปแบบสำหรับ OpenClaw Gateway ที่ทำงานบนโฮสต์อื่น (เดสก์ท็อป/เซิร์ฟเวอร์) ได้ แอปสามารถเชื่อมต่อโดยตรงไปยัง URL ของ Gateway บน LAN/Tailnet ที่เชื่อถือได้ หรือจัดการอุโมงค์ SSH เมื่อ Gateway ระยะไกลเป็นแบบ loopback-only การตรวจสุขภาพ, การส่งต่อ Voice Wake และเว็บแชทใช้การกำหนดค่าระยะไกลเดียวกันจาก การตั้งค่า → ทั่วไป
โหมด
- ภายในเครื่อง (Mac เครื่องนี้): ทุกอย่างทำงานบนแล็ปท็อป ไม่มี SSH เกี่ยวข้อง
- ระยะไกลผ่าน SSH (ค่าเริ่มต้น): คำสั่ง OpenClaw จะถูกเรียกใช้บนโฮสต์ระยะไกล แอป Mac เปิดการเชื่อมต่อ SSH ด้วย
-o BatchModeพร้อม identity/key ที่คุณเลือกและการส่งต่อพอร์ตภายในเครื่อง - ระยะไกลโดยตรง (ws/wss): ไม่มีอุโมงค์ SSH แอป Mac เชื่อมต่อกับ URL ของ Gateway โดยตรง (เช่น ผ่าน LAN, Tailscale, Tailscale Serve หรือ reverse proxy HTTPS สาธารณะ)
ทรานสปอร์ตระยะไกล
โหมดระยะไกลรองรับทรานสปอร์ตสองแบบ:
- อุโมงค์ SSH (ค่าเริ่มต้น): ใช้
ssh -N -L ...เพื่อส่งต่อพอร์ต Gateway ไปยัง localhost Gateway จะเห็น IP ของ Node เป็น127.0.0.1เพราะอุโมงค์เป็น loopback - โดยตรง (ws/wss): เชื่อมต่อไปยัง URL ของ Gateway โดยตรง Gateway จะเห็น IP ไคลเอนต์จริง
ในโหมดอุโมงค์ SSH ชื่อโฮสต์ LAN/tailnet ที่ค้นพบจะถูกบันทึกเป็น
gateway.remote.sshTarget แอปจะคง gateway.remote.url ไว้ที่ปลายทางอุโมงค์ภายในเครื่อง
เช่น ws://127.0.0.1:18789 เพื่อให้ CLI, เว็บแชท และ
บริการโฮสต์ Node ภายในเครื่องทั้งหมดใช้ทรานสปอร์ต loopback ที่ปลอดภัยเดียวกัน
เมื่อการค้นพบคืนค่าทั้ง IP Tailnet ดิบและชื่อโฮสต์ที่เสถียร แอปจะเลือก
Tailscale MagicDNS หรือชื่อ LAN ก่อน เพื่อให้การเชื่อมต่อระยะไกลทนต่อการเปลี่ยนแปลงที่อยู่ได้ดีกว่า
หากพอร์ตอุโมงค์ภายในเครื่องต่างจากพอร์ต Gateway ระยะไกล ให้ตั้งค่า
gateway.remote.remotePort เป็นพอร์ตบนโฮสต์ระยะไกล
การทำงานอัตโนมัติของเบราว์เซอร์ในโหมดระยะไกลเป็นความรับผิดชอบของโฮสต์ Node ของ CLI ไม่ใช่
Node ของแอป macOS แบบเนทีฟ แอปจะเริ่มบริการโฮสต์ Node ที่ติดตั้งไว้เมื่อ
ทำได้ หากคุณต้องการควบคุมเบราว์เซอร์จาก Mac เครื่องนั้น ให้ติดตั้ง/เริ่มด้วย
openclaw node install ... และ openclaw node start (หรือเรียก
openclaw node run ... ใน foreground) แล้วกำหนดเป้าหมายไปยัง
Node ที่รองรับเบราว์เซอร์นั้น
ข้อกำหนดเบื้องต้นบนโฮสต์ระยะไกล
- ติดตั้ง Node + pnpm และ build/ติดตั้ง OpenClaw CLI (
pnpm install && pnpm build && pnpm link --global) - ตรวจสอบให้แน่ใจว่า
openclawอยู่ใน PATH สำหรับเชลล์แบบไม่โต้ตอบ (สร้าง symlink ไปที่/usr/local/binหรือ/opt/homebrew/binหากจำเป็น) - สำหรับทรานสปอร์ต SSH เท่านั้น: เปิด SSH พร้อมการยืนยันตัวตนด้วยคีย์ เราแนะนำ IP ของ Tailscale เพื่อให้เข้าถึงได้อย่างเสถียรเมื่อนอก LAN
การตั้งค่าแอป macOS
หากต้องการกำหนดค่าแอปล่วงหน้าโดยไม่ใช้โฟลว์ต้อนรับ:
openclaw-mac configure-remote \ --ssh-target user@gateway.local \ --local-port 18789 \ --remote-port 18789 \ --token "$OPENCLAW_GATEWAY_TOKEN"สำหรับ Gateway ที่เข้าถึงได้อยู่แล้วบน LAN หรือ Tailnet ที่เชื่อถือได้ ให้ข้าม SSH ทั้งหมด:
openclaw-mac configure-remote \ --direct-url ws://192.168.0.202:18789 \ --token "$OPENCLAW_GATEWAY_TOKEN"คำสั่งนี้เขียนการกำหนดค่าระยะไกล ทำเครื่องหมายว่า onboarding เสร็จสมบูรณ์ และให้แอปเป็นเจ้าของ ทรานสปอร์ตที่เลือกเมื่อเริ่มทำงาน
- เปิด การตั้งค่า → ทั่วไป
- ภายใต้ OpenClaw ทำงานที่ ให้เลือก ระยะไกล และตั้งค่า:
- ทรานสปอร์ต: อุโมงค์ SSH หรือ โดยตรง (ws/wss)
- เป้าหมาย SSH:
user@host(เลือกใส่:portได้)- หาก Gateway อยู่บน LAN เดียวกันและประกาศ Bonjour ให้เลือกจากรายการที่ค้นพบเพื่อเติมฟิลด์นี้โดยอัตโนมัติ
- URL ของ Gateway (เฉพาะแบบโดยตรง):
wss://gateway.example.ts.net(หรือws://...สำหรับภายในเครื่อง/LAN) - ไฟล์ identity (ขั้นสูง): พาธไปยังคีย์ของคุณ
- รากโปรเจกต์ (ขั้นสูง): พาธ checkout ระยะไกลที่ใช้สำหรับคำสั่ง
- พาธ CLI (ขั้นสูง): พาธทางเลือกไปยัง entrypoint/ไบนารี
openclawที่เรียกใช้ได้ (เติมอัตโนมัติเมื่อมีการประกาศ)
- กด ทดสอบระยะไกล ความสำเร็จหมายถึง
openclaw status --jsonระยะไกลทำงานถูกต้อง ความล้มเหลวมักหมายถึงปัญหา PATH/CLI; exit 127 หมายถึงไม่พบ CLI บนเครื่องระยะไกล - ตอนนี้การตรวจสุขภาพและเว็บแชทจะทำงานผ่านทรานสปอร์ตที่เลือกโดยอัตโนมัติ
เว็บแชท
- อุโมงค์ SSH: เว็บแชทเชื่อมต่อกับ Gateway ผ่านพอร์ตควบคุม WebSocket ที่ส่งต่อไว้ (ค่าเริ่มต้น 18789)
- โดยตรง (ws/wss): เว็บแชทเชื่อมต่อโดยตรงไปยัง URL ของ Gateway ที่กำหนดค่าไว้
- ไม่มีเซิร์ฟเวอร์ HTTP สำหรับ WebChat แยกต่างหากอีกต่อไป
สิทธิ์
- โฮสต์ระยะไกลต้องมีการอนุมัติ TCC แบบเดียวกับภายในเครื่อง (Automation, Accessibility, Screen Recording, Microphone, Speech Recognition, Notifications) เรียก onboarding บนเครื่องนั้นเพื่อให้สิทธิ์หนึ่งครั้ง
- Node ประกาศสถานะสิทธิ์ผ่าน
node.list/node.describeเพื่อให้เอเจนต์รู้ว่ามีอะไรพร้อมใช้งาน
หมายเหตุด้านความปลอดภัย
- ควรใช้การ bind แบบ loopback บนโฮสต์ระยะไกล แล้วเชื่อมต่อผ่าน SSH, Tailscale Serve หรือ URL โดยตรงของ Tailnet/LAN ที่เชื่อถือได้
- อุโมงค์ SSH ใช้การตรวจสอบ host-key แบบเข้มงวด ให้เชื่อถือ host key ก่อนเพื่อให้มีอยู่ใน
~/.ssh/known_hosts - หากคุณ bind Gateway กับอินเทอร์เฟซที่ไม่ใช่ loopback ต้องกำหนดให้ใช้การยืนยันตัวตน Gateway ที่ถูกต้อง: token, password หรือ reverse proxy ที่รับรู้ identity พร้อม
gateway.auth.mode: "trusted-proxy" - ดู ความปลอดภัย และ Tailscale
โฟลว์เข้าสู่ระบบ WhatsApp (ระยะไกล)
- เรียก
openclaw channels login --verboseบนโฮสต์ระยะไกล สแกน QR ด้วย WhatsApp บนโทรศัพท์ของคุณ - เรียก login ซ้ำบนโฮสต์นั้นหาก auth หมดอายุ การตรวจสุขภาพจะแสดงปัญหาการเชื่อมโยง
การแก้ปัญหา
- exit 127 / not found:
openclawไม่อยู่ใน PATH สำหรับเชลล์แบบ non-login เพิ่มลงใน/etc/paths, shell rc ของคุณ หรือสร้าง symlink ไปที่/usr/local/bin//opt/homebrew/bin - Health probe failed: ตรวจสอบการเข้าถึง SSH, PATH และว่า Baileys เข้าสู่ระบบแล้ว (
openclaw status --json) - เว็บแชทค้าง: ยืนยันว่า Gateway กำลังทำงานบนโฮสต์ระยะไกล และพอร์ตที่ส่งต่อตรงกับพอร์ต WS ของ Gateway; UI ต้องใช้การเชื่อมต่อ WS ที่สมบูรณ์
- IP ของ Node แสดงเป็น 127.0.0.1: เป็นพฤติกรรมที่คาดไว้กับอุโมงค์ SSH เปลี่ยน ทรานสปอร์ต เป็น โดยตรง (ws/wss) หากคุณต้องการให้ Gateway เห็น IP ไคลเอนต์จริง
- Dashboard ทำงานแต่ความสามารถของ Mac ออฟไลน์: หมายความว่าการเชื่อมต่อ operator/control ของแอปสมบูรณ์ แต่การเชื่อมต่อ Node คู่กันไม่ได้เชื่อมต่อหรือไม่มีพื้นผิวคำสั่ง เปิดส่วนอุปกรณ์ในแถบเมนูและตรวจสอบว่า Mac เป็น
paired · disconnectedหรือไม่ สำหรับ endpoint ของ Tailscale Serve แบบwss://*.ts.netแอปจะตรวจพบ TLS leaf pins แบบ legacy ที่ค้างหลังการหมุนเวียนใบรับรอง ล้าง pin ที่ค้างเมื่อ macOS เชื่อถือใบรับรองใหม่ และลองใหม่โดยอัตโนมัติ หากใบรับรองไม่ได้รับความเชื่อถือจากระบบหรือโฮสต์ไม่ใช่ชื่อ Tailscale Serve ให้ตั้งค่าgateway.remote.tlsFingerprintเป็นลายนิ้วมือใบรับรองที่คาดไว้ ตรวจสอบใบรับรอง หรือเปลี่ยนเป็น ระยะไกลผ่าน SSH - Voice Wake: trigger phrases จะถูกส่งต่อโดยอัตโนมัติในโหมดระยะไกล ไม่จำเป็นต้องมี forwarder แยกต่างหาก
เสียงแจ้งเตือน
เลือกเสียงต่อการแจ้งเตือนจากสคริปต์ด้วย openclaw และ node.invoke เช่น:
openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glassไม่มี toggle "เสียงเริ่มต้น" แบบ global ในแอปอีกต่อไป ผู้เรียกเลือกเสียง (หรือไม่เลือก) ต่อคำขอ