الانتقال إلى المحتوى الرئيسي

title: السياسات المدمجة description: “جميع 39 سياسة مدمجة تمنع أوضاع فشل الوكيل الشائعة” icon: shield

يأتي failproofai مع 39 سياسة مدمجة تمنع أوضاع فشل الوكيل الشائعة. تعمل كل سياسة على نوع حدث خطاف محدد واسم أداة معينة. تقبل تسع عشرة سياسة معاملات تسمح لك بضبط سلوكها دون كتابة أي كود. تفرض خمس سياسات سير عمل خط أنابيب commit → push → PR → CI قبل توقف Claude.

نظرة عامة

يتم تجميع السياسات في فئات:
الفئةالسياساتنوع الخطاف
الأوامر الخطيرةblock-sudo, block-rm-rf, block-curl-pipe-sh, block-failproofai-commandsPreToolUse
أوامر البنية الأساسيةblock-kubectl, block-terraform, block-aws-cli, block-gcloud, block-az-cli, block-helm, block-gh-pipelinePreToolUse
الأسرار (معقمات)sanitize-jwt, sanitize-api-keys, sanitize-connection-strings, sanitize-private-key-content, sanitize-bearer-tokensPostToolUse
البيئةblock-env-files, protect-env-varsPreToolUse
الوصول للملفاتblock-read-outside-cwd, block-secrets-writePreToolUse
Gitblock-push-master, block-work-on-main, block-force-push, warn-git-amend, warn-git-stash-drop, warn-all-files-stagedPreToolUse
قاعدة البياناتwarn-destructive-sql, warn-schema-alterationPreToolUse
التحذيراتwarn-large-file-write, warn-package-publish, warn-background-process, warn-global-package-installPreToolUse
مديري الحزمprefer-package-managerPreToolUse
سير العملrequire-commit-before-stop, require-push-before-stop, require-pr-before-stop, require-no-conflicts-before-stop, require-ci-green-before-stopStop
  • block- — توقيف الوكيل عن المتابعة.
  • warn- — إعطاء الوكيل سياق إضافي حتى يتمكن من تصحيح نفسه بنفسه.
  • sanitize- — حذف البيانات الحساسة من مخرجات الأداة قبل وصولها للوكيل.

المساحات

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

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

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

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

block-sudo

الحدث: PreToolUse (Bash)
الافتراضي: ينكر أي أمر sudo.
يحجب الاستدعاءات التي تتضمن كلمة المفتاح sudo. يتم مطابقة النمط على رموز الأوامر المحللة، وليس السلسلة الخام، لمنع التحايل عبر حقن عامل الصدفة. المعاملات:
المعاملالنوعالافتراضيالوصف
allowPatternsstring[][]بادئات أوامر دقيقة مسموحة. يتم مطابقة كل إدخال مقابل رموز argv المحللة.
مثال:
{
  "policyParams": {
    "block-sudo": {
      "allowPatterns": ["sudo systemctl status", "sudo journalctl"]
    }
  }
}
مع هذا الإعداد، 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، وأشكال الحذف التكراري المشابهة.
المعاملات:
المعاملالنوعالافتراضيالوصف
allowPathsstring[][]المسارات التي يمكن حذفها بشكل آمن بشكل متكرر (مثل /tmp).
مثال:
{
  "policyParams": {
    "block-rm-rf": {
      "allowPaths": ["/tmp", "/var/cache"]
    }
  }
}

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).
لا توجد معاملات.

أوامر البنية الأساسية

توقيف وكلاء الترميز من تشغيل CLIs البنية الأساسية أو تفعيل خطوط أنابيب CI/CD. جميع السياسات في هذه الفئة opt-in (defaultEnabled: false) — الوكلاء الذين يحتاجون بشكل شرعي إلى استدعاء kubectl، terraform، إلخ لن يتم إزعاجهم ما لم تفعل السياسة. عند التفعيل، يتم رفض كل استدعاء للـ CLI المطابق ما لم تطابق الأمر إدخال في allowPatterns. قواعد النمط هي نفسها كما في block-sudo: يتم مطابقة الرموز مقابل argv المحللة، * هو بدل لرمز واحد، وأي أمر يحتوي على عامل صدفة مستقل (&&، ||، |، ;) أو رمز بأحرف صدفة مدمجة يتم رفضه قبل مطابقة القائمة البيضاء لمنع تجاوزات الحقن.

block-kubectl

