الانتقال إلى المحتوى الرئيسي

OpenShell

OpenShell هو واجهة خلفية مُدارة لـ sandbox في OpenClaw. فبدلًا من تشغيل حاويات Docker محليًا، يفوض OpenClaw دورة حياة sandbox إلى CLI ‏openshell، الذي يوفّر بيئات بعيدة مع تنفيذ أوامر قائم على SSH. يعيد plugin الخاص بـ OpenShell استخدام نقل SSH الأساسي نفسه وجسر نظام الملفات البعيد كما في واجهة SSH الخلفية العامة. ويضيف دورة حياة خاصة بـ OpenShell (sandbox create/get/delete وsandbox ssh-config) ووضع مساحة عمل اختياريًا هو mirror.

المتطلبات المسبقة

  • أن يكون CLI ‏openshell مثبتًا وموجودًا في PATH (أو تعيين مسار مخصص عبر plugins.entries.openshell.config.command)
  • حساب OpenShell مع وصول إلى sandbox
  • تشغيل OpenClaw Gateway على المضيف

البدء السريع

  1. فعّل plugin واضبط واجهة sandbox الخلفية:
{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        backend: "openshell",
        scope: "session",
        workspaceAccess: "rw",
      },
    },
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "remote",
        },
      },
    },
  },
}
  1. أعد تشغيل Gateway. في دورة الوكيل التالية، سيُنشئ OpenClaw sandbox من OpenShell ويوجه تنفيذ الأدوات من خلاله.
  2. تحقّق:
openclaw sandbox list
openclaw sandbox explain

أوضاع مساحة العمل

هذا هو القرار الأهم عند استخدام OpenShell.

mirror

استخدم plugins.entries.openshell.config.mode: "mirror" عندما تريد أن تظل مساحة العمل المحلية هي المرجع الأساسي. السلوك:
  • قبل exec، يزامن OpenClaw مساحة العمل المحلية إلى sandbox الخاصة بـ OpenShell.
  • بعد exec، يزامن OpenClaw مساحة العمل البعيدة مرة أخرى إلى مساحة العمل المحلية.
  • ما زالت أدوات الملفات تعمل عبر جسر sandbox، لكن مساحة العمل المحلية تظل مصدر الحقيقة بين الدورات.
الأفضل لـ:
  • إذا كنت تعدّل الملفات محليًا خارج OpenClaw وتريد أن تظهر هذه التغييرات في sandbox تلقائيًا.
  • إذا كنت تريد أن تتصرف sandbox الخاصة بـ OpenShell بأكبر قدر ممكن مثل واجهة Docker الخلفية.
  • إذا كنت تريد أن تعكس مساحة عمل المضيف كتابات sandbox بعد كل دورة exec.
المقايضة: تكلفة مزامنة إضافية قبل كل exec وبعده.

remote

استخدم plugins.entries.openshell.config.mode: "remote" عندما تريد أن تصبح مساحة عمل OpenShell هي المرجع الأساسي. السلوك:
  • عند إنشاء sandbox لأول مرة، يهيّئ OpenClaw مساحة العمل البعيدة من مساحة العمل المحلية مرة واحدة.
  • بعد ذلك، تعمل exec وread وwrite وedit وapply_patch مباشرةً على مساحة عمل OpenShell البعيدة.
  • لا يقوم OpenClaw بمزامنة التغييرات البعيدة مرة أخرى إلى مساحة العمل المحلية.
  • وما زالت قراءات الوسائط وقت الـ prompt تعمل لأن أدوات الملفات والوسائط تقرأ عبر جسر sandbox.
الأفضل لـ:
  • عندما يجب أن تعيش sandbox أساسًا في الجهة البعيدة.
  • عندما تريد حمل مزامنة أقل لكل دورة.
  • عندما لا تريد أن تؤدي تعديلات المضيف المحلية إلى الكتابة فوق حالة sandbox البعيدة بصمت.
مهم: إذا عدّلت الملفات على المضيف خارج OpenClaw بعد التهيئة الأولية، فلن ترى sandbox البعيدة تلك التغييرات. استخدم openclaw sandbox recreate لإعادة التهيئة.

اختيار وضع

mirrorremote
مساحة العمل المرجعيةالمضيف المحليOpenShell البعيدة
اتجاه المزامنةثنائي الاتجاه (كل exec)تهيئة لمرة واحدة
الحمل لكل دورةأعلى (رفع + تنزيل)أقل (عمليات بعيدة مباشرة)
هل تظهر التعديلات المحلية؟نعم، في exec التاليةلا، حتى إعادة الإنشاء
الأفضل لـسير عمل التطويرالوكلاء طويلو التشغيل، CI

مرجع التكوين

