تحدد قواعد أذونات Claude Code في settings.json عبر allow / ask / deny الأدوات والأوامر والملفات والنطاقات المسموحة بلا تأكيد أو التي تستلزم السؤال أو المحظورة. يمكن مشاركتها مع الفريق لحظر الاستدعاءات المطابقة وتقليل موافقات المهام الدورية المراجعة. لكنها لا تسد تلقائيًا صيغ استدعاء البرنامج الأخرى أو المسارات عبر السكربتات.

يغطي هذا الدليل ما هي قواعد الأذونات (وكيف تختلف عن أوضاع الأذونات)، وأولوية allow/ask/deny، وصيغة القاعدة، وتسلسل settings.json، ووصفات عملية — كل ذلك استنادًا إلى المواصفات الرسمية.

CLAUDE CODE · PERMISSION RULES

تحكم دقيق عبر allow / ask / deny

يُقيَّم deny ← ask ← allow (أول تطابق يفوز)

⛔

deny

تُقيّم قواعد deny المطابقة أولًا

❓

ask

يطلب التأكيد في كل مرة

✅

allow

يُشغَّل دون سؤال

1. ما هي قواعد الأذونات (مقابل الأوضاع)

يستخدم Claude Code نظام أذونات متعدد المستويات. في Manual، لا تحتاج قراءة مساحة العمل عادةً تأكيدًا، بينما تحتاجه التعديلات وتنفيذ Bash عادةً، مع استثناءات كأوامر القراءة فقط المدمجة وallow. فوق ذلك، تحدد القواعد استثناءات فردية؛ المصدر: الوثيقة الرسمية Configure permissions.

لا تخلط بينها وبين أوضاع الأذونات. الوضع يحدد سياسة التأكيد العامة مثل default وacceptEdits وauto، والقواعد تحدد أدوات وأوامر فردية. يعملان معًا: يضع الوضع الأساس وتعدله القواعد بعبارات مثل «اسمح بهذا دائمًا» أو «احظر هذا الاستدعاء».

💡 القواعد يفرضها Claude Code، لا النموذج. فموجِّهك أو ملف CLAUDE.md يشكّل ما يحاول Claude فعله، لكنه لا يحدد ما هو مسموح. امنح الوصول أو اسحبه عبر /permissions، أو القواعد، أو الأوضاع، أو خطّاف PreToolUse.

2. allow / ask / deny والأولوية

هناك ثلاثة أنواع من القواعد. ويسرد أمر /permissions هذه القواعد ويحررها (ويبيّن من أي settings.json أتت كل قاعدة).

ALLOW

يُشغَّل دون سؤال

تُشغَّل الأداة/الأمر المحدد دون موافقة يدوية.

ASK

يطلب التأكيد في كل مرة

يطلب التأكيد عند كل استخدام. وقاعدة ask المطابِقة تطلب التأكيد حتى لو طابقتها أيضًا قاعدة allow أوسع.

DENY

ممنوع (الأولوية القصوى)

يحظر الاستخدام. بين قواعد الإعدادات، لا تستطيع allow تجاوز deny مطابقة.

ترتيب التقييم: deny ← ask ← allow. بين قواعد الإعدادات العادية، تحدد أول مطابقة النتيجة، ولا تغير درجة التحديد الترتيب. تحظر deny الواسعة Bash(aws *) حتى allow الأضيق Bash(aws s3 ls). لا تتجاوز allow قاعدة deny مطابقة. نفي المسارات النسبية في Read/Edit ميزة منفصلة.

⚠️ صيغتا deny تتصرفان بشكل مختلف: اسم أداة مجرد مثل Bash يزيل الأداة من سياق Claude بالكامل (فلا يراها Claude إطلاقًا). أما قاعدة محدّدة النطاق مثل Bash(rm *) فتُبقي الأداة متاحة وتحجب فقط الاستدعاءات المطابِقة.

3. صيغة القاعدة (Tool(specifier))

