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

# Yerleşik İlkeler

> Ajent başarısızlık modlarını yakalayan 39 yerleşik ilke

failproofai, ortak ajent başarısızlık modlarını yakalayan 39 yerleşik ilke ile birlikte gelir. Her ilke belirli bir hook olay türü ve araç adında devreye girer. On dokuz ilke, kod yazmanıza gerek kalmadan davranışlarını ayarlamanıza izin veren parametreleri kabul eder. Beş iş akışı ilkesi, Claude'un durmadan önce commit → push → PR → CI ardışık düzenini uygular.

***

## Genel Bakış

İlkeler kategorilere ayrılır:

| Kategori                                  | İlkeler                                                                                                                                      | Hook türü   |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| [Tehlikeli komutlar](#tehlikeli-komutlar) | block-sudo, block-rm-rf, block-curl-pipe-sh, block-failproofai-commands                                                                      | PreToolUse  |
| [Altyapı komutları](#altyapı-komutları)   | block-kubectl, block-terraform, block-aws-cli, block-gcloud, block-az-cli, block-helm, block-gh-pipeline                                     | PreToolUse  |
| [Sırlar (sanitizers)](#sırlar-sanitizers) | sanitize-jwt, sanitize-api-keys, sanitize-connection-strings, sanitize-private-key-content, sanitize-bearer-tokens                           | PostToolUse |
| [Ortam](#ortam)                           | block-env-files, protect-env-vars                                                                                                            | PreToolUse  |
| [Dosya erişimi](#dosya-erişimi)           | 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  |
| [Veritabanı](#veritabanı)                 | warn-destructive-sql, warn-schema-alteration                                                                                                 | PreToolUse  |
| [Uyarılar](#uyarılar)                     | warn-large-file-write, warn-package-publish, warn-background-process, warn-global-package-install                                            | PreToolUse  |
| [Paket yöneticileri](#paket-yöneticileri) | prefer-package-manager                                                                                                                       | PreToolUse  |
| [İş akışı](#iş-akışı)                     | require-commit-before-stop, require-push-before-stop, require-pr-before-stop, require-no-conflicts-before-stop, require-ci-green-before-stop | Stop        |

* **`block-`** — ajanı devam etmekten durdur.
* **`warn-`** — ajenta ek bağlam sağla, böylece kendini düzeltebilsin.
* **`sanitize-`** — ajent görmeden önce araç çıktısından hassas verileri temizle.

### Ad Alanları

Her ilke bir `<namespace>/<name>` slotunda bulunur. Yerleşik ilkeler **`failproofai/`** ad alanına aittir — örneğin, `failproofai/sanitize-jwt`. Ad alanı, benzer kısa adlara sahip özel veya üçüncü taraf ilkeleri yüklerken çakışmaları önler.

Yapılandırmanızda yerleşik bir ilkeye kısa adı veya tam adı ile başvurabilirsiniz; her iki form da aynı ilkeyi çözer:

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

Bir adda `/` yoksa, failproofai bunu varsayılan `failproofai` ad alanına ait olarak davranır. Zaten `/` içeren adlar (örneğin `myorg/foo`, `custom/my-hook`) olduğu gibi tutulur.

* **`require-`** — koşullar karşılanana kadar Stop olayını engelle.

***

<Tip>
  Her ilke `policyParams` içinde isteğe bağlı bir `hint` alanını destekler. İpucu, Claude'un gördüğü deny veya instruct iletisine eklenir; ilke kodunu değiştirmeden işlem yapılabilir rehberlik sağlar. Yerleşik, özel ve kural ilkeleriyle çalışır. Ayrıntılar için [Yapılandırma → hint](/tr/configuration#hint-cross-cutting) bölümüne bakın.
</Tip>

***

## Tehlikeli komutlar

Ajentlerin geri alınması zor olan veya ana bilgisayar sistemine zarar verebilecek işlemleri çalıştırmasını önleyin.

### `block-sudo`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Herhangi bir `sudo` komutunu reddeder.

`sudo` anahtar sözcüğünü içeren çağırışları engeller. Model eşleştirme ham dize yerine ayrıştırılmış komut jetonlarında yapılır; shell operatörü enjeksiyonu yoluyla atlatmayı önler.

**Parametreler:**

| Param           | Tür        | Varsayılan | Açıklama                                                                                      |
| --------------- | ---------- | ---------- | --------------------------------------------------------------------------------------------- |
| `allowPatterns` | `string[]` | `[]`       | İzin verilen tam komut önekleri. Her giriş ayrıştırılmış argv jetonlarına karşı eşleştirilir. |

**Örnek:**

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

Bu yapılandırma ile `sudo systemctl status nginx` izin verilir, ancak `sudo rm /etc/hosts` reddedilir.

<Note>
  Desenler ham komut dizesi değil, ayrıştırılmış jetonlara karşı eşleştirilir. Bu, shell operatörleri yoluyla atlatmayı önler (örneğin `sudo systemctl status x; rm -rf /` kodu `sudo systemctl status *` ile eşleşmez).
</Note>

***

### `block-rm-rf`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** `rm -rf`, `rm -fr` ve benzer yinelemeli silme formlarını reddeder.

**Parametreler:**

| Param        | Tür        | Varsayılan | Açıklama                                                          |
| ------------ | ---------- | ---------- | ----------------------------------------------------------------- |
| `allowPaths` | `string[]` | `[]`       | Yinelemeli olarak silinmesi güvenli olan yollar (örneğin `/tmp`). |

**Örnek:**

```json theme={null}
{
  "policyParams": {
    "block-rm-rf": {
      "allowPaths": ["/tmp", "/var/cache"]
    }
  }
}
```

***

### `block-curl-pipe-sh`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** `curl <url> | bash`, `curl <url> | sh`, `wget <url> | bash` ve benzer desenleri reddeder.

Parametresi yok.

***

### `block-failproofai-commands`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** failproofai'nin kendisini kaldıracak veya devre dışı bırakacak komutları reddeder (örneğin `npm uninstall failproofai`, `failproofai policies --uninstall`).

Parametresi yok.

***

## Altyapı komutları

Kodlama ajanlarının altyapı CLI'larını çalıştırmasını veya CI/CD ardışık düzenlerini tetiklemesini durdurun. Bu kategorideki tüm ilkeler **isteğe bağlı** (`defaultEnabled: false`) — `kubectl`, `terraform` vb. çağırması gereken ajanlar, ilkeyi etkinleştirmediğiniz sürece kesilmeyecektir. Etkinleştirildiğinde, eşleştirilen CLI'nın her çağırması `allowPatterns` içindeki bir giriş ile eşleşmediği sürece reddedilir.

Desen dilbilgisi [`block-sudo`](#block-sudo) ile aynıdır: jetonlar ayrıştırılmış argv'ye karşı eşleştirilir, `*` bir jeton için joker karakterdir ve herhangi bir shell operatörü (`&&`, `||`, `|`, `;`) içeren veya gömülü shell metakarakterleri olan komutlar, enjeksiyon atlatmalarını önlemek için beyaz liste eşleştirmesinden önce reddedilir.

### `block-kubectl`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Herhangi bir `kubectl` çağırışını reddeder.

**Parametreler:**

| Param           | Tür        | Varsayılan | Açıklama                             |
| --------------- | ---------- | ---------- | ------------------------------------ |
| `allowPatterns` | `string[]` | `[]`       | İzin verilen kubectl komut önekleri. |

**Örnek:**

```json theme={null}
{
  "policyParams": {
    "block-kubectl": {
      "allowPatterns": ["kubectl get *", "kubectl describe *", "kubectl logs *"]
    }
  }
}
```

Bu yapılandırma ile `kubectl get pods` izin verilir ancak `kubectl apply -f deploy.yaml` reddedilir.

***

### `block-terraform`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Herhangi bir `terraform` veya `tofu` (OpenTofu) çağırışını reddeder.

**Parametreler:**

| Param           | Tür        | Varsayılan | Açıklama                                    |
| --------------- | ---------- | ---------- | ------------------------------------------- |
| `allowPatterns` | `string[]` | `[]`       | İzin verilen terraform/tofu komut önekleri. |

**Örnek:**

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

***

### `block-aws-cli`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Herhangi bir `aws` CLI çağırışını reddeder.

**Parametreler:**

| Param           | Tür        | Varsayılan | Açıklama                             |
| --------------- | ---------- | ---------- | ------------------------------------ |
| `allowPatterns` | `string[]` | `[]`       | İzin verilen aws CLI komut önekleri. |

**Örnek:**

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

***

### `block-gcloud`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Herhangi bir `gcloud` (Google Cloud) CLI çağırışını reddeder.

**Parametreler:**

| Param           | Tür        | Varsayılan | Açıklama                            |
| --------------- | ---------- | ---------- | ----------------------------------- |
| `allowPatterns` | `string[]` | `[]`       | İzin verilen gcloud komut önekleri. |

**Örnek:**

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

***

### `block-az-cli`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Herhangi bir `az` (Azure) CLI çağırışını reddeder.

**Parametreler:**

| Param           | Tür        | Varsayılan | Açıklama                            |
| --------------- | ---------- | ---------- | ----------------------------------- |
| `allowPatterns` | `string[]` | `[]`       | İzin verilen az CLI komut önekleri. |

**Örnek:**

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

***

### `block-helm`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Herhangi bir `helm` çağırışını reddeder.

**Parametreler:**

| Param           | Tür        | Varsayılan | Açıklama                          |
| --------------- | ---------- | ---------- | --------------------------------- |
| `allowPatterns` | `string[]` | `[]`       | İzin verilen helm komut önekleri. |

**Örnek:**

```json theme={null}
{
  "policyParams": {
    "block-helm": {
      "allowPatterns": ["helm list", "helm status *"]
    }
  }
}
```

***

### `block-gh-pipeline`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Durumu değiştiren veya ardışık düzenler tetikleyen aşağıdaki `gh` CLI alt komutlarını reddeder:

* `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 pr view`, `gh pr list`, `gh run list`, `gh release view` ve `gh api repos/.../...` gibi salt okunur `gh` alt komutları bu ilke tarafından eşleştirilmez — iş akışı denetimleri için rutinlik olarak gereklidir (failproofai'nin kendi `require-ci-green-before-stop` dahil).

**Parametreler:**

| Param           | Tür        | Varsayılan | Açıklama                                                                                         |
| --------------- | ---------- | ---------- | ------------------------------------------------------------------------------------------------ |
| `allowPatterns` | `string[]` | `[]`       | Aksi takdirde reddedilecek olmasına rağmen izin verilebilecek belirli komut dosyası çağırışları. |

**Örnek:**

```json theme={null}
{
  "policyParams": {
    "block-gh-pipeline": {
      "allowPatterns": ["gh run rerun *"]
    }
  }
}
```

***

## Sırlar (sanitizers)

Ajentlerin kimlik bilgilerini kontekst veya çıktılarında sızmasını durdurun. Sanitizer ilkeleri **PostToolUse** olaylarında devreye girer. Claude bir Bash komutu çalıştırdığında, bir dosya okuduğunda veya herhangi bir aracı çağırdığında, bu ilkeler çıktı Claude'a döndürülmeden önce incelenir. Gizli bir desen algılanırsa, ilke çıktının geri dönmesini engelleyen bir reddetme kararı verir.

### `sanitize-jwt`

**Olay:** PostToolUse (tüm araçlar)\
**Varsayılan:** JWT jetonlarını (`.` ile ayrılmış üç base64url segmenti) gizler.

Parametresi yok.

***

### `sanitize-api-keys`

**Olay:** PostToolUse (tüm araçlar)\
**Varsayılan:** Yaygın API anahtarı biçimlerini gizler: Anthropic (`sk-ant-`), OpenAI (`sk-`), GitHub PAT'ları (`ghp_`), AWS erişim anahtarları (`AKIA`), Stripe anahtarları (`sk_live_`, `sk_test_`) ve Google API anahtarları (`AIza`).

**Parametreler:**

| Param                | Tür                                  | Varsayılan | Açıklama                                             |
| -------------------- | ------------------------------------ | ---------- | ---------------------------------------------------- |
| `additionalPatterns` | `{ regex: string; label: string }[]` | `[]`       | Sır olarak işlem görmesi gereken ek regex desenleri. |

**Örnek:**

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

**Olay:** PostToolUse (tüm araçlar)\
**Varsayılan:** Gömülü kimlik bilgileri içeren veritabanı bağlantı dizelerini gizler (örneğin `postgresql://user:password@host/db`).

Parametresi yok.

***

### `sanitize-private-key-content`

**Olay:** PostToolUse (tüm araçlar)\
**Varsayılan:** PEM bloklarını gizler (`-----BEGIN PRIVATE KEY-----`, `-----BEGIN RSA PRIVATE KEY-----` vb.).

Parametresi yok.

***

### `sanitize-bearer-tokens`

**Olay:** PostToolUse (tüm araçlar)\
**Varsayılan:** `Authorization: Bearer <token>` başlıklarını gizler; burada jeton 20 veya daha fazla karakterdir.

Parametresi yok.

***

## Ortam

Hassas ortam yapılandırmasını ajanlar tarafından okunmasından veya açığa çıkmasından koruyun.

### `block-env-files`

**Olay:** PreToolUse (Bash, Read)\
**Varsayılan:** `cat .env`, dosya yolu olarak `.env` ile Read araç çağrıları vb. aracılığıyla `.env` dosyalarını okumasını reddeder.

`.envrc` veya diğer ortam-komşu dosyaları engelleme — yalnızca tam olarak `.env` adındaki dosyaları engelle.

Parametresi yok.

***

### `protect-env-vars`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Ortam değişkenlerini yazdıran komutları reddeder: `printenv`, `env`, `echo $VAR`.

Parametresi yok.

***

## Dosya erişimi

Ajentleri proje sınırları içinde ve hassas dosyalardan uzak tutun.

### `block-read-outside-cwd`

**Olay:** PreToolUse (Read, Bash)\
**Varsayılan:** Proje kökü dışındaki dosyaları okumasını reddeder. Sınır `CLAUDE_PROJECT_DIR` (Claude Code tarafından oturum başına bir kez ayarlanır) ve bu değişken ayarlanmadığında oturumun geçerli çalışma dizinine geri döner. Canlı `cwd` yerine proje kökünü kullanmak, Claude `cd` yaptıktan sonra bile sınırın kararlı kalmasını sağlar.

**Parametreler:**

| Param        | Tür        | Varsayılan | Açıklama                                                       |
| ------------ | ---------- | ---------- | -------------------------------------------------------------- |
| `allowPaths` | `string[]` | `[]`       | Proje kökü dışında olsa bile izin verilen mutlak yol önekleri. |

**Örnek:**

```json theme={null}
{
  "policyParams": {
    "block-read-outside-cwd": {
      "allowPaths": ["/shared/data", "/opt/company/config"]
    }
  }
}
```

***

### `block-secrets-write`

**Olay:** PreToolUse (Write, Edit)\
**Varsayılan:** Özel anahtarlar ve sertifikalar için yaygın olarak kullanılan dosyalara yazılışı reddeder: `id_rsa`, `id_ed25519`, `*.key`, `*.pem`, `*.p12`, `*.pfx`.

**Parametreler:**

| Param                | Tür        | Varsayılan | Açıklama                                                  |
| -------------------- | ---------- | ---------- | --------------------------------------------------------- |
| `additionalPatterns` | `string[]` | `[]`       | Engellenmesi gereken ek dosya adı desenleri (glob tarzı). |

**Örnek:**

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

***

## Git

Geri alınması zor olan kazara itişleri, zorla-itişleri ve dal hatalarını önleyin.

### `block-push-master`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** `git push origin main` ve `git push origin master` komutlarını reddeder.

**Parametreler:**

| Param               | Tür        | Varsayılan           | Açıklama                        |
| ------------------- | ---------- | -------------------- | ------------------------------- |
| `protectedBranches` | `string[]` | `["main", "master"]` | Doğrudan itilemeyen dal adları. |

**Örnek:**

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

<Tip>
  Tüm dallara itişe izin vermek için (bu ilkeyi `enabledPolicies` öğesinden kaldırmadan etkili bir şekilde devre dışı bırakmak), `protectedBranches: []` ayarını yapın.
</Tip>

***

### `block-work-on-main`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Çalışma ağacı `main` veya `master` üzerindeyken `git commit`, `git merge`, `git rebase` ve `git cherry-pick` komutlarını reddeder. Dal oluşturma ve geçiş (`git checkout`, `git checkout -b`, `git switch`, `git switch -c`) etkilenmez.

**Parametreler:**

| Param               | Tür        | Varsayılan           | Açıklama                                                    |
| ------------------- | ---------- | -------------------- | ----------------------------------------------------------- |
| `protectedBranches` | `string[]` | `["main", "master"]` | Commit/merge/rebase/cherry-pick'in reddedildiği dal adları. |

***

### `block-force-push`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** `git push --force` ve `git push -f` komutlarını reddeder.

İlke spesifik parametresi yok. Alternatifleri önermek için çapraz kesme [`hint`](/tr/configuration#hint-cross-cutting) kullanın:

```json theme={null}
{
  "policyParams": {
    "block-force-push": {
      "hint": "Geçerli HEAD'inizden yeni bir dal oluşturun (örneğin `git checkout -b <new-branch>`) ve bunun yerine o dalı itin."
    }
  }
}
```

***

### `warn-git-amend`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Claude'u `git commit --amend` çalıştırırken dikkatli ilerlemeye bilgilendirir. Komut engellenmez.

Parametresi yok.

***

### `warn-git-stash-drop`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Claude'u `git stash drop` çalıştırmadan önce onaylamaya bilgilendirir. Komut engellenmez.

Parametresi yok.

***

### `warn-all-files-staged`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Claude'u `git add -A` veya `git add .` çalıştırdığında sahneye koydukları şeyleri gözden geçirmeye bilgilendirir. Komut engellenmez.

Parametresi yok.

***

## Veritabanı

Yıkıcı SQL işlemlerini veritabanınıza yürütülmeden önce yakalayın.

### `warn-destructive-sql`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Claude'u `DROP TABLE`, `DROP DATABASE` veya `WHERE` şartı olmayan `DELETE` içeren SQL çalıştırmadan önce onaylamaya bilgilendirir.

Parametresi yok.

***

### `warn-schema-alteration`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Claude'u `ALTER TABLE` ifadeleri çalıştırmadan önce onaylamaya bilgilendirir.

Parametresi yok.

***

## Uyarılar

Ajentlere potansiyel olarak riskli ancak yıkıcı olmayan işlemlerden önce ekstra bağlam sağlayın.

### `warn-large-file-write`

**Olay:** PreToolUse (Write)\
**Varsayılan:** Claude'u 1024 KB'den büyük dosyaları yazmadan önce onaylamaya bilgilendirir.

**Parametreler:**

| Param         | Tür      | Varsayılan | Açıklama                                       |
| ------------- | -------- | ---------- | ---------------------------------------------- |
| `thresholdKb` | `number` | `1024`     | Uyarı verildiği dosya boyutu eşiği (kilobayt). |

**Örnek:**

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

<Note>
  Hook işleyicisi yükler üzerinde 1 MB stdin sınırı uygular. Bu ilkeyi küçük içerikle test etmek için `thresholdKb` değerini 1024'in altında bir değere ayarlayın.
</Note>

***

### `warn-package-publish`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Claude'u `npm publish` çalıştırmadan önce onaylamaya bilgilendirir.

Parametresi yok.

***

### `warn-background-process`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Claude'u `nohup`, `&`, `disown` veya `screen` aracılığıyla arka plan işlemleri başlatırken dikkatli olmaya bilgilendirir.

Parametresi yok.

***

### `warn-global-package-install`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Claude'u `npm install -g`, `yarn global add` veya sanal ortam olmadan `pip install` çalıştırmadan önce onaylamaya bilgilendirir.

Parametresi yok.

***

## Paket yöneticileri

Ajanın hangi paket yöneticilerini kullanmasına izin verildiğini zorunlu kılın.

### `prefer-package-manager`

**Olay:** PreToolUse (Bash)\
**Varsayılan:** Devre dışı. Etkinleştirildiğinde, `allowed` listesinde olmayan paket yöneticisi komutlarını engeller ve Claude'u komut yöneticisi kullanarak komutu yazmaya söyler.

Algılar: pip, pip3, python -m pip, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo.

| Parametre | Tür       | Varsayılan | Açıklama                                                                                                                                |
| --------- | --------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `allowed` | string\[] | `[]`       | İzin verilen paket yöneticisi adları. Bu listede olmayan herhangi bir algılanan yönetici engellenir. Boş olduğunda ilke işlemsiz kalır. |
| `blocked` | string\[] | `[]`       | Yerleşik listesinin ötesinde engellenmesi gereken ek yönetici adları (örneğin `['pdm', 'pipx']`).                                       |

Yerleşik engel listesi şunları kapsar: pip, pip3, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo. Bu listede olmayan yöneticileri eklemek için `blocked` kullanın.

**Örnek yapılandırma:**

```json theme={null}
{
  "enabledPolicies": ["prefer-package-manager"],
  "policyParams": {
    "prefer-package-manager": {
      "allowed": ["uv", "bun"],
      "blocked": ["pdm", "pipx"]
    }
  }
}
```

Bu yapılandırma ile `pip install flask` ve `pdm install flask` her ikisi de reddedilir; Claude'a bunun yerine `uv` veya `bun` kullanması söylenir. `uv` beyaz listede olduğu ve önce kontrol edildiği için `uv pip install flask` gibi komutlar izin verilir.

***

## AI davranışı

Ajanların sıkışıp kalması veya beklenmeyen davranması durumlarını algılayın.

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

**Olay:** PreToolUse (tüm araçlar)\
**Varsayılan:** Aynı araç aynı parametrelerle 3+ kez çağrılırsa Claude'u yeniden düşünmeye bilgilendirir — ajanın bir döngüde sıkışmasının yaygın bir işaretidir.

Parametresi yok.

***

## İş akışı

Disiplinli bir oturum sonu iş akışı uygulayın. Bu ilkeler **Stop** olayında devreye girer ve aynı ajan, her koşul karşılanana kadar durmaktan yoksun bırakılır. Doğal bir bağımlılık zinciri izlerler: commit → push → PR → CI. Bir ilke reddederse, zincirdeki sonraki ilkeler atlanır (reddetme kısa devre).

Tüm iş akışı ilkeleri **başarısız-açık** dur: gerekli araç kullanılamıyorsa (örneğin `gh` kurulu değil, git uzaktan yoktur), ilke bir bilgi iletisi ile izin verir; kontrol neden atlanmadığını açıklar.

### CLI başına Stop semantiği

Stop uygulaması yedi desteklenen CLI arasında biraz farklı görünür; çünkü her biri farklı bir "ajan bitişi" hook sözleşmesi ortaya koyar. **Sonuç** aynıdır — ajan bir iş akışı kapısı başarısız iken durmaktan kurtulmaz — ancak **mekanikler** farklıdır. Aşağıdaki tablo özetler; bir `require-*-before-stop` ilkesini etkinleştirmeden önce anlamanın değerine sahip Pi'de yalnızca kullanıcı tarafından görülebilir bir garip durum vardır.

| CLI                      | Kapı ne zaman devreye girer  | Ne görürsünüz                                                                                                                                                                                                                                                                                                                                                              |
| ------------------------ | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Claude Code              | Aynı ajan döngüsü, hemen     | Claude çalışmaya devam eder — sorunu düzeltir, sonra tekrar bitirmeye çalışır. Size görünen kesinti yok.                                                                                                                                                                                                                                                                   |
| Codex                    | Aynı ajan döngüsü, hemen     | Claude ile aynı.                                                                                                                                                                                                                                                                                                                                                           |
| GitHub Copilot CLI       | Aynı ajan döngüsü, hemen     | Claude ile aynı (Copilot'un `{decision:"block", reason}` yeniden deneme kanalını kullanır — ampirik olarak Copilot CLI 1.0.41'e karşı doğrulanmıştır).                                                                                                                                                                                                                     |
| Cursor Agent             | Aynı ajan döngüsü, hemen     | Claude ile aynı (Cursor'un `{followup_message}` kanalını kullanır — `loop_limit`, varsayılan 5 yeniden denemeler ile sınırlandırılmış).                                                                                                                                                                                                                                    |
| OpenCode                 | Aynı ajan döngüsü, hemen     | Claude ile aynı (OpenCode'un `client.session.prompt(...)` SDK çağrısını kullanır; `hookSpecificOutput.additionalContext` aracılığıyla yönlendirilmiş).                                                                                                                                                                                                                     |
| **Pi (pi-coding-agent)** | **Sonraki kullanıcı sırası** | **Kapı devreye girdiğinde Pi görünen şekilde durur** — ajan döngüsü çıkar ve komut isteminin başına dönersiniz. Kapı daha sonra bir sonraki iletişim gönderdiğinizde devreye girer: failproofai iş akışı adımını tamamlamadan önce (commit, push vb.) bir `MANDATORY ACTION REQUIRED` yönergesini o sıraya ait sistem komutunun başına ekler; ne istedinizi yapmadan önce. |

<Note>
  **Pi sınırlaması.** Pi'nin `AgentEndEvent` (Claude'un `Stop` hook'unun yukarı akış eşdeğeri) hiçbir Result türü yoktur — Pi'nin ajan döngüsü zaten çıkmış olduğu süredir. Pi, Claude / Copilot / Cursor / OpenCode'un yapabildiği şekilde aynı döngüyü yeniden denemeye zorlanamazı.  failproofai kapıyı Pi'nin `before_agent_start` olayına kaydırır (sonraki kullanıcı iletişim sonrasında devreye girer) — iş akışı kontrolü hala uygulanır, yalnızca mevcut sıra yerine sonraki sıra üzerinde.

  **Bunu pratikte ne anlama gelir:**

  * Pi durundan sonra, reddetme nedeni oturum kimliği tarafından bellek içinde anahtarlanmış şekilde yakalanır. Aynı Pi işlemi içinde gönderdiğiniz çok sonraki istişare bunu boşaltır: LLM sistem komutunun üstünde `MANDATORY ACTION REQUIRED` yönergesini görür, commits (veya pushes / açıklık PR / CI'yi bekler) ve ancak o zaman istediğiniz şeye devam eder. Yakalanan reddetme nedeni tek atış — bir kez boşaltıldıktan sonra kapı açıktır.
  * Kapı Pi'nin işlem ömrü tarafından sınırlandırılır. Turlar arasında Pi'yi `Ctrl+C` yaparsanız veya çıkarsanız, bellek içi giriş işlemle birlikte bırakılır ve kapı kaçırılır. Claude, Copilot, Cursor ve OpenCode'un aynı sınırı vardır (ajanı öldürün ve kapı kaçırılır) — Pi sadece bunu daha görünür hale getirir; çünkü ajan kapı devreye girmeden önce görünen şekilde çıkar.
  * Beklemede olan bir reddetme herhangi bir nedenle `session_shutdown` üzerine de temizlenir (`new` / `resume` / `fork` / `quit`), bu nedenle önceki oturumdan eski bir kapı, aynı Pi işlemi içinde başlatılan yeni bir oturuma sızamaz.

  Claude tarzı aynı döngü yeniden denemesine ihtiyacınız varsa, `Stop` ilkelerinizi desteklenen diğer beş CLI'den birinin altında çalıştırın. Pi yukarı akışını gelecek bir Result türü ile izliyoruz; `AgentEndEvent` üzerinde bu boşluğu kapatmamıza izin verecektir.
</Note>

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

**Olay:** Stop\
**Varsayılan:** Commit edilmemiş değişiklikler (değiştirilmiş, sahnelenmiş veya izlenmeyen dosyalar) olduğunda durmasını reddeder. Çalışma dizini temiz olduğunda bilgi iletisi döndürür.

Parametresi yok.

***

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

**Olay:** Stop\
**Varsayılan:** Push edilmemiş commits olduğunda veya mevcut dal uzaktan izleme dalı olmadığında durmasını reddeder. Gerekirse izleme dalı oluşturmak için `git push -u` önerir. Yapılandırılmış uzaktan yoksa başarısız-açık.

**Parametreler:**

| Param    | Tür      | Varsayılan | Açıklama                    |
| -------- | -------- | ---------- | --------------------------- |
| `remote` | `string` | `"origin"` | İtiş yapılacak uzaktan adı. |

**Örnek:**

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

***

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

**Olay:** Stop\
**Varsayılan:** Geçerli dal için çekme isteği yoksa veya mevcut PR birleştirilmeden kapatılmışsa durmasını reddeder. Claude'u `gh pr create` ile bir PR oluşturmaya bilgilendirir. PR **birleştirildiğinde**, ilke izin verir (çalışma gönderildi) ve ileti daldan geçmeye ipuç verir (`git checkout main && git pull`).

Parametresi yok.

<Note>
  Bu ilke [GitHub CLI](https://cli.github.com/) (`gh`) kurulu ve doğrulanmış olmasını gerektirir.
  Çekme isteklerine okuma erişimi için `repo` kapsamına sahip kişisel erişim belirteci ile `gh auth login` çalıştırın. `gh` kurulu değilse veya doğrulanmamışsa, ilke başarısız-açık ve nedeni Claude'a raporlar.
</Note>

***

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

**Olay:** Stop\
**Varsayılan:** Geçerli dal temel dala temiz şekilde birleştirilemezse durmasını reddeder. İlke önce dal için GitHub'da `OPEN` bir PR'ın olduğunu onaylar — biri olmadan, birleştirme hedefi yoktur; bu nedenle tüm ilke kısa devre ve izin verir. `OPEN` PR onaylandıktan sonra iki bağımsız sonda çalışır:

1. **Yerel** — `git merge-tree --write-tree --name-only origin/<baseBranch> HEAD`. Çatışmada, reddetme iletişi çatışmalı dosyaları adlandırır; böylece Claude tam olarak ne çözeceğini bilir.
2. **GitHub** — zaten ön kontrol içinde alınan `gh pr view --json mergeable,state` sonucunu yeniden kullanır. Eski yerel `origin/<baseBranch>` kaçıracağı çatışmaları yakalar (örneğin, birisi son getirmeden bu yana `main` üzerinde çatışan bir PR indirdi). `CONFLICTING` sonuç reddeder. `UNKNOWN` sonuç da reddeder ve Claude'u tekrar kontrol etmeden \~10 saniye beklemesini bilgilendirir — durmaya tekrar denemeden önce bu yanlış negatifleri önler.

Şu durumlarda tamamen atlanır (izin verir): `gh` kurulu değil, dal için PR yoktur, PR'ın durumu `OPEN` değildir (örneğin `MERGED`, `CLOSED`) veya `gh pr view` ayrıştırılamayan çıktı döndürür. Ayrıca `origin/<baseBranch>` yerel olarak eksik olduğunda veya hiçbir komit tabanın ilerisinde olmadığında da başarısız-açık — bu Katman 1 açılışları yine de izin vermeden önce önbelleğe alınan PR birleştirilebilirliğini danışır.

**Parametreler:**

| Param        | Tür      | Varsayılan | Açıklama                                            |
| ------------ | -------- | ---------- | --------------------------------------------------- |
| `baseBranch` | `string` | `"main"`   | Çatışmalar için kontrol edilmesi gereken temel dal. |

<Note>
  Bu ilke için GitHub CLI (`gh`) gereklidir. İlke bir `OPEN` PR'ın var olduğunu doğrulamak için `gh pr view` kullanır — `gh` olmadan, ilke kısa devre ve izin verir. Çekme isteklerine okuma erişimi için `repo` kapsamına sahip kişisel erişim belirteci ile `gh auth login` çalıştırın.
</Note>

***

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

**Olay:** Stop\
**Varsayılan:** Geçerli daldaki CI kontrolleri başarısız veya hala çalışıyor olduğunda durmasını reddeder. GitHub Actions iş akışı çalıştırmalarını ve üçüncü taraf bot kontrollerini kontrol eder (örneğin CodeRabbit, SonarCloud, Codecov). `skipped`, `cancelled` ve `neutral` sonuçlarını başarısız olmayan olarak işler (sonuncusu örneğin dış katkıda bulunan PR'larında Socket Security uyarılarını kapsar; uygulama kasıtlı olarak başarı/başarısız yerine neutral raporlar). Tüm kontroller geçtiğinde bilgi iletişi döndürür.

Parametresi yok.

<Note>
  Bu ilke için [GitHub CLI](https://cli.github.com/) (`gh`) kurulu ve doğrulanmış olması gerekir.
  Actions iş akışı çalıştırmalarına ve Kontroller API'sine okuma erişimi için `repo` kapsamına sahip kişisel erişim belirteci ile `gh auth login` çalıştırın. `gh` kurulu değilse veya doğrulanmamışsa, ilke başarısız-açık ve nedeni Claude'a raporlar.
</Note>

***

***

## Bireysel ilkeleri devre dışı bırakma

Yapılandırmanızda `enabledPolicies` öğesinden belirli bir ilkeyi kaldırın veya panonun Politikalar sekmesinde kapatın.

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

`enabledPolicies` içinde listelenmemiş ilkeler, `policyParams` girdileri var olsa bile çalışmaz.
