Skip to main content

Hooks

توفر Hooks نظامًا قابلاً للتوسعة قائمًا على الأحداث لأتمتة الإجراءات استجابةً لأوامر الوكيل والأحداث. يتم اكتشاف Hooks تلقائيًا من الأدلة، ويمكن إدارتها عبر أوامر CLI، على نحو مشابه لكيفية عمل Skills في OpenClaw.

Getting Oriented

تُعد Hooks سكربتات صغيرة تعمل عند حدوث شيء ما. وهناك نوعان:
  • Hooks (هذه الصفحة): تعمل داخل Gateway عند إطلاق أحداث الوكيل، مثل /new و/reset و/stop، أو أحداث دورة الحياة.
  • Webhooks: Webhooks خارجية عبر HTTP تتيح لأنظمة أخرى تشغيل مهام داخل OpenClaw. راجع Webhook Hooks أو استخدم openclaw webhooks لأوامر مساعد Gmail.
يمكن أيضًا تضمين Hooks داخل الإضافات؛ راجع Plugins. الاستخدامات الشائعة:
  • حفظ لقطة ذاكرة عند إعادة تعيين جلسة
  • الاحتفاظ بسجل تدقيق للأوامر لأغراض استكشاف الأخطاء وإصلاحها أو الامتثال
  • تشغيل أتمتة لاحقة عند بدء الجلسة أو انتهائها
  • كتابة ملفات داخل مساحة عمل الوكيل أو استدعاء واجهات برمجة تطبيقات خارجية عند إطلاق الأحداث
إذا كنت تستطيع كتابة دالة TypeScript صغيرة، فيمكنك كتابة Hook. يتم اكتشاف Hooks تلقائيًا، ويمكنك تمكينها أو تعطيلها عبر CLI.

نظرة عامة

يتيح لك نظام Hooks ما يلي:
  • حفظ سياق الجلسة في الذاكرة عند إصدار /new
  • تسجيل جميع الأوامر لأغراض التدقيق
  • تشغيل أتمتة مخصصة عند أحداث دورة حياة الوكيل
  • توسيع سلوك OpenClaw دون تعديل الشيفرة الأساسية

البدء

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

يأتي OpenClaw مع أربع Hooks مضمّنة يتم اكتشافها تلقائيًا:
  • 💾 session-memory: يحفظ سياق الجلسة في مساحة عمل الوكيل (الافتراضي ~/.openclaw/workspace/memory/) عند إصدار /new
  • 😈 soul-evil: يستبدل محتوى SOUL.md المُحقن بـ SOUL_EVIL.md خلال نافذة تطهير أو باحتمال عشوائي
  • 📝 command-logger: يسجل جميع أحداث الأوامر إلى ~/.openclaw/logs/commands.log
  • 🚀 boot-md: يشغّل BOOT.md عند بدء Gateway (يتطلب تمكين Hooks الداخلية)
عرض Hooks المتاحة:
تمكين Hook:
التحقق من حالة Hook:
الحصول على معلومات تفصيلية:

Onboarding

أثناء التهيئة الأولية (openclaw onboard)، سيُطلب منك تمكين Hooks الموصى بها. يقوم معالج الإعداد باكتشاف Hooks المؤهلة تلقائيًا وعرضها للاختيار.

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

يتم اكتشاف Hooks تلقائيًا من ثلاثة أدلة (حسب أولوية الترتيب):
  1. Workspace hooks: ‏<workspace>/hooks/ (لكل وكيل، أعلى أولوية)
  2. Managed hooks: ‏~/.openclaw/hooks/ (مثبّتة من المستخدم، مشتركة عبر مساحات العمل)
  3. Bundled hooks: ‏<openclaw>/dist/hooks/bundled/ (مضمّنة مع OpenClaw)
يمكن أن تكون أدلة Managed hooks إما Hook واحدة أو حزمة Hooks (دليل حِزمي). تتكون كل Hook من دليل يحتوي على:

حزم الخطافات (npm/الأرشيفات)

حزم Hooks هي حزم npm قياسية تُصدّر Hook واحدة أو أكثر عبر openclaw.hooks في package.json. ثبّتها باستخدام:
مواصفات Npm تقتصر على السجل فقط (اسم الحزمة + إصدار/وسم اختياري). يتم رفض مواصفات Git/URL/file. مثال package.json:
يشير كل إدخال إلى دليل Hook يحتوي على HOOK.md وhandler.ts (أو index.ts). يمكن لحزم Hooks شحن تبعيات؛ وسيتم تثبيتها ضمن ~/.openclaw/hooks/<id>. ملاحظة أمنية: يقوم openclaw hooks install بتثبيت التبعيات باستخدام npm install --ignore-scripts (بدون تشغيل lifecycle scripts). حافظ على أشجار تبعيات حزم hook “pure JS/TS” وتجنب الحزم التي تعتمد على عمليات build عبر postinstall.