الصيغة هي Tool (كل شيء) أو Tool(specifier) (محدّد). ولكل أداة أسلوبها الخاص في المحدِّد.

الأداةمثالالمعنى
BashBash(npm run *)الأوامر التي تبدأ بـ npm run (الرمز * في النهاية = حدّ كلمة)
Read / EditRead(./.env)قراءة ملف .env في الدليل الحالي (مسار بأسلوب gitignore)
WebFetchWebFetch(domain:example.com)الجلب إلى example.com
MCPmcp__github__get_*أدوات get_ الخاصة بخادم github
AgentAgent(Explore)الوكيل الفرعي Explore

قواعد MCP تسري على الخادم الذي تسمّيه فقط. ابتداءً من الإصدار v2.1.299 (14 أكتوبر 2026)، لا تسمح mcp__a بخوادم أخرى باسم a__b أو a_. أما الخوادم التي يحتوي اسمها على __ أو ينتهي بـ _، فاكتب الاسم الكامل بعد التطبيع متبوعًا بـ __*، كما في mcp__reports__v2__* (الوثيقة الرسمية وسجل التغييرات، تم التحقق في 18 أكتوبر 2026).

رموز Bash البديلة (wildcards) يمكن أن تظهر في أي مكان. فـ Bash(ls *) (مسافة + *) يطابق ls -la لكن ليس lsof (حدّ كلمة)؛ أما Bash(ls*) (دون مسافة) فيطابق كليهما. والرمز :* في النهاية يعادل *.

// السماح باستدعاءات محددة أو حظرها، وليس سد كل المسارات إلى البرنامج نفسه
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)"
    ],
    "deny": [
      "Bash(git push *)"
    ]
  }
}

تُطابق الأوامر المركبة لكل أمر فرعي، وتُزال الأغلفة المعروفة قبل التقييم. لكن قد لا تُطابق صيغة أخرى لاستدعاء البرنامج نفسه: لا تطابق Bash(git push *) الأمر git -C . push. تتجاوز أوامر القراءة فقط المدمجة التأكيد عادةً، لكن قيود القراءة خارج مساحة العمل وانتظار مصنّف auto شروط منفصلة.

مسارات Read/Edit تتبع دلالات gitignore مع أربعة مراسٍ:

الصيغةالمرساةمثال
//pathمطلق على نظام الملفاتRead(//tmp/x)
~/pathالدليل الرئيسي (Home)Read(~/.ssh/**)
/pathمرجع ملف الإعدادات (جذر المشروع في إعدادات المشروع، و~/.claude في إعدادات المستخدم)Edit(/src/**)
path / ./pathالدليل الحاليRead(.env)

* المسار /Users/... ليس مطلقًا — بل نسبيًا إلى مرجع ملف الإعدادات (جذر المشروع في إعدادات المشروع). ففي إعدادات المستخدم تشير Read(/secrets/**) إلى ~/.claude/secrets/**، لذا اكتب // أو ~/ لقاعدة تسري في كل المشاريع. استخدم //Users/... (شرطتان مائلتان) للمسارات المطلقة. والقاعدة Read(.env) تعادل Read(**/.env) وتطابق كل ملف .env أسفلها.

النفي في deny للمسارات النسبية ميزة منفصلة. في مصفوفة من المصدر نفسه، يؤدي وضع Read(!sample.env) بعد Read(*.env) إلى إخراج sample.env من نطاق القاعدة. لا يرفع ذلك deny من مصدر آخر، أو قاعدة مثبتة بـ/ أو ~/ أو //، أو حظر دليل كامل. ميّزه عن تجاوز deny بواسطة allow. الوثيقة الرسمية: أنماط النفي.

4. تسلسل settings.json وأولويته

تُحسم قيم الإعدادات حسب التسلسل الهرمي. في قواعد الأذونات، تُقيّم deny المطابقة قبل allow. يصف الجدول أولوية قواعد ملفات الإعدادات وCLI، وليس ضمانًا مطلقًا يشمل تغييرات القرار بواسطة mods.

