Yapılandırma kapsamları
Üç yapılandırma kapsamı vardır ve öncelik sırasına göre değerlendirilir:
failproofai bir hook olayı aldığında, mevcut çalışma dizini için mevcut olan üç dosyanın tümünü yükler ve birleştirir.
Birleştirme kuralları
enabledPolicies - üç kapsamın tümünü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.
Yapılandırma dosyası 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 tam olarak eşleşmelidir. Tam liste için Yerleşik Politikalar bölümüne bakın.
enabledPolicies içinde olmayan politikalar, policyParams içinde girdileri olsa bile etkindir değildir.
policyParams
Tür: Record<string, Record<string, unknown>>
Politikaya özgü parametre geçersiz kılmaları. Dış anahtar politika adıdır; iç anahtarlar politikaya özgüdür. Her politika, Yerleşik Politikalar içinde mevcut parametrelerini belgelendirmektedir.
Bir politikanın parametreleri varsa ancak siz 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 params bloğu içindeki bilinmeyen anahtarlar hook çalıştırırken sessizce yok sayılır ancak failproofai policies çalıştırdığınızda uyarı olarak işaretlenir.
hint (çapraz kesme)
Tür: string (isteğe bağlı)
Bir politika deny veya instruct döndürdüğünde nedene eklenen mesaj. Politikanın kendisini değiştirmeden Claude’a uygulanabilir rehberlik vermek 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 şunu görür: “Zorla itme engellendi. Bunun yerine yeni bir dal oluşturmayı deneyin.”
Dize olmayan değerler ve boş dizeler sessizce yok sayılır. hint ayarlanmadıysa, 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 saklanmadan önce mutlak olarak çözümlenir).
Dosya her hook olayında yeni yüklenir - hiçbir önbellek yoktur. Yazma ayrıntıları için Özel Politikalar bölümüne bakın.
Kural tabanlı politikalar
AçıkcustomPoliciesPath’e ek olarak, failproofai .failproofai/policies/ dizinlerinden politika dosyalarını otomatik olarak keşfeder ve yükler:
Dosya eşleşmesi: Yalnızca
*policies.{js,mjs,ts} ile eşleşen dosyalar yüklenir (örn. security-policies.mjs, workflow-policies.js). Dizindeki diğer dosyalar yok sayılır.
Yapılandırma gerekmez: Kural politikaları policies-config.json içinde giriş gerektirmez. Dosyaları dizine bırakın ve bir sonraki hook olayında seçilirler.
Birleşim yükleme: Hem proje hem de kullanıcı kural dizinleri taranır. Her iki seviyedeki tüm eşleşen dosyalar yüklenir (customPoliciesPath ilk kapsam kazanır’dan farklı olarak).
Daha fazla ayrıntı ve örnekler 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’dan yapılandırma yönetimi
policies --install ve policies --uninstall komutları, ajan CLI’nizin hook ayarları dosyasına (hook giriş noktaları) yazarken policies-config.json, doğrudan yönettiğiniz dosyadır. İkisi ayrıdır:
- Ajan CLI ayarları — ajanı her araç kullanımında
failproofai --hook <event>çağırması için söyler:- Claude Code:
~/.claude/settings.json(kullanıcı),<cwd>/.claude/settings.json(proje),<cwd>/.claude/settings.local.json(yerel) - OpenAI Codex:
~/.codex/hooks.json(kullanıcı),<cwd>/.codex/hooks.json(proje) — Codex yerel kapsamı yok - GitHub Copilot CLI (beta):
~/.copilot/hooks/failproofai.json(kullanıcı),<cwd>/.github/hooks/failproofai.json(proje) — Copilot yerel kapsamı yok. Hook girdileri Copilot’un OS anahtarlıbash/powershellkomut alanlarınıtimeoutSecile kullanır; dosya üst düzeyversion: 1işaretçisini taşır. Copilot CLI desteği beta durumundadır veevents.jsonlkayıt şemasını (halk belgeleri belirtmez) daha fazla gerçek dünya oturumuna karşı doğrularız. - Cursor Agent (beta):
~/.cursor/hooks.json(kullanıcı),<cwd>/.cursor/hooks.json(proje) — Cursor yerel kapsamı yok. Hook girdileri Claude şeklinde{type, command, timeout}formunu kullanır (bash/powershellbölümü yok) ancak camelCase olay anahtarları (preToolUse,beforeSubmitPrompt, …) altında depolanır, Cursor’un hooks şemasına göre düz dizi halinde; dosya üst düzeyversion: 1işaretçisini taşır. İşleyici,CURSOR_EVENT_MAParacılığıyla camelCase → PascalCase’i kanonikleştirir, böylece mevcut yerleşik politikalar değişmeden çalışır. Cursor Agent desteği beta durumundadır ve Cursor’un disk üzerindeki transkripti (açık belgelerde belirtilmez) daha fazla gerçek dünya kurulumuna karşı doğrularız. - OpenCode (beta):
~/.config/opencode/opencode.json+~/.config/opencode/plugins/failproofai.mjs(kullanıcı),<cwd>/.opencode/opencode.json+<cwd>/.opencode/plugins/failproofai.mjs(proje) — OpenCode yerel kapsamı yok. Diğer beş CLI’den farklı olarak, OpenCode harici komut hook sistemi olmaz:plugin: []dizisi aracılığıyla açıkça kaydedilen işlem içi JS/TS eklentilerini yükler (opencode.jsoniçinde) (.opencode/plugins/dan otomatik keşif opencode v1.14.33’de eklentilerin nasıl yüklendiği değildir). Kurulum, ikili failproofai’yi subprocess olarak çağıran ve ikili’nin Claude şekli JSON yanıtını eklenti semantiğine geri çeviren küçük bir oluşturulan eklenti parçacığını bırakır: araç olayı reddi içinthrow new Error()(araç çağrısını iptal eder),instructVEStop/SubagentStopreddi içinclient.session.prompt(...)(reddi nedeni bir sonraki kullanıcı iletisi olarak gönderir —session.idleyalnızca bildirimdir ve bundan atmak no-op olduğundan tek zorla yeniden deneme kanalı), allow için no-op. Parçacık hem araç adlarını (küçük harf → PascalCase,OPENCODE_TOOL_MAParacılığıyla) hem de araç giriş arg anahtarlarını (camelCase → snake_case,OPENCODE_TOOL_INPUT_MAParacılığıylaRead/Write/Editiçin, örn.filePath→file_path,oldString→old_string) kanonikleştirir, ikili’ye iletmeden önce, yol kontrol yerleşikleri gibiblock-read-outside-cwd,block-env-filesveblock-secrets-writeOpenCode araç çağrılarında değişmeden çalışır. Oturumlar opencode’un SQLite DB’sinde yaşar~/.local/share/opencode/opencode.db; pano’nun oturum görüntüleyicisi onlarıopencode db --format jsonveopencode export <id>aracılığıyla okur. OpenCode desteği beta durumundadır ve sürümler arasında ve daha fazla gerçek dünya oturumlarına karşı davranışı doğrularız. OpenCode eklentileri belgeleri başlıklı sayfaya bakın. - Pi (beta):
~/.pi/agent/settings.json(kullanıcı),<cwd>/.pi/settings.json(proje) — Pi yerel kapsamı yok. Pi başlangıçta TypeScript uzantı paketlerini yükler; ayarlar dosyası düz dize dizisidir{"packages": ["./relative/path", …]}. failproofai, paketlenmişpi-extension/dizinine işaret eden tek bir packages-dizisi girişi yazar. Uzantı dahili olarak Pi’nintool_call/user_bash/input/session_startolaylarına abone olur vefailproofai --hook <Event> --cli pi’ye shell çıkışı verir; işleyici underscore_lower_snake_case → PascalCase’iPI_EVENT_MAParacılığıyla kanonikleştirir, böylece mevcut yerleşik politikalar değişmeden çalışır. Araç giriş argları daPI_TOOL_INPUT_MAParacılığıyla kanonikleştirilir (Pi’nin Read / Write / Editfile_pathyerinepathiletir; üst düzey anahtarı eşlemekblock-env-filesveblock-secrets-write’in çalışmasını sağlar —block-read-outside-cwdzaten birpathgeri dönüşü içeriyordu). Pi desteği beta durumundadır, Pi’nin uzantı API’si ve oturum günlüğü düzeni stabilize olurken. - Hermes (hermes-agent):
~/.hermes/config.yaml(yalnızca kullanıcı kapsamı — Hermes proje/yerel yapılandırması yok). Hermes bir Slack/Telegram ağ geçididir, bu nedenle bir kurulum her platformdan (Slack/Telegram/cli/cron) araç çağrılarını ve iç alt ajanları yakalar. Hook girdileri, Hermes’in snake_case olayları (pre_tool_call/post_tool_call/on_session_start/on_session_end/subagent_stop) tarafından anahtarlananhooks:eşlemesi altında{command, timeout}çiftidir; işleyiciHERMES_EVENT_MAParacılığıyla olayları veHERMES_TOOL_MAParacılığıyla araç adlarını kanonikleştirir, böylece yerleşik politikalar değişmeden çalışır. Yapılandırma, yorum koruyan YAMLDocumentturuna göre düzenlendiğinden işletmenin diğer ayarları kalır ve kurulum, başsız ağ geçidinin (TTY yok) hookları onay istemi olmadan çalıştırması içinhooks_auto_accept: trueayarlar. Değerlendirici Hermes’in{"decision":"block","reason"}stdout sözleşmesini yayar (Hermes çıkış kodlarını yok sayar). Sınırlamalar: Hermes’in birStopolay sonu yoktur, bu nedenlerequire-*-before-stopyerleşikleri bunun için hiçbir zaman çalışmaz (uygulanamaz, kırık değil);instructizin-not-ile-günlüğe-kaydedil’e degrades (ek bağlam kanalı yok); ve çıkış gizli redaksiyonu (sanitize-*) shell-hook sözleşmesi üzerinde araç çıkışını yeniden yazamaz. Hermes aynı zamanda çevrimdışı bir denetim kaynağıdır — pano, ağ geçidi oturumlarını doğrudan~/.hermes/state.db’den okur.
- Claude Code:
policies-config.json— failproofai’ye hangi politikaları değerlendireceğini ve hangi parametrelerle (tüm ajan CLI’ler arasında paylaşılan) söyler
--cli claude|codex|copilot|cursor|opencode|pi|hermes geçin (boşlukla ayrılmış veya herhangi bir altküme için tekrarlanan):
--cli atlandığında, failproofai hangi ajan CLI’lerin yüklendiğini algılar (which claude / which codex / which copilot / which cursor-agent / which opencode / which pi / which hermes):
- Bir CLI algılandı — sor olmadan o CLI’yi otomatik seçer.
- Etkileşimli bir terminalde birden fazla CLI algılandı —
Detected (N)bölümüne gruplandırılmış ok tuşu tek seçim istemi gösterir (algılanan tüm CLI’ler için birTüm N tespit edileni yükletoplu satırı + her algılanan CLI bireysel olarak) ve her desteklenen CLI’nin yüklenmemiş olan listesini gösterenYüklü olmayan (M) · hookları önceden kurmabölümü (↑↓ taşımak, Enter seçmek, ^C bırakmak için). Kaldırma akışı yalnızca Algılanan bölümü gösterir. - Etkileşimli olmayan çalıştırmada birden fazla CLI algılandı (CI, TTY yok) — sor olmadan tüm algılanan CLI’ler için yükler.
- Hiçbiri algılanmadı —
claude’ye geri döner, PATH’de ajan ikili bulunamadığı konusunda bir uyarı ile; hook komutu hala yazılır, böylece biri yüklendiğin anda etkinleşir.
policies-config.json’u doğrudan istediğiniz zaman düzenleyebilirsiniz; değişiklikler bir sonraki hook olayında yeniden başlatma gerekmeden hemen etkili olur.
Örnek: takım varsayılanları ile proje düzeyinde yapılandırma
.failproofai/policies-config.json’u repo’nuza kaydedin:
.failproofai/policies-config.local.json (gitignore’da) oluşturabilir.
