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.