macOS companion app

การควบคุมระยะไกล

โฟลว์นี้ทำให้แอป macOS ทำหน้าที่เป็นรีโมตคอนโทรลเต็มรูปแบบสำหรับ OpenClaw gateway ที่ทำงานอยู่บนโฮสต์อื่น (เดสก์ท็อป/เซิร์ฟเวอร์) ได้ นี่คือฟีเจอร์ รีโมตผ่าน SSH (การรันแบบรีโมต) ของแอป ฟีเจอร์ทั้งหมด ไม่ว่าจะเป็นการตรวจสอบสุขภาพ การส่งต่อการปลุกด้วยเสียง และเว็บแชต จะใช้การกำหนดค่า SSH รีโมตเดียวกันจาก การตั้งค่า → ทั่วไป

โหมด

  • ภายในเครื่อง (Mac เครื่องนี้): ทุกอย่างทำงานบนแล็ปท็อป ไม่มี SSH เกี่ยวข้อง
  • รีโมตผ่าน SSH (ค่าเริ่มต้น): คำสั่ง OpenClaw จะถูกเรียกใช้บนโฮสต์รีโมต แอป Mac เปิดการเชื่อมต่อ SSH ด้วย -o BatchMode พร้อม identity/key ที่คุณเลือกและการส่งต่อพอร์ตภายในเครื่อง
  • รีโมตโดยตรง (ws/wss): ไม่มีอุโมงค์ SSH แอป Mac เชื่อมต่อกับ URL ของ gateway โดยตรง (เช่น ผ่าน 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 ไว้ที่ endpoint ของอุโมงค์ภายในเครื่อง เช่น ws://127.0.0.1:18789 เพื่อให้ CLI, เว็บแชต และ บริการ node-host ภายในเครื่องทั้งหมดใช้ทรานสปอร์ต loopback ที่ปลอดภัยเดียวกัน

การทำงานอัตโนมัติของเบราว์เซอร์ในโหมดรีโมตเป็นของโฮสต์ node ของ CLI ไม่ใช่ node ของแอป macOS แบบเนทีฟ แอปจะเริ่มบริการโฮสต์ node ที่ติดตั้งไว้เมื่อ เป็นไปได้ หากคุณต้องการควบคุมเบราว์เซอร์จาก Mac เครื่องนั้น ให้ติดตั้ง/เริ่มด้วย openclaw node install ... และ openclaw node start (หรือรัน openclaw node run ... ใน foreground) จากนั้นกำหนดเป้าหมายไปยัง node ที่รองรับเบราว์เซอร์นั้น

ข้อกำหนดเบื้องต้นบนโฮสต์รีโมต

  1. ติดตั้ง Node + pnpm และ build/ติดตั้ง OpenClaw CLI (pnpm install && pnpm build && pnpm link --global)
  2. ตรวจสอบให้แน่ใจว่า openclaw อยู่บน PATH สำหรับ shell แบบไม่โต้ตอบ (symlink ไปยัง /usr/local/bin หรือ /opt/homebrew/bin หากจำเป็น)
  3. เปิด SSH ด้วย key auth เราแนะนำ IP ของ Tailscale เพื่อให้เข้าถึงได้นิ่งนอก LAN

การตั้งค่าแอป macOS

  1. เปิด การตั้งค่า → ทั่วไป
  2. ใต้ OpenClaw ทำงานที่ ให้เลือก รีโมตผ่าน SSH และตั้งค่า:
    • ทรานสปอร์ต: อุโมงค์ SSH หรือ โดยตรง (ws/wss)
    • เป้าหมาย SSH: user@host (มี :port ได้ตามต้องการ)
      • หาก gateway อยู่บน LAN เดียวกันและประกาศ Bonjour ให้เลือกจากรายการที่ค้นพบเพื่อเติมช่องนี้อัตโนมัติ
    • URL ของ Gateway (เฉพาะโดยตรง): wss://gateway.example.ts.net (หรือ ws://... สำหรับภายในเครื่อง/LAN)
    • ไฟล์ identity (ขั้นสูง): พาธไปยัง key ของคุณ
    • รูทโปรเจกต์ (ขั้นสูง): พาธ checkout รีโมตที่ใช้สำหรับคำสั่ง
    • พาธ CLI (ขั้นสูง): พาธเสริมไปยัง entrypoint/binary openclaw ที่รันได้ (เติมอัตโนมัติเมื่อมีการประกาศ)
  3. กด ทดสอบรีโมต ความสำเร็จหมายความว่า openclaw status --json ฝั่งรีโมตรันได้ถูกต้อง ความล้มเหลวมักหมายถึงปัญหา PATH/CLI; exit 127 หมายความว่าพบ CLI บนรีโมตไม่ได้
  4. การตรวจสอบสุขภาพและเว็บแชตจะรันผ่านอุโมงค์ SSH นี้โดยอัตโนมัติ

เว็บแชต

  • อุโมงค์ 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 เพื่อให้ agent รู้ว่ามีอะไรพร้อมใช้งาน

หมายเหตุด้านความปลอดภัย

  • ควรใช้การ bind แบบ loopback บนโฮสต์รีโมตและเชื่อมต่อผ่าน SSH หรือ Tailscale
  • การทำอุโมงค์ SSH ใช้การตรวจสอบ host-key แบบเข้มงวด ให้ trust host key ก่อนเพื่อให้มีอยู่ใน ~/.ssh/known_hosts
  • หากคุณ bind Gateway กับอินเทอร์เฟซที่ไม่ใช่ loopback ให้กำหนดให้ต้องมี Gateway auth ที่ถูกต้อง: token, password หรือ reverse proxy ที่รับรู้ตัวตนด้วย gateway.auth.mode: "trusted-proxy"
  • ดู ความปลอดภัย และ Tailscale

โฟลว์เข้าสู่ระบบ WhatsApp (รีโมต)

  • รัน openclaw channels login --verbose บนโฮสต์รีโมต สแกน QR ด้วย WhatsApp บนโทรศัพท์ของคุณ
  • รันเข้าสู่ระบบใหม่บนโฮสต์นั้นหาก auth หมดอายุ การตรวจสอบสุขภาพจะแสดงปัญหาการเชื่อมโยง

การแก้ไขปัญหา

  • exit 127 / ไม่พบ: openclaw ไม่ได้อยู่บน PATH สำหรับ shell ที่ไม่ใช่ login เพิ่มลงใน /etc/paths, shell rc ของคุณ หรือ symlink ไปยัง /usr/local/bin//opt/homebrew/bin
  • Health probe ล้มเหลว: ตรวจสอบการเข้าถึง SSH, PATH และว่า Baileys เข้าสู่ระบบแล้ว (openclaw status --json)
  • เว็บแชตค้าง: ยืนยันว่า gateway กำลังทำงานบนโฮสต์รีโมตและพอร์ตที่ส่งต่อตรงกับพอร์ต WS ของ gateway; UI ต้องมีการเชื่อมต่อ WS ที่สุขภาพดี
  • IP ของ Node แสดง 127.0.0.1: เป็นสิ่งที่คาดไว้เมื่อใช้อุโมงค์ SSH เปลี่ยน ทรานสปอร์ต เป็น โดยตรง (ws/wss) หากคุณต้องการให้ gateway เห็น IP ไคลเอนต์จริง
  • แดชบอร์ดทำงาน แต่ความสามารถของ Mac ออฟไลน์: หมายความว่าการเชื่อมต่อ operator/control ของแอปยังสุขภาพดี แต่การเชื่อมต่อ node คู่กันไม่ได้เชื่อมต่อหรือขาดพื้นผิวคำสั่ง เปิดส่วนอุปกรณ์ในแถบเมนูและตรวจสอบว่า Mac เป็น paired · disconnected หรือไม่ สำหรับ endpoint Tailscale Serve แบบ wss://*.ts.net แอปจะตรวจจับ TLS leaf pin รุ่นเก่าที่ค้างหลังการหมุนเวียนใบรับรอง ล้าง pin ที่ค้างเมื่อ macOS trust ใบรับรองใหม่ และลองใหม่โดยอัตโนมัติ หากใบรับรองไม่ได้รับ trust จากระบบหรือโฮสต์ไม่ใช่ชื่อ Tailscale Serve ให้ตรวจสอบใบรับรองหรือเปลี่ยนไปใช้ รีโมตผ่าน SSH
  • การปลุกด้วยเสียง: วลี trigger จะถูกส่งต่อโดยอัตโนมัติในโหมดรีโมต ไม่ต้องใช้ตัวส่งต่อแยกต่างหาก

เสียงแจ้งเตือน

เลือกเสียงต่อการแจ้งเตือนจากสคริปต์ด้วย openclaw และ node.invoke เช่น:

openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glass

ไม่มีตัวสลับ "เสียงเริ่มต้น" แบบ global ในแอปอีกต่อไป ผู้เรียกเลือกเสียง (หรือไม่เลือกเสียง) ต่อคำขอ

ที่เกี่ยวข้อง