الحدث: PreToolUse (Bash)
الافتراضي: ينكر أي استدعاء kubectl.
المعاملات:
المعاملالنوعالافتراضيالوصف
allowPatternsstring[][]بادئات أوامر kubectl مسموحة.
مثال:
{
  "policyParams": {
    "block-kubectl": {
      "allowPatterns": ["kubectl get *", "kubectl describe *", "kubectl logs *"]
    }
  }
}
مع هذا الإعداد، kubectl get pods مسموح لكن kubectl apply -f deploy.yaml مرفوض.

block-terraform

الحدث: PreToolUse (Bash)
الافتراضي: ينكر أي استدعاء terraform أو tofu (OpenTofu).
المعاملات:
المعاملالنوعالافتراضيالوصف
allowPatternsstring[][]بادئات أوامر terraform/tofu مسموحة.
مثال:
{
  "policyParams": {
    "block-terraform": {
      "allowPatterns": ["terraform plan", "terraform validate", "terraform show *"]
    }
  }
}

block-aws-cli

الحدث: PreToolUse (Bash)
الافتراضي: ينكر أي استدعاء aws CLI.
المعاملات:
المعاملالنوعالافتراضيالوصف
allowPatternsstring[][]بادئات أوامر aws CLI مسموحة.
مثال:
{
  "policyParams": {
    "block-aws-cli": {
      "allowPatterns": ["aws s3 ls *", "aws sts get-caller-identity"]
    }
  }
}

block-gcloud

الحدث: PreToolUse (Bash)
الافتراضي: ينكر أي استدعاء gcloud (Google Cloud) CLI.
المعاملات:
المعاملالنوعالافتراضيالوصف
allowPatternsstring[][]بادئات أوامر gcloud مسموحة.
مثال:
{
  "policyParams": {
    "block-gcloud": {
      "allowPatterns": ["gcloud auth list", "gcloud config list"]
    }
  }
}

block-az-cli

الحدث: PreToolUse (Bash)
الافتراضي: ينكر أي استدعاء az (Azure) CLI.
المعاملات:
المعاملالنوعالافتراضيالوصف
allowPatternsstring[][]بادئات أوامر az CLI مسموحة.
مثال:
{
  "policyParams": {
    "block-az-cli": {
      "allowPatterns": ["az account show", "az group list"]
    }
  }
}

block-helm

الحدث: PreToolUse (Bash)
الافتراضي: ينكر أي استدعاء helm.
المعاملات:
المعاملالنوعالافتراضيالوصف
allowPatternsstring[][]بادئات أوامر helm مسموحة.
مثال:
{
  "policyParams": {
    "block-helm": {
      "allowPatterns": ["helm list", "helm status *"]
    }
  }
}

block-gh-pipeline

الحدث: PreToolUse (Bash)
الافتراضي: ينكر أوامر gh CLI الفرعية التالية التي تغير الحالة أو تفعل خطوط الأنابيب:
  • 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). المعاملات:
المعاملالنوعالافتراضيالوصف
allowPatternsstring[][]استدعاءات نصية محددة للسماح بها على الرغم من أنها ستكون مرفوضة بخلاف ذلك.
مثال:
{
  "policyParams": {
    "block-gh-pipeline": {
      "allowPatterns": ["gh run rerun *"]
    }
  }
}

الأسرار (معقمات)

توقيف الوكلاء من تسريب بيانات الاعتماد في سياقهم أو مخرجاتهم. تعمل سياسات المعقم على أحداث PostToolUse. عندما يقوم Claude بتشغيل أمر Bash أو قراءة ملف أو استدعاء أي أداة، تفحص هذه السياسات المخرجات قبل إرجاعها إلى Claude. إذا تم اكتشاف نمط سري، تُرجع السياسة قرار deny الذي يمنع المخرجات من إعادتها.

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).
المعاملات:
المعاملالنوعالافتراضيالوصف
additionalPatterns{ regex: string; label: string }[][]أنماط regex إضافية تعامل كأسرار.
مثال:
{
  "policyParams": {
    "sanitize-api-keys": {
      "additionalPatterns": [
        { "regex": "myco_[A-Za-z0-9]{32}", "label": "مفتاح API داخلي من MyCo" },
        { "regex": "pat_[0-9a-f]{40}", "label": "PAT داخلي" }
      ]
    }
  }
}

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 إلى دليل فرعي.
المعاملات:
المعاملالنوعالافتراضيالوصف
allowPathsstring[][]بادئات المسارات المطلقة المسموحة حتى لو كانت خارج جذر المشروع.
مثال:
{
  "policyParams": {
    "block-read-outside-cwd": {
      "allowPaths": ["/shared/data", "/opt/company/config"]
    }
  }
}

