> ## Documentation Index
> Fetch the complete documentation index at: https://exosphere-auto-translate-docs-20260624-1149.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Built in policies

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

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

***

## نظرة عامة

يتم تجميع السياسات في فئات:

| الفئة                                    | السياسات                                                                                                                                     | نوع الخطاف  |
| ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| [الأوامر الخطيرة](#dangerous-commands)   | block-sudo, block-rm-rf, block-curl-pipe-sh, block-failproofai-commands                                                                      | PreToolUse  |
| [أوامر البنية الأساسية](#infra-commands) | block-kubectl, block-terraform, block-aws-cli, block-gcloud, block-az-cli, block-helm, block-gh-pipeline                                     | PreToolUse  |
| [الأسرار (معقمات)](#secrets-sanitizers)  | sanitize-jwt, sanitize-api-keys, sanitize-connection-strings, sanitize-private-key-content, sanitize-bearer-tokens                           | PostToolUse |
| [البيئة](#environment)                   | block-env-files, protect-env-vars                                                                                                            | PreToolUse  |
| [الوصول للملفات](#file-access)           | block-read-outside-cwd, block-secrets-write                                                                                                  | PreToolUse  |
| [Git](#git)                              | block-push-master, block-work-on-main, block-force-push, warn-git-amend, warn-git-stash-drop, warn-all-files-staged                          | PreToolUse  |
| [قاعدة البيانات](#database)              | warn-destructive-sql, warn-schema-alteration                                                                                                 | PreToolUse  |
| [التحذيرات](#warnings)                   | warn-large-file-write, warn-package-publish, warn-background-process, warn-global-package-install                                            | PreToolUse  |
| [مديري الحزم](#package-managers)         | prefer-package-manager                                                                                                                       | PreToolUse  |
| [سير العمل](#workflow)                   | require-commit-before-stop, require-push-before-stop, require-pr-before-stop, require-no-conflicts-before-stop, require-ci-green-before-stop | Stop        |

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

### المساحات

تعيش كل سياسة في فتحة `<namespace>/<name>`. تنتمي السياسات المدمجة إلى مساحة **`failproofai/`** — على سبيل المثال، `failproofai/sanitize-jwt`. تمنع المساحة الاسمية الاصطدامات عند تحميل سياسات مخصصة أو من جهات خارجية بأسماء قصيرة متشابهة.

في إعدادك، يمكنك الإشارة إلى سياسة مدمجة بواسطة اسمها القصير أو اسمها المؤهل؛ كلا الشكلين يؤديان إلى نفس السياسة:

```json theme={null}
{
  "enabledPolicies": [
    "sanitize-jwt",
    "failproofai/block-rm-rf"
  ]
}
```

إذا لم يكن لأي اسم `/`، يعامله failproofai كما ينتمي إلى المساحة الافتراضية `failproofai`. تُحتفظ بالأسماء التي تحتوي بالفعل على `/` (مثل `myorg/foo`، `custom/my-hook`) كما هي.

* **`require-`** — توقيف حدث الإيقاف حتى تتم الشروط.

***

<Tip>
  كل سياسة تدعم حقل `hint` اختياري في `policyParams`. يتم إلحاق التلميح برسالة deny أو instruct التي يراها Claude، مما يوفر توجيهات قابلة للتنفيذ دون تعديل كود السياسة. يعمل مع السياسات المدمجة والمخصصة والمتعارف عليها. راجع [Configuration → hint](/ar/configuration#hint-cross-cutting) للتفاصيل.
</Tip>

***

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

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

### `block-sudo`

**الحدث:** PreToolUse (Bash)\
**الافتراضي:** ينكر أي أمر `sudo`.

يحجب الاستدعاءات التي تتضمن كلمة المفتاح `sudo`. يتم مطابقة النمط على رموز الأوامر المحللة، وليس السلسلة الخام، لمنع التحايل عبر حقن عامل الصدفة.

**المعاملات:**

| المعامل         | النوع      | الافتراضي | الوصف                                                                   |
| --------------- | ---------- | --------- | ----------------------------------------------------------------------- |
| `allowPatterns` | `string[]` | `[]`      | بادئات أوامر دقيقة مسموحة. يتم مطابقة كل إدخال مقابل رموز argv المحللة. |

**مثال:**

```json theme={null}
{
  "policyParams": {
    "block-sudo": {
      "allowPatterns": ["sudo systemctl status", "sudo journalctl"]
    }
  }
}
```

مع هذا الإعداد، `sudo systemctl status nginx` مسموح، لكن `sudo rm /etc/hosts` مرفوض.

<Note>
  يتم مطابقة الأنماط مقابل الرموز المحللة، وليس سلسلة الأوامر الخام. هذا يمنع التحايل عبر عوامل الصدفة المضافة (مثل `sudo systemctl status x; rm -rf /` لا تطابق `sudo systemctl status *`).
</Note>

***

### `block-rm-rf`

**الحدث:** PreToolUse (Bash)\
**الافتراضي:** ينكر `rm -rf`، `rm -fr`، وأشكال الحذف التكراري المشابهة.

**المعاملات:**

| المعامل      | النوع      | الافتراضي | الوصف                                                      |
| ------------ | ---------- | --------- | ---------------------------------------------------------- |
| `allowPaths` | `string[]` | `[]`      | المسارات التي يمكن حذفها بشكل آمن بشكل متكرر (مثل `/tmp`). |

**مثال:**

```json theme={null}
{
  "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`](#block-sudo): يتم مطابقة الرموز مقابل argv المحللة، `*` هو بدل لرمز واحد، وأي أمر يحتوي على عامل صدفة مستقل (`&&`، `||`، `|`، `;`) أو رمز بأحرف صدفة مدمجة يتم رفضه قبل مطابقة القائمة البيضاء لمنع تجاوزات الحقن.

### `block-kubectl`

**الحدث:** PreToolUse (Bash)\
**الافتراضي:** ينكر أي استدعاء `kubectl`.

**المعاملات:**

| المعامل         | النوع      | الافتراضي | الوصف                        |
| --------------- | ---------- | --------- | ---------------------------- |
| `allowPatterns` | `string[]` | `[]`      | بادئات أوامر kubectl مسموحة. |

**مثال:**

```json theme={null}
{
  "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).

**المعاملات:**

| المعامل         | النوع      | الافتراضي | الوصف                               |
| --------------- | ---------- | --------- | ----------------------------------- |
| `allowPatterns` | `string[]` | `[]`      | بادئات أوامر terraform/tofu مسموحة. |

**مثال:**

```json theme={null}
{
  "policyParams": {
    "block-terraform": {
      "allowPatterns": ["terraform plan", "terraform validate", "terraform show *"]
    }
  }
}
```

***

### `block-aws-cli`

**الحدث:** PreToolUse (Bash)\
**الافتراضي:** ينكر أي استدعاء `aws` CLI.

**المعاملات:**

| المعامل         | النوع      | الافتراضي | الوصف                        |
| --------------- | ---------- | --------- | ---------------------------- |
| `allowPatterns` | `string[]` | `[]`      | بادئات أوامر aws CLI مسموحة. |

**مثال:**

```json theme={null}
{
  "policyParams": {
    "block-aws-cli": {
      "allowPatterns": ["aws s3 ls *", "aws sts get-caller-identity"]
    }
  }
}
```

***

### `block-gcloud`

**الحدث:** PreToolUse (Bash)\
**الافتراضي:** ينكر أي استدعاء `gcloud` (Google Cloud) CLI.

**المعاملات:**

| المعامل         | النوع      | الافتراضي | الوصف                       |
| --------------- | ---------- | --------- | --------------------------- |
| `allowPatterns` | `string[]` | `[]`      | بادئات أوامر gcloud مسموحة. |

**مثال:**

```json theme={null}
{
  "policyParams": {
    "block-gcloud": {
      "allowPatterns": ["gcloud auth list", "gcloud config list"]
    }
  }
}
```

***

### `block-az-cli`

**الحدث:** PreToolUse (Bash)\
**الافتراضي:** ينكر أي استدعاء `az` (Azure) CLI.

**المعاملات:**

| المعامل         | النوع      | الافتراضي | الوصف                       |
| --------------- | ---------- | --------- | --------------------------- |
| `allowPatterns` | `string[]` | `[]`      | بادئات أوامر az CLI مسموحة. |

**مثال:**

```json theme={null}
{
  "policyParams": {
    "block-az-cli": {
      "allowPatterns": ["az account show", "az group list"]
    }
  }
}
```

***

### `block-helm`

**الحدث:** PreToolUse (Bash)\
**الافتراضي:** ينكر أي استدعاء `helm`.

**المعاملات:**

| المعامل         | النوع      | الافتراضي | الوصف                     |
| --------------- | ---------- | --------- | ------------------------- |
| `allowPatterns` | `string[]` | `[]`      | بادئات أوامر helm مسموحة. |

**مثال:**

```json theme={null}
{
  "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).

**المعاملات:**

| المعامل         | النوع      | الافتراضي | الوصف                                                                     |
| --------------- | ---------- | --------- | ------------------------------------------------------------------------- |
| `allowPatterns` | `string[]` | `[]`      | استدعاءات نصية محددة للسماح بها على الرغم من أنها ستكون مرفوضة بخلاف ذلك. |

**مثال:**

```json theme={null}
{
  "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 إضافية تعامل كأسرار. |

**مثال:**

```json theme={null}
{
  "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` إلى دليل فرعي.

**المعاملات:**

| المعامل      | النوع      | الافتراضي | الوصف                                                          |
| ------------ | ---------- | --------- | -------------------------------------------------------------- |
| `allowPaths` | `string[]` | `[]`      | بادئات المسارات المطلقة المسموحة حتى لو كانت خارج جذر المشروع. |

**مثال:**

```json theme={null}
{
  "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`.

**المعاملات:**

| المعامل              | النوع      | الافتراضي | الوصف                                  |
| -------------------- | ---------- | --------- | -------------------------------------- |
| `additionalPatterns` | `string[]` | `[]`      | أنماط اسم ملف إضافية (نمط glob) للحجب. |

**مثال:**

```json theme={null}
{
  "policyParams": {
    "block-secrets-write": {
      "additionalPatterns": [".token", ".secret"]
    }
  }
}
```

***

## Git

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

### `block-push-master`

**الحدث:** PreToolUse (Bash)\
**الافتراضي:** ينكر `git push origin main` و `git push origin master`.

**المعاملات:**

| المعامل             | النوع      | الافتراضي            | الوصف                                         |
| ------------------- | ---------- | -------------------- | --------------------------------------------- |
| `protectedBranches` | `string[]` | `["main", "master"]` | أسماء الفروع التي لا يمكن الدفع إليها مباشرة. |

**مثال:**

```json theme={null}
{
  "policyParams": {
    "block-push-master": {
      "protectedBranches": ["main", "master", "release", "prod"]
    }
  }
}
```

<Tip>
  للسماح بالدفع إلى جميع الفروع (تعطيل هذه السياسة بشكل فعال دون إزالتها من `enabledPolicies`)، اضبط `protectedBranches: []`.
</Tip>

***

### `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`).

**المعاملات:**

| المعامل             | النوع      | الافتراضي            | الوصف                                                                    |
| ------------------- | ---------- | -------------------- | ------------------------------------------------------------------------ |
| `protectedBranches` | `string[]` | `["main", "master"]` | أسماء الفروع المحمية التي يتم رفض commit/merge/rebase/cherry-pick عليها. |

***

### `block-force-push`

**الحدث:** PreToolUse (Bash)\
**الافتراضي:** ينكر `git push --force` و `git push -f`.

لا توجد معاملات محددة للسياسة. استخدم [`hint`](/ar/configuration#hint-cross-cutting) متعدد الأغراض لاقتراح بدائل:

```json theme={null}
{
  "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 كيلوبايت.

**المعاملات:**

| المعامل       | النوع    | الافتراضي | الوصف                                               |
| ------------- | -------- | --------- | --------------------------------------------------- |
| `thresholdKb` | `number` | `1024`    | حد حجم الملف بالكيلوبايت الذي يتم فوقه إصدار تحذير. |

**مثال:**

```json theme={null}
{
  "policyParams": {
    "warn-large-file-write": {
      "thresholdKb": 256
    }
  }
}
```

<Note>
  يفرض معالج الخطاف حد أقصى لـ stdin قدره 1 ميجابايت على الحمولات. لاختبار هذه السياسة بمحتوى صغير، اضبط `thresholdKb` على قيمة أقل بكثير من 1024.
</Note>

***

### `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.

| المعامل   | النوع     | الافتراضي | الوصف                                                                                                     |
| --------- | --------- | --------- | --------------------------------------------------------------------------------------------------------- |
| `allowed` | string\[] | `[]`      | أسماء مديري الحزم المسموحة. يتم حجب أي مدير مكتشف ليس في هذه القائمة. عند كونها فارغة، السياسة بلا تأثير. |
| `blocked` | string\[] | `[]`      | أسماء مديري إضافية للحجب بخلاف القائمة المدمجة (مثل `['pdm', 'pipx']`).                                   |

تغطي القائمة المحجوبة المدمجة: pip, pip3, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo. استخدم `blocked` لإضافة مديرين ليسوا في هذه القائمة.

**إعداد مثالي:**

```json theme={null}
{
  "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 بإكمال خطوة سير العمل (التزام، الدفع، إلخ) قبل فعل ما طلبته. |

<Note>
  **قيد 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` الذي سيسمح لنا بإغلاق هذه الفجوة.
</Note>

### `require-commit-before-stop`

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

لا توجد معاملات.

***

### `require-push-before-stop`

**الحدث:** Stop\
**الافتراضي:** ينكر التوقف عندما يكون هناك عمليات التزام غير مدفوعة أو عندما لا يحتوي الفرع الحالي على فرع تتبع عن بعد. يقترح `git push -u` لإنشاء فرع تتبع إذا لزم الأمر. يفشل مفتوح إذا لم يتم تكوين أي عن بعد.

**المعاملات:**

| المعامل  | النوع    | الافتراضي  | الوصف                    |
| -------- | -------- | ---------- | ------------------------ |
| `remote` | `string` | `"origin"` | اسم العن بعد للدفع إليه. |

**مثال:**

```json theme={null}
{
  "policyParams": {
    "require-push-before-stop": {
      "remote": "upstream"
    }
  }
}
```

***

### `require-pr-before-stop`

**الحدث:** Stop\
**الافتراضي:** ينكر التوقف عندما لا يوجد طلب سحب للفرع الحالي، أو عندما يكون طلب السحب الموجود مغلقًا دون دمج. ينصح Claude بإنشاء PR باستخدام `gh pr create`. عندما يتم **دمج** الطلب، تسمح السياسة (تم شحن العمل) والرسالة تلميح للتبديل خارج الفرع (`git checkout main && git pull`).

لا توجد معاملات.

<Note>
  تتطلب هذه السياسة [GitHub CLI](https://cli.github.com/) (`gh`) المثبتة والموثقة.
  قم بتشغيل `gh auth login` مع رمز الوصول الشخصي الذي يحتوي على نطاق `repo` للقراءة
  الوصول إلى طلبات السحب. إذا لم يتم تثبيت `gh` أو لم يتم التوثيق، تفشل السياسة مفتوحة وتُبلغ عن السبب إلى Claude.
</Note>

***

### `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 تستشير المدج المخزن في الذاكرة قبل السماح.

**المعاملات:**

| المعامل      | النوع    | الافتراضي | الوصف                               |
| ------------ | -------- | --------- | ----------------------------------- |
| `baseBranch` | `string` | `"main"`  | فرع القاعدة للفحص من أجل التضاربات. |

<Note>
  GitHub CLI (`gh`) مطلوب لهذه السياسة. تستخدم السياسة `gh pr view` لتأكيد وجود PR `OPEN`
  قبل تشغيل أي مسح تضارب — بدون `gh`، السياسة تقصر على السماح. قم بتشغيل `gh auth login` مع رمز وصول شخصي له
  نطاق `repo` للقراءة للوصول إلى طلبات السحب.
</Note>

***

### `require-ci-green-before-stop`

**الحدث:** Stop\
**الافتراضي:** ينكر التوقف عندما تكون فحوصات CI فاشلة أو تعمل بعد على الفرع الحالي. يفحص كل من سير عمل GitHub Actions والفحوصات من جهات خارجية (مثل CodeRabbit, SonarCloud, Codecov). يعامل `skipped`, `cancelled`, و `neutral` الخلاصات كعدم فشل (الأخير يغطي مثل تنبيهات Socket Security على PRs المساهم الخارجي، حيث يبلغ التطبيق عن محايد بدلاً من النجاح/الفشل). يُرجع رسالة معلوماتية عند نجاح جميع الفحوصات.

لا توجد معاملات.

<Note>
  تتطلب هذه السياسة [GitHub CLI](https://cli.github.com/) (`gh`) المثبتة والموثقة.
  قم بتشغيل `gh auth login` مع رمز وصول شخصي له نطاق `repo` للقراءة
  الوصول إلى سير عمل الإجراءات و Checks API. إذا لم يتم تثبيت `gh` أو لم يتم التوثيق، تفشل السياسة مفتوحة وتُبلغ عن السبب إلى Claude.
</Note>

***

***

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

أزل سياسة محددة من `enabledPolicies` في إعدادك، أو قم بتبديلها في علامة التبويب Policies في لوحة التحكم.

```json theme={null}
{
  "enabledPolicies": [
    "block-rm-rf",
    "sanitize-api-keys"
  ]
}
```

السياسات غير المدرجة في `enabledPolicies` لا تعمل، حتى إذا كانت إدخالات `policyParams` موجودة لها.
