أول hook لك
لنصنع واحدًا. سنكتب hook يخربش ملاحظةً في ملف log في كل مرة يعدّل فيها Claude شيئًا — غير ضارّ، وستتمكّن من رؤيته وهو ينطلق.
تعيش الـ hooks في ملف الإعدادات، الذي قابلته في المستوى 9. افتح ملف المشروع عند .claude/settings.json (أو ملفك الشخصي ~/.claude/settings.json) وأضف:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "echo \"$(date): Claude edited a file\" >> ~/claude-edits.log"
}
]
}
]
}
}
أربع قطع، نقرؤها من الخارج إلى الداخل:
PostToolUse— اللحظة: عقب استخدام Claude لـ tool مباشرة (الدرس 11.4).matcher: "Edit|Write"— أيُّ الـ tools تُحتسب. فقط تلك التي تغيّر الملفات. والرمز|يعني «Edit أو Write».type: "command"— أيُّ نوع من الـ hooks. أمر shell.command— السطر الفعلي الذي يعمل: إلحاق التاريخ وملاحظة بـ~/claude-edits.log.
راقبه وهو ينطلق
ابدأ session، واطلب من Claude إجراء أي تعديل صغير — «أضف سطرًا فارغًا إلى أسفل README». ثم انظر إلى الـ log الخاص بك:
cat ~/claude-edits.log
Mon May 24 14:02:11 2026: Claude edited a file
لم تكتب أنت echo قط. ولم تُذكّر Claude قط. رأى الـ harness ملفًا يُعدَّل فشغّل أمرك من تلقاء نفسه.
هذا هو الشعور الذي ينبغي تذكّره: ربطت سلوكًا داخل الآلة، وهو الآن يحدث في كل مرة، إلى الأبد، بصفر انتباه منك.
من لعبة إلى أداة نافعة
استبدل سطر command فيؤدّي الهيكل العظمي نفسه عملًا حقيقيًا. اثنان من الأكثر شيوعًا:
Auto-format للملفات المعدَّلة — لن تراجع diff فوضويًا بعد اليوم:
"command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
(يسلّم الـ harness الـ hook الخاص بك حزمةً صغيرة من JSON على مدخله القياسي تصف ما تغيّر للتو؛ وjq يقتطف منها file path الملف المعدَّل ويمرّره إلى الـ formatter.)
منع شيء خطير — بدّل الـ event إلى PreToolUse (الذي يعمل قبل الإجراء ويستطيع إيقافه)، وطابِق الـ Bash tool، واخرج بخطأ إن بدا الأمر مخيفًا. هذا حاجز وقاية لا يستطيع Claude فعليًا أن يتحايل عليه بالكلام، لأن الـ harness، لا الـ model، هو من يفرضه.
طريقة ألطف لإعدادها
لست مضطرًا لتحرير JSON يدويًا في كل مرة. داخل session، شغّل:
/hooks
يُرشدك خطوة بخطوة إلى اختيار event، وmatcher، وأمر — ثم يكتب لك الـ JSON. مفيدٌ ما إن تعرف معنى القطع، وأنت الآن تعرفه.
تنبيه واحد: الـ hook يعمل تلقائيًا، فالـ hook المتهوّر يعضّ تلقائيًا. اختبر الـ hooks الجديدة على مشروع قابل للرمي أولًا — فـ hook يحذف الملفات مع كل تعديل سيفعل ذلك بالضبط، مع كل تعديل.
ما التالي
الـ hooks تؤتمت الأشياء داخل الـ session. أما الدرسان التاليان فيغادران الـ session كليًا: headless mode، حيث يعمل Claude بلا أي نافذة محادثة على الإطلاق — مجرد أمر يمكنك أن تمرّر إليه عبر pipe أو تضعه في script.