في CLAUDE.md كتبنا “شغّل prettier بعد ما تعدّل” و “متعدّلش ملفات الـ migration بإيدك”. Claude غالبًا هيلتزم، بس “غالبًا” مش كفاية لحاجات لازم تحصل كل مرة.
الـ hook أمر إنت كاتبه، و Claude Code بيشغّله بنفسه كل مرة يحصل event معين. ده مش طلب من الموديل، ده كود بيتنفذ.
أهم الـ events
- PreToolUse: قبل ما Claude يستخدم أداة. تقدر هنا تمنع الأداة.
- PostToolUse: بعد ما الأداة تخلص. مناسب للـ format أو الـ lint بعد كل تعديل.
- UserPromptSubmit: لما تبعت رسالة، قبل ما Claude يشتغل عليها.
- Stop: لما Claude يخلص رده.
- SessionStart: أول ما الجلسة تبدأ.
- Notification: لما Claude يكون مستني موافقتك.
فيه events تانية، والقايمة بتزيد. راجع الـ docs.
مثال ١: format بعد كل تعديل
الـ hooks بتتكتب في .claude/settings.json، جنب الـ permissions:
{ "hooks": { "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/format.sh" } ] } ] }}الـ matcher بيقول الـ hook ده لأنهي أدوات. هنا: بعد أي Edit أو Write. و Claude Code بيبعت للـ script تفاصيل اللي حصل كـ JSON على الـ stdin، ومنها مسار الملف:
#!/usr/bin/env bash# بنقرا مسار الملف اللي اتعدّل من الـ JSONfile=$(jq -r '.tool_input.file_path // empty')[ -z "$file" ] && exit 0pnpm exec prettier --write "$file" >/dev/null 2>&1exit 0متنساش chmod +x .claude/hooks/format.sh.
مثال ٢: امنع تعديل ملفات الـ migration
هنا بنستخدم PreToolUse، عشان نوقف التعديل قبل ما يحصل:
#!/usr/bin/env bashfile=$(jq -r '.tool_input.file_path // empty')if [[ "$file" == *"/drizzle/"* ]]; then # الكلام اللي على stderr بيرجع لـ Claude فيفهم ليه اتمنع echo "ممنوع تعدّل ملفات الـ migration بإيدك. عدّل الـ schema وشغّل pnpm db:generate" >&2 exit 2fiexit 0وتسجّله في نفس الملف تحت "PreToolUse" بـ "matcher": "Edit|Write".
لاحظ الفرق: الـ deny rule بتمنع أداة على مسار. الـ hook يقدر يعمل منطق أعقد، ويقول لـ Claude يعمل إيه بدل كده.
أفكار تانية للمتجر
- Stop: شغّل
pnpm typecheckلما Claude يخلص، ولو فيه أخطاء خلّيه يكمّل يصلّحها. - Notification: إشعار على الديسكتوب لما Claude يستناك، عشان متقعدش تبص على الشاشة.
- SessionStart: اطبع
git statusوآخر commits عشان Claude يبدأ عارف الوضع. - PreToolUse على Bash: امنع أوامر خطيرة زي
rm -rfأوgit push --force.
/hooks جوه Claude بيوريك الـ hooks المتسجلة.