الانتقال إلى المحتوى الرئيسي

الخطافات

الخطافات هي نصوص برمجية صغيرة تعمل عند حدوث شيء ما داخل 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.

اكتشاف الخطافات

يتم اكتشاف الخطافات من هذه الأدلة، بترتيب تصاعدي لأولوية التجاوز:
  1. الخطافات المضمّنة: تأتي مع OpenClaw
  2. خطافات plugins: خطافات مضمّنة داخل plugins المثبتة
  3. الخطافات المُدارة: ~/.openclaw/hooks/ (مثبّتة من المستخدم ومشتركة بين مساحات العمل). تشترك الأدلة الإضافية من hooks.internal.load.extraDirs في هذه الأولوية.
  4. خطافات مساحة العمل: <workspace>/hooks/ (لكل وكيل، ومعطلة افتراضيًا حتى يتم تفعيلها صراحةً)
يمكن لخطافات مساحة العمل إضافة أسماء خطافات جديدة، لكنها لا تستطيع تجاوز الخطافات المضمّنة أو المُدارة أو المقدمة من plugin بالاسم نفسه.

حِزم الخطافات

حِزم الخطافات هي حزم npm تصدّر الخطافات عبر openclaw.hooks في package.json. ثبّتها باستخدام:
openclaw plugins install <path-or-spec>
تقتصر مواصفات npm على السجل فقط (اسم الحزمة مع إصدار دقيق اختياري أو dist-tag). ويتم رفض مواصفات Git/URL/file ونطاقات semver.

الخطافات المضمّنة

الخطافالأحداثما الذي يفعله
session-memorycommand:new, command:resetيحفظ سياق الجلسة في <workspace>/memory/
bootstrap-extra-filesagent:bootstrapيدرج ملفات bootstrap إضافية من أنماط glob
command-loggercommandيسجل جميع الأوامر في ~/.openclaw/logs/commands.log
boot-mdgateway:startupيشغّل BOOT.md عند بدء gateway
لتفعيل أي خطاف مضمّن:
openclaw hooks enable <hook-name>

تفاصيل session-memory

يستخرج آخر 15 رسالة من المستخدم/المساعد، ويولّد اسم ملف وصفيًا عبر LLM، ثم يحفظه في <workspace>/memory/YYYY-MM-DD-slug.md. يتطلب إعداد workspace.dir.

إعداد bootstrap-extra-files

{
  "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)، أو متغيرات بيئة، أو قيم إعداد، أو توافق نظام التشغيل.

الخطاف لا يعمل

  1. تحقّق من أن الخطاف مفعّل: openclaw hooks list
  2. أعد تشغيل عملية gateway لكي يُعاد تحميل الخطافات.
  3. افحص سجلات gateway: ./scripts/clawlog.sh | grep hook

ذو صلة