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

Bir başka faydalı hook

Another useful hook

Bu derste neler öğreneceksin

  • SessionStart hook'u ile her oturuma bağlam yüklemek
  • Stop hook'u ile oturum sonunda otomatik özet/log
  • Recursion ve performans tuzaklarına son bir kez bakmak

Bu derste SessionStart ve Stop event’leriyle çalışıp oturum sınırlarını yakalayan iki güçlü kalıbı işliyoruz.

1. SessionStart — her oturuma context yükle

Hedef: oturum açıldığında son commit, açık PR’ların durumu, son hata log’u otomatik enjekte edilsin.

.claude/scripts/session-context.sh:

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

cd "$CLAUDE_PROJECT_DIR"

LAST_COMMIT=$(git log -1 --pretty=format:"%h %s — %an, %ar" 2>/dev/null || echo "yok")
BRANCH=$(git branch --show-current 2>/dev/null || echo "?")
STATUS=$(git status --short 2>/dev/null | head -20)

cat <<EOF
{
  "additionalContext": "Branch: $BRANCH\nSon commit: $LAST_COMMIT\nDeğişen dosyalar:\n$STATUS"
}
EOF

.claude/settings.json:

{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/session-context.sh"
          }
        ]
      }
    ]
  }
}

Her açılışta Claude “Branch nerede, son ne yaptım” sorusunu sormaz — biliyor.

2. Stop — oturum sonu özeti

Hedef: Claude bir turdaki cevabı bitirdiğinde kısa bir log’a yaz.

.claude/scripts/turn-log.sh:

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

INPUT=$(cat)
SESSION=$(echo "$INPUT" | jq -r '.session_id')
TS=$(date -Iseconds)

LOG="$CLAUDE_PROJECT_DIR/.claude/audit/turns-$(date +%Y-%m-%d).log"
mkdir -p "$(dirname "$LOG")"

echo "[$TS] session=$SESSION turn-end" >> "$LOG"
exit 0

.claude/settings.json:

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/turn-log.sh"
          }
        ]
      }
    ]
  }
}

Burada çok agresif olma — Stop her turun sonunda tetiklenir. Performansa dikkat.

3. SubagentStop — paralel iş takibi

Bir subagent görevini bitirdiğinde tetiklenir. Tipik kullanım: subagent süresini logla veya çıktıyı parent’a hazırla.

"SubagentStop": [
  {
    "hooks": [
      { "type": "command", "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/subagent-done.sh" }
    ]
  }
]

4. Pratikten en sık kullanılan kombinasyon

Birçok takımın .claude/settings.json minimum seti şu üçünden oluşur:

EventAmaç
PostToolUse (Edit|Write)Auto-format
PreToolUse (Bash)Tehlikeli komut bloğu
SessionStartBranch + son commit context’i

Bu üçü ile takımın hem güvenliği hem verimi %30+ artar; bedeli neredeyse sıfır.

5. Doğrulama

Şimdi:

claude

Yeni oturum aç. Status bar’da SessionStart hook’u tetiklendi mi? Bir Edit yap → format çalıştı mı? rm -rf dene → bloklandı mı?

Üçü de doğrulandıysa hook stack’in production-ready.

Özet

  • SessionStart: oturum açılışında context enjeksiyonu
  • Stop: tur sonu (dikkat, hafif tut)
  • SubagentStop: subagent görev sonu
  • En kritik üçlü: PostToolUse format + PreToolUse Bash guard + SessionStart context

Sırada ne var?

Modül 4’ün son dersi: Claude Code SDK — Claude Code’u headless ve programatik çağırmak.