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

# Yapılandırma

> Config dosya formatı, üç kapsam sistemi ve birleştirme kuralları

failproofai, hangi politikaların aktif olduğunu, davranışlarını ve özel politikaların nereden yüklendiğini kontrol etmek için JSON yapılandırma dosyalarını kullanır. Yapılandırma, ekibinizle paylaşmak için tasarlanmıştır - repo'nuzda commit edin ve her geliştirici aynı agent güvenlik ağını alır.

***

## Yapılandırma kapsamları

Üç yapılandırma kapsamı vardır ve öncelik sırasına göre değerlendirilir:

| Kapsam      | Dosya yolu                                | Amaç                                                     |
| ----------- | ----------------------------------------- | -------------------------------------------------------- |
| **project** | `.failproofai/policies-config.json`       | Repo başına ayarlar, sürüm kontrolüne commit edilir      |
| **local**   | `.failproofai/policies-config.local.json` | Kişisel repo başına geçersiz kılmalar, gitignore'da      |
| **global**  | `~/.failproofai/policies-config.json`     | Tüm projeler genelinde kullanıcı düzeyinde varsayılanlar |

failproofai bir hook olayı aldığında, geçerli çalışma dizini için var olan üç dosyayı da yükler ve birleştirir.

### Birleştirme kuralları

**`enabledPolicies`** - tüm üç kapsamın birleşimi. Herhangi bir seviyede etkinleştirilen bir politika etkindir.

```text theme={null}
project:  ["block-sudo"]
local:    ["block-rm-rf"]
global:   ["block-sudo", "sanitize-api-keys"]

resolved: ["block-sudo", "block-rm-rf", "sanitize-api-keys"]  ← çıkartılmış birleşim
```

**`policyParams`** - belirli bir politika için parametreleri tanımlayan ilk kapsam tamamen kazanır. Bir politikanın parametreleri içindeki değerlerin derin birleştirilmesi yoktur.

```text theme={null}
project:  block-sudo → { allowPatterns: ["sudo apt-get update"] }
global:   block-sudo → { allowPatterns: ["sudo systemctl status"] }

resolved: { allowPatterns: ["sudo apt-get update"] }   ← project kazanır, global yoksayılır
```

```text theme={null}
project:  (block-sudo girişi yok)
local:    (block-sudo girişi yok)
global:   block-sudo → { allowPatterns: ["sudo systemctl status"] }

resolved: { allowPatterns: ["sudo systemctl status"] }  ← global'e düşer
```

**`customPoliciesPath`** - bunu tanımlayan ilk kapsam kazanır.

**`llm`** - bunu tanımlayan ilk kapsam kazanır.

***

## Config dosya formatı

```json theme={null}
{
  "enabledPolicies": [
    "block-sudo",
    "block-rm-rf",
    "block-push-master",
    "sanitize-api-keys",
    "sanitize-jwt",
    "block-env-files",
    "block-read-outside-cwd"
  ],
  "policyParams": {
    "block-sudo": {
      "allowPatterns": ["sudo systemctl status", "sudo journalctl"]
    },
    "block-push-master": {
      "protectedBranches": ["main", "release", "prod"]
    },
    "block-rm-rf": {
      "allowPaths": ["/tmp"]
    },
    "block-read-outside-cwd": {
      "allowPaths": ["/shared/data", "/opt/company"]
    },
    "sanitize-api-keys": {
      "additionalPatterns": [
        { "regex": "myco_[A-Za-z0-9]{32}", "label": "MyCo API key" }
      ]
    },
    "warn-large-file-write": {
      "thresholdKb": 512
    }
  },
  "customPoliciesPath": "/home/alice/myproject/my-policies.js"
}
```

***

## Alan referansı

### `enabledPolicies`

Tür: `string[]`

Etkinleştirilecek politika adlarının listesi. Adlar, `failproofai policies` tarafından gösterilen politika tanımlayıcılarıyla tamamen eşleşmelidir. Tam liste için [Yerleşik Politikalar](/tr/built-in-policies) bölümüne bakın.

`enabledPolicies`'de olmayan politikalar, `policyParams`'da girişleri olsa bile inaktiftir.

### `policyParams`

Tür: `Record<string, Record<string, unknown>>`

Politika başına parametre geçersiz kılmaları. Dış anahtar politika adıdır; iç anahtarlar politikaya özgüdür. Her politika, [Yerleşik Politikalar](/tr/built-in-policies) bölümünde mevcut parametrelerini belgeler.

Bir politikanın parametreleri varsa ancak bunları belirtmezseniz, politikanın yerleşik varsayılanları kullanılır. `policyParams`'ı hiç yapılandırmayan kullanıcılar, önceki sürümlerle özdeş davranış alır.

