OpenClaw البعيدة (macOS ⇄ مضيف بعيد)
يتيح هذا التدفق لتطبيق macOS أن يعمل كوحدة تحكم بعيدة كاملة لـ OpenClaw gateway تعمل على مضيف آخر (سطح مكتب/خادم). إنها ميزة التطبيق Remote over SSH (التشغيل البعيد). تستخدم جميع الميزات—فحوصات الصحة، وتمرير Voice Wake، وWeb Chat—إعداد SSH البعيد نفسه من Settings → General.الأوضاع
- محلي (هذا الـ Mac): كل شيء يعمل على الحاسوب المحمول. ولا يوجد SSH.
- Remote over SSH (الافتراضي): تُنفّذ أوامر OpenClaw على المضيف البعيد. يفتح تطبيق mac اتصال SSH مع
-o BatchModeبالإضافة إلى الهوية/المفتاح المختارين وتمرير منفذ محلي. - Remote direct (ws/wss): لا يوجد نفق SSH. يتصل تطبيق mac بعنوان URL الخاص بـ gateway مباشرةً (مثلًا عبر Tailscale Serve أو reverse proxy عام عبر HTTPS).
وسائل النقل البعيدة
يدعم الوضع البعيد وسيلتي نقل:- نفق SSH (الافتراضي): يستخدم
ssh -N -L ...لتمرير منفذ gateway إلى localhost. سترى gateway عنوان IP الخاص بالعقدة كـ127.0.0.1لأن النفق عبر loopback. - Direct (ws/wss): يتصل مباشرة بعنوان URL الخاص بـ gateway. ترى gateway عنوان IP الحقيقي للعميل.
المتطلبات الأساسية على المضيف البعيد
- ثبّت Node + pnpm وابنِ/ثبّت OpenClaw CLI (
pnpm install && pnpm build && pnpm link --global). - تأكد من أن
openclawموجودة على PATH لصدفات non-interactive (أنشئ symlink إلى/usr/local/binأو/opt/homebrew/binإذا لزم). - افتح SSH مع مصادقة المفاتيح. نوصي باستخدام عناوين IP الخاصة بـ Tailscale لسهولة الوصول المستقر خارج LAN.
إعداد تطبيق macOS
- افتح Settings → General.
- تحت OpenClaw runs، اختر Remote over SSH واضبط:
- Transport: SSH tunnel أو Direct (ws/wss).
- SSH target:
user@host(مع:portاختياري).- إذا كانت gateway على LAN نفسها وتعلن نفسها عبر Bonjour، فاخترها من القائمة المكتشفة لملء هذا الحقل تلقائيًا.
- Gateway URL (في الوضع المباشر فقط):
wss://gateway.example.ts.net(أوws://...للوضع المحلي/LAN). - Identity file (متقدم): مسار المفتاح الخاص بك.
- Project root (متقدم): مسار النسخة البعيدة المستخدم للأوامر.
- CLI path (متقدم): مسار اختياري إلى entrypoint/binary قابلة للتشغيل لـ
openclaw(يُملأ تلقائيًا عند الإعلان عنه).
- اضغط Test remote. يشير النجاح إلى أن
openclaw status --jsonالبعيدة تعمل بشكل صحيح. تعني الإخفاقات عادةً مشكلات PATH/CLI؛ ويعني الخروج 127 أن CLI غير موجودة على المضيف البعيد. - ستعمل فحوصات الصحة وWeb Chat الآن عبر نفق SSH هذا تلقائيًا.
Web Chat
- نفق SSH: تتصل Web Chat بـ gateway عبر منفذ WebSocket control المُمرّر (الافتراضي 18789).
- Direct (ws/wss): تتصل Web Chat مباشرةً بعنوان URL المكوّن لـ gateway.
- لم يعد هناك خادم HTTP منفصل لـ WebChat.
الأذونات
- يحتاج المضيف البعيد إلى موافقات TCC نفسها الموجودة محليًا (Automation وAccessibility وScreen Recording وMicrophone وSpeech Recognition وNotifications). شغّل onboarding على ذلك الجهاز لمنحها مرة واحدة.
- تعلن العقد عن حالة الأذونات لديها عبر
node.list/node.describeحتى تعرف الوكلاء ما هو المتاح.
ملاحظات أمنية
- فضّل روابط loopback على المضيف البعيد واتصل عبر SSH أو Tailscale.
- يستخدم تمرير SSH فحصًا صارمًا لمفاتيح المضيف؛ لذا وثّق مفتاح المضيف أولًا حتى يوجد في
~/.ssh/known_hosts. - إذا ربطت Gateway بواجهة غير loopback، فاشترط مصادقة Gateway صالحة: رمزًا، أو كلمة مرور، أو reverse proxy واعيًا بالهوية مع
gateway.auth.mode: "trusted-proxy". - راجع Security وTailscale.
تدفق تسجيل دخول WhatsApp (بعيد)
- شغّل
openclaw channels login --verboseعلى المضيف البعيد. ثم امسح QR باستخدام WhatsApp على هاتفك. - أعد تشغيل تسجيل الدخول على ذلك المضيف إذا انتهت صلاحية المصادقة. وستعرض فحوصات الصحة مشكلات الربط.
استكشاف الأخطاء وإصلاحها
- 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). - Web Chat عالقة: تأكد من أن gateway تعمل على المضيف البعيد وأن المنفذ المُمرَّر يطابق منفذ WS الخاص بـ gateway؛ إذ تتطلب الواجهة اتصال WS سليمًا.
- تظهر IP الخاصة بالعقدة كـ 127.0.0.1: هذا متوقع مع نفق SSH. بدّل Transport إلى Direct (ws/wss) إذا كنت تريد أن ترى gateway عنوان IP الحقيقي للعميل.
- Voice Wake: تُمرَّر عبارات التنشيط تلقائيًا في الوضع البعيد؛ ولا حاجة إلى forwarder منفصل.
أصوات الإشعارات
اختر أصواتًا لكل إشعار من scripts باستخدامopenclaw وnode.invoke، مثلًا: