Ana içeriğe atla
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:
KapsamDosya yoluAmaç
project.failproofai/policies-config.jsonRepo başına ayarlar, sürüm kontrolüne commit edilir
local.failproofai/policies-config.local.jsonKişisel repo başına geçersiz kılmalar, gitignore’da
global~/.failproofai/policies-config.jsonTü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.
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.
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
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ı

{
  "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 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/).
{
  "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 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:
SeviyeDizinKapsam
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 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.
{
  "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ı 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. filePathfile_path, oldStringold_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 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 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):
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:
{
  "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.