عندما يعدّل الوكيل ملفًا، يمكن لفحصٍ أن يخبرنا هل أفسد التعديل شيئًا. في هذا الفيديو سنرى كيف يشغّل hook هذا الفحص تلقائيًا بعد كل تعديل.
هذه الدالة تحسب مجموع قائمة من كمّيات العناصر، وتُعيده عددًا صحيحًا. لدينا بالفعل أداة لفحص الأنواع تستطيع مقارنة الكود بالنوع المُعلَن. أمر الفحص جزء من المشروع.
لنفترض أن تعديلًا حوّل النتيجة إلى نص. الدالة ما زالت تَعِد بعدد صحيح، لذلك تُبلغ أداة فحص الأنواع عن عدم تطابق. هذا خطأ مفيد، لأنه يحدّد شيئين: مكان المشكلة، وما الذي لا يتطابق. السؤال هنا: كيف يصل هذا الخطأ إلى الوكيل؟
يُجري الوكيل التعديل. ولا يشغّل أداة فحص الأنواع بنفسه إلا إذا تذكّر ذلك. وحين ينسى، تشغّلون أنتم أداة الفحص وتنسخون رسالة الخطأ إلى المحادثة. صار لدى الوكيل الآن المعلومات التي يحتاجها ليُجري التصحيح. أداة الفحص أنجزت التحليل بنفسها. أما دوركم فكان تشغيلها ونقل نتيجتها من برنامج إلى آخر.
فعلُ ذلك مرة واحدة سهل. أما تكراره طوال الجلسة فيعني مراقبة التعديلات، والتنقّل بين النوافذ، وإرسال الرسائل. يمكننا أن نؤتمت هذه الخطوات، ونُبقي أداة الفحص نفسها والخطأ المفيد نفسه.
الآن، يشغّل التعديلُ أداة فحص الأنواع تلقائيًا، ويصل خطؤها مباشرة إلى النموذج. النص في الأسفل هو ما يرسله الـ hook إلى النموذج. إنه الخطأ نفسه الذي كنتم ستلصقونه، ولم تفعلوا أنتم شيئًا.
الـ hook هو كود يُسجَّل ليُشغَّل عند وقوع حدث معيّن.
في وكيل البرمجة، البرنامج المحيط بالنموذج هو الذي يستدعي الـ hook عند نقطة محدّدة في الجلسة. هذا البرنامج هو الـ harness.
يطلب النموذج إجراءً، مثل تعديل ملف. يتولّى الـ harness استدعاء الأداة، ويُعيد إلى النموذج معلومات عن النتيجة.
يمكن أن يُشغَّل hook قبل الأداة، حين لا يزال الإجراء المقترح متاحًا للفحص. ويمكن أن يُشغَّل آخر بعد استدعاء ناجح للأداة، حين يكون الملف المعدَّل متاحًا للفحص. مثلًا، يمكن تشغيل أداة فحص الأنواع لدينا بعد إجراء التعديلات. لاحظوا أن الـ harness هو الذي يشغّلها، لا النموذج.
يمكن لتعليمات المشروع أن تطلب من الوكيل تشغيل الفحوصات. يقرأ النموذج هذه التعليمات مع بقية سياقه، ويختار إجراءاته. أما مع hook من نوع command، فإن الـ harness يشغّل الأمر عند وقوع الحدث المطابق. هاتان طريقتان مختلفتان لتنظيم العمل.
يُشغَّل الأمر تلقائيًا. أما تفسير الخطأ واختيار تصحيح جيد، فما زال للنموذج دور فيهما. لقد أتمتنا إجراءً متكررًا، فصار يحدث في كل مرة، وليس فقط حين يتذكّر أحدٌ أن يشغّله.
يربط الـ hook حدثًا في الجلسة بأمر. كلما وقع هذا الحدث، يشغّل الـ harness الأمر. اختاروا الحدث الذي يفيد فيه الأمر. لمنع الوكيل من الكتابة في ملف محمي، يجب أن يُشغَّل الـ hook قبل الأداة. فالفحص بعد الكتابة لا يمكنه التراجع عنها.
أما أداة فحص الأنواع لدينا فمكانها مباشرة بعد تعديل الملف. فهي تفحص المحتوى الجديد والتغيير ما زال حديثًا.
عندما يقول الوكيل إنه انتهى، يمكن لـ hook أن يشغّل الاختبارات. وإذا فشلت، يواصل الوكيل العمل بدل أن يتوقف.
وعندما ينتظركم الوكيل، قد يرسل hook إشعارًا على سطح المكتب ليعيدكم إليه.
هذه الأربعة ليست إلا أمثلة. ويوفّر Claude Code أحداثًا أخرى كثيرة. هناك أحداث لبداية الجلسة ونهايتها، ولكل prompt ترسلونه، ولطلبات الإذن، وللوكلاء الفرعيين، ولضغط المحادثة. لا داعي لحفظها عن ظهر قلب. عندما تريدون أن يحدث شيء تلقائيًا، اسألوا الوكيل عن الحدث المناسب.
ابدؤوا بأمر تستخدمونه بالفعل وتفهمونه. اربطوه بالحدث الذي يكون فيه مفيدًا، ثم لاحظوا هل صارت الجلسة تحتاج إلى تدخّل أقل. ما زال الفحص لا يغطّي إلا ما صُمّم لفحصه. فائدة الـ hook أن التغذية الراجعة المفيدة تصل دون أن تشغّلوا الأمر مرة بعد مرة وتنقلوا نتيجته بأنفسكم.
لا تحتاجون إلى تذكّر طريقة كتابة الـ hooks. لإضافة hook أو لمعرفة الأحداث المتاحة، يكفي أن تسألوا الوكيل. المهم أن تعرفوا ما يستطيع الـ hook فعله لكم. أما الصيغة فيتولّاها الوكيل.
نراكم في الفيديو التالي.