يوجد كل تكوين OpenShell تحت plugins.entries.openshell.config:
المفتاحالنوعالافتراضيالوصف
mode"mirror" أو "remote""mirror"وضع مزامنة مساحة العمل
commandstring"openshell"المسار أو الاسم الخاص بـ CLI ‏openshell
fromstring"openclaw"مصدر sandbox عند الإنشاء لأول مرة
gatewaystringاسم OpenShell Gateway (--gateway)
gatewayEndpointstringURL لنقطة نهاية OpenShell Gateway (--gateway-endpoint)
policystringمعرّف سياسة OpenShell لإنشاء sandbox
providersstring[][]أسماء المزوّدين المطلوب إرفاقها عند إنشاء sandbox
gpubooleanfalseطلب موارد GPU
autoProvidersbooleantrueتمرير --auto-providers أثناء إنشاء sandbox
remoteWorkspaceDirstring"/sandbox"مساحة العمل الأساسية القابلة للكتابة داخل sandbox
remoteAgentWorkspaceDirstring"/agent"مسار تحميل مساحة عمل الوكيل (للوصول للقراءة فقط)
timeoutSecondsnumber120المهلة الزمنية لعمليات CLI ‏openshell
يتم تكوين الإعدادات على مستوى sandbox (mode وscope وworkspaceAccess) ضمن agents.defaults.sandbox كما هو الحال مع أي واجهة خلفية. راجع Sandboxing للاطلاع على المصفوفة الكاملة.

أمثلة

إعداد remote بسيط

{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        backend: "openshell",
      },
    },
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "remote",
        },
      },
    },
  },
}

وضع mirror مع GPU

{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        backend: "openshell",
        scope: "agent",
        workspaceAccess: "rw",
      },
    },
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "mirror",
          gpu: true,
          providers: ["openai"],
          timeoutSeconds: 180,
        },
      },
    },
  },
}

OpenShell لكل وكيل مع Gateway مخصصة

{
  agents: {
    defaults: {
      sandbox: { mode: "off" },
    },
    list: [
      {
        id: "researcher",
        sandbox: {
          mode: "all",
          backend: "openshell",
          scope: "agent",
          workspaceAccess: "rw",
        },
      },
    ],
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "remote",
          gateway: "lab",
          gatewayEndpoint: "https://lab.example",
          policy: "strict",
        },
      },
    },
  },
}

إدارة دورة الحياة

تُدار sandboxes الخاصة بـ OpenShell عبر CLI العادي الخاص بـ sandbox:
# عرض جميع بيئات sandbox runtime (Docker + OpenShell)
openclaw sandbox list

# فحص السياسة الفعلية
openclaw sandbox explain

# إعادة الإنشاء (يحذف مساحة العمل البعيدة، ويعيد التهيئة عند الاستخدام التالي)
openclaw sandbox recreate --all
بالنسبة إلى وضع remote، تكون إعادة الإنشاء مهمة بشكل خاص: فهي تحذف مساحة العمل البعيدة المرجعية لذلك النطاق. وعند الاستخدام التالي، تتم تهيئة مساحة عمل بعيدة جديدة من مساحة العمل المحلية. أما في وضع mirror، فتعيد إعادة الإنشاء أساسًا ضبط بيئة التنفيذ البعيدة لأن مساحة العمل المحلية تظل المرجع الأساسي.

متى تعيد الإنشاء

أعد الإنشاء بعد تغيير أي من الآتي:
  • agents.defaults.sandbox.backend
  • plugins.entries.openshell.config.from
  • plugins.entries.openshell.config.mode
  • plugins.entries.openshell.config.policy
openclaw sandbox recreate --all

القيود الحالية

  • لا يتم دعم browser الخاص بـ sandbox على واجهة OpenShell الخلفية.
  • لا ينطبق sandbox.docker.binds على OpenShell.
  • تنطبق مفاتيح runtime الخاصة بـ Docker ضمن sandbox.docker.* على واجهة Docker الخلفية فقط.

كيف يعمل

  1. يستدعي OpenClaw الأمر openshell sandbox create (مع العلامات --from و--gateway، و--policy و--providers و--gpu وفق التكوين).
  2. يستدعي OpenClaw الأمر openshell sandbox ssh-config <name> للحصول على تفاصيل اتصال SSH الخاصة بـ sandbox.
  3. يكتب core تكوين SSH إلى ملف مؤقت ويفتح جلسة SSH باستخدام جسر نظام الملفات البعيد نفسه الموجود في واجهة SSH الخلفية العامة.
  4. في وضع mirror: يزامن من المحلي إلى البعيد قبل exec، ثم يشغّل، ثم يزامن مرة أخرى بعد exec.
  5. في وضع remote: يهيّئ مرة واحدة عند الإنشاء، ثم يعمل مباشرة على مساحة العمل البعيدة.

راجع أيضًا