Ana içeriğe atla
Yaygın senaryolar için hazır kullanılabilir örnekler. Her biri kurulumu ve neyi bekleyeceğinizi gösterir.

Claude Code için hook’ları ayarlama

Failproof AI, Claude Code ile hook’lar sistemi aracılığıyla entegre olur. failproofai policies --install çalıştırdığınızda, Claude Code’un settings.json dosyasında her araç çağrısında tetiklenen hook komutlarını kaydeder.
1

failproofai'i yükle

npm install -g failproofai
2

Tüm yerleşik politikaları etkinleştir

failproofai policies --install
3

Hook'ların kaydedildiğini doğrula

cat ~/.claude/settings.json | grep failproofai
PreToolUse, PostToolUse, Notification ve Stop etkinlikleri için hook girdilerini görmelisiniz.
4

Claude Code'u çalıştır

claude
Politikalar artık her araç çağrısında otomatik olarak çalışır. Claude’dan sudo rm -rf / çalıştırmasını istemeyi deneyin - engellenir.

Agents SDK için hook’ları ayarlama

Agents SDK ile geliştiriyorsanız, aynı hook sistemini programlı bir şekilde kullanabilirsiniz.
1

failproofai'i projenize yükle

npm install failproofai
2

Aracınızda hook'ları yapılandır

Aracı işleminizi oluştururken hook komutlarını geçin. Hook’lar Claude Code’daki gibi aynı şekilde çalışır - stdin/stdout JSON aracılığıyla:
failproofai --hook PreToolUse   # her araçtan önce çağrılır
failproofai --hook PostToolUse  # her araçtan sonra çağrılır
3

Aracınız için özel bir politika yaz

import { customPolicies, allow, deny } from "failproofai";

customPolicies.add({
  name: "limit-to-project-dir",
  description: "Aracı proje dizini içinde tutar",
  match: { events: ["PreToolUse"] },
  fn: async (ctx) => {
    const path = String(ctx.toolInput?.file_path ?? "");
    if (path.startsWith("/") && !path.startsWith(ctx.session?.cwd ?? "")) {
      return deny("Araç proje dizini ile sınırlandırılmıştır");
    }
    return allow();
  },
});
4

Özel politikayı yükle

failproofai policies --install --custom ./my-agent-policies.js

Yıkıcı komutları engelle

En yaygın kurulum - aracıların geri döndürülemez hasara neden olmasını önle.
failproofai policies --install block-sudo block-rm-rf block-force-push block-curl-pipe-sh
Bunu ne yapar:
  • block-sudo - tüm sudo komutlarını engeller
  • block-rm-rf - özyinelemeli dosya silmeyi engeller
  • block-force-push - git push --force’u engeller
  • block-curl-pipe-sh - uzak komutları shell’e yönlendirmeyi engeller

Sır sızıntısını önle

Aracıların kimlik bilgilerini görmesini veya araç çıktısında sızdırmasını engelle.
failproofai policies --install sanitize-api-keys sanitize-jwt sanitize-connection-strings sanitize-bearer-tokens
Bunlar PostToolUse’de çalışır - bir araç çalıştıktan sonra, araç çıktısını ajan görmeden temizlerler.

Aracılar dikkat gerektirdiğinde Slack uyarıları al

Bildirimi hook’unu kullanarak boşta bekleme uyarılarını Slack’e yönlendir.
import { customPolicies, allow, instruct } from "failproofai";

customPolicies.add({
  name: "slack-on-idle",
  description: "Araç girdi için beklerken Slack'e uyarı gönder",
  match: { events: ["Notification"] },
  fn: async (ctx) => {
    const webhookUrl = process.env.SLACK_WEBHOOK_URL;
    if (!webhookUrl) return allow();

    const message = String(ctx.payload?.message ?? "Araç beklemede");
    const project = ctx.session?.cwd ?? "bilinmiyor";

    try {
      await fetch(webhookUrl, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
          text: `*${message}*\nProje: \`${project}\``,
        }),
        signal: AbortSignal.timeout(5000),
      });
    } catch {
      // Slack ulaşılamazsa aracı hiçbir zaman engelleme
    }

    return allow();
  },
});
Yükle:
SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --custom ./slack-alerts.js

Aracıları bir dalda tut

Aracıların dal değiştirmesini veya korumalı dallara göndermesini önle.
import { customPolicies, allow, deny } from "failproofai";

