الخطافات
الخطافات هي نصوص برمجية صغيرة تعمل عند حدوث شيء ما داخل Gateway. يتم اكتشافها تلقائيًا من الأدلة ويمكن فحصها باستخدام openclaw hooks.
يوجد نوعان من الخطافات في OpenClaw:
- الخطافات الداخلية (هذه الصفحة): تعمل داخل Gateway عند إطلاق أحداث الوكيل، مثل
/new أو /reset أو /stop أو أحداث دورة الحياة.
- Webhooks: نقاط نهاية HTTP خارجية تتيح للأنظمة الأخرى تشغيل العمل في OpenClaw. راجع Webhooks.
يمكن أيضًا تضمين الخطافات داخل plugins. يعرض openclaw hooks list كلًا من الخطافات المستقلة والخطافات التي تديرها plugins.
البدء السريع
# اعرض الخطافات المتاحة
openclaw hooks list
# فعّل خطافًا
openclaw hooks enable session-memory
# تحقّق من حالة الخطاف
openclaw hooks check
# احصل على معلومات مفصلة
openclaw hooks info session-memory
أنواع الأحداث
| الحدث | وقت إطلاقه |
|---|
command:new | عند إصدار الأمر /new |
command:reset | عند إصدار الأمر /reset |
command:stop | عند إصدار الأمر /stop |
command | أي حدث أمر (مستمع عام) |
session:compact:before | قبل أن يلخّص الضغط السجل |
session:compact:after | بعد اكتمال الضغط |
session:patch | عند تعديل خصائص الجلسة |
agent:bootstrap | قبل إدخال ملفات bootstrap لمساحة العمل |
gateway:startup | بعد بدء القنوات وتحميل الخطافات |
message:received | رسالة واردة من أي قناة |
message:transcribed | بعد اكتمال نسخ الصوت إلى نص |
message:preprocessed | بعد اكتمال فهم جميع الوسائط والروابط |
message:sent | بعد تسليم الرسالة الصادرة |
كتابة الخطافات
بنية الخطاف
كل خطاف هو دليل يحتوي على ملفين:
my-hook/
├── HOOK.md # البيانات الوصفية + التوثيق
└── handler.ts # تنفيذ المعالج
تنسيق HOOK.md
---
name: my-hook
description: "وصف قصير لما يفعله هذا الخطاف"
metadata:
{ "openclaw": { "emoji": "🔗", "events": ["command:new"], "requires": { "bins": ["node"] } } }
---
# خطافي
يوضع التوثيق المفصل هنا.
حقول البيانات الوصفية (metadata.openclaw):
| الحقل | الوصف |
|---|
emoji | الرمز التعبيري المعروض في CLI |
events | مصفوفة بالأحداث المطلوب الاستماع إليها |
export | التصدير المسمى المطلوب استخدامه (الافتراضي "default") |
os | المنصات المطلوبة (مثل ["darwin", "linux"]) |
requires | مسارات bins أو anyBins أو env أو config المطلوبة |
always | تجاوز فحوصات الأهلية (قيمة منطقية) |
install | طرق التثبيت |
تنفيذ المعالج
const handler = async (event) => {
if (event.type !== "command" || event.action !== "new") {
return;
}
console.log(`[my-hook] New command triggered`);
// منطقك هنا
// اختياريًا أرسل رسالة إلى المستخدم
event.messages.push("تم تنفيذ الخطاف!");
};
export default handler;
يتضمن كل حدث: type وaction وsessionKey وtimestamp وmessages (أضف إليها لإرسالها إلى المستخدم) وcontext (بيانات خاصة بالحدث).
أبرز عناصر سياق الحدث
أحداث الأوامر (command:new وcommand:reset): context.sessionEntry وcontext.previousSessionEntry وcontext.commandSource وcontext.workspaceDir وcontext.cfg.
أحداث الرسائل (message:received): context.from وcontext.content وcontext.channelId وcontext.metadata (بيانات خاصة بالموفر تتضمن senderId وsenderName وguildId).
أحداث الرسائل (message:sent): context.to وcontext.content وcontext.success وcontext.channelId.
أحداث الرسائل (message:transcribed): context.transcript وcontext.from وcontext.channelId وcontext.mediaPath.
أحداث الرسائل (message:preprocessed): context.bodyForAgent (النص النهائي المُثْرى) وcontext.from وcontext.channelId.
أحداث Bootstrap (agent:bootstrap): context.bootstrapFiles (مصفوفة قابلة للتعديل) وcontext.agentId.
أحداث تصحيح الجلسة (session:patch): context.sessionEntry وcontext.patch (الحقول التي تغيّرت فقط) وcontext.cfg. لا يمكن إلا للعملاء ذوي الامتيازات تشغيل أحداث التصحيح.
أحداث الضغط: يتضمن session:compact:before القيمتين messageCount وtokenCount. ويضيف session:compact:after القيم compactedCount وsummaryLength وtokensBefore وtokensAfter.
اكتشاف الخطافات
يتم اكتشاف الخطافات من هذه الأدلة، بترتيب تصاعدي لأولوية التجاوز:
- الخطافات المضمّنة: تأتي مع OpenClaw
- خطافات plugins: خطافات مضمّنة داخل plugins المثبتة
- الخطافات المُدارة:
~/.openclaw/hooks/ (مثبّتة من المستخدم ومشتركة بين مساحات العمل). تشترك الأدلة الإضافية من hooks.internal.load.extraDirs في هذه الأولوية.
- خطافات مساحة العمل:
<workspace>/hooks/ (لكل وكيل، ومعطلة افتراضيًا حتى يتم تفعيلها صراحةً)
يمكن لخطافات مساحة العمل إضافة أسماء خطافات جديدة، لكنها لا تستطيع تجاوز الخطافات المضمّنة أو المُدارة أو المقدمة من plugin بالاسم نفسه.
حِزم الخطافات
حِزم الخطافات هي حزم npm تصدّر الخطافات عبر openclaw.hooks في package.json. ثبّتها باستخدام:
openclaw plugins install <path-or-spec>
تقتصر مواصفات npm على السجل فقط (اسم الحزمة مع إصدار دقيق اختياري أو dist-tag). ويتم رفض مواصفات Git/URL/file ونطاقات semver.
الخطافات المضمّنة
| الخطاف | الأحداث | ما الذي يفعله |
|---|
| session-memory | command:new, command:reset | يحفظ سياق الجلسة في <workspace>/memory/ |
| bootstrap-extra-files | agent:bootstrap | يدرج ملفات bootstrap إضافية من أنماط glob |
| command-logger | command | يسجل جميع الأوامر في ~/.openclaw/logs/commands.log |
| boot-md | gateway:startup | يشغّل BOOT.md عند بدء gateway |
لتفعيل أي خطاف مضمّن:
openclaw hooks enable <hook-name>
تفاصيل session-memory
يستخرج آخر 15 رسالة من المستخدم/المساعد، ويولّد اسم ملف وصفيًا عبر LLM، ثم يحفظه في <workspace>/memory/YYYY-MM-DD-slug.md. يتطلب إعداد workspace.dir.
{
"hooks": {
"internal": {
"entries": {
"bootstrap-extra-files": {
"enabled": true,
"paths": ["packages/*/AGENTS.md", "packages/*/TOOLS.md"]
}
}
}
}
}
يتم تحليل المسارات نسبةً إلى مساحة العمل. ولا يتم تحميل إلا أسماء ملفات bootstrap الأساسية المعروفة (AGENTS.md وSOUL.md وTOOLS.md وIDENTITY.md وUSER.md وHEARTBEAT.md وBOOTSTRAP.md وMEMORY.md).
تفاصيل command-logger
يسجل كل أمر slash في ~/.openclaw/logs/commands.log.
تفاصيل boot-md
يشغّل BOOT.md من مساحة العمل النشطة عند بدء gateway.
خطافات plugins
يمكن لـ plugins تسجيل الخطافات عبر Plugin SDK لتحقيق تكامل أعمق: اعتراض استدعاءات الأدوات، وتعديل المطالبات، والتحكم في تدفق الرسائل، وغير ذلك. يوفّر Plugin SDK عدد 28 خطافًا تغطي تحليل النموذج، ودورة حياة الوكيل، وتدفق الرسائل، وتنفيذ الأدوات، وتنسيق الوكلاء الفرعيين، ودورة حياة gateway.
للاطلاع على المرجع الكامل لخطافات plugin، بما في ذلك before_tool_call وbefore_agent_reply وbefore_install وجميع خطافات plugin الأخرى، راجع Plugin Architecture.
الإعداد
{
"hooks": {
"internal": {
"enabled": true,
"entries": {
"session-memory": { "enabled": true },
"command-logger": { "enabled": false }
}
}
}
}
متغيرات البيئة لكل خطاف:
{
"hooks": {
"internal": {
"entries": {
"my-hook": {
"enabled": true,
"env": { "MY_CUSTOM_VAR": "value" }
}
}
}
}
}
أدلة خطافات إضافية:
{
"hooks": {
"internal": {
"load": {
"extraDirs": ["/path/to/more/hooks"]
}
}
}
}
لا تزال صيغة إعداد المصفوفة القديمة hooks.internal.handlers مدعومة للتوافق مع الإصدارات السابقة، لكن الخطافات الجديدة يجب أن تستخدم النظام المعتمد على الاكتشاف.
مرجع CLI
# اعرض كل الخطافات (أضف --eligible أو --verbose أو --json)
openclaw hooks list
# اعرض معلومات مفصلة عن خطاف
openclaw hooks info <hook-name>
# اعرض ملخص الأهلية
openclaw hooks check
# تفعيل/تعطيل
openclaw hooks enable <hook-name>
openclaw hooks disable <hook-name>
أفضل الممارسات
- اجعل المعالجات سريعة. تعمل الخطافات أثناء معالجة الأوامر. شغّل الأعمال الثقيلة في الخلفية بأسلوب fire-and-forget باستخدام
void processInBackground(event).
- تعامل مع الأخطاء بسلاسة. غلّف العمليات المحفوفة بالمخاطر داخل try/catch؛ ولا ترمِ الأخطاء حتى تتمكن المعالجات الأخرى من العمل.
- صفِّ الأحداث مبكرًا. أعِد فورًا إذا لم يكن نوع/إجراء الحدث ذا صلة.
- استخدم مفاتيح أحداث محددة. فضّل
"events": ["command:new"] بدلًا من "events": ["command"] لتقليل الحمل.
استكشاف الأخطاء وإصلاحها
لم يتم اكتشاف الخطاف
# تحقّق من بنية الدليل
ls -la ~/.openclaw/hooks/my-hook/
# يجب أن يعرض: HOOK.md, handler.ts
# اعرض كل الخطافات المكتشفة
openclaw hooks list
الخطاف غير مؤهل
openclaw hooks info my-hook
تحقق من وجود ثنائيات مفقودة (PATH)، أو متغيرات بيئة، أو قيم إعداد، أو توافق نظام التشغيل.
الخطاف لا يعمل
- تحقّق من أن الخطاف مفعّل:
openclaw hooks list
- أعد تشغيل عملية gateway لكي يُعاد تحميل الخطافات.
- افحص سجلات gateway:
./scripts/clawlog.sh | grep hook
ذو صلة