كما جاء في الفصل الأول، يمرّ Claude Code ببوابة أذونات عند كل استدعاء أداة. فإن حسبتها مقبضاً واحداً، أدرتها إلى أرخى جانب متى ضجرت منها. وهي في الحقيقة ثلاثة أشياء مختلفة الوظيفة: تواتر الاستئذان، والسماح على مستوى كل أداة، والعزل على مستوى نظام التشغيل. فإن شددت واحداً جاز لك إرخاء الآخر، وليست المسألة اختياراً بين «آمن» و«سريع».

التفويض ليس «كل شيء أو لا شيء»

نقطة البدء ليست أسماء الأنماط بل «أين يصير الأمر في هذا العمل غير قابل للاستدراك». والمعايير ثلاثة.

  • أيمكن الرجوع ― فالتعديل الذي يرجعه git خسارته صغيرة. أما الحذف النهائي والدفع القسري وإتلاف قاعدة البيانات فلا رجوع فيها
  • إلى أين يصل ― أينغلق داخل دليل العمل، أم يبلغ الإنتاج أو الفرع المشترك أو بيئة الآخرين
  • أيمسّ الأسرار ― فمتى اجتمع أن يقرأها وأن يرسلها إلى الخارج صار الأمر تسريباً

والمزعج هو العمليات الآمنة في المحاور الثلاثة جميعاً (الاختبارات والتنسيق والتعديل المحلي)، أما الخطرة فقلّما تظهر. فالإرخاء الشامل يفتح الجانب الخطر أيضاً. والهيكل هو أن ترخي بحسب التواتر وتشدّ بحسب الطبيعة.

أنماط الأذونات ― ما الذي يتغيّر حقاً

أكبر المقابض هو نمط الأذونات، وهو يحدّد الإطار العام لتواتر الاستئذان. ويُبدَّل بـShift+Tab (والشرح في أنماط أذونات Claude Code).

طلب الإذن (default)

القراءة تلقائية، والتعديل وتشغيل الأوامر يستأذنان في كل مرة. وهو الافتراضي لمستودع تلمسه أول مرة.

قبول التعديلات (acceptEdits)

يعتمد تلقائياً التعديلات داخل مجلد العمل. أما خارج النطاق والمسارات المحميّة وسائر الأوامر فتستأذن.

نمط التخطيط (plan)

يبحث لكنه لا يعدّل الشيفرة المصدرية. ولا ينتقل إلى التنفيذ إلا بعد موافقتك على الخطة.

النمط التلقائي (auto)

نموذج تقييم منفصل ينظر في كل عملية قبل تنفيذها ولا يوقف إلا الخطر منها. وله شروط استعمال.

تجاوز الأذونات (bypassPermissions)

لا يمرّ باستئذان ولا بفحص أمان. لبيئات العزل حصراً. ولا يفعل إلا عند التشغيل براية مخصّصة.

وهناك أيضاً dontAsk الخاص بالإعداد (لا ينفّذ إلا قائمة السماح والأوامر القارئة فقط ويرفض ما عداها).

وانتبه إلى المسارات المحميّة كذلك. فالكتابة في .git و.claude وإعداد الصدفة لا تُعتمَد تلقائياً في الأنماط العادية. ويمكنك كتابة النمط الافتراضي في الإعداد، غير أن النمط التلقائي وحده يُتجاهَل في إعدادات المشروع ― وهو خطّ فاصل موضوع كي لا يستطيع المستودع تفعيله من تلقاء نفسه.

النمط التلقائي ليس «افتراضياً أسرع»

يكاد الاستئذان يختفي فيه، لكنه ليس سائباً: فنموذج التقييم يوقف العمليات التي تتجاوز نطاق الطلب، والتي تمسّ بنية تحتية مجهولة، والتي قادها إليها ما قرأه من محتوى. وأيسر ما يمرّ هو التعامل مع الملفات داخل مجلد العمل وطلبات HTTP القارئة فقط. وما يُوقَف هو إرسال السرّي إلى الخارج، والنشر إلى الإنتاج، وعمليات git المدمّرة.

الحدود التي تقولها في المحادثة لا تُحفَظ. فجملة «لا تدفع إلى المستودع» تصلح مستنداً للمنع، لكنه يعيد قراءتها من المحادثة الحالية في كل مرة، فإن سقطت في الضغط سقط الحدّ معها. يضاف إلى ذلك أن النمط التلقائي معاينة بحثية، والجهة الرسمية نفسها تقول إنه «يقلّل الاستئذان لكنه لا يضمن الأمان». فهو لا يقوم مقام المراجعة.

لماذا يأتيك استئذان حتى في نمط التجاوز

