Bir başka faydalı hook
Another useful hook
Bu kursta tartıştığımız PreToolUse ve PostToolUse hook’larının ötesinde başka hook’lar da var:
Notification— Claude Code bir notification gönderdiğinde çalışır. Bu, Claude’un bir tool kullanmak için izin istemesi veya Claude Code’un 60 saniye idle kaldığı durumlarda olur.Stop— Claude Code cevap vermeyi bitirdiğinde çalışır.SubagentStop— Bir subagent (UI’da “Task” olarak görünür) bittiğinde çalışır.PreCompact— Manuel veya otomatik bir compact operasyonu olmadan önce çalışır.UserPromptSubmit— Kullanıcı bir prompt gönderdiğinde, Claude onu işlemeden önce çalışır.SessionStart— Bir session başlatılırken veya devam ettirilirken çalışır.SessionEnd— Bir session bittiğinde çalışır.
Kafa karıştırıcı kısım
- Komutuna gönderilecek stdin input’u, çalışan hook türüne göre değişir (
PreToolUse,PostToolUse,Notification, vb.). - Bunun içindeki
tool_inputise çağrılan tool’a göre değişir (PreToolUsevePostToolUsehook’larında).
Örneğin, bir hook’a giden stdin input’unun bir örneği şu şekilde — bu örnekte hook TodoWrite tool’unu izleyen bir PostToolUse. Hatırlatma: TodoWrite, Claude’un to-do item’larını takip etmek için kullandığı tool.
{
"session_id": "9ecf22fa-edf8-4332-ae85-b6d5456eda64",
"transcript_path": "<path_to_transcript>",
"hook_event_name": "PostToolUse",
"tool_name": "TodoWrite",
"tool_input": {
"todos": [{ "content": "write a readme", "status": "pending", "id": "1" }]
},
"tool_response": {
"oldTodos": [],
"newTodos": [{ "content": "write a readme", "status": "pending", "id": "1" }]
}
}
Karşılaştırma olarak, bir Stop hook’una giden input örneği şu şekilde:
{
"session_id": "af9f50b6-f042-4773-b3e2-c3a4814765ce",
"transcript_path": "<path_to_transcript>",
"hook_event_name": "Stop",
"stop_hook_active": false
}
Gördüğün gibi, komutuna giden stdin input’u hook’a (PreToolUse, PostToolUse, Stop, vb.) ve kullanılan matcher’a (PreToolUse ve PostToolUse durumunda) göre anlamlı şekilde değişir. Bu, hook yazmayı zorlaştırabilir — komutuna gelen input’un tam yapısını bilemeyebilirsin!
Helper hook tekniği
Bu zorluğu aşmak için şöyle bir helper hook yapmayı dene:
"PostToolUse": [ // Veya "PreToolUse" veya "Stop", vb.
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "jq . > post-log.json"
}
]
},
]
Verilen komuta dikkat et. Bu komut hook’a gelen input’u post-log.json dosyasına yazar — yani komutuna ne tür bir veri gideceğini birebir inceleyebilirsin! Bu, komutunun hangi veriyi inspect etmesi gerektiğini anlamayı çok kolaylaştırır.