HOOK.md صغيرًا يثبّته المشغّل لأحداث الأوامر وGateway مثل
/new أو /reset أو /stop أو agent:bootstrap أو gateway:startup.
البدء السريع
سجّل خطافات Plugin typed باستخدامapi.on(...) من نقطة إدخال Plugin لديك:
priority تنازليًا. وتحافظ الخطافات ذات
الأولوية نفسها على ترتيب التسجيل.
فهرس الخطافات
تُجمَّع الخطافات حسب السطح الذي توسّعه. الأسماء المكتوبة بالخط العريض تقبل نتيجة قرار (حظر، أو إلغاء، أو تجاوز، أو طلب موافقة)؛ أما البقية فهي للمراقبة فقط. دورة الوكيلbefore_model_resolve— تجاوز المزوّد أو النموذج قبل تحميل رسائل الجلسةbefore_prompt_build— إضافة سياق ديناميكي أو نص مطالبة نظام قبل استدعاء النموذجbefore_agent_start— مرحلة مدمجة للتوافق فقط؛ يُفضّل استخدام الخطافين أعلاهbefore_agent_reply— إنهاء دورة النموذج مبكرًا برد اصطناعي أو بصمتagent_end— مراقبة الرسائل النهائية، وحالة النجاح، ومدة التشغيل
model_call_started/model_call_ended— مراقبة بيانات تعريف استدعاء المزوّد/النموذج المنقّحة، والتوقيت، والنتيجة، وتجزيئات معرّفات الطلب المحدودة من دون محتوى المطالبة أو الاستجابةllm_input— مراقبة مدخلات المزوّد (مطالبة النظام، المطالبة، السجل)llm_output— مراقبة مخرجات المزوّد
before_tool_call— إعادة كتابة معاملات الأداة، أو حظر التنفيذ، أو طلب الموافقةafter_tool_call— مراقبة نتائج الأداة، والأخطاء، والمدةtool_result_persist— إعادة كتابة رسالة المساعد الناتجة من نتيجة الأداةbefore_message_write— فحص كتابة رسالة قيد التنفيذ أو حظرها (نادر)
inbound_claim— المطالبة برسالة واردة قبل توجيهها إلى الوكيل (ردود اصطناعية)message_received— مراقبة المحتوى الوارد، والمرسل، والسلسلة، وبيانات التعريفmessage_sending— إعادة كتابة المحتوى الصادر أو إلغاء التسليمmessage_sent— مراقبة نجاح التسليم الصادر أو فشلهbefore_dispatch— فحص عملية dispatch صادرة أو إعادة كتابتها قبل تسليم القناةreply_dispatch— المشاركة في مسار dispatch النهائي للرد
session_start/session_end— تتبّع حدود دورة حياة الجلسةbefore_compaction/after_compaction— مراقبة دورات Compaction أو إضافة تعليقات توضيحية إليهاbefore_reset— مراقبة أحداث إعادة ضبط الجلسة (/reset، وإعادات الضبط البرمجية)
subagent_spawning/subagent_delivery_target/subagent_spawned/subagent_ended— تنسيق توجيه الوكيل الفرعي وتسليم الإكمال
gateway_start/gateway_stop— بدء الخدمات التي يملكها Plugin أو إيقافها مع Gatewaybefore_install— فحص عمليات المسح الخاصة بتثبيت Skills أو Plugins وإمكانية حظرها
سياسة استدعاء الأدوات
يتلقىbefore_tool_call ما يلي:
event.toolNameevent.paramsevent.runIdاختياريevent.toolCallIdاختياري- حقول السياق مثل
ctx.agentIdوctx.sessionKeyوctx.sessionIdو حقل التشخيصctx.trace
block: trueنهائي ويتجاوز المعالِجات ذات الأولوية الأدنى.- يُعامَل
block: falseعلى أنه بلا قرار. - تعيد
paramsكتابة معاملات الأداة للتنفيذ. - يوقف
requireApprovalتشغيل الوكيل مؤقتًا ويطلب من المستخدم الموافقة عبر موافقات Plugin. ويمكن للأمر/approveالموافقة على موافقات exec وموافقات Plugin معًا. - ما يزال
block: trueذو الأولوية الأدنى قادرًا على الحظر بعد أن يكون خطاف ذو أولوية أعلى قد طلب الموافقة. - تتلقى
onResolutionقرار الموافقة المحسوم —allow-once، أوallow-always، أوdeny، أوtimeout، أوcancelled.
خطافات المطالبة والنموذج
استخدم الخطافات الخاصة بالمرحلة في Plugins الجديدة:before_model_resolve: يتلقى المطالبة الحالية وبيانات تعريف المرفقات فقط. أرجِعproviderOverrideأوmodelOverride.before_prompt_build: يتلقى المطالبة الحالية ورسائل الجلسة. أرجِعprependContextأوsystemPromptأوprependSystemContextأوappendSystemContext.
before_agent_start للتوافق. يُفضَّل استخدام الخطافات الصريحة أعلاه
حتى لا يعتمد Plugin لديك على مرحلة مدمجة قديمة.
يتضمن before_agent_start وagent_end الحقل event.runId عندما يستطيع OpenClaw
تحديد التشغيل النشط. وتتوفر القيمة نفسها أيضًا في ctx.runId.
استخدم model_call_started وmodel_call_ended لقياسات تتبع استدعاءات المزوّد
التي يجب ألا تتلقى المطالبات الخام أو السجل أو الاستجابات أو الرؤوس أو أجسام
الطلبات أو معرّفات طلبات المزوّد. تتضمن هذه الخطافات بيانات تعريف ثابتة مثل
runId وcallId وprovider وmodel وapi/transport الاختياريين،
والقيم النهائية durationMs/outcome، وupstreamRequestIdHash عندما يتمكن OpenClaw من اشتقاق
تجزئة محدودة لمعرّف طلب المزوّد.
يجب على Plugins غير المضمنة التي تحتاج إلى llm_input أو llm_output أو agent_end ضبط:
plugins.entries.<id>.hooks.allowPromptInjection=false.
خطافات الرسائل
استخدم خطافات الرسائل لتوجيه القنوات على مستوى القناة ولسياسة التسليم:message_received: مراقبة المحتوى الوارد، والمرسل، وthreadId، وmessageId، وsenderId، وربط التشغيل/الجلسة الاختياري، وبيانات التعريف.message_sending: إعادة كتابةcontentأو إرجاع{ cancel: true }.message_sent: مراقبة النجاح أو الفشل النهائي.
content على النص المنطوق المخفي
حتى عندما لا تحتوي حمولة القناة على نص/وصف مرئي. وتؤدي إعادة كتابة
ذلك content إلى تحديث النص الظاهر للخطاف فقط؛ ولا يُعرَض
كتسمية توضيحية للوسائط.
تكشف سياقات خطافات الرسائل حقول ارتباط ثابتة عند توفرها:
ctx.sessionKey وctx.runId وctx.messageId وctx.senderId وctx.trace،
وctx.traceId وctx.spanId وctx.parentSpanId وctx.callDepth. يُفضَّل استخدام
هذه الحقول المباشرة أولًا قبل قراءة بيانات التعريف القديمة.
فضّل الحقلين typed threadId وreplyToId قبل استخدام بيانات تعريف خاصة بالقناة.
قواعد القرار:
message_sendingمعcancel: trueنهائي.- يُعامَل
message_sendingمعcancel: falseعلى أنه بلا قرار. - يستمر
contentالمعاد كتابته إلى الخطافات ذات الأولوية الأدنى ما لم يقم خطاف لاحق بإلغاء التسليم.
خطافات التثبيت
يعملbefore_install بعد المسح المضمن لتثبيت Skills وPlugins.
أرجِع نتائج إضافية أو { block: true, blockReason } لإيقاف
التثبيت.
القيمة block: true نهائية. وتُعامَل block: false على أنها بلا قرار.
دورة حياة Gateway
استخدمgateway_start للخدمات الخاصة بـ Plugin التي تحتاج إلى حالة
يملكها Gateway. يكشف السياق ctx.config وctx.workspaceDir وctx.getCron?.()
لفحص Cron وتحديثه. واستخدم gateway_stop لتنظيف الموارد طويلة التشغيل.
لا تعتمد على الخطاف الداخلي gateway:startup للخدمات وقت التشغيل التي يملكها Plugin.
الإهمالات القادمة
بعض الأسطح المجاورة للخطافات أصبحت مهملة لكنها ما تزال مدعومة. هاجر قبل الإصدار الرئيسي التالي:- أغلفة القنوات النصية الصريحة في معالِجات
inbound_claimوmessage_received. اقرأBodyForAgentوكتل سياق المستخدم المهيكلة بدلًا من تحليل نص الغلاف المسطح. راجع أغلفة القنوات النصية الصريحة → BodyForAgent. before_agent_startيبقى للتوافق. يجب أن تستخدم Plugins الجديدةbefore_model_resolveوbefore_prompt_buildبدلًا من المرحلة المدمجة.onResolutionفيbefore_tool_callتستخدم الآن اتحادPluginApprovalResolutiontyped (allow-once/allow-always/deny/timeout/cancelled) بدلًا منstringحر.
command-auth إلى command-status — راجع
ترحيل Plugin SDK → الإهمالات النشطة.
ذو صلة
- ترحيل Plugin SDK — الإهمالات النشطة والجدول الزمني للإزالة
- بناء Plugins
- نظرة عامة على Plugin SDK
- نقاط إدخال Plugin
- الخطافات الداخلية
- البنية الداخلية لـ Plugin