Hook Structure

HOOK.md Format

يحتوي ملف HOOK.md على بيانات وصفية في واجهة YAML الأمامية بالإضافة إلى توثيق Markdown:

Metadata Fields

يدعم كائن metadata.openclaw ما يلي:
  • emoji: رمز تعبيري للعرض في CLI (مثل "💾")
  • events: مصفوفة بالأحداث المراد الاستماع إليها (مثل ["command:new", "command:reset"])
  • export: التصدير المسمّى المراد استخدامه (الافتراضي "default")
  • homepage: رابط التوثيق
  • requires: متطلبات اختيارية
    • bins: الثنائيات المطلوبة على PATH (مثل ["git", "node"])
    • anyBins: يجب توفر واحد على الأقل من هذه الثنائيات
    • env: متغيرات البيئة المطلوبة
    • config: مسارات التهيئة المطلوبة (مثل ["workspace.dir"])
    • os: الأنظمة الأساسية المطلوبة (مثل ["darwin", "linux"])
  • always: تجاوز فحوصات الأهلية (قيمة منطقية)
  • install: طرق التثبيت (بالنسبة للـ Hooks المضمّنة: [{"id":"bundled","kind":"bundled"}])

Handler Implementation

يُصدّر ملف handler.ts دالة HookHandler:

Event Context

يتضمن كل حدث:

Event Types

Command Events

تُطلق عند إصدار أوامر الوكيل:
  • command: جميع أحداث الأوامر (مستمع عام)
  • command:new: عند إصدار أمر /new
  • command:reset: عند إصدار أمر /reset
  • command:stop: عند إصدار أمر /stop

Agent Events

  • agent:bootstrap: قبل حقن ملفات تهيئة مساحة العمل (قد تُعدّل Hooks ‏context.bootstrapFiles)

Gateway Events

تُطلق عند بدء Gateway:
  • gateway:startup: بعد بدء القنوات وتحميل Hooks

Tool Result Hooks (Plugin API)

هذه Hooks ليست مستمعات لتدفق الأحداث؛ بل تتيح للإضافات تعديل نتائج الأدوات بشكل متزامن قبل أن يحفظها OpenClaw.
  • tool_result_persist: تحويل نتائج الأداة قبل كتابتها في سجل الجلسة. يجب أن تكون متزامنة؛ أعد حمولة نتيجة الأداة المُحدّثة أو undefined للإبقاء عليها كما هي. راجع Agent Loop.

Future Events

أنواع أحداث مخططة:
  • session:start: عند بدء جلسة جديدة
  • session:end: عند انتهاء جلسة
  • agent:error: عند مواجهة الوكيل خطأً
  • message:sent: عند إرسال رسالة
  • message:received: عند استلام رسالة

Creating Custom Hooks

1. Choose Location

  • Workspace hooks (<workspace>/hooks/): لكل وكيل، أعلى أولوية
  • Managed hooks (~/.openclaw/hooks/): مشتركة عبر مساحات العمل

2. Create Directory Structure

3. Create HOOK.md

4. Create handler.ts

5. Enable and Test

Configuration

Per-Hook Configuration

يمكن أن تمتلك Hooks تهيئة مخصصة:

Extra Directories

تحميل Hooks من أدلة إضافية:

Legacy Config Format (Still Supported)

لا يزال تنسيق التهيئة القديم مدعومًا للتوافق العكسي:
ملاحظة: يجب أن يكون module مسارًا نسبيًا لمساحة العمل. يتم رفض المسارات المطلقة وأي انتقال خارج مساحة العمل. الترحيل: استخدم نظام الاكتشاف الجديد المعتمد على الأدلة للـ Hooks الجديدة. يتم تحميل المعالِجات القديمة بعد Hooks المعتمدة على الأدلة.

CLI Commands

List Hooks

Hook Information

Check Eligibility

Enable/Disable

Bundled hook reference

session-memory

يحفظ سياق الجلسة في الذاكرة عند إصدار /new. Events: command:new الإعداد الأولي Output: ‏<workspace>/memory/YYYY-MM-DD-slug.md (الافتراضي ~/.openclaw/workspace) What it does:
  1. يستخدم إدخال الجلسة قبل إعادة التعيين لتحديد النص الكامل الصحيح
  2. يستخرج آخر 15 سطرًا من المحادثة
  3. يستخدم LLM لتوليد اسم ملف وصفي (slug)
  4. يحفظ بيانات الجلسة الوصفية في ملف ذاكرة مؤرخ
Example output:
Filename examples:
  • 2026-01-16-vendor-pitch.md
  • 2026-01-16-api-design.md
  • 2026-01-16-1430.md (طابع زمني احتياطي إذا فشل توليد الاسم)
