macOS companion app
रिमोट नियंत्रण
यह प्रवाह macOS ऐप को किसी अन्य होस्ट (डेस्कटॉप/सर्वर) पर चल रहे OpenClaw Gateway के पूर्ण रिमोट कंट्रोल के रूप में कार्य करने देता है। ऐप विश्वसनीय LAN/Tailnet Gateway URL से सीधे कनेक्ट होता है, या रिमोट Gateway के केवल लूपबैक पर उपलब्ध होने पर SSH टनल प्रबंधित करता है। स्वास्थ्य जाँच, Voice Wake फ़ॉरवर्डिंग और Web Chat, Settings -> General की समान रिमोट कॉन्फ़िगरेशन का पुनः उपयोग करते हैं।
मोड
- स्थानीय (यह Mac): सब कुछ लैपटॉप पर चलता है; SSH शामिल नहीं है।
- SSH के माध्यम से रिमोट (डिफ़ॉल्ट): OpenClaw कमांड रिमोट होस्ट पर चलते हैं। ऐप
-o BatchMode, आपकी चुनी हुई पहचान/कुंजी और स्थानीय पोर्ट-फ़ॉरवर्ड के साथ SSH कनेक्शन खोलता है। - सीधा रिमोट (ws/wss): कोई SSH टनल नहीं; ऐप सीधे Gateway URL से कनेक्ट होता है (LAN, Tailscale, Tailscale Serve या सार्वजनिक HTTPS रिवर्स प्रॉक्सी)।
रिमोट ट्रांसपोर्ट
- SSH टनल (डिफ़ॉल्ट): Gateway पोर्ट को localhost पर फ़ॉरवर्ड करने के लिए
ssh -N -L ...का उपयोग करता है। टनल के लूपबैक होने के कारण Gateway को Node का IP127.0.0.1के रूप में दिखाई देता है। - सीधा (ws/wss): सीधे Gateway URL से कनेक्ट होता है। Gateway को वास्तविक क्लाइंट IP दिखाई देता है।
ऐप अपनी SSH प्रक्रियाओं के लिए SSH कनेक्शन मल्टीप्लेक्सिंग और प्रमाणीकरण के बाद बैकग्राउंड में चलने की सुविधा अक्षम कर देता है, ताकि वह ठीक उसी प्रक्रिया की निगरानी करके उसे पुनः आरंभ कर सके, भले ही चयनित उपनाम ControlMaster या ForkAfterAuthentication सक्षम करता हो।
SSH होस्ट-कुंजी सत्यापन डिफ़ॉल्ट रूप से सख्त है, क्योंकि Gateway क्रेडेंशियल इस टनल से होकर जाते हैं। प्रबंधित SSH उपनाम के अपने विश्वास व्यवहार को स्वीकार करने के लिए, openclaw-mac configure-remote के माध्यम से --ssh-host-key-policy openssh सेट करें, या सीधे gateway.remote.sshHostKeyPolicy को "openssh" पर सेट करें। इसे स्वीकार करने से पहले उपनाम और मेल खाने वाली किसी भी Host * या सिस्टम कॉन्फ़िगरेशन की समीक्षा करें। SSH लक्ष्य बदलने पर (ऐप में या configure-remote के माध्यम से), नीति वापस strict पर रीसेट हो जाती है, जब तक कि आप नए लक्ष्य के लिए स्पष्ट रूप से इसे दोबारा स्वीकार न करें।
SSH टनल मोड में, खोजे गए LAN/tailnet होस्टनाम gateway.remote.sshTarget के रूप में सहेजे जाते हैं। ऐप स्थानीय टनल एंडपॉइंट (उदाहरण के लिए ws://127.0.0.1:18789) पर gateway.remote.url रखता है, ताकि CLI, Web Chat और स्थानीय Node-होस्ट सेवा सभी समान लूपबैक ट्रांसपोर्ट का उपयोग करें। खोज द्वारा कच्चे Tailnet IP और स्थिर होस्टनाम दोनों लौटाए जाने पर, ऐप Tailscale MagicDNS या LAN नामों को प्राथमिकता देता है, ताकि पते बदलने पर भी कनेक्शन बेहतर ढंग से बने रहें। यदि स्थानीय टनल पोर्ट रिमोट Gateway पोर्ट से अलग है, तो gateway.remote.remotePort को रिमोट होस्ट के पोर्ट पर सेट करें।
रिमोट मोड में ब्राउज़र स्वचालन का स्वामी CLI Node होस्ट है, मूल macOS ऐप Node नहीं। संभव होने पर ऐप इंस्टॉल की गई Node होस्ट सेवा आरंभ करता है; उस Mac से ब्राउज़र नियंत्रण सक्षम करने के लिए, इसे openclaw node install ... और openclaw node start के साथ इंस्टॉल/आरंभ करें (या फ़ोरग्राउंड में openclaw node run ... चलाएँ), फिर उस ब्राउज़र-सक्षम Node को लक्ष्य बनाएँ।
रिमोट होस्ट पर पूर्वापेक्षाएँ
- Node + pnpm इंस्टॉल करें और OpenClaw CLI को बिल्ड/इंस्टॉल करें (
pnpm install && pnpm build && pnpm link --global)। - सुनिश्चित करें कि गैर-इंटरैक्टिव शेल के लिए
openclawPATH में है (आवश्यक होने पर/usr/local/binया/opt/homebrew/binमें सिमलिंक बनाएँ)। - SSH ट्रांसपोर्ट के लिए: कुंजी-आधारित SSH प्रमाणीकरण सेट अप करें। LAN से बाहर स्थिर पहुँच के लिए Tailscale IP अनुशंसित हैं।
macOS ऐप सेटअप
स्वागत प्रवाह के बिना SSH के माध्यम से ऐप को पहले से कॉन्फ़िगर करने के लिए:
openclaw-mac configure-remote \ --ssh-target user@gateway-host \ --local-port 18789 \ --remote-port 18789 \ --token "$OPENCLAW_GATEWAY_TOKEN"या किसी विश्वसनीय LAN या Tailnet पर पहले से उपलब्ध Gateway के लिए, SSH को पूरी तरह छोड़ दें:
openclaw-mac configure-remote \ --direct-url ws://192.168.0.202:18789 \ --token "$OPENCLAW_GATEWAY_TOKEN"दोनों रूप ~/.openclaw/openclaw.json लिखते हैं, ऑनबोर्डिंग को पूर्ण चिह्नित करते हैं और अगली बार आरंभ होने पर ऐप को चयनित ट्रांसपोर्ट का स्वामित्व लेने देते हैं। --local-port/--remote-port डिफ़ॉल्ट रूप से 18789 होते हैं। अन्य फ़्लैग: --password, --identity <path>, --ssh-host-key-policy <strict|openssh>, --project-root <path>, --cli-path <path>, --json। पूर्ण संदर्भ के लिए openclaw-mac configure-remote --help चलाएँ।
इसके बजाय UI से कॉन्फ़िगर करने के लिए:
- Settings -> General खोलें।
- OpenClaw runs के अंतर्गत, Remote चुनें और इन्हें सेट करें:
- Transport: SSH tunnel या Direct (ws/wss)।
- SSH target:
user@host(वैकल्पिक:port)। यदि Gateway उसी LAN पर है और Bonjour के माध्यम से अपनी उपलब्धता घोषित करता है, तो इस फ़ील्ड को स्वतः भरने के लिए खोजी गई सूची से उसे चुनें। - Gateway URL (केवल Direct):
wss://gateway.example.ts.net(या स्थानीय/LAN के लिएws://...)। - Identity file (उन्नत): आपकी कुंजी का पथ।
- Project root (उन्नत): कमांड के लिए उपयोग किया जाने वाला रिमोट चेकआउट पथ।
- CLI path (उन्नत): चलाने योग्य
openclawएंट्रीपॉइंट/बाइनरी का वैकल्पिक पथ (घोषित होने पर स्वतः भरा जाता है)।
- Test remote दबाएँ। सफलता का अर्थ है कि रिमोट
openclaw status --jsonसही ढंग से चला। विफलताओं का अर्थ सामान्यतः PATH/CLI समस्याएँ होता है; निकास 127 का अर्थ है कि रिमोट पर CLI नहीं मिला। - स्वास्थ्य जाँच और Web Chat अब चयनित ट्रांसपोर्ट के माध्यम से स्वचालित रूप से चलते हैं।
Web Chat
- SSH टनल: फ़ॉरवर्ड किए गए WebSocket नियंत्रण पोर्ट (डिफ़ॉल्ट 18789) के माध्यम से Gateway से कनेक्ट होता है।
- सीधा (ws/wss): सीधे कॉन्फ़िगर किए गए Gateway URL से कनेक्ट होता है।
- कोई अलग Web Chat HTTP सर्वर नहीं है।
अनुमतियाँ
- रिमोट होस्ट को स्थानीय होस्ट जैसी ही TCC स्वीकृतियों (Automation, Accessibility, Screen Recording, Microphone, Speech Recognition, Notifications) की आवश्यकता होती है। इन्हें प्रदान करने के लिए उस मशीन पर एक बार ऑनबोर्डिंग चलाएँ।
- Node अपनी अनुमति स्थिति को
node.list/node.describeके माध्यम से घोषित करते हैं, ताकि एजेंट जान सकें कि क्या उपलब्ध है।
सुरक्षा संबंधी टिप्पणियाँ
- रिमोट होस्ट पर लूपबैक बाइंड को प्राथमिकता दें और SSH, Tailscale Serve या किसी विश्वसनीय Tailnet/LAN सीधे URL के माध्यम से कनेक्ट करें।
- SSH टनलिंग के लिए डिफ़ॉल्ट रूप से पहले से विश्वसनीय होस्ट कुंजी आवश्यक है। पहले होस्ट कुंजी पर विश्वास करें (उसे कॉन्फ़िगर की गई known-hosts फ़ाइल में जोड़ें), या ऐसे प्रबंधित उपनाम के लिए स्पष्ट रूप से
gateway.remote.sshHostKeyPolicy: "openssh"सेट करें जिसकी OpenSSH विश्वास नीति आपको स्वीकार्य है। - यदि आप Gateway को गैर-लूपबैक इंटरफ़ेस से बाइंड करते हैं, तो मान्य Gateway प्रमाणीकरण आवश्यक करें: टोकन, पासवर्ड या
gateway.auth.mode: "trusted-proxy"वाला पहचान-जागरूक रिवर्स प्रॉक्सी। - सुरक्षा और Tailscale देखें।
WhatsApp लॉगिन प्रवाह (रिमोट)
openclaw channels login --channel whatsapp --verboseको रिमोट होस्ट पर चलाएँ। अपने फ़ोन पर WhatsApp से QR स्कैन करें।- प्रमाणीकरण की समय-सीमा समाप्त होने पर उस होस्ट पर लॉगिन दोबारा चलाएँ। स्वास्थ्य जाँच लिंक संबंधी समस्याएँ दिखाती है।
समस्या निवारण
| लक्षण | कारण / समाधान |
|---|---|
exit 127 / नहीं मिला |
गैर-लॉगिन शेल के लिए openclaw PATH में नहीं है। इसे /etc/paths, अपने शेल rc में जोड़ें, या /usr/local/bin//opt/homebrew/bin में सिमलिंक बनाएँ। |
| स्वास्थ्य जाँच विफल | SSH पहुँच, PATH और यह जाँचें कि Baileys (WhatsApp) लॉग इन है (openclaw status --json)। |
| वेब चैट अटका हुआ है | पुष्टि करें कि Gateway रिमोट होस्ट पर चल रहा है और फ़ॉरवर्ड किया गया पोर्ट Gateway WS पोर्ट से मेल खाता है; UI के लिए सुचारु WS कनेक्शन आवश्यक है। |
Node IP में 127.0.0.1 दिखता है |
SSH टनल के साथ यह अपेक्षित है। यदि आप चाहते हैं कि Gateway वास्तविक क्लाइंट IP देखे, तो ट्रांसपोर्ट को प्रत्यक्ष (ws/wss) पर स्विच करें। |
| डैशबोर्ड काम करता है, लेकिन Mac क्षमताएँ ऑफ़लाइन हैं | ऑपरेटर/नियंत्रण कनेक्शन सुचारु है, लेकिन सहायक Node कनेक्शन जुड़ा नहीं है या उसका कमांड इंटरफ़ेस उपलब्ध नहीं है। मेनू बार का डिवाइस अनुभाग खोलें और जाँचें कि Mac paired · disconnected है या नहीं। wss://*.ts.net Tailscale Serve एंडपॉइंट के लिए, ऐप प्रमाणपत्र बदलने के बाद पुराने लीफ़ TLS पिन का पता लगाता है, macOS द्वारा नए प्रमाणपत्र पर भरोसा किए जाने के बाद पुराने पिन को हटाता है और अपने-आप पुनः प्रयास करता है। यदि प्रमाणपत्र पर सिस्टम को भरोसा नहीं है या होस्ट Tailscale Serve नाम नहीं है, तो gateway.remote.tlsFingerprint को अपेक्षित प्रमाणपत्र फ़िंगरप्रिंट पर सेट करें, प्रमाणपत्र की समीक्षा करें या SSH के माध्यम से रिमोट पर स्विच करें। |
| वॉइस वेक | रिमोट मोड में ट्रिगर वाक्यांश अपने-आप फ़ॉरवर्ड होते हैं; अलग फ़ॉरवर्डर की आवश्यकता नहीं है। |
सूचना ध्वनियाँ
openclaw nodes notify वाली स्क्रिप्ट से प्रत्येक सूचना के लिए ध्वनि चुनें, उदाहरण के लिए:
openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glassऐप में कोई वैश्विक डिफ़ॉल्ट-ध्वनि टॉगल नहीं है; कॉलर प्रत्येक अनुरोध के लिए कोई ध्वनि चुनते हैं (या कोई ध्वनि नहीं चुनते)।