Bir politikanın parametreleri bloğu içindeki bilinmeyen anahtarlar hook tetiklendiğinde sessizce yoksayılır ancak `failproofai policies` çalıştırdığınızda uyarı olarak işaretlenir.

#### `hint` (enlemesine)

Tür: `string` (isteğe bağlı)

Bir politika `deny` veya `instruct` döndürdüğünde nedene eklenen bir ileti. Claude'u politikanın kendisini değiştirmeden işlem yapılabilir rehberlik sağlamak için kullanın.

Herhangi bir politika türüyle çalışır — yerleşik, özel (`custom/`), proje kuralı (`.failproofai-project/`) veya kullanıcı kuralı (`.failproofai-user/`).

```json theme={null}
{
  "policyParams": {
    "block-force-push": {
      "hint": "Bunun yerine yeni bir dal oluşturmayı deneyin."
    },
    "block-sudo": {
      "allowPatterns": ["sudo apt-get"],
      "hint": "sudo olmadan apt-get'i doğrudan kullanın."
    },
    "custom/my-policy": {
      "hint": "Önce kullanıcıdan onay isteyin."
    }
  }
}
```

`block-force-push` reddettiğinde, Claude görür: *"Force-push bloke edilmiş. Bunun yerine yeni bir dal oluşturmayı deneyin."*

String olmayan değerler ve boş dizeler sessizce yoksayılır. `hint` ayarlanmamışsa, davranış değişmez (geriye dönük uyumlu).

### `customPoliciesPath`

Tür: `string` (mutlak yol)

Özel hook politikaları içeren JavaScript dosyasının yolu. Bu, `failproofai policies --install --custom <path>` tarafından otomatik olarak ayarlanır (yol depolanmadan önce mutlak olarak çözümlenir).

Dosya her hook olayında yeni yüklenir - önbellekleme yoktur. Yazar ayrıntıları için [Özel Politikalar](/tr/custom-policies) bölümüne bakın.

### Kural tabanlı politikalar

Açık `customPoliciesPath`'a ek olarak, failproofai `.failproofai/policies/` dizinlerinden politika dosyalarını otomatik olarak bulur ve yükler:

| Seviye    | Dizin                      | Kapsam                                        |
| --------- | -------------------------- | --------------------------------------------- |
| Proje     | `.failproofai/policies/`   | Sürüm kontrolü aracılığıyla ekiple paylaşılır |
| Kullanıcı | `~/.failproofai/policies/` | Kişisel, tüm projelere uygulanır              |

**Dosya eşleştirmesi:** Yalnızca `*policies.{js,mjs,ts}` ile eşleşen dosyalar yüklenir (ör. `security-policies.mjs`, `workflow-policies.js`). Dizindeki diğer dosyalar yoksayılır.

**Config gerekmez:** Kural politikaları, `policies-config.json`'de girişler gerektirmez. Dosyaları dizine bırakın ve sonraki hook olayında alınırlar.

