Skip to main content
يأتي failproofai مع 39 سياسة مدمجة تمنع أنماط فشل الوكلاء الشائعة. تعمل كل سياسة على نوع حدث hook محدد واسم أداة معين. تقبل تسع عشرة سياسة معاملات تتيح لك ضبط سلوكها دون كتابة أكواد. تفرض خمس سياسات سير عمل خط أنابيب التزام → دفع → طلب دمج → CI قبل توقف Claude.

نظرة عامة

يتم تجميع السياسات في فئات:
  • block- — إيقاف الوكيل عن المتابعة.
  • warn- — إعطاء الوكيل سياق إضافي حتى يتمكن من تصحيح نفسه.
  • sanitize- — إزالة البيانات الحساسة من مخرجات الأداة قبل أن يراها الوكيل.

الأسماء الموصوفة

تقع كل سياسة في فتحة <namespace>/<name>. تنتمي السياسات المدمجة إلى الفضاء الموصوف failproofai/ — على سبيل المثال، failproofai/sanitize-jwt. يمنع الفضاء الموصوف التصادمات عند تحميل سياسات مخصصة أو من طرف ثالث بأسماء قصيرة متشابهة. في ملف التكوين الخاص بك، يمكنك الإشارة إلى سياسة مدمجة باستخدام اسمها القصير أو اسمها المؤهل؛ كلا الشكلين يحل لنفس السياسة:
إذا لم يكن للاسم أي /، يعامل failproofai اسمه كتابعاً للفضاء الموصوف الافتراضي failproofai. الأسماء التي تحتوي بالفعل على / (مثل myorg/foo، custom/my-hook) تُبقى كما هي.
  • require- — منع حدث Stop حتى يتم استيفاء الشروط.

تدعم كل سياسة حقل hint اختياري في policyParams. يتم إلحاق hint بعنوان الرفض أو التعليمات الذي يراه Claude، مما يوفر إرشادات قابلة للتنفيذ دون تعديل كود السياسة. يعمل مع السياسات المدمجة والمخصصة والاتفاقية. راجع الإعدادات → hint للحصول على التفاصيل.

الأوامر الخطرة

منع الوكلاء من تشغيل العمليات التي يصعب التراجع عنها أو التي قد تضر بنظام الكمبيوتر.

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 disable
  • gh run rerun, gh run cancel
  • gh pr merge
  • gh release create, gh release delete
  • gh cache delete
  • gh 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.
المعاملات: مثال:
للسماح بالدفع إلى جميع الفروع (تعطيل هذه السياسة فعلياً دون إزالتها من enabledPolicies)، عيّن protectedBranches: [].

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+C Pi أو أغلقتِ بين الأدوار، يتم حذف الإدخال في الذاكرة مع العملية والبوابة تُفتقد. Claude و Copilot و Cursor و OpenCode لديها نفس الحد (اقتل الوكيل والبوابة تُفتقد) — Pi فقط يجعله أكثر وضوحاً لأن الوكيل يخرج بشكل واضح قبل عمل البوابة.
  • رار الرفض المعلق يتم مسحه أيضاً على session_shutdown لأي سبب (new / resume / fork / quit)، لذا بوابة قديمة من جلسة سابقة لا تستطيع التسرب إلى جلسة جديدة بدأت في نفس عملية Pi.
إذا احتجتِ إلى إعادة محاولة نفس الحلقة بأسلوب Claude، قومي بتشغيل سياسات 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، يعمل مسحان مستقلان:
  1. محليgit merge-tree --write-tree --name-only origin/<baseBranch> HEAD. عند التضارب، تسمي رسالة الرفض الملفات المتضاربة حتى يعرف Claude بالضبط ما يجب حله.
  2. 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 موجودة لها.