> ## Documentation Index
> Fetch the complete documentation index at: https://exosphere-auto-translate-docs-20260626-1023.mintlify.site/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 רואה, ונותן הוראות פעולה ללא שינוי קוד המדיניות. עובד עם מדיניות מובנות, מותאמות והנוגות לכנס. ראה [תצורה → 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`).

אין פרמטרים.

***

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

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

דקדוק הדפוס זהה ל-[`block-sudo`](#block-sudo): אסימוני תואמים מול argv מנותחים, `*` הוא wildcard לאסימון אחד, וכל פקודה המכילה אופרטור 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 *"]
    }
  }
}
```

***

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

עצור סוכנים מדליפת פרטי הזדהות להקשר או פלט. מדיניות מנקה משתפעת ב**PostToolUse** אירועים. כשClaude מפעיל פקודת Bash, קורא קובץ, או קורא לכל כלי, מדיניות אלה בודקות את הפלט לפני שהוא מוחזר לClaude. אם דפוס סוד מתגלה, המדיניות מחזירה החלטת deny המונעת את הפלט מהעברה חזרה.

### `sanitize-jwt`

**אירוע:** PostToolUse (כל הכלים)\
**ברירת מחדל:** מחפה אסימוני JWT (שלוש קטעי base64url מופרדים ב-`.`).

אין פרמטרים.

***

### `sanitize-api-keys`

**אירוע:** PostToolUse (כל הכלים)\
**ברירת מחדל:** מחפה פורמטי API key נפוצים: 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": "MyCo internal API key" },
        { "regex": "pat_[0-9a-f]{40}", "label": "Internal 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`](/he/configuration#hint-cross-cutting) חוצה-קוטעי להצעת חלופות:

```json theme={null}
{
  "policyParams": {
    "block-force-push": {
      "hint": "Create a new branch from your current HEAD (e.g. `git checkout -b <new-branch>`) and push that instead."
    }
  }
}
```

***

### `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 remote), המדיניות מאפשרת עם הודעה מידע המסבירה מדוע הבדיקה דלולה.

### סמנטיקה Stop לכל CLI

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

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

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

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

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

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

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

אין פרמטרים.

***

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

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

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

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

**דוגמה:**

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

***

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

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

אין פרמטרים.

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

***

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

**אירוע:** Stop\
**ברירת מחדל:** מוציא עצירה כשהענף הנוכחי לא יכול להתמזג בנקיוניות לענף base. המדיניות ראשית מאשרת ישנו `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 שניות ו-re-check לפני ניסיון לעצור שוב — זה מונע שקרים שליליים בזמן GitHub מחשב מחדש.

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

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

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

<Note>
  GitHub CLI (`gh`) נדרשת למדיניות זו. המדיניות משתמשת `gh pr view` לאשר
  `OPEN` PR קיים לפני הרצת כל בדיקת סכסוך — בלעדי `gh`, המדיניות
  קצרה-חוזה להרשאה. הרץ `gh auth login` עם אסימון גישה אישי שיש
  `repo` היקף לקריאה גישה ל-pull requests.
</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` היקף לקריאה גישה ל-
  Actions זרימות עבודה והבדיקות API. אם `gh` לא מותקן או לא מאומת, המדיניות נופלת פתוחה וביוחס סיבה ל-Claude.
</Note>

***

***

## השבתה מדיניות ספציפיות

הסר מדיניות ספציפית מ-`enabledPolicies` בהגדרה שלך, או החלף את זה בטאב מדיניות של לוח המחוונים.

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

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