> ## Documentation Index
> Fetch the complete documentation index at: https://docs.befailproof.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Örnekler

> Claude Code ve Agents SDK için kancaları nasıl ayarlanır

Yaygın senaryolar için hazır kullanım örnekleri. Her biri nasıl yükleneceğini ve neleri bekleyeceğinizi gösterir.

***

## Claude Code için kancaları ayarlama

Failproof AI, Claude Code ile [kanca sistemi](https://docs.anthropic.com/en/docs/claude-code/hooks) üzerinden entegre olur. `failproofai policies --install` komutunu çalıştırdığınızda, Claude Code'un `settings.json` dosyasında her araç çağrısında tetiklenen kanca komutlarını kaydeder.

<Steps>
  <Step title="failproofai yükleyin">
    ```bash theme={null}
    npm install -g failproofai
    ```
  </Step>

  <Step title="Tüm yerleşik politikaları etkinleştirin">
    ```bash theme={null}
    failproofai policies --install
    ```
  </Step>

  <Step title="Kancanın kayıtlı olduğunu doğrulayın">
    ```bash theme={null}
    cat ~/.claude/settings.json | grep failproofai
    ```

    `PreToolUse`, `PostToolUse`, `Notification` ve `Stop` olayları için kanca girdilerini görmelisiniz.
  </Step>

  <Step title="Claude Code'u çalıştırın">
    ```bash theme={null}
    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 - engellenecektir.
  </Step>
</Steps>

***

## Agents SDK için kancaları ayarlama

[Agents SDK](https://docs.anthropic.com/en/docs/agents-sdk) ile geliştiriyorsanız, aynı kanca sistemini programlı olarak kullanabilirsiniz.

<Steps>
  <Step title="failproofai'ı projenize yükleyin">
    ```bash theme={null}
    npm install failproofai
    ```
  </Step>

  <Step title="Aracınızda kancanları yapılandırın">
    Aracı işlemi oluştururken kanca komutlarını iletin. Kancalar Claude Code'dakiyle aynı şekilde tetiklenir - stdin/stdout JSON aracılığıyla:

    ```bash theme={null}
    failproofai --hook PreToolUse   # her araçtan önce çağrılır
    failproofai --hook PostToolUse  # her araçtan sonra çağrılır
    ```
  </Step>

  <Step title="Aracınız için özel bir politika yazın">
    ```javascript theme={null}
    import { customPolicies, allow, deny } from "failproofai";

    customPolicies.add({
      name: "limit-to-project-dir",
      description: "Aracı proje dizini içinde tutun",
      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();
      },
    });
    ```
  </Step>

  <Step title="Özel politikayı yükleyin">
    ```bash theme={null}
    failproofai policies --install --custom ./my-agent-policies.js
    ```
  </Step>
</Steps>

***

## Yıkıcı komutları engelle

En yaygın kurulum - ajanların geri döndürülemez hasara yol açmasını önle.

```bash theme={null}
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` öğesini engeller
* `block-curl-pipe-sh` - uzaktan betiklerin kabuğa aktarılmasını engeller

***

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

Ajanların araç çıktısında kimlik bilgilerini görmesini veya sızıtmasını engelleyin.

```bash theme={null}
failproofai policies --install sanitize-api-keys sanitize-jwt sanitize-connection-strings sanitize-bearer-tokens
```

Bunlar `PostToolUse` üzerinde tetiklenir - bir araç çalıştırıldıktan sonra, ajan görmeden önce çıktıyı temizlerler.

***

## Ajanlar dikkat gerektirdiğinde Slack uyarıları alın

Boş bekleme uyarılarını Slack'e iletmek için bildirim kancasını kullanın.

```javascript theme={null}
import { customPolicies, allow, instruct } from "failproofai";

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

    const message = String(ctx.payload?.message ?? "Ajan bekliyor");
    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şılamıyorsa ajanı hiçbir zaman bloke etme
    }

    return allow();
  },
});
```

Yükleyin:

```bash theme={null}
SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --custom ./slack-alerts.js
```

***

## Ajanları bir dalda tut

Ajanların dalları değiştirmesini veya korumalı dallara gitmesini önleyin.

```javascript theme={null}
import { customPolicies, allow, deny } from "failproofai";