block-secrets-write

الحدث: PreToolUse (Write, Edit)
الافتراضي: ينكر الكتابة إلى الملفات المستخدمة عادة للمفاتيح الخاصة والشهادات: id_rsa, id_ed25519, *.key, *.pem, *.p12, *.pfx.
المعاملات:
المعاملالنوعالافتراضيالوصف
additionalPatternsstring[][]أنماط اسم ملف إضافية (نمط glob) للحجب.
مثال:
{
  "policyParams": {
    "block-secrets-write": {
      "additionalPatterns": [".token", ".secret"]
    }
  }
}

Git

منع الدفع العرضي والدفع القسري وأخطاء الفروع التي يصعب التراجع عنها.

block-push-master

الحدث: PreToolUse (Bash)
الافتراضي: ينكر git push origin main و git push origin master.
المعاملات:
المعاملالنوعالافتراضيالوصف
protectedBranchesstring[]["main", "master"]أسماء الفروع التي لا يمكن الدفع إليها مباشرة.
مثال:
{
  "policyParams": {
    "block-push-master": {
      "protectedBranches": ["main", "master", "release", "prod"]
    }
  }
}
للسماح بالدفع إلى جميع الفروع (تعطيل هذه السياسة بشكل فعال دون إزالتها من 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).
المعاملات:
المعاملالنوعالافتراضيالوصف
protectedBranchesstring[]["main", "master"]أسماء الفروع المحمية التي يتم رفض commit/merge/rebase/cherry-pick عليها.

block-force-push

الحدث: PreToolUse (Bash)
الافتراضي: ينكر git push --force و git push -f.
لا توجد معاملات محددة للسياسة. استخدم hint متعدد الأغراض لاقتراح بدائل:
{
  "policyParams": {
    "block-force-push": {
      "hint": "أنشئ فرع جديد من HEAD الحالي (مثل `git checkout -b <new-branch>`) وادفع ذلك بدلاً من ذلك."
    }
  }
}

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 كيلوبايت.
المعاملات:
المعاملالنوعالافتراضيالوصف
thresholdKbnumber1024حد حجم الملف بالكيلوبايت الذي يتم فوقه إصدار تحذير.
مثال:
{
  "policyParams": {
    "warn-large-file-write": {
      "thresholdKb": 256
    }
  }
}
يفرض معالج الخطاف حد أقصى لـ stdin قدره 1 ميجابايت على الحمولات. لاختبار هذه السياسة بمحتوى صغير، اضبط 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.
المعاملالنوعالافتراضيالوصف
allowedstring[][]أسماء مديري الحزم المسموحة. يتم حجب أي مدير مكتشف ليس في هذه القائمة. عند كونها فارغة، السياسة بلا تأثير.
blockedstring[][]أسماء مديري إضافية للحجب بخلاف القائمة المدمجة (مثل ['pdm', 'pipx']).
تغطي القائمة المحجوبة المدمجة: pip, pip3, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo. استخدم blocked لإضافة مديرين ليسوا في هذه القائمة. إعداد مثالي:
{
  "enabledPolicies": ["prefer-package-manager"],
  "policyParams": {
    "prefer-package-manager": {
      "allowed": ["uv", "bun"],
      "blocked": ["pdm", "pipx"]
    }
  }
}
مع هذا الإعداد، pip install flask و pdm install flask كلاهما مرفوض برسالة تنصح Claude باستخدام uv أو bun بدلاً من ذلك. أوامر مثل uv pip install flask مسموحة لأن uv في القائمة البيضاء ويتم فحصه أولاً.

سلوك الذكاء الاصطناعي

اكتشف عندما يعلق الوكلاء أو يتصرفون بشكل غير متوقع.

warn-repeated-tool-calls

الحدث: PreToolUse (جميع الأدوات)
الافتراضي: ينصح Claude بإعادة النظر عند استدعاء نفس الأداة 3 مرات أو أكثر بمعاملات متطابقة — علامة شائعة على أن الوكيل عالق في حلقة.
لا توجد معاملات.

سير العمل

