> ## Documentation Index
> Fetch the complete documentation index at: https://docs.befailproof.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom

title: "السياسات المخصصة"
description: "اكتب سياسة لنمط فشل فريد لسير عمل وكيلك."
icon: "shield-plus"
-------------------

أنشئ ملف ينتهي بـ `policies.js` أو `policies.mjs` أو `policies.ts` ضمن `.failproofai/policies/`. تُحمّل ملفات الاتفاقية تلقائياً على نطاق المشروع والمستخدم.

## اختبر السياسة قبل النشر على السحابة

<Tabs>
  <Tab title="لوحة التحكم">
    1. ثبّت السياسة المخصصة على آلة اختبار واحدة وأطلق إجراءً متطابقاً وعدم تطابق شرعياً.
    2. انتقل إلى **Observe → policy** وقارن بين القرارين.
    3. افتح كل جلسة مرتبطة وتحقق من أن حمل الحدث يحتوي على أدلة كافية للقاعدة.
    4. عندما يكون السلوك صحيحاً، انقل المصدر المراجع إلى **Admin → policy editor** وأصدر نسخة.
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    failproofai policies --install --custom ./security.policies.ts \
      --cli claude --scope project
    failproofai policies
    ```

    ملفات الاتفاقية ضمن `.failproofai/policies/` تُحمّل بدون `--custom`. احفظ أمر التثبيت الصريح في CI عندما يجب أن يفشل التحقق على وحدة معطوبة.
  </Tab>
</Tabs>

```ts theme={null}
import { customPolicies, allow, deny } from "failproofai";

customPolicies.add({
  name: "protect-production-paths",
  description: "Block writes to production configuration",
  match: { events: ["PreToolUse"] },
  fn: async (ctx) => {
    if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow();
    const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/");
    if (path.split("/").includes("production")) {
      return deny("Writes to production configuration require approval.");
    }
    return allow();
  },
});
```

يتطابق هذا مع `production/config.yml` و `/srv/production/config.yml` و `/srv/production` و `C:\\production\\config.yml` لكل من `Write` و `Edit`. لا يتطابق مع أسماء مثل `production-backup` لأن `production` يجب أن تكون قطعة مسار كاملة.

تحقق وثبّت ملفاً صريحاً:

```bash theme={null}
failproofai policies --install --custom ./security.policies.ts
```

سياق السياسة يتضمن نوع الحدث والحمل المُعايير واسم الأداة والإدخال ومعادات الجلسة والمعاملات ومصدر CLI عند توفره.

## اختبر مسارات الفشل

قم بالتحقق بعد تغيير ملف الدخول أو أي وحدة محلية يستوردها:

```bash theme={null}
failproofai policies --install --custom ./security.policies.ts --scope project
```

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

استخدم أسماءً فريدة عالمياً عبر السياسات الصريحة والاتفاقية والمُدارة من السحابة. اجعل دوال السياسة حتمية، وقيّد الاستدعاءات الخارجية بمهل زمنية قصيرة، وأرجع `allow` أو `instruct` أو `deny` مقصود على كل مسار.

<Warning>
  السياسة المخصصة هي كود إنفاذ. اختبر الحقول المفقودة وأسماء الأدوات البديلة والمدخلات المشوهة—ليس فقط المطابقة المتوقعة.
</Warning>