**Birleştirme yüklemesi:** Hem proje hem de kullanıcı kural dizinleri taranır. Her iki seviyedeki tüm eşleşen dosyalar yüklenir (`customPoliciesPath`'dan farklı olarak ilk kapsam kazanır).

Daha fazla ayrıntı ve örnek için [Özel Politikalar](/tr/custom-policies) bölümüne bakın.

### `llm`

Tür: `object` (isteğe bağlı)

AI çağrıları yapan politikalar için LLM istemci yapılandırması. Çoğu kurulum için gerekli değildir.

```json theme={null}
{
  "llm": {
    "model": "claude-sonnet-4-6",
    "apiKey": "sk-ant-..."
  }
}
```

***

## CLI'den yapılandırma yönetimi

`policies --install` ve `policies --uninstall` komutları, agent CLI'nizin hook ayarları dosyasına (hook giriş noktaları) yazarken, `policies-config.json` doğrudan yönettiğiniz dosyadır. İkisi ayrıdır:

* **Agent CLI ayarları** — agent'e her tool kullanımında `failproofai --hook <event>` çağırmasını söyler:
  * **Claude Code**: `~/.claude/settings.json` (user), `<cwd>/.claude/settings.json` (project), `<cwd>/.claude/settings.local.json` (local)
  * **OpenAI Codex**: `~/.codex/hooks.json` (user), `<cwd>/.codex/hooks.json` (project) — Codex'in `local` kapsamı yok
  * **GitHub Copilot CLI *(beta)***: `~/.copilot/hooks/failproofai.json` (user), `<cwd>/.github/hooks/failproofai.json` (project) — Copilot'un `local` kapsamı yok. Hook girişleri Copilot'un OS anahtarlı `bash`/`powershell` komut alanlarını `timeoutSec` ile kullanır; dosya üst düzey `version: 1` işaretiyle taşınır. Copilot CLI desteği **beta**'dır çünkü `events.jsonl` kayıt şemasını (halk dokümanları belirtmiyor) daha fazla gerçek dünya oturumuna karşı doğrulanıyoruz.
  * **Cursor Agent *(beta)***: `~/.cursor/hooks.json` (user), `<cwd>/.cursor/hooks.json` (project) — Cursor'un `local` kapsamı yok. Hook girişleri Claude biçimli `{type, command, timeout}` formunu kullanır (no `bash`/`powershell` split), ancak Cursor'un [hooks şeması](https://cursor.com/docs/hooks) başına düz bir dizide camelCase olay anahtarları (`preToolUse`, `beforeSubmitPrompt`, …) altında depolanır; dosya üst düzey `version: 1` işaretiyle taşınır. İşleyici `CURSOR_EVENT_MAP` aracılığıyla camelCase → PascalCase'yi normalizedir, böylece mevcut yerleşik politikalar değişmeden ateşlenir. Cursor Agent desteği **beta**'dır çünkü Cursor'un disk üzerindeki transkriptini (genel doklarda belirtilmemiş) daha fazla gerçek kuruluma karşı doğrulanıyoruz.
  * **OpenCode *(beta)***: `~/.config/opencode/opencode.json` + `~/.config/opencode/plugins/failproofai.mjs` (user), `<cwd>/.opencode/opencode.json` + `<cwd>/.opencode/plugins/failproofai.mjs` (project) — OpenCode'un `local` kapsamı yok. Diğer altı CLI'den farklı olarak, OpenCode'un **dış komut hook sistemi yok**: `opencode.json`'daki `plugin: []` dizisi aracılığıyla açıkça kayıtlı işlem içi JS/TS eklentilerini yükler (`.opencode/plugins/` otomatik keşfi, opencode v1.14.33'te eklentilerin **nasıl** yüklediği değildir). Yükleme, failproofai ikilisini subprocess çağıran ve ikilinin Claude biçimli JSON yanıtını eklenti semantiğine çeviren küçük bir oluşturulan eklenti başlığını bırakır: tool olayı deny için `throw new Error()` (tool çağrısını iptal eder), instruct VE `Stop` / `SubagentStop` deny için `client.session.prompt(...)` (deny nedenini sonraki kullanıcı mesajı olarak gönderir — `session.idle` bildirim yalnız olduğu ve bundan atmanın no-op olması nedeniyle tek force-retry kanalı), ve allow için no-op. Başlık, ikili iletişime iletmeden önce hem tool adlarını (lowercase → PascalCase via `OPENCODE_TOOL_MAP`) hem de tool giriş arg anahtarlarını (camelCase → snake\_case via `OPENCODE_TOOL_INPUT_MAP` for `Read` / `Write` / `Edit`, ör. `filePath` → `file_path`, `oldString` → `old_string`) normalleştirir, bu nedenle `block-read-outside-cwd`, `block-env-files` ve `block-secrets-write` gibi yol kontrol yerleşikleri OpenCode tool çağrılarında değişmeden ateşlenir. Oturumlar opencode'un `~/.local/share/opencode/opencode.db` adresindeki SQLite DB'sinde yaşar; panonun oturum görüntüleyicisi `opencode db --format json` ve `opencode export <id>` aracılığıyla okur. OpenCode desteği **beta**'dır çünkü sürümler arasında ve daha fazla gerçek dünya oturumuna karşı davranış doğrulanıyoruz. [OpenCode eklentileri doklara](https://opencode.ai/docs/plugins/) bakın.
  * **Pi *(beta)***: `~/.pi/agent/settings.json` (user), `<cwd>/.pi/settings.json` (project) — Pi'nin `local` kapsamı yok. Pi, başlangıçta TypeScript uzantı paketlerini yükler; ayarlar dosyası düz bir dize dizini `{"packages": ["./relative/path", …]}`. failproofai, bundled `pi-extension/` dizinine işaret eden tek packages-array girişini yazar. Uzantı dahili olarak Pi'nin `tool_call` / `user_bash` / `input` / `session_start` olaylarına abone olur ve `failproofai --hook <Event> --cli pi` adresine shells; işleyici `PI_EVENT_MAP` aracılığıyla underscore\_lower\_snake\_case → PascalCase'yi normalleştirir, böylece mevcut yerleşik politikalar değişmeden ateşlenir. Tool giriş args de `PI_TOOL_INPUT_MAP` aracılığıyla normalleştirilir (Pi'nin Read / Write / Edit, `file_path` yerine `path` teslim eder; üst düzey anahtarı eşleştirmek `block-env-files` ve `block-secrets-write` ateşine izin verir — `block-read-outside-cwd` zaten `path` geri dönüşüne sahipti). Pi desteği **beta**'dır çünkü Pi'nin uzantı API'si ve oturum günlüğü düzeni kararlı hale gelirken.
  * **Gemini CLI *(beta)***: `~/.gemini/settings.json` (user), `<cwd>/.gemini/settings.json` (project) — Gemini'nin `local` kapsamı yok (failproofai'nin açığa çıkarmadığı `/etc/gemini-cli/settings.json` adresinde bir `system` kapsamını belgeler). Hook girişleri, Claude'un `{type, command, timeout}` formunu, Gemini'nin `{matcher, hooks: [...]}` eşleştirici şemasında `matcher: "*"` ile varsayılan olarak sarmalanmış şekilde kullanır. Olaylar PascalCase (`SessionStart`, `BeforeAgent`, `AfterAgent`, `BeforeModel`, `AfterModel`, `BeforeToolSelection`, `BeforeTool`, `AfterTool`, `PreCompress`, `Notification`, `SessionEnd`); işleyici `GEMINI_EVENT_MAP` aracılığıyla Claude kanonik adlarına eşler. Tool adları snake\_case (`run_shell_command`, `read_file`, `write_file`, `replace`, …) — işleyici `GEMINI_TOOL_MAP` aracılığıyla normalleştirir, böylece mevcut yerleşik politikalar değişmeden ateşlenir. Politika değerlendiricisi, Gemini'nin düz `{decision: "deny", reason}` şeklini (Gemini'nin "Golden Rule" exit-0 sözleşmesine göre tercih edilen), BeforeAgent / AfterTool / SessionStart üzerinde bağlam enjeksiyonu için `{hookSpecificOutput: {hookEventName, additionalContext}}` ve force-retry semantiği için AfterAgent'de `{decision: "block", reason}` yayar. Gemini CLI desteği **beta**'dır çünkü gerçek dünya kapsamını genişletiyoruz. [Gemini CLI hooks doklarına](https://geminicli.com/docs/hooks/) bakın.
* **`policies-config.json`** — failproofai'ye hangi politikaları değerlendireceğini ve hangi parametrelerle değerlendireceğini söyler (tüm agent CLI'leri arasında paylaşılır)

Belirli bir agent'i hedeflemek için `--cli claude|codex|copilot|cursor|opencode|pi|gemini` geçirin (boşlukla ayrılmış veya herhangi bir alt kümesi için tekrarlanır):

```bash theme={null}
failproofai policies --install --cli codex --scope project
failproofai policies --install --cli copilot --scope project
failproofai policies --install --cli cursor --scope project
failproofai policies --install --cli opencode --scope project
failproofai policies --install --cli pi --scope project
failproofai policies --install --cli gemini --scope project
failproofai policies --install --cli claude codex copilot cursor opencode pi gemini
```

`--cli` atıldığında, `failproofai` hangi agent CLI'lerinin kurulu olduğunu algılar (`which claude` / `which codex` / `which copilot` / `which cursor-agent` / `which opencode` / `which pi` / `which gemini`):

* **Bir CLI algılandı** — söylemeden bu CLI'yi otomatik seçer.
* **Etkileşimli terminalde birden çok CLI algılandı** — `Detected (N)` bölümüne gruplandırılmış ok tuşu tek seçim istemi gösterir (`Detected (N) aggregate aggregate row + algılanan her CLI) ve `Not installed (M) · install hooks ahead of time\` bölümünde her algılanmayan desteklenen CLI'yi ileri yükleme seçeneği olarak listeler (↑↓ taşı, Enter seç, ^C çık). Kaldırma akışı yalnızca Algılanan bölümü gösterir.
* **Etkileşimli olmayan çalıştırmada birden çok CLI algılandı** (CI, TTY yok) — sorulmadan tüm algılanan CLI'ler için kurar.
* **Hiç algılanmadı** — `claude`'a geri döner ve PATH'da agent ikilisinin bulunmadığına dair bir uyarıyla; hook komutu yine de yazılır, böylece bir tane kurduğunuz anda etkinleşir.

`policies-config.json`'i istediğiniz zaman doğrudan düzenleyebilirsiniz; değişiklikler yeniden başlatma gerekmeksizin sonraki hook olayında hemen geçerli olur.

***

## Örnek: takım varsayılanlarıyla proje düzeyinde yapılandırma

`.failproofai/policies-config.json`'i repo'nuzda commit edin:

```json theme={null}
{
  "enabledPolicies": [
    "block-sudo",
    "block-rm-rf",
    "block-push-master",
    "sanitize-api-keys",
    "block-env-files"
  ],
  "policyParams": {
    "block-push-master": {
      "protectedBranches": ["main", "release", "hotfix"]
    }
  }
}
```

Her geliştirici daha sonra, takım arkadaşlarını etkilemeden kişisel geçersiz kılmalar için `.failproofai/policies-config.local.json` (gitignore'da) oluşturabilir.
