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 ที่รองรับเบราว์เซอร์นั้น
ข้อกำหนดเบื้องต้นบนโฮสต์รีโมต
- ติดตั้ง Node + pnpm และ build/ติดตั้ง OpenClaw CLI (
pnpm install && pnpm build && pnpm link --global) - ตรวจสอบให้แน่ใจว่า
openclawอยู่บน PATH สำหรับ shell แบบไม่โต้ตอบ (symlink ไปยัง/usr/local/binหรือ/opt/homebrew/binหากจำเป็น) - เปิด SSH ด้วย key auth เราแนะนำ IP ของ Tailscale เพื่อให้เข้าถึงได้นิ่งนอก LAN
การตั้งค่าแอป macOS
- เปิด การตั้งค่า → ทั่วไป
- ใต้ 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ที่รันได้ (เติมอัตโนมัติเมื่อมีการประกาศ)
- กด ทดสอบรีโมต ความสำเร็จหมายความว่า
openclaw status --jsonฝั่งรีโมตรันได้ถูกต้อง ความล้มเหลวมักหมายถึงปัญหา PATH/CLI; exit 127 หมายความว่าพบ CLI บนรีโมตไม่ได้ - การตรวจสอบสุขภาพและเว็บแชตจะรันผ่านอุโมงค์ 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 ในแอปอีกต่อไป ผู้เรียกเลือกเสียง (หรือไม่เลือกเสียง) ต่อคำขอ