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

# מדיניויות מובנות

> כל 39 המדיניויות המובנות שתופסות מצבי כשל נפוצים של סוכנים

failproofai מגיע עם 39 מדיניויות מובנות שתופסות מצבי כשל נפוצים של סוכנים. כל מדיניות מופעלת על סוג אירוע hook ושם כלי ספציפיים. תשע עשרה מדיניויות מקבלות פרמטרים המאפשרים לכם לכוונן את התנהגותן ללא כתיבת קוד. חמש מדיניויות זרימת עבודה אוכפות צינור commit → push → PR → CI לפני שClaude עוצר.

***

## סקירה כללית

המדיניויות מסודרות לקטגוריות:

| קטגוריה                               | מדיניויות                                                                                                                                    | סוג Hook    |
| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| [פקודות מסוכנות](#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-`** — חסום את אירוע ה-Stop עד שתנאים מתקיימים.

***

<Tip>
  כל מדיניות תומכת בשדה `hint` אופציונלי ב-`policyParams`. ה-hint מוסף להודעת ה-deny או ה-instruct שClaude רואה, ונותן הנחיות פעולה ללא שינוי קוד המדיניות. עובד עם מדיניויות מובנות, מותאמות וקונוונציה. ראה [Configuration → hint](/he/configuration#hint-cross-cutting) לפרטים.
</Tip>

***

## פקודות מסוכנות

מנע סוכנים מהפעלת פעולות שקשה לבטל או שעלולות לפגוע במערכת המארחת.

### `block-sudo`

**אירוע:** PreToolUse (Bash)\
**ברירת מחדל:** שוללת כל פקודת `sudo`.

חוסם הופעות שמכילות את מילת המפתח `sudo`. התאמת דפוס נעשית על אסימוני פקודה מנותחים, לא על המחרוזת הגולמית, כדי למנוע עקיפה דרך הזרקת אופרטור shell.

**פרמטרים:**

| פרמטר           | סוג        | ברירת מחדל | תיאור                                                               |
| --------------- | ---------- | ---------- | ------------------------------------------------------------------- |
| `allowPatterns` | `string[]` | `[]`       | קידומות פקודה מדויקות המורשות. כל ערך מותאם לאסימוני argv המנותחים. |

**דוגמה:**

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

עם תצורה זו, `sudo systemctl status nginx` מורשה, אך `sudo rm /etc/hosts` שלול.

<Note>
  דפוסים מותאמים לאסימוני מנותחים, לא למחרוזת הפקודה הגולמית. זה מונע עקיפה דרך אופרטורים shell מצורפים (למשל `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`).

אין פרמטרים.

***

## פקודות תשתית

עצור סוכנים קוד מהפעלת CLI תשתית או הטלת קנות CI/CD. כל המדיניויות בקטגוריה זו הן **opt-in** (`defaultEnabled: false`) — סוכנים שכל להם צורך לגיטימי להתקשר ל-`kubectl`, `terraform` וכו' לא יופרעו אלא אם אתה מפעיל את המדיניות. כשמופעלת, כל הופעה של ה-CLI המתאימה שלול אלא אם הפקודה תואמת ערך ב-`allowPatterns`.

דקדוק הדפוס זהה ל-[`block-sudo`](#block-sudo): אסימוני argv מנותחים מותאמים, `*` הוא כרט עדבר עבור אסימון אחד, וכל פקודה המכילה אופרטור shell עצמאי (`&&`, `||`, `|`, `;`) או אסימון עם תווי shell מובנים שלול לפני התאמת מאימה כדי למנוע עקיפות הזרקה.

### `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)\
**ברירת מחדל:** שוללת כל הופעה של CLI `aws`.

**פרמטרים:**

| פרמטר           | סוג        | ברירת מחדל | תיאור                          |
| --------------- | ---------- | ---------- | ------------------------------ |
| `allowPatterns` | `string[]` | `[]`       | קידומות פקודה aws CLI המורשות. |

**דוגמה:**

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

***

### `block-gcloud`

**אירוע:** PreToolUse (Bash)\
**ברירת מחדל:** שוללת כל הופעה של CLI `gcloud` (Google Cloud).

**פרמטרים:**

| פרמטר           | סוג        | ברירת מחדל | תיאור                         |
| --------------- | ---------- | ---------- | ----------------------------- |
| `allowPatterns` | `string[]` | `[]`       | קידומות פקודה gcloud המורשות. |

**דוגמה:**

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

***

### `block-az-cli`

**אירוע:** PreToolUse (Bash)\
**ברירת מחדל:** שוללת כל הופעה של CLI `az` (Azure).

**פרמטרים:**

| פרמטר           | סוג        | ברירת מחדל | תיאור                         |
| --------------- | ---------- | ---------- | ----------------------------- |
| `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 *"]
    }
  }
}
```

***

## סודות (מנקים)

עצור סוכנים מדלף credentials להקשרם או לפלט שלהם. מדיניויות מנקה מופעלות על אירועי **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 (כל הכלים)\
**ברירת מחדל:** מחווה מחרוזות חיבור בסיס נתונים המכילות credentials מובנים (למשל `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`s לתיקייה משנית.

**פרמטרים:**

| פרמטר        | סוג        | ברירת מחדל | תיאור                                                |
| ------------ | ---------- | ---------- | ---------------------------------------------------- |
| `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-style) לחסום. |

**דוגמה:**

```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`](/he/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 KB.

**פרמטרים:**

| פרמטר         | סוג      | ברירת מחדל | תיאור                                         |
| ------------- | -------- | ---------- | --------------------------------------------- |
| `thresholdKb` | `number` | `1024`     | סף גודל קובץ בקילו-בייטים שמעליו ניתנת אזהרה. |

**דוגמה:**

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

<Note>
  מטפל ה-hook אוכף מגבלת stdin של 1 MB על מטענים. כדי לבדוק מדיניות זו עם תוכן קטן, הגדר `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\[] | `[]`       | שמות מנהלי חבילות מורשים. כל מנהל מזוהה שלא ברשימה זו מחוסם. כשריק, המדיניות היא no-op. |
| `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` נמצא ברשימה ובודק קודם.

***

## התנהגות AI

גלה כשסוכנים תקועים או מתנהגים בצורה בלתי צפויה.

### `warn-repeated-tool-calls`

**אירוע:** PreToolUse (כל הכלים)\
**ברירת מחדל:** נוקט Claude להתחשב מחדש כאשר אותו כלי נקרא 3+ פעמים עם פרמטרים זהים - סימן נפוץ שהסוכן תקוע בלולאה.

אין פרמטרים.

***

## זרימת עבודה

אכוף זרימת עבודה משמעתית של סיום פרקו. מדיניויות אלה מופעלות על אירוע **Stop** ושוללות את הסוכן מהעצירה עד שכל תנאי מתקיים. הם עוקבים אחר שרשרת תלות טבעית: commit → push → PR → CI. אם מדיניות שוללת, מדיניויות מאוחרות בשרשרת מדולגות (deny מקצר מעגל).

כל מדיניויות זרימת עבודה הן **fail-open**: אם הכלי הנדרש לא זמין (למשל `gh` לא מותקן, אין ריווח git), המדיניות מורשה עם הודעה אינפורמטיבית המסבירה מדוע הבדיקה דולגה.

### סמנטיקה Stop של לפי-CLI

אכיפת Stop נראית שונה במעט על פני ששת ה-CLI הנתמכים כי לכל אחד יש חוזה hook של סיום סוכן שונה. ה-**outcome** זהה — הסוכן לא יוצא עם עצירה בזמן שער זרימת עבודה נכשל — אך ה-**mechanics** שונים. הטבלה להלן מסכמת; רק 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 ניסיונות חוזרים).                                                                                                                                                                            |
| OpenCode                 | אותו לולאת סוכן, מיד | זהה ל-Claude (משתמש בקריאת SDK `client.session.prompt(...)` של OpenCode מנוטרלת דרך `hookSpecificOutput.additionalContext`).                                                                                                                                                                |
| **Pi (pi-coding-agent)** | **תור משתמש הבא**    | **Pi עוצר בצורה נראית** כשהשער עוצר — לולאת הסוכן שלו יוצאת ואתה חוזר ללתזמון. השער אז עוצר בפעם הבאה שאתה שולח תזמון: failproofai מקדים הנחיה `MANDATORY ACTION REQUIRED` לתזמון הסיסטם של הסיבוב הזה, נוקט את ה-LLM להשלים את שלב זרימת העבודה (commit, push, וכו') לפני עשיית מה שביקשת. |

<Note>
  **מגבלה של Pi.** `AgentEndEvent` של Pi (המקבילה הזרם של אירוע `Stop` של Claude) אין סוג תוצאה — ברגע שהוא עוצר, לולאת הסוכן של Pi כבר יצאה. Pi לא יכול להילחם להחזור לאותה לולאה בדרך שClaude / Copilot / Cursor / OpenCode יכולים. failproofai מעביר את השער לאירוע `before_agent_start` של Pi (שעוצר אחרי התזמון הבא של המשתמש) כדי שבדיקת זרימת העבודה עדיין אוכפת, רק בסיבוב הבא במקום הנוכחי.

  **מה זה אומר בפרקטיקה:**

  * אחרי שPi עוצר, סיבת ה-deny נתפסה בזיכרון מפתח אחרי מזהה סשן Pi. התזמון הבא בדיוק שאתה שולח באותו תהליך Pi סוך את זה: ה-LLM רואה את ההנחיה `MANDATORY ACTION REQUIRED` בחלק העליון של תזמון הסיסטם שלו, commits (או דוחף / פותח את ה-PR / מחכה ל-CI), רק אחרי כן ממשיך עם בקשתך. סיבת ה-deny שתפסה היא one-shot — ברגע שסוך, השער ברור.
  * השער מותחם על ידי חיי תהליך של Pi. אם `Ctrl+C` Pi או יוצא בין סיבובים, הערך בזיכרון בזיכרון מושלך יחד עם התהליך ואת השער מיסה. Claude, Copilot, Cursor ו-OpenCode יש את אותו כולמן (הרוג את הסוכן ואת השער מיסה) — Pi פשוט עושה את זה יותר נראית כי הסוכן יוצא בצורה נראית לפני ש-פיר עוצר.
  * deny ממתין הוא גם ברור על `session_shutdown` לכל סיבה (`new` / `resume` / `fork` / `quit`), כך שערט שנגרד מסשן קודם לא יכול לדלוף לסשן טרי שהחל באותו תהליך Pi.

  אם אתה צריך retry זהה לClaude של אותו לולאה, הרץ את המדיניויות `Stop` שלך תחת כל אחד מחמש ה-CLI הנתמכים האחרים. אנחנו עוקבים אחרי Pi קודם לעתיד סוג תוצאה על `AgentEndEvent` שיתן לנו לסגור את הפער הזה.
</Note>

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

**אירוע:** Stop\
**ברירת מחדל:** שוללת עצירה כשיש שינויים ללא commit (שונה, מעודכן או קבצים שלא במעקב). מחזירה הודעה אינפורמטיבית כשספרית העבודה נקייה.

אין פרמטרים.

***

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

**אירוע:** Stop\
**ברירת מחדל:** שוללת עצירה כשיש commits שלא דוחפו או כשלענף הנוכחי אין ענף עקיבה מרחוק. מציע `git push -u` ליצירת ענף עקיבה אם נדרש. נכשל פתוח אם אין ריווח מחוקי.

**פרמטרים:**

| פרמטר    | סוג      | ברירת מחדל | תיאור                |
| -------- | -------- | ---------- | -------------------- |
| `remote` | `string` | `"origin"` | שם ריווח לדחוף אליו. |

**דוגמה:**

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

***

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

**אירוע:** Stop\
**ברירת מחדל:** שוללת עצירה כשאין בקשת משיכה לענף הנוכחי, או כשה-PR הקיים סגור ללא merger. נוקט Claude ליצור PR עם `gh pr create`. כאשר ה-PR **מוזג**, המדיניות מורשה (העבודה נשלחה) והודעה רמזה לעבור את הענף (`git checkout main && git pull`).

אין פרמטרים.

<Note>
  מדיניות זו דורשת [GitHub CLI](https://cli.github.com/) (`gh`) להיות מותקן ומאומת.
  הרץ `gh auth login` עם אסימון גישה אישי בעל `repo` scope לגישה קריאה לבקשות משיכה. אם `gh` לא מותקן או לא מאומת, המדיניות כושלת פתוחה ומדווחת את הסיבה ל-Claude.
</Note>

***

### `require-no-conflicts-before-stop`

**אירוע:** Stop\
**ברירת מחדל:** שוללת עצירה כשהענף הנוכחי לא יכול להתמזג בנקיון לענף הבסיס. המדיניות קודם כל מאשרת שיש `OPEN` PR על GitHub לענף — ללא אחד, אין מטרת merger לאכוף, כל מדיניות קצרה מעגל להתיר. ברגע שה-OPEN\` PR מאושר, שני חקירות עצמאיות מופעלות:

1. **מקומי** — `git merge-tree --write-tree --name-only origin/<baseBranch> HEAD`. בסכסוך, הודעת ה-deny שמות קבצי הסכסוך כך Claude יודע בדיוק מה לפתור.
2. **GitHub** — משתמשות שוב בתוצאה `gh pr view --json mergeable,state` שכבר נמשכה בבדיקה מקדימה. תופסת סכסוכים שקובץ `origin/<baseBranch>` ישן בתוך היה מיסה (למשל מישהו נחת PR סכסוך על `main` מאז הנתיבה האחרונה). תוצאה `CONFLICTING` שוללת. תוצאה `UNKNOWN` גם שוללת ונוקטת Claude להמתין \~10 שניות ובדוק שוב לפני ניסיון להפסיק שוב — זה מונע false negatives בזמן GitHub recomputes.

דוג לחלוטין (מורשה) כאשר: `gh` לא מותקן, אין PR לענף, מצב ה-PR לא `OPEN` (למשל `MERGED`, `CLOSED`), או `gh pr view` מחזירה פלט לא parseable. גם כושל פתוח כאשר `origin/<baseBranch>` חסר מקומית או כאשר אין commits לפני בסיס — הנופלים של Layer 1 האלה עדיין בודקים את ה-PR mergeability בחוסן לפני התיר.

**פרמטרים:**

| פרמטר        | סוג      | ברירת מחדל | תיאור                       |
| ------------ | -------- | ---------- | --------------------------- |
| `baseBranch` | `string` | `"main"`   | ענף בסיס לבדוק סכסוכים נגד. |

<Note>
  GitHub CLI (`gh`) נדרש למדיניות זו. המדיניות משתמשת ב-`gh pr view` לאשר
  שה-OPEN`PR קיים לפני הפעלת כל חקירה סכסוך — ללא`gh`, המדיניות
    קצר מעגל להתיר. הרץ `gh auth login`עם אסימון גישה אישי בעל`repo\` scope
  לגישה קריאה לבקשות משיכה.
</Note>

***

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

**אירוע:** Stop\
**ברירת מחדל:** שוללת עצירה כשקציני CI נכשלים או עדיין מופעלים בענף הנוכחי. בודקת הן GitHub Actions זרימת עבודה מופעלה וקציני בוט צד שלישי (למשל CodeRabbit, SonarCloud, Codecov). מטפלת `skipped`, `cancelled` ו-`neutral` מסקנות כלא כושל (האחרון מכסה למשל Socket Security alerts על PR של תורמים חיצוניים, היכן האפליקציה בכוונת דיווחים ניטרליים במקום הצלחה/כישלון). מחזירה הודעה אינפורמטיבית כשכל קציני עברו.

אין פרמטרים.

<Note>
  מדיניות זו דורשת [GitHub CLI](https://cli.github.com/) (`gh`) להיות מותקן ומאומת.
  הרץ `gh auth login` עם אסימון גישה אישי בעל `repo` scope לגישה קריאה לריצת
  זרימות עבודה של Actions והבדיקות API. אם `gh` לא מותקן או לא מאומת, המדיניות
  כושלת פתוחה ומדווחת את הסיבה ל-Claude.
</Note>

***

***

## השבתה של מדיניויות בודדות

הסר מדיניות ספציפית מ-`enabledPolicies` בתצורה שלך, או כבה אותה בלשונית Policies של ממשק הבקרה.

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

מדיניויות שלא רשומות ב-`enabledPolicies` לא מופעלות, אפילו אם ערכי `policyParams` קיימים עבורן.