Enable:

bootstrap-extra-files

يستبدل محتوى SOUL.md المُحقن بـ SOUL_EVIL.md خلال نافذة تطهير أو باحتمال عشوائي. Events: agent:bootstrap Requirements: يجب تهيئة workspace.dir Output: لا يتم كتابة ملفات؛ تتم عمليات الاستبدال في الذاكرة فقط. Config:
Docs: SOUL Evil Hook
  • يتم تحليل المسارات نسبةً إلى مساحة العمل.
  • يجب أن تبقى الملفات داخل مساحة العمل (يتم التحقق عبر realpath).
  • يتم تحميل أسماء bootstrap الأساسية المعترف بها فقط.
  • يتم الحفاظ على قائمة السماح الخاصة بالوكلاء الفرعيين (AGENTS.md و TOOLS.md فقط).
Enable:

command-logger

يسجل جميع أحداث الأوامر إلى ملف تدقيق مركزي. Events: command Requirements: لا شيء Output: ‏~/.openclaw/logs/commands.log What it does:
  1. يلتقط تفاصيل الحدث (إجراء الأمر، الطابع الزمني، مفتاح الجلسة، معرّف المُرسِل، المصدر)
  2. يُلحِق السجل بملف بتنسيق JSONL
  3. يعمل بصمت في الخلفية
Example log entries:
View logs:
Enable:

boot-md

يشغّل BOOT.md عند بدء Gateway (بعد بدء القنوات). يجب تمكين Hooks الداخلية لتعمل. Events: gateway:startup Requirements: يجب تهيئة workspace.dir What it does:
  1. يقرأ BOOT.md من مساحة عملك
  2. ينفّذ التعليمات عبر مُشغّل الوكيل
  3. يرسل أي رسائل صادرة مطلوبة عبر أداة الرسائل
Enable:

Best Practices

Keep Handlers Fast

تعمل Hooks أثناء معالجة الأوامر. اجعلها خفيفة:

Handle Errors Gracefully

قم دائمًا بتغليف العمليات الخطِرة:

Filter Events Early

أعِد الخروج مبكرًا إذا لم يكن الحدث ذا صلة:

Use Specific Event Keys

حدّد أحداثًا دقيقة في البيانات الوصفية كلما أمكن:
بدلاً من:

Debugging

Enable Hook Logging

يسجّل Gateway تحميل Hooks عند بدء التشغيل:

Check Discovery

اعرض جميع Hooks المكتشفة:

Check Registration

في المعالج الخاص بك، سجل عند استدعائه:

Verify Eligibility

تحقق من سبب عدم أهلية Hook:
ابحث عن متطلبات مفقودة في المخرجات.

Testing

Gateway Logs

راقب سجلات Gateway لرؤية تنفيذ Hooks:

Test Hooks Directly

اختبر المعالِجات بشكل معزول:

Architecture

Core Components

  • src/hooks/types.ts: تعريفات الأنواع
  • src/hooks/workspace.ts: فحص الأدلة والتحميل
  • src/hooks/frontmatter.ts: تحليل بيانات HOOK.md الوصفية
  • src/hooks/config.ts: التحقق من الأهلية
  • src/hooks/hooks-status.ts: الإبلاغ عن الحالة
  • src/hooks/loader.ts: محمّل الوحدات الديناميكي
  • src/cli/hooks-cli.ts: أوامر CLI
  • src/gateway/server-startup.ts: تحميل Hooks عند بدء Gateway
  • src/auto-reply/reply/commands-core.ts: إطلاق أحداث الأوامر

Discovery Flow

Event Flow

Troubleshooting

Hook Not Discovered

  1. تحقق من بنية الدليل:
  2. تحقق من تنسيق HOOK.md:
  3. اعرض جميع Hooks المكتشفة:

Hook Not Eligible

تحقق من المتطلبات:
ابحث عن المفقود:
  • الثنائيات (تحقق من PATH)
  • متغيرات البيئة
  • قيم التهيئة
  • توافق نظام التشغيل

Hook Not Executing

  1. تحقق من تمكين Hook:
  2. أعد تشغيل عملية Gateway لإعادة تحميل Hooks.
  3. تحقق من سجلات Gateway بحثًا عن أخطاء:

Handler Errors

تحقق من أخطاء TypeScript/الاستيراد:

Migration Guide

From Legacy Config to Discovery

Before:
After:
  1. أنشئ دليل Hook:
  2. أنشئ HOOK.md:
  3. تحديث الإعداد:
  4. تحقّق وأعد تشغيل عملية Gateway:
Benefits of migration:
  • الاكتشاف التلقائي
  • إدارة عبر CLI
  • التحقق من الأهلية
  • توثيق أفضل
  • بنية متسقة

See Also