المحتويات
تتيح لك قواعد الأذونات في Claude Code كتابة إدخالات allow / ask / deny داخل settings.json لتحديد، بدقة، أي الأدوات والأوامر والملفات والنطاقات يُشغَّل دون سؤال، أو يطلب التأكيد في كل مرة، أو يُمنع. ويمكن مشاركتها عبر الفريق، فتمنع الأمور الخطيرة بثقة بينما تترك الأعمال الآمنة الروتينية تجري دون انقطاع.
يغطي هذا الدليل ما هي قواعد الأذونات (وكيف تختلف عن أوضاع الأذونات)، وأولوية allow/ask/deny، وصيغة القاعدة، وتسلسل settings.json، ووصفات عملية — كل ذلك استنادًا إلى المواصفات الرسمية.
تحكم دقيق عبر allow / ask / deny
يُقيَّم deny ← ask ← allow (أول تطابق يفوز)
deny
ممنوع (يفوز على كل شيء)
ask
يطلب التأكيد في كل مرة
allow
يُشغَّل دون سؤال
1. ما هي قواعد الأذونات (مقابل الأوضاع)
يستخدم Claude Code نظام أذونات متدرجًا. عمليات القراءة (عرض الملفات، Grep، وغيرها) لا تحتاج إلى موافقة؛ أما أوامر Bash وتعديلات الملفات فتحتاج — وفوق هذا الأساس، تتيح القواعد تحديد استثناءات دقيقة (المصدر: دليل Claude Code الرسمي "Configure permissions").
من السهل الخلط بين القواعد وأوضاع الأذونات. الأوضاع هي الأساس العام لـ"مدى تكرار السؤال" (default/acceptEdits/auto، إلخ)؛ بينما القواعد تحديدات على مستوى كل أداة وكل أمر. وهما يعملان معًا — يضبط الوضع الأساس، وتتجاوزه القواعد بـ"اسمح بهذا دائمًا" أو "لا تسمح بذلك أبدًا".
💡 القواعد يفرضها Claude Code، لا النموذج. فموجِّهك أو ملف CLAUDE.md يشكّل ما يحاول Claude فعله، لكنه لا يحدد ما هو مسموح. امنح الوصول أو اسحبه عبر /permissions، أو القواعد، أو الأوضاع، أو خطّاف PreToolUse.
2. allow / ask / deny والأولوية
هناك ثلاثة أنواع من القواعد. ويسرد أمر /permissions هذه القواعد ويحررها (ويبيّن من أي settings.json أتت كل قاعدة).
يُشغَّل دون سؤال
تُشغَّل الأداة/الأمر المحدد دون موافقة يدوية.
يطلب التأكيد في كل مرة
يطلب التأكيد عند كل استخدام. وقاعدة ask المطابِقة تطلب التأكيد حتى لو طابقتها أيضًا قاعدة allow أوسع.
ممنوع (الأولوية القصوى)
يحجب الأداة. ويتغلب على أي allow، وقاعدة deny على أي مستوى تفوز دائمًا.
تُقيَّم القواعد بالترتيب deny ← ask ← allow. فأول تطابق يحسم النتيجة، ودقة القاعدة لا تغيّر الترتيب. فقاعدة deny واسعة مثل Bash(aws *) تتغلب على قاعدة allow أكثر تحديدًا مثل Bash(aws s3 ls). والخلاصة: قاعدة deny لا يمكن أن تحمل استثناءات قائمة سماح.
⚠️ صيغتا deny تتصرفان بشكل مختلف: اسم أداة مجرد مثل Bash يزيل الأداة من سياق Claude بالكامل (فلا يراها Claude إطلاقًا). أما قاعدة محدّدة النطاق مثل Bash(rm *) فتُبقي الأداة متاحة وتحجب فقط الاستدعاءات المطابِقة.
3. صيغة القاعدة (Tool(specifier))
الصيغة هي Tool (كل شيء) أو Tool(specifier) (محدّد). ولكل أداة أسلوبها الخاص في المحدِّد.
| الأداة | مثال | المعنى |
|---|---|---|
| Bash | Bash(npm run *) | الأوامر التي تبدأ بـ npm run (الرمز * في النهاية = حدّ كلمة) |
| Read / Edit | Read(./.env) | قراءة ملف .env في الدليل الحالي (مسار بأسلوب gitignore) |
| WebFetch | WebFetch(domain:example.com) | الجلب إلى example.com |
| MCP | mcp__github__get_* | أدوات get_ الخاصة بخادم github |
| Agent | Agent(Explore) | الوكيل الفرعي Explore |
رموز Bash البديلة (wildcards) يمكن أن تظهر في أي مكان. فـ Bash(ls *) (مسافة + *) يطابق ls -la لكن ليس lsof (حدّ كلمة)؛ أما Bash(ls*) (دون مسافة) فيطابق كليهما. والرمز :* في النهاية يعادل *.
// Allow safe commands, deny git push
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git commit *)"
],
"deny": [
"Bash(git push *)"
]
}
}
انتبه للأوامر المركّبة. فـ Claude Code يفهم الفواصل مثل && || ; |، وكل أمر فرعي يجب أن يطابق على حدة. فـ Bash(safe-cmd *) لا يسمح بـ safe-cmd && rm -rf .. ولاحظ أن الأوامر للقراءة فقط (ls/cat/grep/find/pwd، إلخ) تُشغَّل دون طلب تأكيد في كل وضع، وأن الأغلفة مثل timeout/nice/nohup تُجرَّد قبل المطابقة.
مسارات Read/Edit تتبع دلالات gitignore مع أربعة مراسٍ:
| الصيغة | المرساة | مثال |
|---|---|---|
//path | مطلق على نظام الملفات | Read(//tmp/x) |
~/path | الدليل الرئيسي (Home) | Read(~/.ssh/**) |
/path | جذر المشروع | Edit(/src/**) |
path / ./path | الدليل الحالي | Read(.env) |
※ المسار /Users/... ليس مطلقًا — بل نسبيًا إلى جذر المشروع. استخدم //Users/... (شرطتان مائلتان) للمسارات المطلقة. والقاعدة Read(.env) تعادل Read(**/.env) وتطابق كل ملف .env أسفلها.
4. تسلسل settings.json وأولويته
تعيش القواعد في settings.json. وهناك عدة ملفات، والمستويات الأعلى أقوى. والقاعدة المحورية: قاعدة deny على أي مستوى تتغلب دائمًا على قاعدة allow على أي مستوى آخر.
| الأولوية | الموقع | الاستخدام |
|---|---|---|
| 1 (الأقوى) | الإعدادات المُدارة (Managed settings) | سياسة المؤسسة. لا يمكن تجاوزها من المستخدمين/سطر الأوامر |
| 2 | وسائط سطر الأوامر | تجاوزات مؤقتة للجلسة |
| 3 | .claude/settings.local.json | إعدادات المشروع الشخصية (مُستبعَدة من git) |
| 4 | .claude/settings.json | إعدادات المشروع المشتركة (مُلتزَم بها في git) |
| 5 | ~/.claude/settings.json | إعدادات المستخدم عبر كل المشاريع |
// .claude/settings.json (team-shared)
{
"permissions": {
"defaultMode": "acceptEdits",
"allow": ["Bash(npm run *)", "WebFetch(domain:docs.example.com)"],
"deny": ["Read(.env)", "Read(**/secrets/**)", "Bash(git push *)"],
"additionalDirectories": ["../shared-lib"]
}
}
وضع الأذونات الافتراضي يُضبَط هنا أيضًا بصيغة defaultMode (تفاصيل الأوضاع). وللقراءة/التعديل خارج دليل العمل، أضِف المسارات إلى additionalDirectories.
5. وصفات عملية
تركيبات شائعة. والشكل الأساسي: امنع الأمور الخطيرة بثقة، واسمح بالروتين الآمن لأتمتته.
🔒 حماية ملفات الأسرار
deny: ["Read(.env)", "Read(**/secrets/**)", "Read(~/.ssh/**)"]. احجب القراءات تمامًا.
🚀 أكِّد دائمًا العمليات الخطِرة
ask: ["Bash(git push *)", "Bash(rm *)"]. يفرض طلب التأكيد حتى في الوضع التلقائي.
⚡ أتمتة العمل الروتيني
allow: ["Bash(npm run *)", "Bash(git commit *)"]. الاختبارات/عمليات البناء/الالتزامات تجري دون انقطاع.
تقييد عناوين URL عبر أنماط وسائط Bash أمر هشّ (فـ curl http://github.com/ * يُتجاوَز بسهولة عبر -X GET أو توسيع المتغيرات). بدلًا من ذلك، امنع curl/wget واسمح بنطاقات محددة عبر WebFetch(domain:...). وللتحكم الأكثر صرامة، تحقق من عناوين URL في خطّاف PreToolUse.
6. مزالق ومفاهيم شائعة الخلط
- قاعدة deny يفرضها Claude Code، لا النموذج. فكتابة "لا تقرأ هذا" في موجِّهك أو في CLAUDE.md لن توقفه دون قاعدة.
- منع Read/Edit لا يمكنه إيقاف الوصول غير المباشر. فهو ينطبق على أدوات الملفات المدمجة وعلى
cat/head/sed، لكن ليس على سكربت بايثون أو Node يفتح الملفات بنفسه. وللفرض على مستوى نظام التشغيل، استخدم أيضًا العزل في صندوق رملي (sandboxing). - انتبه لمشغِّلات البيئات. فأوامر
devbox run *وnpxوdocker execتشغّل وسائطها كأمر، لذا فإنBash(devbox run *)يسمح أيضًا بـdevbox run rm -rf .. اكتب قواعد تتضمن الأمر الداخلي. - الخطّافات لا تتجاوز القواعد. فـ خطّاف PreToolUse يمكنه توسيع الأذونات، لكن deny/ask تُقيَّمان بصرف النظر عمّا يُرجِعه الخطّاف (أولوية deny لا تتغير).
※ السلوك وفق وثائق Claude Code الرسمية (Configure permissions / Settings)، بتاريخ يونيو 2026. وقد يتغير — راجع الوثائق الرسمية لأحدث المعلومات.
الخلاصة
ثلاث نقاط أساسية عن قواعد أذونات Claude Code.
- ما هي: allow/ask/deny في
settings.jsonللسماح/طلب التأكيد/المنع لكل أداة وأمر وملف ونطاق. الأوضاع تضبط الأساس؛ والقواعد تتولى التفاصيل. - الأولوية: deny ← ask ← allow (أول تطابق يفوز؛ الدقة غير ذات صلة). وقاعدة deny على أي مستوى تفوز دائمًا. والمستويات: managed > CLI > local > project > user.
- الصيغة:
Tool(specifier). يستخدم Bash الرموز البديلة (مسافة + * تعني حدّ كلمة)، ويستخدم Read/Edit مسارات بأسلوب gitignore، ويستخدم WebFetch البادئة domain:. والأوامر المركّبة تتطلب مطابقة كل أمر فرعي.
"امنع الأمور الخطيرة بثقة، وأتمت الروتين الآمن" هو جوهر تصميم القواعد. اجمعها مع أوضاع الأذونات والخطّافات وإعداد الجهد (effort) لتشغيل Claude Code بأمان وسلاسة.
الأسئلة الشائعة
س. كيف تختلف قواعد الأذونات عن الأوضاع؟
ج. الأوضاع هي الأساس العام للتأكيد (default/acceptEdits/auto، إلخ)؛ والقواعد تحديدات على مستوى كل أداة وكل أمر. وهما يعملان معًا، والقواعد تتجاوز الأوضاع (مثلًا قواعد ask/deny تظل سارية في الوضع التلقائي).
س. سمحتُ به — فلماذا ما زال يطلب التأكيد؟
ج. لأن التقييم يجري بالترتيب deny ← ask ← allow. فإذا طابقت الاستدعاء أيضًا قاعدة ask (أو deny) منفصلة، فإنها تفوز حتى على قاعدة allow أكثر تحديدًا. والدقة لا تغيّر الترتيب.
س. أين أضع ملف settings.json؟
ج. المشترك مع الفريق: .claude/settings.json (مُلتزَم به في git). الشخصي: .claude/settings.local.json (مُستبعَد من git). عبر كل المشاريع: ~/.claude/settings.json. وللفرض على مستوى المؤسسة، استخدم الإعدادات المُدارة (لا يمكن تجاوزها).
س. كيف أضمن ألّا يُقرَأ ملف .env أبدًا؟
ج. اضبط deny: ["Read(.env)", "Read(**/secrets/**)"]. ولاحظ أن هذا ينطبق على أدوات الملفات المدمجة وعلى الأوامر بأسلوب cat، لكن ليس على القراءات غير المباشرة عبر سكربت. وللفرض على مستوى نظام التشغيل، فعِّل أيضًا العزل في صندوق رملي (sandboxing).
س. هل يمكنني تقييد عناوين URL أو الملفات عبر وسائط Bash؟
ج. ليس بشكل موثوق. فـ curl http://github.com/ * يُتجاوَز بسهولة عبر الخيارات أو توسيع المتغيرات. لتقييد عناوين URL، امنع curl/wget واستخدم WebFetch(domain:...)، أو تحقق منها في خطّاف PreToolUse.