ضع حاجز أمان: الخطافات (hooks)
أهداف هذا الفصل
- فهم ماهية الخطاف (hook) ومتى يُطلق
- التمييز بين أنواع الخطافات الثلاثة
- بناء بوابة جودة (quality gate) تمنع المنشورات غير المطابقة
الخطر: نشر خطأ
مهارتك تكتب وتنشر. لكن ماذا يحدث لو احتوى منشور على شَرطة طويلة تكرهها، أو تجاوز حدّ أحرف المنصة، أو انطلق إلى إنستغرام بلا صورة؟ حاليًا، لا شيء يوقفه. يمكنك مراجعة كل منشور يدويًا — لكن ما جدوى الأتمتة حينها؟ يمكنك إضافة «تحقق جيدًا قبل النشر» إلى المهارة — لكن التعليمة داخل الموجّه تبقى احتمالية: يتبعها النموذج في الغالب، و«الغالب» لا يكفي عندما يكون الخطأ علنيًا وفوريًا.
تحتاج إلى حاجز أمان من طبيعة أخرى: تحقق يُنفَّذ بشكل منهجي، لا يستطيع Claude نسيانه ولا الالتفاف عليه. وهذا بالضبط ما هي الخطافات.
ما هو الخطاف (hook)؟
الخطاف ينفّذ كودًا في لحظات مفصلية من دورة حياة Claude Code. يُطلق تلقائيًا: لا تحتاج للتفكير في استدعائه، ولا يحتاج Claude للتفكير في احترامه — إنه يُفرض عليه. يمكن للخطاف تنسيق الملفات بعد تعديلها، أو منع أمر قبل تنفيذه، أو حقن سياق عند بدء الجلسة، أو إرسال إشعار عند انتهاء مهمة.
لحظات الإطلاق («الأحداث») تغطي كامل دورة الحياة: قبل تنفيذ أداة (الحدث PreToolUse — وهو ما يهمنا لمنع النشر)، وبعد تنفيذها (PostToolUse — مثالي لإعادة تنسيق ملف معدَّل)، وعند إرسال رسالتك، وعند بدء الجلسة، أو عندما ينهي Claude إجابته. كل خطاف مرتبط بحدث، واختياريًا بمرشّح (مثلًا: أوامر Bash التي تحتوي على «publish» فقط).
طرق التحقق الثلاث
قاعدة الاختيار: خذ الأقل قوة بما يكفي. التحقق من حدّ الأحرف بـ agent hook يشبه استخدام جرّافة لزرع خسّة — بطيء، مكلف، وأكثر هشاشة. بوابتنا للجودة تجمع قواعد بسيطة وموضوعية: الـ command hook هو الأداة المناسبة.
أين تعيش الخطافات
تُضبط الخطافات في ملفات إعداداتك (.claude/settings.json لمشاركتها مع المشروع، أو settings.local.json لك وحدك). البنية تجمع حدثًا ومرشّحًا («matcher») والأمر المراد تشغيله. هذه هي الصيغة العامة لخطاف يُطلق قبل أوامر Bash:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node .claude/hooks/quality-gate.js"
}
]
}
]
}
}آلية المنع أنيقة في بساطتها: يتلقى سكربت الخطاف تفاصيل الإجراء كمدخل، ورمز الخروج الخاص به يقرر التالي. الخروج 0: كل شيء سليم، يستمر الإجراء. الخروج 2: الإجراء ممنوع، وما كتبه السكربت في مخرج الخطأ يُعاد إلى Claude — الذي يقرأه ويصحّح. إذن الخطاف لا يكتفي بقول لا: بل يشرح السبب، ويستخدم Claude هذا الشرح للإصلاح.
بناء بوابة الجودة
ننشئ خطافًا يُطلق قبل أي نشر ويتحقق من المحتوى. إذا فشل، يُمنع الأمر ويرى Claude بدقة ما يجب تصحيحه:
أنشئ command hook يُطلق قبل أي أمر Bash للنشر. يتحقق الخطاف من محتوى المنشور: - الشَّرطات الطويلة (تُستبدل بـ «...») - تجاوز حدّ أحرف المنصة - وسائط ناقصة للمنصات التي تتطلبها - الكلمات المحظورة من دليل صوت علامتي إذا فشل أي تحقق: امنع الأمر واعرض بدقة ما يجب تصحيحه.
flowchart TD
P["محاولة نشر"] --> H{"الخطاف: بوابة الجودة"}
H -->|"مطابق"| OK["نشر"]
H -->|"غير مطابق"| KO["ممنوع + قائمة التصحيحات"]
KO --> F["يصحّح Claude المحتوى"]
F --> Pلاحظ الحلقة في المخطط: «ممنوع» لا تعني «انتهى». يقرأ Claude رسالة الخطأ، يصحّح المحتوى ويعيد المحاولة — غالبًا دون أي تدخل منك. حاجز الأمان لا يبطّئ النظام: بل يجعله ذاتي التصحيح.
اختبار الخطاف (بإحداث الفشل عمدًا)
حاجز الأمان غير المختبَر حاجز زخرفي. الطريقة: إحداث كل نوع من أنواع الفشل عمدًا والتحقق من المنع. إنه الانعكاس نفسه لدى المبرمج الذي يختبر حالات الخطأ، لا مساره السعيد فقط:
اختبر الخطاف على تغريدة تتجاوز حدّ الأحرف اختبر الخطاف على منشور instagram بلا صورة اختبر الخطاف على منشور يحتوي على كلمة "ثوري"
في كل اختبار، يجب أن تُظهر المخرجات أن الإجراء مُنع («فشل التحقق») مع السبب الدقيق. إذا مرّت حالة كان يجب منعها، فالآن وقت اكتشاف ذلك — لا يوم ينطلق منشور غير مطابق إلى الإنتاج. ممتاز: لن ينشر خط أنابيبك أبدًا محتوى غير مطابق.
ما بعد بوابة الجودة
بمجرد فهم الآلية، تصبح الخطافات انعكاسًا لكل ما يجب أن يكون منهجيًا. بعض الاستخدامات الكلاسيكية: إعادة تنسيق كل ملف معدَّل تلقائيًا (PostToolUse)، منع أي أمر يلمس مجلدًا حساسًا، تحميل حالة المشروع عند بدء الجلسة، أو إرسال إشعار عند انتهاء مهمة طويلة. السؤال الذي تطرحه دائمًا هو نفسه: «هل أريد أن يحدث هذا في كل مرة، دون الاعتماد على ذاكرة أي أحد؟» إذا كان الجواب نعم، فهو خطاف.
بالنسبة إلى ليا، يغيّر هذا الفصل طبيعة نظامها: قبله، كانت الأتمتة سريعة لكنها تتطلب مراجعتها؛ والآن صارت سريعة وجديرة بالثقة. وهذا ما سيجعل التوسع في الفصلين القادمين ممكنًا — فلا نوازي إلا ما أمّنّاه.
السياق
حظرت ليا كلمة «ثوري» من تواصلها وتشترط دائمًا صورة على إنستغرام — قاعدتان غير قابلتين للتفاوض لا تريد التحقق منهما يدويًا بعد اليوم. ستضع حاجز الأمان، ثم تلعب دور المختبِر الشرير: هدفك تمرير منشور غير مطابق. إذا لم تنجح، فحاجز الأمان جيد.
التعليمات
- أنشئ بوابة الجودة بالموجّه الوارد في الفصل.
- افتح الإعدادات المولَّدة في
.claude/settings.jsonوحدد الحدث والمرشّح والسكربت المستدعى. - اطلب منشور إنستغرام بلا صورة وتحقق من منعه مع رسالة واضحة.
- ولّد منشورًا يحتوي على «ثوري» وتحقق من المنع + رسالة التصحيح.
- تعمّد تجاوز حدّ أحرف تويتر ولاحظ الحلقة: منع ← تصحيح من Claude ← محاولة جديدة.
- تحقق من أن منشورًا مطابقًا تمامًا يمرّ دون احتكاك.
- أضف قاعدة من عندك (مثلًا: منع علامات التعجب المتعددة) وأعد الاختبار.
باختصار
- تعليمة الموجّه احتمالية؛ أما الخطاف فحتمي: يُنفَّذ في كل مرة، بلا استثناء.
- ترتبط الخطافات بأحداث دورة الحياة: قبل أداة (PreToolUse)، بعدها (PostToolUse)، عند بدء الجلسة…
- 3 أنواع: command (سكربت shell)، وprompt (قرار نموذج لغوي)، وagent (تحقق متعدد الخطوات) — خذ الأقل قوة بما يكفي.
- تعيش الإعدادات في
.claude/settings.json؛ ورمز الخروج 2 يمنع الإجراء ويعيد الشرح إلى Claude. - بوابة الجودة تمنع المنشورات غير المطابقة وتجعل خط الأنابيب ذاتي التصحيح: يقرأ Claude الخطأ ويُصلح.
- اختبر الخطاف بإحداث كل فشل عمدًا — حاجز الأمان غير المختبَر زخرفي.
- ينطبق على كل مهاراتك دون إعداد إضافي، وسينطبق أيضًا على الوكلاء الفرعيين في الفصل التالي.
اختبار — تحقّق من فهمك
1. ما الخاصية الأساسية للخطاف؟
2. أي نوع خطاف هو الأبسط للتحقق من نص؟
3. لماذا خطاف بدل تعليمة «تحقق قبل النشر» داخل المهارة؟
4. كيف يمنع command hook إجراءً؟
5. أي حدث تستخدم للتحقق من محتوى قبل نشره؟