فرض سير عمل منضبط لنهاية الجلسة. تعمل هذه السياسات على حدث Stop وترفض الوكيل من التوقف حتى يتم استيفاء كل شرط. تتبع سلسلة تبعيات طبيعية: commit → push → PR → CI. إذا رفضت سياسة ما، يتم تخطي السياسات اللاحقة في السلسلة (الرفض يقطع المسار). جميع سياسات سير العمل fail-open: إذا لم تتوفر الأداة المطلوبة (مثل gh غير مثبت، لا توجد نقطة طرفية git)، تسمح السياسة برسالة معلوماتية توضح سبب تخطي الفحص.

دلالات Stop حسب CLI

يبدو فرض Stop مختلفًا قليلاً عبر سبعة CLIs مدعومة لأن كل واحد يفضح عقد خطاف نقطة نهاية مختلفة. النتيجة هي نفسها — الوكيل لا يتمكن من الإفلات من التوقف بينما بوابة سير عمل فاشلة — لكن الآليات تختلف. يلخص الجدول أدناه؛ فقط Pi لديها غرابة مرئية للمستخدم تستحق الفهم قبل تفعيل سياسة require-*-before-stop.
CLIعندما تعمل البوابةما تراه
Claude Codeحلقة الوكيل نفسها، فورًايستمر Claude في العمل — يصحح المشكلة، ثم يحاول الإنهاء مرة أخرى. لا يوجد انقطاع مرئي لك.
Codexحلقة الوكيل نفسها، فورًانفس Claude.
GitHub Copilot CLIحلقة الوكيل نفسها، فورًانفس Claude (يستخدم قناة إعادة محاولة {decision:"block", reason} الخاصة بـ Copilot — تم التحقق من الناحية التجريبية ضد Copilot CLI 1.0.41).
Cursor Agentحلقة الوكيل نفسها، فورًانفس Claude (يستخدم قناة {followup_message} الخاصة بـ Cursor — مع حد أقصى loop_limit، الافتراضي 5 إعادات محاولة).
Gemini CLIحلقة الوكيل نفسها، فورًانفس Claude (يستخدم قناة {decision:"block", reason} الخاصة بـ Gemini على AfterAgent).
OpenCodeحلقة الوكيل نفسها، فورًانفس Claude (يستخدم استدعاء SDK client.session.prompt(...) الخاص بـ OpenCode الموجهة عبر hookSpecificOutput.additionalContext).
Pi (pi-coding-agent)الدور التالي للمستخدمPi يتوقف بشكل مرئي عندما تعمل البوابة — تخرج حلقة الوكيل الخاصة به وتعود إلى الطلب. تعمل البوابة بعد ذلك في المرة التالية التي تقدم فيها موجه: يضيف failproofai توجيه MANDATORY ACTION REQUIRED إلى موجه نظام هذا الدور، ينصح LLM بإكمال خطوة سير العمل (التزام، الدفع، إلخ) قبل فعل ما طلبته.
قيد Pi. حدث AgentEndEvent الخاص بـ Pi (المعادل الأعلى مستوى لخطاف Stop الخاص بـ Claude) ليس له نوع نتيجة — بحلول الوقت الذي يعمل فيه، كانت حلقة وكيل Pi قد خرجت بالفعل. لا يمكن فرض Pi على إعادة المحاولة في نفس الحلقة بالطريقة التي يمكن بها مع Claude / Copilot / Cursor / Gemini / OpenCode. ينقل failproofai البوابة إلى حدث before_agent_start الخاص بـ Pi (الذي يعمل بعد الموجه التالي للمستخدم) بحيث يفرض فحص سير العمل، فقط على الدور التالي بدلاً من الدور الحالي.ما يعنيه هذا عمليًا:
  • بعد توقف Pi، يتم التقاط سبب الرفض في الذاكرة مفتاح بواسطة معرف جلسة Pi. الموجه التالي الذي تقدمه بالضبط في نفس عملية Pi يستنزفه: يرى LLM التوجيه MANDATORY ACTION REQUIRED في أعلى موجه نظامه، يلتزم (أو يدفع / يفتح PR / ينتظر CI)، وفقط بعد ذلك يستمر مع طلبك. سبب الرفض الملتقط هو لقطة واحدة — بمجرد استنزافه، تكون البوابة واضحة.
  • البوابة محدودة بعمر عملية Pi. إذا قمت بـ Ctrl+C Pi أو خرجت بين الأدوار، يتم إسقاط الإدخال في الذاكرة جنبًا إلى جنب مع العملية والبوابة ضائعة. Claude و Copilot و Cursor و Gemini و OpenCode لها نفس الحد (قتل الوكيل والبوابة ضائعة) — Pi فقط يجعلها أكثر وضوحًا لأن الوكيل يخرج بشكل مرئي قبل عمل البوابة.
  • يتم أيضًا مسح رفض معلق على session_shutdown لأي سبب (new / resume / fork / quit)، بحيث لا يمكن لبوابة قديمة من جلسة سابقة أن تسرب إلى جلسة جديدة بدأت في نفس عملية Pi.
