تهيئة سياسات البيئة المعزولة
يُحسم عزل تشغيل الوكيل على الخادم، عند الإقلاع (--sandbox). مفتاح
تمكين البيئة المعزولة ومنتقي الخلفية تحت
الإعدادات ← الخادم ← التشخيص والخصوصية تفضيلات مخزّنة على جهازك.
كشف المضيف في بطاقة العزل يبلّغ عما يستطيع مضيف الخادم تغليفه.
ضابطان يبلغان التشغيل، وهذا الدليل يغطيهما معًا: قواعد الإجراء في
الإعدادات ← مساحة العمل ← أذونات الوكلاء، التي تقرر ما يستطيع الوكيل
دفعه أو فتحه أو الوصول إليه، وعلم --sandbox الخاص بالخادم.
ما الذي يقيّد تشغيل الوكيل
قسم بعنوان “ما الذي يقيّد تشغيل الوكيل”يُقيَّد الوكيل بستة حدود. أولها بيئة نظام التشغيل المعزولة، وهي الحد المشروط — والخمسة الأخرى تثبت على كل مضيف.
| الحد | ما يفعله |
|---|---|
| بيئة نظام التشغيل المعزولة | Seatbelt على macOS، وbubblewrap على Linux وWSL2. تغلّف سطر أوامر Claude Code ومحوّلات ACP وأداة bash في الإطار. غائبة على Windows وعلى Linux من غير bwrap وsocat |
| شجرة العمل الخاصة به | تحصل كل محادثة على دليل عمل بالنسخ عند الكتابة. يُضم الدليل الأصلي إلى التشغيل مسارًا ممنوع الكتابة، والبيئة المعزولة هي التي تفرض ذلك |
| بيانات الاعتماد عبر الوسيط | يصدر وسيط بيانات الاعتماد بيئة لكل تشغيل، ويسحبها عند التفكيك. رمز GitHub فيها يقرأ ولا يدفع: يمر الدفع عبر Control Center، الذي يسأل قاعدة الدفع أولًا |
| ضوابط الإجراء | تصرّح كل أداة تعدّل الحالة بأصناف أثرها، ويحسمها الحارس قبل أن يجري الاستدعاء. يُرفض prompt إذا لم يتصل معتمِد |
| تعقيم البيئة | يحصل ACP وأداة bash في الإطار على بيئة مُرشَّحة. ويرث Claude Code عبر NoSandboxAdapter بيئة المضيف |
| سطح أدوات الوضع | ينزع وضع القراءة فقط أدوات تعديل شجرة العمل نزعًا كاملًا، ويثبّت فعل الإخراج الخاص بالوضع حتى يظل التسليم ممكنًا |
ثلاثة أمور تبقى أضعف مما تبدو:
- الإطار المضمّن وحده يفرض بوابة الأدوات وعقود الإكمال والقواعد
البنيوية للوضع. محوّل Claude Code لا يفرض شيئًا من ذلك. ويُطلَق Claude
Code تحديدًا مع
--dangerously-skip-permissions، لأنclaude -pغير التفاعلي كان سيتوقف إلى الأبد عند مطالبته الخاصة — فلا يرى Control Center استدعاءات read وwrite وedit الخاصة بـ Claude، ولا يضع عليها بوابة، ولا يفحص أوامر bash إلا خطاف يقرأ سطر الأمر. حيث تكون البيئة المعزولة مشغّلة، هي الحد الذي يحيط بهذه الاستدعاءات. - أدوات الملفات داخل العملية في الإطار (read وwrite وedit وapply patch
وsearch وfind وsearch_files) تعمل داخل عملية الخادم، فلا يقيّدها ملف
تعريف للبيئة المعزولة. أداة
bashوحدها تمر بمشغّل الأوامر المعزول. حدّ هذه الأدوات حصر مساراتها الخاص، مع ضوابط الإجراء. - على مضيف بلا خلفية لا ينطبق الصف الأول أصلًا. يرجع ACP وأداة
bashفي الإطار إلى تعقيم البيئة وسياسة الأوامر، ويرث Claude Code بيئة المضيف عبرNoSandboxAdapter. ويقول الخادم ذلك في سجل إقلاعه. افحص سجلك أدناه.
قرّر ما يستطيع الوكيل دفعه
قسم بعنوان “قرّر ما يستطيع الوكيل دفعه”لا توجد مبدّلات لكل وكيل لـ git push أو GitHub أو التذاكر أو الشبكة. كل منها قاعدة إجراء:
| القاعدة | الافتراضي المضمّن | ما تغطيه |
|---|---|---|
| الدفع إلى مستودع بعيد | السؤال أولًا | كل git push إلى GitHub، من أي محوّل |
| فتح طلب سحب | السؤال أولًا | gh pr create وأدوات طلبات السحب |
| نشر مراجعة أو إجراء دمج | السؤال أولًا | gh pr merge وgh pr review وgh pr comment وgh pr close |
| الكتابة إلى متتبع خارجي | السؤال أولًا | كتابة التذاكر عبر أدوات Control Center وgh issue |
| الوصول إلى الشبكة | السماح | هل للبيئة المعزولة شبكة، وأدوات الويب في الإطار |
- انتقل إلى الإعدادات ← مساحة العمل ← أذونات الوكلاء
- اختر نطاقًا — مساحة العمل أو الوكيل أو المساحة — ثم اختر السماح أو السؤال أولًا أو الرفض في صف القاعدة
قواعد الدفع المقيّدة بالفروع، مثل قاعدة ترفض الدفع إلى main، تنطبق أيضًا:
انظر الضوابط.
نقطة التحقق: اطلب من وكيل أن يدفع فرعًا. مع السؤال أولًا يصلك طلب موافقة
يسمّي المستودع والمرجع؛ ومع الرفض يطبع git
! [remote rejected] <ref> (Control Center policy: …).
كيف تبلغ كل قاعدة التشغيل:
- الدفع يُفرض بما يحمله التشغيل. رمز GitHub لديه رمز تثبيت تطبيق GitHub
للقراءة فقط، يقرأ المحتوى ويتعامل مع طلبات السحب. توجّه تهيئة git لديه كل
دفع إلى GitHub نحو بوابة loopback على
cc_server، تسأل القاعدة ثم تمرّر الدفع برمز كتابة لا يراه الوكيل أبدًا. لا تمرّر البوابة إلا إلى مستودع شجرة العمل نفسه أو إلى مستودع GitHub مرتبط بمساحة العمل. يصدق هذا على كل محوّل. - طلبات السحب والمشكلات من الصدفة تُعرَف من سطر الأمر: في أداة
bashفي الإطار، وعبر خطاف في أداةBashفي Claude Code. الوكيل الذي يخفي الأمر (ملف نصي، أوeval، أو استدعاء API مباشر) يتجاوز هذا الفحص، لكنه لا يتجاوز بوابة الدفع. - مفاتيح التذاكر لا توضع في البيئة المعزولة أبدًا. يكتب الوكلاء التذاكر عبر أدوات MCP في Control Center، وهي تسأل القاعدة.
- الشبكة تُحسم مرة واحدة عند بدء التشغيل. الرفض يطفئ شبكة البيئة
المعزولة؛ والسماح والسؤال أولًا يبقيانها مشغّلة، ومع السؤال أولًا
تظل أداتا الإطار
web_fetchوweb_searchتسألان عند كل استدعاء. يبقى GitHub في قائمة السماح بالخروج ما دامت الشبكة مشغّلة.
تحقق هل تشغيلات وكيلك معزولة
قسم بعنوان “تحقق هل تشغيلات وكيلك معزولة”يحسمه أمران، وكلاهما على الخادم: هل يقدّم المضيف خلفية، وهل --sandbox
مشغّل. افحصهما بهذا الترتيب.
- انتقل إلى الإعدادات ← الخادم ← التشخيص والخصوصية
- اقرأ بطاقة العزل. حقيقة المضيف هي الآلة التي يعمل عليها
cc_server، لا الآلة التي تنظر إليها. يسرد حقل الخلفية بيئة معزولة أصلية (Seatbelt على macOS، وbubblewrap على Linux وWSL2) أو بلا عزل. حقيقة ساري المفعول تفضيل هذا الجهاز، لا التغليف الذي يستخدمه الخادم فعلًا. - اقرأ سجل إقلاع الخادم. يطبع سطرًا واحدًا بالضبط من ثلاثة:
agent sandbox ONمع ملاحظة الخلفية — التشغيلات مغلَّفةno OS-native agent sandbox on this hostمع تلميح تثبيت حيث يوجد واحد — التشغيلات غير مغلَّفةagent sandbox DISABLED by --sandbox off— انسحاب متعمّد
لا يبلّغ GET /healthz بحالة العزل، فسجل الإقلاع هو وسيلة الفحص.
لإطفاء البيئة المعزولة عمدًا — والمضيف الذي يختل فيه ملف التعريف هو سبب
وجود هذا الخيار — ابدأ الخادم بـ --sandbox off، أو اضبط
CC_SERVER_SANDBOX=off. الافتراضي on، ومعنى on «استخدم خلفية إن كانت
لدى المضيف»، لا «اشترط واحدة».
حالتان لا تنالان تغليفًا ببيئة معزولة أصلية أبدًا. على Windows يبلّغ
الفحص الأصلي دائمًا بعدم التوفر، ولا شيء يُثبَّت — وإرسال الوكيل يستخدم
none. خلفية microvm منفصلة (الطرفيّات التفاعلية والمنصات)، وفحصها
مرهون بزمن تشغيلها الخاص. على Linux وWSL2 يجب أن يكون bwrap وsocat
كلاهما على PATH؛ ومن دونهما يبلّغ الفحص بعدم التوفر ويسمّي الحزم الناقصة.
على Linux أو WSL2 مع تثبيت bubblewrap، لا تُفرَض أنماط glob لملفات الأسرار
في السياسة القياسية على ملفات ينشئها الوكيل لاحقًا. مثل هذا التشغيل الأصلي
يفشل الآن بدل أن يتجاهل القواعد في صمت. لذلك لا يضمن نجاح فحص الإقلاع أن
إرسالًا على Linux يستطيع البدء. --sandbox off انسحاب متعمّد بلا حصر، لا
حد أمان بديل.
اعرف ما يرفضه الوضع أصلًا
قسم بعنوان “اعرف ما يرفضه الوضع أصلًا”يُخزَّن الوضع لكل مساحة، ويغذّي محلّل الضوابط بطبقة الإعداد المسبق للوضع. ثلاثة من الأوضاع الأربعة للقراءة فقط، ووضع القراءة فقط يرفض أحد عشر صنف أثر رفضًا باتًا:
| الوضع | شجرة العمل | ما يرفضه الإعداد المسبق |
|---|---|---|
الوكيل (chat) |
قابلة للكتابة | لا شيء — تنطبق الافتراضيات المضمّنة |
| تخطيط | للقراءة فقط | حذف ملف، والكتابة خارج شجرة العمل، وإنشاء إيداع، والدفع إلى مستودع بعيد، وفتح طلب سحب، ونشر مراجعة أو إجراء دمج، والكتابة إلى متتبع خارجي، وتثبيت حزمة، وتشغيل عملية، وتغيير بنية مساحة العمل، وقيادة حاوية معزولة (منصة) |
| مراجعة | للقراءة فقط | الأحد عشر نفسها. لا يختاره المستخدم — لا يعرض حقل الكتابة إلا الوكيل والتخطيط والتنسيق |
| تنسيق | للقراءة فقط | الأحد عشر نفسها |
الوصول إلى الشبكة وقراءة الأسرار لا يرفضهما وضع القراءة فقط، عمدًا: البحث هو غاية هذا الوضع.
اطلب موافقة قبل تنفيذ الإجراء
قسم بعنوان “اطلب موافقة قبل تنفيذ الإجراء”الموافقة قرار من الضوابط، لا إعداد في البيئة المعزولة.
- انتقل إلى الإعدادات ← مساحة العمل ← أذونات الوكلاء
- اضبط صنف الإجراء على السؤال أولًا في نطاق مساحة العمل أو الوكيل أو المساحة
قرار السؤال أولًا يقطع التشغيل ويسألك. ومن غير معتمِد متصل يفشل مغلقًا، ويُرفض الإجراء. انظر تهيئة الضوابط لترتيب البتّ كاملًا.
استكشاف الأخطاء وإصلاحها
قسم بعنوان “استكشاف الأخطاء وإصلاحها”الوكيل لا يستطيع الدفع، ولم أرفضه قط
قسم بعنوان “الوكيل لا يستطيع الدفع، ولم أرفضه قط”انظر ما يطبعه git. Control Center policy: … تعني أن قاعدة رفضت الدفع، أو أن
السؤال أولًا لم يلقَ جوابًا. … is not linked to this workspace تعني أن
الهدف ليس مستودع شجرة العمل نفسه ولا هو مرتبط بمساحة العمل.
Control Center has no GitHub credential that can push … تعني أن المستودع لا
يثبّت تطبيق GitHub ولا يوجد اعتماد احتياطي يستطيع الدفع: ثبّت التطبيق على ذلك
المستودع، أو اربط GitHub.
بطاقة العزل تبلّغ بغياب بيئة معزولة أصلية
قسم بعنوان “بطاقة العزل تبلّغ بغياب بيئة معزولة أصلية”عندئذ لا يغلّف Seatbelt ولا bubblewrap تشغيلات الوكيل على ذلك المضيف،
والحدود الباقية هي ما لديك. على Linux وWSL2، ثبّت الأداتين الناقصتين —
sudo apt-get install bubblewrap socat — ثم أعد تشغيل الخادم؛ يُفترض أن
يقول سجل الإقلاع بعدها إن البيئة المعزولة مشغّلة. على Windows لا خلفية
أصلية تُثبَّت، فشدّد الضوابط: انظر
تهيئة الضوابط.
بلغ الوكيل ملفًا خارج شجرة عمله
قسم بعنوان “بلغ الوكيل ملفًا خارج شجرة عمله”الأداة التي بلغته هي التي تقرر أهذا متوقع.
أدوات الملفات داخل العملية في الإطار (read وwrite وedit وapply patch
وsearch وfind وsearch_files) تعمل داخل عملية الخادم، فلا ينطبق عليها ملف
تعريف للبيئة المعزولة — حدّها حصر مساراتها الخاص مع الضوابط. أمر bash أو
سطر أوامر Claude Code يُغلَّف حيث توجد خلفية، ونسخ العمل المسجّلة لديك
ممنوعة الكتابة داخل ذلك التغليف في كل وضع، بما في ذلك صيغها بعد حل الوصلة
الرمزية (على macOS، المسار الذي يُبلَغ عبر /tmp أو /var/folders يُحَل
تحت /private، والصيغتان مرفوضتان الآن). على مضيف بلا خلفية لا ينطبق شيء
من ذلك. وفي الحالتين تستطيع الضوابط رفض الكتابة خارج شجرة العمل رفضًا
باتًا.
أدلة ذات صلة
قسم بعنوان “أدلة ذات صلة”- تهيئة الضوابط
- إنشاء وكيل وتهيئته
- تشخيص وكيل
- خلفيات البيئة المعزولة
- واجهة سطر أوامر cc_server: علم
--sandbox