الأولويةالموقعالاستخدام
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 (تفاصيل الأوضاع). غير أن auto وbypassPermissions لا يسريان من إعدادات المشروع (.claude/settings.json و.claude/settings.local.json)، فاكتبهما في إعدادات المستخدم أو الإعدادات المُدارة. وللقراءة/التعديل خارج دليل العمل، أضِف المسارات إلى additionalDirectories.

5. وصفات عملية

ابدأ بـحصر allow في الاستدعاءات الدورية المراجعة واستخدام ask/deny لما تريد تقييده. لا يضبط ذلك تلقائيًا صيغ العملية الأخرى أو كل ما داخل سكربت مسموح.

🔒 حماية ملفات الأسرار

deny: ["Read(.env)", "Read(**/secrets/**)", "Read(~/.ssh/**)"]. يقيد أدوات الملفات المدمجة وأوامر الملفات ذات المسارات الهدف المعروفة. تبقى مسارات أخرى، منها البحث التكراري والسكربتات العامة وMCP.

🚀 إضافة تأكيد لاستدعاءات محددة

ask: ["Bash(git push *)", "Bash(rm *)"]. يضيف تأكيدًا للاستدعاءات المطابقة حتى في auto. انتبه للصيغ البديلة وتغييرات القرار بواسطة mods.

⚡ أتمتة العمل الروتيني

allow: ["Bash(npm run *)", "Bash(git commit *)"]. الاختبارات/عمليات البناء/الالتزامات تجري دون انقطاع. لكن في وضع auto تُسقَط قاعدة التشغيل الواسعة لمدير الحزم مثل Bash(npm run *) وتُحال هذه الأوامر إلى المُصنِّف.

مطابقة معاملات Bash لا تكفي لفرض قيود URL. حتى حظر curl/wget واستخدام WebFetch يترك المسارات المطلقة وsh -c والاتصال عبر برامج أخرى. قواعد نطاق WebFetch تضبط هذه الأداة، لا كل حركة Bash. لفرض الوجهات، اجمع ضوابط مثل قائمة الشبكة المسموحة للبيئة المعزولة، وأدر أدواتها ومحاولاتها الخارجية على حدة.

