Modül 4 · Hooks and the SDK · ⏱ 12 dakika

Bir hook'u uygulamak

Implementing a hook

Bu derste neler öğreneceksin

  • Sıfırdan bir PostToolUse hook'u yazıp test etmek
  • Script'i .claude/scripts/ altına yerleştirmek ve permission'lamak
  • Hook'un beklendiği gibi çalıştığını doğrulamak

Hedef: TypeScript dosyaları her değiştiğinde otomatik Prettier. Adım adım yapalım.

1. Klasör yapısı

.claude/
├── settings.json
└── scripts/
    └── format-on-edit.sh

2. Script’i yaz

.claude/scripts/format-on-edit.sh:

#!/usr/bin/env bash
set -euo pipefail

INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

# Dosya yoksa veya TS/JS değilse atla
if [[ -z "$FILE" ]]; then exit 0; fi
case "$FILE" in
  *.ts|*.tsx|*.js|*.jsx|*.mjs|*.cjs) ;;
  *) exit 0 ;;
esac

# Repo köküne göre relative yapalım
cd "$CLAUDE_PROJECT_DIR"

# Prettier varsa çalıştır (yoksa sessizce çık)
if [[ -x "node_modules/.bin/prettier" ]]; then
  node_modules/.bin/prettier --write "$FILE" >&2 || true
fi

3. Permission’la

chmod +x .claude/scripts/format-on-edit.sh

4. settings.json’a kaydet

.claude/settings.json:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/format-on-edit.sh"
          }
        ]
      }
    ]
  }
}

5. Reload

Açık oturumda hook’lar settings değişikliğini anında veya /hooks komutuyla yeniden yükler. Yeni session açtığında zaten taze yüklenir.

6. Test et

Bir TS dosyasını kötü formatla kaydet:

const x={a:1,b:2}

Claude’a “Bu dosyaya bir satır ekle” gibi minik bir edit yaptır. PostToolUse tetiklenir, Prettier dosyayı düzgün biçime sokar. Diff’i kontrol et — varsa formatlanmış görünmeli.

7. Hata ayıklama

Beklediğin gibi çalışmadıysa:

echo '{"tool_input":{"file_path":"src/index.ts"}}' | .claude/scripts/format-on-edit.sh

Manuel input ver, çıktıyı izle. set -x ekleyerek tüm satırları logla.

8. Windows / PowerShell varyantı

PowerShell ortamında script .ps1 olabilir:

{
  "type": "command",
  "command": "pwsh -NoProfile -File $CLAUDE_PROJECT_DIR/.claude/scripts/format-on-edit.ps1"
}

memkraft-*.ps1 örnekleri bu repo’nun kendisinde — referans alabilirsin.

9. Commit et — takımla paylaş

.claude/settings.json ve .claude/scripts/ repo’da olunca takımdaki herkes aynı formatter hook’unu otomatik alır. Yeni geliştirici klonladığında format kuralı zaten yerleşik.

Özet

  • .claude/scripts/ altına executable script
  • .claude/settings.json’a hook kaydı
  • TS/JS dosyalarına matcher
  • Test → Edit → Prettier → diff doğrulama

Sırada ne var?

Bir sonraki derste hook’larda en sık karşılaştığımız tuzakları (gotchas) ele alacağız.