customPolicies.add({
  name: "stay-on-branch",
  description: "Aracının diğer dallara geçmesini önle",
  match: { events: ["PreToolUse"] },
  fn: async (ctx) => {
    if (ctx.toolName !== "Bash") return allow();
    const cmd = String(ctx.toolInput?.command ?? "");
    if (/git\s+checkout\s+(?!-b)/.test(cmd)) {
      return deny("Geçerli dalda kal. Gerekirse -b ile yeni dal oluştur.");
    }
    return allow();
  },
});

Commit’ten önce testler gerekli kıl

Aracılara commit’lemeden önce testleri çalıştırmalarını hatırlat.
import { customPolicies, allow, instruct } from "failproofai";

customPolicies.add({
  name: "test-before-commit",
  description: "Aracıya commit'lemeden önce testleri çalıştırmasını hatırlat",
  match: { events: ["PreToolUse"] },
  fn: async (ctx) => {
    if (ctx.toolName !== "Bash") return allow();
    const cmd = String(ctx.toolInput?.command ?? "");
    if (/git\s+commit/.test(cmd)) {
      return instruct("Commit'lemeden önce testleri çalıştır. Önce `npm test` veya `bun test`'i kullan.");
    }
    return allow();
  },
});

Production deposunu kilitlenmiş hale getir

Proje seviyesinde bir config commit’le, böylece ekibinizdeki her geliştirici aynı politikaları alır. Deponuzda .failproofai/policies-config.json dosyası oluştur:
{
  "enabledPolicies": [
    "block-sudo",
    "block-rm-rf",
    "block-force-push",
    "block-push-master",
    "block-env-files",
    "sanitize-api-keys",
    "sanitize-jwt"
  ],
  "policyParams": {
    "block-push-master": {
      "protectedBranches": ["main", "release", "production"]
    }
  }
}
Sonra commit’le:
git add .failproofai/policies-config.json
git commit -m "Add failproofai team policies"
failproofai yüklü olan her takım üyesi otomatik olarak bu kuralları alacaktır.

Konvansiyonel politikalarla kuruluş çapında kalite standardı oluştur

En etkili kurulum: .failproofai/policies/’ni projenize commit’le ve politikaları projenize göre özelleştir. Her takım üyesi otomatik olarak alır — kurulum komutu yok, yapılandırma değişikliği yok.
1

Dizini oluştur ve politikaları ekle

mkdir -p .failproofai/policies
// .failproofai/policies/team-policies.mjs
import { customPolicies, allow, deny, instruct } from "failproofai";

// Takımının tercih ettiği paket yöneticisini zorunlu kıl
// (veya bunun yerine yerleşik prefer-package-manager politikasını etkinleştir)
customPolicies.add({
  name: "enforce-bun",
  match: { events: ["PreToolUse"] },
  fn: async (ctx) => {
    if (ctx.toolName !== "Bash") return allow();
    const cmd = String(ctx.toolInput?.command ?? "");
    if (/\bnpm\b/.test(cmd)) return deny("npm yerine bun'ı kullan.");
    return allow();
  },
});

// Aracıya commit'lemeden önce testleri çalıştırmasını hatırlat
customPolicies.add({
  name: "test-before-commit",
  match: { events: ["PreToolUse"] },
  fn: async (ctx) => {
    if (ctx.toolName !== "Bash") return allow();
    if (/git\s+commit/.test(ctx.toolInput?.command ?? "")) {
      return instruct("Commit'lemeden önce testleri çalıştır.");
    }
    return allow();
  },
});
2

Git'e commit et

git add .failproofai/policies/
git commit -m "Add team quality policies"
3

İyileştirmeye devam et

Takımınız yeni hata modlarına ulaştıkça, politikalar ekle ve gönder. Herkes bir sonraki git pull’da güncellemeyi alır. Bu politikalar, takımınızla birlikte büyüyen bir yaşayan kalite standardı haline gelir.

Daha fazla örnek

Repodaki examples/ dizini şunları içerir:
DosyaNe gösterir
policies-basic.jsBaşlangıç politikaları - production yazılarını, force-push’u, yönlendirilmiş komutları engelle
policies-notification.jsBoşta bekleme bildirimleri ve oturum sonu için Slack uyarıları
policies-advanced/index.jsGeçişli içe aktarımlar, async hook’lar, PostToolUse çıktısı temizliği, Stop olayı işleme