تضيف --dangerously-skip-permissions المفترض أن يتخطّى الاستئذان، ومع ذلك يسألك Claude «أأنفّذ؟». وليس في الأمر عطل. فالإذن طبقتان مستقلّتان، والتجاوز لا يزيل إلا واحدة منهما (انظر لماذا يُطلب الإذن حتى في نمط التجاوز).

الطبقة 1: واجهة أذونات الأدوات (قابلة للإزالة)

«أأعدّل هذا الملف؟» ― مربّع حوار تفاعلي يظهر قبيل استدعاء الأداة. ويخرجه برنامج Claude Code.

الطبقة 2: حكم Claude الأمني نفسه (غير قابلة للإزالة)

«هذا سيغيّر قاعدة بيانات الإنتاج، أأمضي؟» ― استئذان يعود في هيئة نصّ محادثة. ومصدره مبادئ سلوك النموذج، فلا توقفه راية.

وتمييزهما بـأهو واجهة أم نصّ ردّ. وشروط عمل الطبقة 2 هي تقريباً المحاور الثلاثة المذكورة في أول الفصل ― عدم إمكان الرجوع، واتّساع الأثر، وارتفاع الخطر الأمني. فعند الحذف النهائي والدفع القسري والترحيل إلى الإنتاج، يقف Claude ولو فتحت الأذونات.

وهذا تصميم لا خلل. فالذي يسلّمه التجاوز هو مفتاح استعمال الأدوات، لا مفتاح إيقاف حكم Claude. والطبقة 2 لا يمكن تصفيرها.

ويمكنك خفض التواتر. اكتب في CLAUDE.md من المقدّمات ما يمكن كتابته بوصفه حقيقة فقط، واجعل طلبك محدّداً ― فـ«احذف ملفات .log من /tmp/» أقلّ استدعاءً للاستئذان من «نظّف». على أن التجاوز ليس جواب «الاستئذان مزعج» (انظر مخاطر نمط التجاوز واستعماله الآمن).

قواعد settings.json ― لا تجب عن الاستئذان نفسه مرتين

إن كان النمط هو «التواتر العام»، فـقواعد الأذونات هي «الاستثناء على مستوى الأداة أو الأمر». تكتب في settings.json allow (بلا استئذان) وask (استئذان في كل مرة) وdeny (منع) وتشاركها مع فريقك (انظر ضبط قواعد الأذونات allow وask وdeny).

والتقييم بترتيب deny ثم ask ثم allow، وأول ما يطابق هو الغالب، والتحديد لا يغيّر الترتيب ― فمنع Bash(aws *) العريض يغلب سماح Bash(aws s3 ls) المحدّد. وdeny لا يقبل استثناءات. أما «سمحت به ومع ذلك يستأذن» فسببها في الغالب أن قاعدة ask أخرى طابقت قبله. وask يفرض الاستئذان حتى في النمط التلقائي، فهو الموضع الذي تضع فيه ما لا رجوع فيه.

// .claude/settings.json { "permissions": { "defaultMode": "acceptEdits", "allow": ["Bash(npm run *)"], "ask": ["Bash(git push *)"], "deny": ["Read(.env)", "Read(~/.ssh/**)"] } }

ولمواضع الحفظ ترتيب أيضاً. من الأقوى: الإعداد المُدار (لا يُتجاوَز) ثم سطر الأوامر ثم settings.local.json ثم settings.json ثم ~/.claude/settings.json. غير أن deny في أي مستوى يغلب حتماً allow في أي مستوى آخر. وفي المحدّدات، المسافة مع * حدّ للكلمة (فـBash(ls *) يطابق ls -la ولا يطابق lsof).

ما لا تحميك منه القواعد

القواعد لا ترى إلا «نصّ الأمر المراد تنفيذه»، وكل مسار يخرج عن ذلك يمرّ دون اعتراض.

  • لا تمنع الوصول غير المباشر ― فمنع Read(.env) يعمل على أدوات الملفات المدمجة وعلى cat، لكنه لا يعمل على شيفرة داخل سكربت تفتح الملف
  • مشغّلات البيئة تخفي المحتوى ― فـdevbox run * وdocker exec تنفّذ ما يُمرَّر إليها كما هو، فسماح Bash(devbox run *) يبيح حتى devbox run rm -rf .
  • تقييد الروابط عبر المعاملات هشّ ― إذ يُتسلّل منه بإعادة الترتيب أو بتوسيع المتغيّرات. والأمتن أن تمنع curl وwget كلّيهما وتحدّد الوجهات المسموحة بـWebFetch(domain:)

