نظرة عامة
يتم تجميع السياسات في فئات:block-— إيقاف الوكيل عن المتابعة.warn-— إعطاء الوكيل سياق إضافي حتى يتمكن من تصحيح نفسه.sanitize-— إزالة البيانات الحساسة من مخرجات الأداة قبل أن يراها الوكيل.
الأسماء الموصوفة
تقع كل سياسة في فتحة<namespace>/<name>. تنتمي السياسات المدمجة إلى الفضاء الموصوف
failproofai/ — على سبيل المثال، failproofai/sanitize-jwt. يمنع الفضاء الموصوف
التصادمات عند تحميل سياسات مخصصة أو من طرف ثالث
بأسماء قصيرة متشابهة.
في ملف التكوين الخاص بك، يمكنك الإشارة إلى سياسة مدمجة باستخدام اسمها القصير أو اسمها
المؤهل؛ كلا الشكلين يحل لنفس السياسة:
/، يعامل failproofai اسمه كتابعاً للفضاء الموصوف الافتراضي
failproofai. الأسماء التي تحتوي بالفعل على / (مثل myorg/foo،
custom/my-hook) تُبقى كما هي.
require-— منع حدث Stop حتى يتم استيفاء الشروط.
الأوامر الخطرة
منع الوكلاء من تشغيل العمليات التي يصعب التراجع عنها أو التي قد تضر بنظام الكمبيوتر.block-sudo
الحدث: PreToolUse (Bash)الافتراضي: ينكر أي أمر
sudo.
يمنع الاستدعاءات التي تتضمن كلمة sudo. يتم مطابقة النمط على رموز الأوامر المحللة، وليس السلسلة الأصلية، لمنع الالتفافة عبر حقن عامل الأغلاف.
المعاملات:
مثال:
sudo systemctl status nginx، لكن sudo rm /etc/hosts مرفوض.
يتم مطابقة الأنماط مقابل الرموز المحللة، وليس السلسلة الأصلية للأمر. يمنع هذا الالتفافة عبر عوامل الأغلاف المرفقة (مثل
sudo systemctl status x; rm -rf / لا يطابق sudo systemctl status *).block-rm-rf
الحدث: PreToolUse (Bash)الافتراضي: ينكر
rm -rf، rm -fr، وأشكال الحذف المتكررة المماثلة.
المعاملات:
مثال:
block-curl-pipe-sh
الحدث: PreToolUse (Bash)الافتراضي: ينكر
curl <url> | bash، curl <url> | sh، wget <url> | bash، والأنماط المماثلة.
لا توجد معاملات.
block-failproofai-commands
الحدث: PreToolUse (Bash)الافتراضي: ينكر الأوامر التي ستلغي تثبيت أو تعطيل failproofai نفسه (مثل
npm uninstall failproofai، failproofai policies --uninstall).
لا توجد معاملات.
أوامر البنية التحتية
منع وكلاء البرمجة من تشغيل CLI البنية التحتية أو بدء خطوط أنابيب CI/CD. جميع السياسات في هذه الفئة اختيارية (defaultEnabled: false) — الوكلاء الذين يحتاجون فعلاً إلى استدعاء kubectl، terraform، إلخ. لن يتعطلوا ما لم تفعّل السياسة. عند التفعيل، يتم رفض كل استدعاء للأداة المطابقة ما لم يطابق الأمر إدخالاً في allowPatterns.
نحو النمط هو نفسه block-sudo: يتم مطابقة الرموز مقابل argv المحللة، * هو حرف بدل لرمز واحد، وأي أمر يحتوي على عامل أغلاف مستقل (&&، ||، |، ;) أو رمز يحتوي على أحرف أغلاف مضمنة يُرفض قبل مطابقة القائمة البيضاء لمنع التفافات الحقن.
block-kubectl
الحدث: PreToolUse (Bash)الافتراضي: ينكر أي استدعاء
kubectl.
المعاملات:
مثال:
kubectl get pods لكن kubectl apply -f deploy.yaml مرفوض.
block-terraform
الحدث: PreToolUse (Bash)الافتراضي: ينكر أي استدعاء
terraform أو tofu (OpenTofu).
المعاملات:
مثال:
block-aws-cli
الحدث: PreToolUse (Bash)الافتراضي: ينكر أي استدعاء CLI
aws.
المعاملات:
مثال:
block-gcloud
الحدث: PreToolUse (Bash)الافتراضي: ينكر أي استدعاء CLI
gcloud (Google Cloud).
المعاملات:
مثال:
block-az-cli
الحدث: PreToolUse (Bash)الافتراضي: ينكر أي استدعاء CLI
az (Azure).
المعاملات:
مثال:
block-helm
الحدث: PreToolUse (Bash)الافتراضي: ينكر أي استدعاء
helm.
المعاملات:
مثال:
block-gh-pipeline
الحدث: PreToolUse (Bash)الافتراضي: ينكر أوامر CLI
gh الفرعية التالية التي تغيّر الحالة أو تبدأ خطوط أنابيب:
gh workflow run,gh workflow enable,gh workflow disablegh run rerun,gh run cancelgh pr mergegh release create,gh release deletegh cache deletegh secret set,gh secret delete
gh الفرعية للقراءة فقط مثل gh pr view, gh pr list, gh run list, gh release view, و gh api repos/.../... لا يتطابقون مع هذه السياسة — يُحتاج إليهم بشكل منتظم لفحوصات سير العمل (بما في ذلك require-ci-green-before-stop الخاص بـ failproofai).
المعاملات:
مثال:
الأسرار (معقّمات)
منع الوكلاء من تسرب بيانات الاعتماد إلى سياقهم أو مخرجاتهم. تعمل سياسات المعقّم على أحداث PostToolUse. عندما يشغّل Claude أمر Bash، أو يقرأ ملف، أو يستدعي أي أداة، تفحص هذه السياسات المخرجات قبل إرجاعها إلى Claude. إذا تم كشف نمط سري، تعود السياسة برار الرفض الذي يمنع إرجاع المخرجات.sanitize-jwt
الحدث: PostToolUse (جميع الأدوات)الافتراضي: يزيل رموز JWT (ثلاثة أجزاء base64url مفصولة بـ
.).
لا توجد معاملات.
sanitize-api-keys
الحدث: PostToolUse (جميع الأدوات)الافتراضي: يزيل تنسيقات مفاتيح API الشائعة: Anthropic (
sk-ant-)، OpenAI (sk-)، GitHub PATs (ghp_)، مفاتيح AWS (AKIA)، مفاتيح Stripe (sk_live_, sk_test_)، ومفاتيح Google API (AIza).
المعاملات:
مثال:
sanitize-connection-strings
الحدث: PostToolUse (جميع الأدوات)الافتراضي: يزيل سلاسل اتصال قاعدة البيانات التي تحتوي على بيانات اعتماد مضمنة (مثل
postgresql://user:password@host/db).
لا توجد معاملات.
sanitize-private-key-content
الحدث: PostToolUse (جميع الأدوات)الافتراضي: يزيل كتل PEM (
-----BEGIN PRIVATE KEY-----, -----BEGIN RSA PRIVATE KEY-----، إلخ).
لا توجد معاملات.
sanitize-bearer-tokens
الحدث: PostToolUse (جميع الأدوات)الافتراضي: يزيل رؤوس
Authorization: Bearer <token> حيث يكون الرمز 20 حرفاً أو أكثر.
لا توجد معاملات.
البيئة
حماية إعدادات البيئة الحساسة من القراءة أو الكشف بواسطة الوكلاء.block-env-files
الحدث: PreToolUse (Bash, Read)الافتراضي: ينكر قراءة ملفات
.env عبر cat .env، استدعاءات أداة Read بـ .env كمسار ملف، إلخ.
لا يمنع .envrc أو ملفات بيئية أخرى — فقط الملفات المسماة بالضبط .env.
لا توجد معاملات.
protect-env-vars
الحدث: PreToolUse (Bash)الافتراضي: ينكر الأوامر التي تطبع متغيرات البيئة:
printenv, env, echo $VAR.
لا توجد معاملات.
الوصول إلى الملفات
إبقاء الوكلاء يعملون داخل حدود المشروع وبعيداً عن الملفات الحساسة.block-read-outside-cwd
الحدث: PreToolUse (Read, Bash)الافتراضي: ينكر قراءة الملفات خارج جذر المشروع. الحد هو
CLAUDE_PROJECT_DIR (يُعيّن مرة واحدة لكل جلسة بواسطة Claude Code)، مع تراجع إلى مجلد العمل الحالي للجلسة عندما يكون المتغير غير مُعيّن. استخدام جذر المشروع بدلاً من cwd المباشر يعني أن الحد يبقى ثابتاً حتى بعد أن يقوم Claude بـ cd إلى مجلد فرعي.
المعاملات:
مثال:
block-secrets-write
الحدث: PreToolUse (Write, Edit)الافتراضي: ينكر الكتابة إلى الملفات المستخدمة بشكل شائع للمفاتيح الخاصة والشهادات:
id_rsa، id_ed25519، *.key، *.pem، *.p12، *.pfx.
المعاملات:
مثال:
Git
منع الدفع العرضي والدفع القسري وأخطاء الفرع التي يصعب التراجع عنها.block-push-master
الحدث: PreToolUse (Bash)الافتراضي: ينكر
git push origin main و git push origin master.
المعاملات:
مثال:
block-work-on-main
الحدث: PreToolUse (Bash)الافتراضي: ينكر
git commit، git merge، git rebase، و git cherry-pick بينما تكون شجرة العمل على main أو master. إنشاء الفروع والتبديل بينها (git checkout, git checkout -b, git switch, git switch -c) لا تتأثر.
المعاملات:
block-force-push
الحدث: PreToolUse (Bash)الافتراضي: ينكر
git push --force و git push -f.
لا توجد معاملات خاصة بالسياسة. استخدم hint عبر جميع المشاريع لاقتراح بدائل:
warn-git-amend
الحدث: PreToolUse (Bash)الافتراضي: يعلّم Claude بأن يتابع بحذر عند تشغيل
git commit --amend. لا يمنع الأمر.
لا توجد معاملات.
warn-git-stash-drop
الحدث: PreToolUse (Bash)الافتراضي: يعلّم Claude بأن يؤكد قبل تشغيل
git stash drop. لا يمنع الأمر.
لا توجد معاملات.
warn-all-files-staged
الحدث: PreToolUse (Bash)الافتراضي: يعلّم Claude بأن يراجع ما يقوم بتحضيره عند تشغيل
git add -A أو git add .. لا يمنع الأمر.
لا توجد معاملات.
قاعدة البيانات
اكتشف العمليات SQL التدميرية قبل تنفيذها ضد قاعدة البيانات الخاصة بك.warn-destructive-sql
الحدث: PreToolUse (Bash)الافتراضي: يعلّم Claude بأن يؤكد قبل تشغيل SQL يحتوي على
DROP TABLE, DROP DATABASE, أو DELETE بدون جملة WHERE.
لا توجد معاملات.
warn-schema-alteration
الحدث: PreToolUse (Bash)الافتراضي: يعلّم Claude بأن يؤكد قبل تشغيل بيانات
ALTER TABLE.
لا توجد معاملات.
تحذيرات
إعطاء الوكلاء سياقاً إضافياً قبل العمليات المحتملة الخطورة لكن غير التدميرية.warn-large-file-write
الحدث: PreToolUse (Write)الافتراضي: يعلّم Claude بأن يؤكد قبل كتابة ملفات أكبر من 1024 كيلوبايت. المعاملات:
مثال:
معالج Hook يفرض حد أقصى 1 MB لـ stdin في حمولات الطلبات. لاختبار هذه السياسة بمحتوى صغير، عيّن
thresholdKb إلى قيمة أقل بكثير من 1024.warn-package-publish
الحدث: PreToolUse (Bash)الافتراضي: يعلّم Claude بأن يؤكد قبل تشغيل
npm publish.
لا توجد معاملات.
warn-background-process
الحدث: PreToolUse (Bash)الافتراضي: يعلّم Claude بأن يكون حذراً عند إطلاق عمليات الخلفية عبر
nohup, &, disown, أو screen.
لا توجد معاملات.
warn-global-package-install
الحدث: PreToolUse (Bash)الافتراضي: يعلّم Claude بأن يؤكد قبل تشغيل
npm install -g, yarn global add, أو pip install بدون بيئة افتراضية.
لا توجد معاملات.
مديري الحزم
فرض أي مديري حزم يُسمح للوكيل باستخدامهم.prefer-package-manager
الحدث: PreToolUse (Bash)الافتراضي: معطّل. عند التفعيل، يمنع أي أمر مدير حزم ليس في قائمة
allowed ويخبر Claude بأن يعيد كتابة الأمر باستخدام مدير مسموح.
الكشف عن: pip، pip3، python -m pip، npm، npx، yarn، pnpm، pnpx، bun، bunx، uv، poetry، pipenv، conda، cargo.
قائمة الحظر المدمجة تغطي: pip، pip3، npm، npx، yarn، pnpm، pnpx، bun، bunx، uv، poetry، pipenv، conda، cargo. استخدم
blocked لإضافة مديري حزم ليسوا في هذه القائمة.
مثال التكوين:
pip install flask و pdm install flask برسالة تخبر Claude بأن يستخدم uv أو bun بدلاً من ذلك. أوامر مثل uv pip install flask مسموحة لأن uv موجود في قائمة التسامح ويتم التحقق منه أولاً.
سلوك الذكاء الاصطناعي
اكتشف عندما يعلق الوكلاء أو يتصرفون بشكل غير متوقع.warn-repeated-tool-calls
الحدث: PreToolUse (جميع الأدوات)الافتراضي: يعلّم Claude بأن يعيد النظر عندما يتم استدعاء نفس الأداة 3 مرات أو أكثر بمعاملات متطابقة — علامة شائعة لأن الوكيل عالق في حلقة. لا توجد معاملات.
سير العمل
فرض سير عمل منضبط في نهاية الجلسة. تعمل هذه السياسات على حدث Stop وترفض الوكيل من التوقف حتى يتم استيفاء كل شرط. تتبع سلسلة تبعية طبيعية: التزام → دفع → طلب دمج → CI. إذا رفضت سياسة، يتم تخطي السياسات اللاحقة في السلسلة (الرفض يقصر الدائرة). جميع سياسات سير العمل تفشل مفتوحة: إذا لم تكن الأداة المطلوبة متوفرة (مثلgh غير مثبتة، بدون جهاز تحكم git بعيد)، تسمح السياسة برسالة معلوماتية تشرح سبب تخطي الفحص.
دلالات Stop لكل CLI
يبدو إنفاذ Stop مختلفاً قليلاً عبر ستة CLI مدعومة لأن كل واحد يعرّض عقد hook مختلفاً. النتيجة متطابقة — الوكيل لا يهرب من التوقف بينما تفشل بوابة سير العمل — لكن الميكانيكا تختلف. يلخص الجدول أدناه؛ فقط Pi لديه خصوصية واضحة للمستخدم تستحق الفهم قبل تفعيل سياسةrequire-*-before-stop.
قيد Pi.
AgentEndEvent الخاص بـ Pi (المعادل الأعلى لـ hook Stop الخاص بـ Claude) لا يملك نوع Result — بحلول الوقت الذي يعمل فيه، تكون حلقة الوكيل الخاصة بـ Pi قد خرجت بالفعل. لا يمكن إجبار Pi على إعادة محاولة نفس الحلقة بالطريقة التي يمكن بها Claude / Copilot / Cursor / OpenCode. ينقل failproofai البوابة إلى حدث before_agent_start الخاص بـ Pi (الذي يعمل بعد الموجه التالي للمستخدم) لذا يبقى فحص سير العمل مفروضاً، فقط على الدور التالي بدلاً من الحالي.ما يعنيه هذا عملياً:- بعد توقف Pi، يتم التقاط رار الرفض في الذاكرة بمفتاح معرف جلسة Pi. الموجه التالي الذي تقدّمينه بالضبط في نفس عملية Pi يصرفه: يرى LLM توجيه
MANDATORY ACTION REQUIREDفي أعلى موجه النظام الخاص به، يلتزم (أو يدفع / يفتح PR / ينتظر CI)، وفقط بعد ذلك يستمر مع طلبك. رار الرفض المقبوض مرة واحدة — بمجرد صرفه، تكون البوابة واضحة. - البوابة محدودة بعمر عملية Pi. إذا قمتِ بـ
Ctrl+CPi أو أغلقتِ بين الأدوار، يتم حذف الإدخال في الذاكرة مع العملية والبوابة تُفتقد. Claude و Copilot و Cursor و OpenCode لديها نفس الحد (اقتل الوكيل والبوابة تُفتقد) — Pi فقط يجعله أكثر وضوحاً لأن الوكيل يخرج بشكل واضح قبل عمل البوابة. - رار الرفض المعلق يتم مسحه أيضاً على
session_shutdownلأي سبب (new/resume/fork/quit)، لذا بوابة قديمة من جلسة سابقة لا تستطيع التسرب إلى جلسة جديدة بدأت في نفس عملية Pi.
Stop الخاصة بك تحت أي من خمسة CLI الأخرى المدعومة. نحن نتابع Pi في المنبع لنوع Result مستقبلي على AgentEndEvent الذي سيسمح لنا بإغلاق هذه الفجوة.require-commit-before-stop
الحدث: Stopالافتراضي: ينكر التوقف عندما يكون هناك تغييرات غير مرتكبة (ملفات معدلة أو مرحلة أو غير تتبع). يعيد رسالة معلوماتية عندما يكون مجلد العمل نظيفاً. لا توجد معاملات.
require-push-before-stop
الحدث: Stopالافتراضي: ينكر التوقف عندما يكون هناك التزامات غير مدفوعة أو عندما لا يملك الفرع الحالي فرع تتبع بعيد. يقترح
git push -u لإنشاء فرع تتبع إذا لزم الأمر. يفشل مفتوحاً إذا لم يكن هناك جهاز تحكم مكونة.
المعاملات:
مثال:
require-pr-before-stop
الحدث: Stopالافتراضي: ينكر التوقف عندما لا يكون هناك طلب دمج للفرع الحالي، أو عندما يكون طلب الدمج الموجود مغلقاً دون دمج. يعلّم Claude بإنشاء PR باستخدام
gh pr create. عندما يكون PR مدمجاً، تسمح السياسة (تم شحن العمل) والرسالة تلمّح إلى التبديل عن الفرع (git checkout main && git pull).
لا توجد معاملات.
تتطلب هذه السياسة GitHub CLI (
gh) مثبتاً ومصادقاً.
قم بتشغيل gh auth login برمز الوصول الشخصي الذي يملك نطاق repo للوصول القراءة إلى
طلبات السحب. إذا لم يكن gh مثبتاً أو مصادقاً، تفشل السياسة مفتوحة وتبلّغ عن السبب إلى Claude.require-no-conflicts-before-stop
الحدث: Stopالافتراضي: ينكر التوقف عندما لا يمكن دمج الفرع الحالي بنظافة في فرع القاعدة. تؤكد السياسة أولاً أن هناك PR
OPEN على GitHub للفرع — بدونها، لا يوجد هدف دمج للفرض، لذا تختصر السياسة بأكملها للسماح. عند تأكيد PR OPEN، يعمل مسحان مستقلان:
- محلي —
git merge-tree --write-tree --name-only origin/<baseBranch> HEAD. عند التضارب، تسمي رسالة الرفض الملفات المتضاربة حتى يعرف Claude بالضبط ما يجب حله. - GitHub — يعيد استخدام نتيجة
gh pr view --json mergeable,stateالمجلوبة بالفعل في الفحص المسبق. يمسك التضاربات التي كانتorigin/<baseBranch>محلية قديمة ستفقدها (مثل الهبوط على PR متضارب علىmainمنذ آخر جلب). نتيجةCONFLICTINGترفض. نتيجةUNKNOWNترفض أيضاً وتعلّم Claude بالانتظار ~10 ثوان وإعادة الفحص قبل محاولة التوقف مرة أخرى — يمنع السلبيات الكاذبة بينما تعيد حساب GitHub.
gh غير مثبت، لا يوجد PR للفرع، حالة PR ليست OPEN (مثل MERGED, CLOSED)، أو gh pr view يرجع مخرجات غير قابلة للتحليل. يفشل أيضاً مفتوحاً عند فقدان origin/<baseBranch> محلياً أو عند عدم وجود التزامات تقدماً من القاعدة — تلك أمراض مستوى الطبقة 1 تستشير قابلية دمج PR المخزنة مؤقتاً قبل السماح.
المعاملات:
يُطلب GitHub CLI (
gh) لهذه السياسة. تستخدم السياسة gh pr view لتأكيد
وجود PR OPEN قبل تشغيل أي مسح تضارب — بدون gh، تختصر السياسة للسماح. قم بتشغيل gh auth login برمز وصول شخصي يملك
نطاق repo للوصول القراءة إلى طلبات السحب.require-ci-green-before-stop
الحدث: Stopالافتراضي: ينكر التوقف عندما تكون فحوصات CI فاشلة أو لا تزال تعمل على الفرع الحالي. يفحص كل من تشغيلات سير عمل GitHub Actions وفحوصات الروبوت من طرف ثالث (مثل CodeRabbit، SonarCloud، Codecov). يعتبر
skipped, cancelled, و neutral الخلاصات غير فاشلة (الأخير يغطي مثل تنبيهات Socket Security على PRs المساهمين الخارجيين، حيث يبلّغ التطبيق عن neutral بدلاً من النجاح/الفشل بقصد). يعيد رسالة معلوماتية عندما تمر جميع الفحوصات.
لا توجد معاملات.
تتطلب هذه السياسة GitHub CLI (
gh) مثبتاً ومصادقاً.
قم بتشغيل gh auth login برمز وصول شخصي يملك نطاق repo للوصول القراءة إلى
تشغيلات سير عمل Actions وAPI الفحوصات. إذا لم يكن gh مثبتاً أو مصادقاً، تفشل السياسة مفتوحة وتبلّغ عن السبب إلى Claude.تعطيل السياسات الفردية
أزل سياسة محددة منenabledPolicies في ملف التكوين الخاص بك، أو قم بتبديلها في تبويب السياسات بلوحة البيانات.
enabledPolicies لا تعمل، حتى لو كانت هناك إدخالات policyParams موجودة لها.