6. مزالق ومفاهيم شائعة الخلط

  • قاعدة deny يفرضها Claude Code، لا النموذج. فكتابة "لا تقرأ هذا" في موجِّهك أو في CLAUDE.md لن توقفه دون قاعدة.
  • لا تمنع deny في Read/Edit الوصول غير المباشر. تنطبق على أدوات الملفات المدمجة وcat/head/sed، لا على فتح الملفات ذاتيًا من سكربتات Python/Node. العمليات التكرارية التي لا تسمي الملف الهدف، مثل grep -r pattern .، استثناء آخر. تنطبق قيود النظام على العمليات داخل العزل؛ يحتاج Read المدمج وMCP والمسارات الأخرى ضوابط منفصلة.
  • انتبه لمشغِّلات البيئات. فأوامر devbox run * وnpx وdocker exec تشغّل وسائطها كأمر، لذا فإن Bash(devbox run *) يسمح أيضًا بـ devbox run rm -rf .. اكتب قواعد تتضمن الأمر الداخلي.
  • لا تتجاوز الخطافات القواعد. يمكن لخطاف PreToolUse توسيع الأذونات، لكن تُقيّم deny/ask بصرف النظر عن نتيجته. غير أن tool.check في mod قد يستبدل القرار لاحقًا؛ يوافق على ask، وفي البيئات الشخصية بلا إعدادات مُدارة قد يوافق على deny أيضًا. في الأجهزة المُدارة وTeam/Enterprise، تكون deny أولى افتراضيًا، لكن إعدادات المؤسسة قد تغير ذلك. يلزم تقييم الثقة في mods المثبتة.
  • في وضع auto قد يُحال حتى أمرٌ مدرَج في allow إلى المُصنِّف. فعند الدخول إلى وضع auto تُسقَط قواعد allow الواسعة التي تتيح تنفيذ شيفرة عشوائية (Bash(*) المطلقة، والمفسِّرات ذات أحرف البدل مثل Bash(python*)، وأوامر run لمديري الحزم، وقواعد Agent وغيرها)، ثم تعود عند الخروج من الوضع؛ أما القواعد الضيقة مثل Bash(npm test) فتبقى سارية. ولا تتطابق القواعد إلا كما كُتبت، لذا لا تطابق Bash(git push *) الأمرَ git -C . push، والأمر الذي لا تطابقه أي قاعدة يحكم فيه المُصنِّف. كما تُحال الكتابة إلى المسارات المحمية إلى المُصنِّف حتى مع وجود قاعدة allow مطابقة. وإذا حُجب إجراء مشروع، فيمكنك إعادة محاولته من Recently blocked (قبل v2.1.314 كان اسمه Recently denied) في /permissions (انظر أوضاع الأذونات). وعلى GitHub أيضًا بلاغات عن حجب أوامر مدرجة في allow (مثل #95996). ويستند هذا البند إلى الوثائق الرسمية (Choose a permission mode) حتى 9 أكتوبر 2026.

* السلوك وفق وثائق Claude Code الرسمية Configure permissions / Settings files and precedence / Choose a permission mode في 9 أكتوبر 2026. قد يتغير؛ راجع أحدث الوثائق الرسمية.

الخلاصة

ثلاث نقاط أساسية عن قواعد أذونات Claude Code.

  • ما هي: allow/ask/deny في settings.json للسماح/طلب التأكيد/المنع لكل أداة وأمر وملف ونطاق. الأوضاع تضبط الأساس؛ والقواعد تتولى التفاصيل.
  • الأولوية: deny ← ask ← allow؛ أول مطابقة تحدد النتيجة ولا تؤثر درجة التحديد. بين قواعد الإعدادات، لا تتجاوز allow قاعدة deny مطابقة. المستويات: managed > CLI > local > project > user.
  • الصيغة: Tool(specifier). يستخدم Bash الرموز البديلة (مسافة + * تعني حدّ كلمة)، ويستخدم Read/Edit مسارات بأسلوب gitignore، ويستخدم WebFetch البادئة domain:. والأوامر المركّبة تتطلب مطابقة كل أمر فرعي.

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

إذا أردت فحص الوضع الحالي والمشورة فقط، من دون تعديل الشيفرة، فراجع دليل استخدام Codex وClaude Code للتحقيق فقط. يشرح خطوات التطبيق وIDE وCLI، ويقدم طلبًا يحدد التوقف بعد التقرير وعدم الانتقال إلى التنفيذ.

الأسئلة الشائعة

س. كيف تختلف قواعد الأذونات عن الأوضاع؟

ج. الأوضاع هي الأساس العام للتأكيد (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/**)"] أدوات الملفات المدمجة وأوامر الملفات المعروفة، ولا يضمن سد كل المسارات كالبحث التكراري بلا تسمية المسار الهدف وPython/Node وMCP. للصدفة، افحص أذونات القراءة في النظام أو denyRead داخل العزل؛ افحص أذونات الأدوات الأخرى منفصلة.

س. هل يمكنني تقييد عناوين URL أو الملفات عبر وسائط Bash؟

ج. لا تسد مطابقة نص الأمر الصيغ البديلة أو عمليات الشبكة والملفات المكافئة عبر برامج أخرى. قواعد نطاق WebFetch تخص WebFetch. لفرض القيود، اجمع عزل ملفات الصدفة وشبكتها مع ضوابط منفصلة للوصول خارج العزل.

أُعيدت مطابقة نطاق الأذونات والعزل واستثناءاتهما مع المصادر الرسمية في 9 أكتوبر 2026. لم تُغيّر إعدادات الأجهزة ولم تُجرَ اختبارات بدء تشغيل.