وكتابة «لا تقرأ ملف .env» في CLAUDE.md ليست قاعدة. فـCLAUDE.md يغيّر ما ينوي Claude فعله، ولا يغيّر النطاق المباح له. والذي يغيّر النطاق هو القواعد والأنماط، وخطّاف PreToolUse في الفصل السادس (وdeny وask يُقيَّمان بصرف النظر عن نتيجة الخطّاف).

صندوق الرمل ― ما يمكن تسويره وما لا يمكن

الذي يسدّ المسارات التي لا تبلغها القواعد هو صندوق الرمل ― فهو يسوّر «إلى أين يصل» مقدّماً، لا «ماذا يستأذن فيه». والذي يفرضه ليس Claude بل نظام التشغيل (النواة)، فلو فعل أمر مسموح به أكثر مما يوحي به اسمه، لم يتزحزح الحدّ (انظر الدليل الكامل لصندوق رمل Claude Code).

1. عزل نظام الملفات

لا يُكتَب إلا في دليل العمل والمجلد المؤقّت (القيمة الأولية). فلا يمكن تغيير ~/.bashrc ولا مناطق النظام.

2. عزل الشبكة

الحالة الأولية منع مبدئي بصفر وجهات. ويأتي استئذان لحظة الاتصال بنطاق جديد، فإن سجّلته في allowedDomains لم يسأل بعدها.

ولا بدّ من هذين معاً ― فبأحدهما وحده يخرج السرّ الذي أمكنت قراءته. والاعتماد على وجهين. فـنمط السماح التلقائي ينفّذ أوامر Bash في الداخل بلا استئذان، ونمط الأذونات العادي يعزل ويستأذن معاً. وحتى في السماح التلقائي يبقى deny مقدَّماً دائماً، وأمر rm الذي يستهدف مسارات حسّاسة يستأذن، وقواعد ask المحدّدة بالمحتوى تفرض الاستئذان أيضاً.

وانتبه إلى أن هناك «تلقائيين» اثنين. فـنمط السماح التلقائي في صندوق الرمل معناه «مرّره لأن حدود نظام التشغيل تحبسه»، أما النمط التلقائي (auto) في أنماط الأذونات فمعناه «مرّره لأن نموذج التقييم فحصه».

اعرف أولاً ما لا يحميه

صندوق الرمل ليس عزلاً تامّاً. وأخطر حال هي أن تُبقي السماح التلقائي مفعّلاً دائماً وهذه النقطة ما تزال غامضة عندك.

  • مجاله Bash وعملياته الفرعية فقط ― أما أدوات القراءة والتعديل والكتابة المدمجة وخوادم MCP والخطّافات فهي في نطاق منفصل (تُضبَط بقواعد الأذونات). وإن أردت تغليف العملية بأسرها فـ@anthropic-ai/sandbox-runtime
  • القيمة الأولية للقراءة واسعة ― فالمسوَّر أساساً هو الكتابة، وأما ~/.ssh و~/.aws/credentials فـتُقرأ كما هي دون تدخّل. فسُدّها بـdenyRead
  • الإفراط في توسيع السماح يصنع ثغرة ― فالاتصال يُحكَم عليه باسم المضيف، والمحتوى المعمّى لا يُفحَص افتراضياً. فإباحة نطاقات عريضة تُبقي مجالاً للتسرّب
  • هو انتقائي في البيئات ― فـmacOS لا يحتاج إلى تنصيب إضافي. أما Linux وWSL2 فيلزمهما bubblewrap وsocat، وWindows الأصلي غير مدعوم

وصندوق الرمل ليس جداراً في وجه مهاجم، بل حزام أمان يقلّل الحوادث والانفلات بفارق كبير. وقد أعلنت Anthropic أنها استطاعت داخلياً خفض استئذانات الأذونات بنسبة 84% على نحو آمن، لكنه تقرير عن خفض الاستئذان لا ضمان بعدم الاختراق.

الحوادث تقع غالباً في أربع صور

لنُعِد ترتيب الآليات من جهة الحوادث. فاختر الإعداد بحسب أثره في هذه الأربع.

1. الأوامر المدمّرة

rm ينظّف مساراً غير متوقّع، وgit push --force يمحو عمل غيرك. والجامع بينهما أنه لا رجوع فيهما. والنافع هو قواعد deny وask وعزل الملفات. والأوثق أن تُنزل ما لا رجوع فيه إلى ask.

2. تسريب الأسرار

لا يصير حادثاً إلا متى اجتمع أن يقرأ وأن يرسل. والوقاية صفحتان أيضاً ― ألّا تدعه يقرأ (منع Read(.env) وdenyRead) وألّا تدعه يرسل (منع curl وwget وتضييق النطاقات المسموحة). وإحداهما وحدها لا تكفي.

3. البلوغ إلى فرع آخر أو بيئة أخرى