customPolicies.add({
  name: "stay-on-branch",
  description: "Ajanın başka 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("Mevcut dalda kal. Gerekirse -b ile yeni dal oluştur.");
    }
    return allow();
  },
});
```

***

## Taahhüt etmeden önce testler gerekli kıl

Ajanları taahhüt etmeden önce test çalıştırması konusunda uyarın.

```javascript theme={null}
import { customPolicies, allow, instruct } from "failproofai";

customPolicies.add({
  name: "test-before-commit",
  description: "Ajanı taahhüt etmeden önce test çalıştırmaya hatırlatın",
  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("Taahhüt etmeden önce testleri çalıştırın. Önce `npm test` veya `bun test` kullanın.");
    }
    return allow();
  },
});
```

***

## Prodüksiyon deposunu kilitle

Proje düzeyinde yapılandırmayı taahhüt edin, böylece ekibinizdeki her geliştirici aynı politikaları alır.

Deponuzda `.failproofai/policies-config.json` oluşturun:

```json theme={null}
{
  "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 taahhüt edin:

```bash theme={null}
git add .failproofai/policies-config.json
git commit -m "failproofai ekip politikalarını ekle"
```

failproofai yüklü olan her takım üyesi bu kuralları otomatik olarak alacaktır.

***

## Konvansiyon politikaları ile kuruluş çapında bir kalite standardı oluştur

En etkili kurulum: `.failproofai/policies/` deponuza projenize göre uyarlanmış politikalarla taahhüt edin. Her takım üyesi bunları otomatik olarak alır — hiçbir yükleme komutu yok, hiçbir yapılandırma değişikliği yok.

<Steps>
  <Step title="Dizini oluşturun ve politika ekleyin">
    ```bash theme={null}
    mkdir -p .failproofai/policies
    ```

    ```js theme={null}
    // .failproofai/policies/team-policies.mjs
    import { customPolicies, allow, deny, instruct } from "failproofai";

    // Ekibinizin tercih ettiği paket yöneticisini uygulayın
    // (veya bunun yerine yerleşik prefer-package-manager politikasını etkinleştirin)
    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ın.");
        return allow();
      },
    });

    // Ajanı taahhüt etmeden önce test çalıştırmaya hatırlatın
    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("Taahhüt etmeden önce testleri çalıştırın.");
        }
        return allow();
      },
    });
    ```
  </Step>

  <Step title="Git'e taahhüt edin">
    ```bash theme={null}
    git add .failproofai/policies/
    git commit -m "Takım kalite politikaları ekle"
    ```
  </Step>

  <Step title="İyileştirmeyi devam ettirin">
    Ekibiniz yeni hata modları yaşadıkça, politika ekleyin ve itin. Herkes sonraki `git pull`da güncellemeyi alır. Bu politikalar, ekibinizle birlikte büyüyen canlı bir kalite standardı haline gelir.
  </Step>
</Steps>

***

## Daha fazla örnek

Depo içindeki [`examples/`](https://github.com/failproofai/failproofai/tree/main/examples) dizini şunları içerir:

| Dosya                        | Neyi gösterir                                                                                    |
| ---------------------------- | ------------------------------------------------------------------------------------------------ |
| `policies-basic.js`          | Başlangıç politikaları - prodüksiyon yazılarını engelle, force-push, borulanan betikleri engelle |
| `policies-notification.js`   | Boş bildirimler ve oturum sonu için Slack uyarıları                                              |
| `policies-advanced/index.js` | Geçişli içe aktarmalar, eşzamansız kancalar, PostToolUse çıktı temizleme, Stop olay işleme       |