إذا كنت تحتاج إلى إعادة محاولة نفس الحلقة على غرار Claude، قم بتشغيل سياسات Stop الخاصة بك ضمن أي من الستة CLIs المدعومة الأخرى. نحن نتابع Pi في المصدر الأعلى لنوع النتيجة المستقبلي على AgentEndEvent الذي سيسمح لنا بإغلاق هذه الفجوة.

require-commit-before-stop

الحدث: Stop
الافتراضي: ينكر التوقف عندما يكون هناك تغييرات غير مرتكبة (ملفات معدلة أو مرحلة أو غير متتبعة). يُرجع رسالة معلوماتية عندما تكون دليل العمل نظيفًا.
لا توجد معاملات.

require-push-before-stop

الحدث: Stop
الافتراضي: ينكر التوقف عندما يكون هناك عمليات التزام غير مدفوعة أو عندما لا يحتوي الفرع الحالي على فرع تتبع عن بعد. يقترح git push -u لإنشاء فرع تتبع إذا لزم الأمر. يفشل مفتوح إذا لم يتم تكوين أي عن بعد.
المعاملات:
المعاملالنوعالافتراضيالوصف
remotestring"origin"اسم العن بعد للدفع إليه.
مثال:
{
  "policyParams": {
    "require-push-before-stop": {
      "remote": "upstream"
    }
  }
}

require-pr-before-stop

الحدث: Stop
الافتراضي: ينكر التوقف عندما لا يوجد طلب سحب للفرع الحالي، أو عندما يكون طلب السحب الموجود مغلقًا دون دمج. ينصح Claude بإنشاء PR باستخدام gh pr create. عندما يتم دمج الطلب، تسمح السياسة (تم شحن العمل) والرسالة تلميح للتبديل خارج الفرع (git checkout main && git pull).
لا توجد معاملات.
تتطلب هذه السياسة GitHub CLI (gh) المثبتة والموثقة. قم بتشغيل gh auth login مع رمز الوصول الشخصي الذي يحتوي على نطاق repo للقراءة الوصول إلى طلبات السحب. إذا لم يتم تثبيت gh أو لم يتم التوثيق، تفشل السياسة مفتوحة وتُبلغ عن السبب إلى Claude.

require-no-conflicts-before-stop

الحدث: Stop
الافتراضي: ينكر التوقف عندما لا يمكن دمج الفرع الحالي بشكل نظيف في فرع القاعدة. تتحقق السياسة أولاً من أنه يوجد OPEN PR على GitHub للفرع — بدون واحد، لا توجد هدف دمج لفرضها، لذا تقصر السياسة بأكملها على السماح. بمجرد تأكيد OPEN PR، يعمل مسحان مستقلان:
  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 تستشير المدج المخزن في الذاكرة قبل السماح. المعاملات:
المعاملالنوعالافتراضيالوصف
baseBranchstring"main"فرع القاعدة للفحص من أجل التضاربات.
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 المساهم الخارجي، حيث يبلغ التطبيق عن محايد بدلاً من النجاح/الفشل). يُرجع رسالة معلوماتية عند نجاح جميع الفحوصات.
لا توجد معاملات.
تتطلب هذه السياسة GitHub CLI (gh) المثبتة والموثقة. قم بتشغيل gh auth login مع رمز وصول شخصي له نطاق repo للقراءة الوصول إلى سير عمل الإجراءات و Checks API. إذا لم يتم تثبيت gh أو لم يتم التوثيق، تفشل السياسة مفتوحة وتُبلغ عن السبب إلى Claude.


تعطيل السياسات الفردية

أزل سياسة محددة من enabledPolicies في إعدادك، أو قم بتبديلها في علامة التبويب Policies في لوحة التحكم.
{
  "enabledPolicies": [
    "block-rm-rf",
    "sanitize-api-keys"
  ]
}
السياسات غير المدرجة في enabledPolicies لا تعمل، حتى إذا كانت إدخالات policyParams موجودة لها.