تظنّه تعديل ملف واحد محلياً فيتطوّر إلى دفع إلى فرع مشترك أو نشر إلى الإنتاج ― وهذا تصعيد العملية. وفي الأنماط العادية يتخلّل ذلك استئذان عند كل درجة، أما إن فتحت كل شيء فقد اختفت الدرجات. ووضع الدفع والنشر في ask تأمين رخيص.

4. دسّ تعليمات من داخل الملفات التي يقرؤها

قد يكون في ملفات README والمسائل وصفحات الويب وملفات PDF التي يقرؤها Claude تعليمات مدسوسة موجّهة إلى Claude (وهذا حقن المطالبات). ولو كُتب بلون أبيض «أرسِل إلى هذا العنوان»، فهو من جهة Claude نصّ يدخل من المدخل نفسه الذي يدخل منه طلبك، ولا سبيل بديهياً إلى فصل البيانات عن الأوامر.

والذي لا ينفع هنا هو نمط التجاوز (إذ يبلغ المدسوس التنفيذ كما هو) والمنع في CLAUDE.md (لأنه لا يغيّر النطاق المباح). والذي ينفع هو الحدّ على مستوى نظام التشغيل ― فما لا يمكن الكتابة فيه لا يُكتَب، وما لا يمكن الاتصال به لا يُتّصل ― وقواعد deny. والمدسوس غير مرئي، فـلا تعتمد على «الانتباه»، واقرأ المصادر غير الموثوقة بأذونات مضيَّقة في تلك الجلسة وحدها.

ما يجوز تفويضه وما ينبغي إيقافه

بتطبيق المحاور الثلاثة يصير الخطّ هكذا.

يجوز تفويضه (ضعه في allow)

الاختبارات وفحص الأنواع والمدقّق والبناء / التعديل داخل دليل العمل / القراءة والبحث / الالتزام المحلي

ينبغي إيقافه (ask أو deny)

الدفع إلى فرع مشترك والدفع القسري / النشر إلى الإنتاج والترحيل / قراءة ملفات الأسرار / الأوامر التي تتضمّن إرسالاً إلى الخارج / الكتابة خارج دليل العمل

  • احسم نمطاً واحداً لعملك المعتاد. فـacceptEdits للتعديل المتكرّر، وdefault للأعمال الحسّاسة. واكتبه في defaultMode
  • ومتى أجبت عن الاستئذان نفسه ثلاث مرات فانقله إلى allow. وبالمقابل كل عملية خطر ببالك مرة واحدة أنها «خطرة» ثبّتها في ask
  • وعامل ما تمنعه شفاهاً في المحادثة على أنه زائل.
  • وكلما أرخيت شيئاً فشدّ شيئاً آخر. فالحال الوحيدة التي لا تصنعها هي حال بلا استئذان ولا حدود

شروط جواز استعمال التجاوز. أن يكون داخل حاوية أو آلة افتراضية أو مشغّل تكامل مستمر يمكن إسقاطه إن تلف، وأن يكون الشيء الوحيد الموصول هو دليل العمل، وألّا تُدخل إليه ملف .env الخاص بالمضيف ولا مفاتيح SSH. و«الاستئذان مزعج» ليس سبباً. واقرأ الفروق بعد العمل حتماً.

وكل ما تناولناه هنا آليات «تقلّل الحوادث» لا آليات «تُعدمها». فحكم الطبقة 2، وتقييم النمط التلقائي، وحدّ صندوق الرمل ― لكلٍّ صور يُنفَذ منها. وأن تبقى في حال يمكنك الرجوع منها هو أنفع ما تفعله.

الخلاصة

  • الأذونات ثلاث طبقات: النمط والقواعد وصندوق الرمل. ومحاورها أيمكن الرجوع، وإلى أين يصل، وأيمسّ الأسرار، والقاعدة ترخي بالتواتر وتشدّ بالطبيعة
  • الإذن ذو طبقتين. والتجاوز لا يزيل إلا واجهة الطبقة 1، أما استئذان نصّ المحادثة فهو من التصميم
  • القواعد deny ثم ask ثم allow وأول مطابقة تغلب، والتحديد لا يغيّر الترتيب
  • القواعد لا ترى إلا النصّ. والذي يسدّ ذلك صندوق الرمل. لكن مجاله Bash وعملياته الفرعية فقط والقيمة الأولية للقراءة واسعة
  • صور الحوادث أربع: الأوامر المدمّرة، وتسريب الأسرار، والبلوغ إلى بيئة أخرى، ودسّ التعليمات

ومتى تحدّد نطاق التفويض، لم يبق إلا أن تنمّيه بما يوافق بيئتك. انتقل إلى الفصل السادس «توسيعه».