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 |
Birleştirme kuralları
enabledPolicies - tüm üç kapsamın birleşimi. Herhangi bir seviyede etkinleştirilen bir politika etkindir.
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.
customPoliciesPath - bunu tanımlayan ilk kapsam kazanır.
llm - bunu tanımlayan ilk kapsam kazanır.
Config dosya formatı
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 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 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/).
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 bölümüne bakın.
Kural tabanlı politikalar
AçıkcustomPoliciesPath’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 |
*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 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.
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’inlocalkapsamı yok - GitHub Copilot CLI (beta):
~/.copilot/hooks/failproofai.json(user),<cwd>/.github/hooks/failproofai.json(project) — Copilot’unlocalkapsamı yok. Hook girişleri Copilot’un OS anahtarlıbash/powershellkomut alanlarınıtimeoutSecile kullanır; dosya üst düzeyversion: 1işaretiyle taşınır. Copilot CLI desteği beta’dır çünküevents.jsonlkayı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’unlocalkapsamı yok. Hook girişleri Claude biçimli{type, command, timeout}formunu kullanır (nobash/powershellsplit), ancak Cursor’un hooks şeması başına düz bir dizide camelCase olay anahtarları (preToolUse,beforeSubmitPrompt, …) altında depolanır; dosya üst düzeyversion: 1işaretiyle taşınır. İşleyiciCURSOR_EVENT_MAParacı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’unlocalkapsamı yok. Diğer altı CLI’den farklı olarak, OpenCode’un dış komut hook sistemi yok:opencode.json’dakiplugin: []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çinthrow new Error()(tool çağrısını iptal eder), instruct VEStop/SubagentStopdeny içinclient.session.prompt(...)(deny nedenini sonraki kullanıcı mesajı olarak gönderir —session.idlebildirim 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 viaOPENCODE_TOOL_MAP) hem de tool giriş arg anahtarlarını (camelCase → snake_case viaOPENCODE_TOOL_INPUT_MAPforRead/Write/Edit, ör.filePath→file_path,oldString→old_string) normalleştirir, bu nedenleblock-read-outside-cwd,block-env-filesveblock-secrets-writegibi yol kontrol yerleşikleri OpenCode tool çağrılarında değişmeden ateşlenir. Oturumlar opencode’un~/.local/share/opencode/opencode.dbadresindeki SQLite DB’sinde yaşar; panonun oturum görüntüleyicisiopencode db --format jsonveopencode 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 bakın. - Pi (beta):
~/.pi/agent/settings.json(user),<cwd>/.pi/settings.json(project) — Pi’ninlocalkapsamı yok. Pi, başlangıçta TypeScript uzantı paketlerini yükler; ayarlar dosyası düz bir dize dizini{"packages": ["./relative/path", …]}. failproofai, bundledpi-extension/dizinine işaret eden tek packages-array girişini yazar. Uzantı dahili olarak Pi’nintool_call/user_bash/input/session_startolaylarına abone olur vefailproofai --hook <Event> --cli piadresine shells; işleyiciPI_EVENT_MAParacılığıyla underscore_lower_snake_case → PascalCase’yi normalleştirir, böylece mevcut yerleşik politikalar değişmeden ateşlenir. Tool giriş args dePI_TOOL_INPUT_MAParacılığıyla normalleştirilir (Pi’nin Read / Write / Edit,file_pathyerinepathteslim eder; üst düzey anahtarı eşleştirmekblock-env-filesveblock-secrets-writeateşine izin verir —block-read-outside-cwdzatenpathgeri 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’ninlocalkapsamı yok (failproofai’nin açığa çıkarmadığı/etc/gemini-cli/settings.jsonadresinde birsystemkapsamını belgeler). Hook girişleri, Claude’un{type, command, timeout}formunu, Gemini’nin{matcher, hooks: [...]}eşleştirici şemasındamatcher: "*"ile varsayılan olarak sarmalanmış şekilde kullanır. Olaylar PascalCase (SessionStart,BeforeAgent,AfterAgent,BeforeModel,AfterModel,BeforeToolSelection,BeforeTool,AfterTool,PreCompress,Notification,SessionEnd); işleyiciGEMINI_EVENT_MAParacılığıyla Claude kanonik adlarına eşler. Tool adları snake_case (run_shell_command,read_file,write_file,replace, …) — işleyiciGEMINI_TOOL_MAParacı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 bakın.
- Claude Code:
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)
--cli claude|codex|copilot|cursor|opencode|pi|gemini geçirin (boşlukla ayrılmış veya herhangi bir alt kümesi için tekrarlanır):
--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) veNot 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:
.failproofai/policies-config.local.json (gitignore’da) oluşturabilir.
