ما هو الـ mod: معالِجات أحداث داخل إضافة

بحسب وثائق Anthropic، الـ mod إضافة تغيّر شكل Claude Code وسلوكه، وتتكوّن من معالِجات أحداث بلغة JavaScript أو TypeScript يستدعيها Claude Code حين يوشك Claude على استخدام أداة، أو ترسل أنت مطالبة، أو يُرسم جزء من الواجهة. تسمي الوثائق هذه المعالِجات hooks، أما النوع الأقدم الذي يُضبط في ملف الإعدادات فصار اسمه settings hook.

يعمل الـ hook قبل أن يتصرف Claude Code في الحدث، فيقرر ما يحدث بعده: إما أن يراقب الحدث ويتركه يكمل، أو يعيد كتابته أولًا، أو يتولاه بنفسه فلا يجري السلوك المعتاد (كرفض أمر ما). وكل ما يتجاوز شيفرته — الرسم والأوامر واستدعاء النماذج والملفات والعمليات والشبكة — يمر عبر mods API، أي الرمز $ في الشيفرة؛ ولهذا يستطيع Claude Code أن يعرض ما يفعله الـ mod قبل تثبيته. وحين تعالج عدة mods الحدث نفسه تعمل بترتيب تحميلها، فتتراكب mods من مؤلفين مختلفين.

بعض ميزات Claude Code المدمجة صارت mods بالفعل: الأمر /diff يرسمه الـ mod المدمج cc-plugin-diff، ويمكنك تعطيله من /plugin (فتتولى النسخة المدمجة القديمة الأمر) أو استبداله بنسختك. وتخطط Anthropic لنقل مزيد من الميزات المدمجة إلى mods مع الوقت.

ما تستطيعه الـ mods ولا تستطيعه hooks و skills و MCP

تعمل settings hooks و skills وأسطر الحالة وخوادم MCP من خارج Claude Code. أما الـ mod فيعمل داخله، لذا يستطيع:

  • رسم واجهة تتفاعل معها: لوحة بجانب سجل المحادثة أو شريط فوق مربع الكتابة، فيه تبويبات وأزرار وحقول نصية؛
  • إعادة رسم واجهة Claude Code نفسها: صف استدعاء الأداة، ومؤشر الانتظار، والنافذة التي يطرح فيها Claude أسئلته؛
  • التدخل في استدعاء أداة أو طلب: إيقاف الاستدعاء ريثما يسألك، أو الرد دون تشغيل الأداة، أو إرسال طلب واحد إلى نموذج آخر؛
  • تشغيل شيفرتك عبر أمر: أمر يبدأ بشرطة مائلة ينفّذ دالتك فورًا دون دور من Claude، حتى أثناء عمله؛
  • مشاركة البيانات بين الـ hooks: أحدها يسجّل والآخر يعرض.

ويضيف إعلان الإطلاق أمثلة أخرى: إعادة كتابة المطالبة قبل وصولها إلى النموذج، وإعادة محاولة استدعاء أداة، والموافقة على طلب إذن أو رفضه، وحجب الأسرار من مخرجات الأدوات قبل أن يقرأها Claude. وهذه مقارنة الوثائق:

ModSettings hookSkillخادم MCP
ما هودوال في إضافة يستدعيها Claude Code داخل عمليتهأمر shell أو طلب HTTP أو مطالبة تعمل عند حدث من دورة الحياةملف SKILL.md بتعليمات يقرؤها Claudeعملية أو خدمة خارجية تمنح Claude أدوات
ما يمكنه تغييرهاستدعاءات الأدوات والمطالبات والأوامر والأدوار، وما ترسمه الواجهةهل يمضي استدعاء الأداة أو المطالبة، ووسائط الاستدعاء ونتيجته، وسياق يُضاف لـ Claudeما يعرفه Claude وما يفعلهالأدوات المتاحة لـ Claude
يرسم في الواجهةنعملالالا
ما تكتبهJavaScript أو TypeScriptسكربت وإدخال في settings.jsonMarkdownخادم بأي لغة
اختره حينتريد لوحة أو شريطًا فوق مربع الكتابة أو أمرًا مخصصًا أو إعادة كتابة حدثتريد منع حدث أو السماح به أو تسجيله بسكربت لديكتلصق التعليمات نفسها في المحادثة مرارًايحتاج Claude إلى الوصول إلى نظام خارجي

يمكن لإضافة واحدة أن تضم الأربعة معًا، فيُشحن الـ mod بجانب skill وخادم MCP. ونصيحة Anthropic: إن كان settings hook أو skill أو خادم MCP يؤدي المطلوب، فقارن بينها قبل أن تكتب mod.

قبل البدء: تحقق من الإصدار

  • الطرفية: Claude Code بالإصدار v2.1.287 أو أحدث؛ تحقق بالأمر claude --version وحدّث عند الحاجة.
  • تطبيق سطح المكتب: يدعم Claude Code المدمج فيه الـ mods من v2.1.286؛ اكتب /status في جلسة محلية في تبويب Code واقرأ سطر Claude Code.
  • مفعّلة افتراضيًا. إن كنت قد ضبطت CLAUDE_CODE_ENABLE_FUNCTION_HOOKS في الوصول المبكر فاحذفه: الإصدار v2.1.287 وما بعده يتجاهله، فلم تعد القيمة 0 توقف الـ mods.
  • ما المحمَّل الآن: يعرض /plugin تحت تبويباته سطرًا باهتًا مثل 1 mod active · first-mod.

جرّب mod جاهزًا أولًا

تضع Anthropic أمثلة mods في المجلد claude-code/mods من مستودع anthropics/claude-code-playground. كل مثال إضافة كاملة مع ملف README يشرح كيف بُنيت، وتُقدَّم كما هي دون دعم:

  • token-weather: يرسم فوق مربع الكتابة «نشرة طقس» لنافذة السياق لديك
  • blast-radius: يوقف أمر shell خطِرًا (مثل rm -rf أو force push) ويعرض ما سيغيّره، مع زرّين للمتابعة أو الإلغاء
  • replay-theater: يضيف الأمر /replay الذي يعرض خطوة بخطوة تعديلات الملفات التي أجراها Claude في الدور الأخير

حمّل مثالًا لجلسة واحدة عبر --plugin-dir، أو أضف مجلد claude-code/mods من النسخة المستنسخة كمتجر إضافات لتحتفظ به (ويتوقف تحميله إن نقلت النسخة أو حذفتها):

# Try one for a single session
git clone https://github.com/anthropics/claude-code-playground
claude --plugin-dir ./claude-code-playground/claude-code/mods/token-weather

# Keep it: in a Claude Code session, add the folder as a marketplace and install
/plugin marketplace add ./claude-code-playground/claude-code/mods
/plugin install token-weather@claude-code-playground-mods

الطريق الأسهل: اطلب من Claude أن يكتبه

صِف الـ mod الذي تريده في جلسة تفاعلية وسيكتبه Claude، مستعينًا بـ skill مدمجة اسمها plugin-authoring تخبره أين توضع الـ mods، وما الأحداث والدوال المتاحة في إصدارك، وكيف تُحمَّل؛ ويمكنك تحميلها بنفسك بالأمر /plugin-authoring.

  1. صِف المطلوب، مثل make a mod that shows the current git branch above the prompt أو بكلماتك أنت. يكتبه Claude في مجلد الجلسة ~/.claude/dev-mods/ متبوعًا بمعرّف الجلسة؛ ولأن ~/.claude مسار محمي، يسألك وضعا default و acceptEdits قبل إنشاء كل ملف.
  2. اختر إعادة التحميل الفوري عند أول حفظ: Enable for this session يحمّل الـ mods عند نهاية الدور ويعيد تحميلها بعد كل تعديل، و Not now يؤجل التحميل إلى بدء الجلسة التالية.
  3. تحقق وحسّن: يعرض تبويب Installed في /plugin الـ mod ويتيح إيقافه؛ واطلب التعديلات من Claude فتُحمَّل عند نهاية الدور.

مثل هذا الـ mod يُحمَّل في جلسته فقط، ويُحذف مجلده بعد مدة cleanupPeriodDays؛ لتحتفظ به انسخه إلى مكان مثل ~/mods/git-branch وحمّله بالأمر claude --plugin-dir ~/mods/git-branch. ولا يُحمَّل في claude -p أو وضع dontAsk، ولا في مساحة عمل غير موثوقة، ولا مع --safe-mode أو --bare أو disableAllHooks، ولا حيث تمنعه الإعدادات المُدارة. وكتابته جلسة Claude Code عادية تستهلك من حصة باقتك.

اكتب أول mod بنفسك: ثلاثة ملفات

الـ mod التعليمي من Anthropic، first-mod، يعدّ استدعاءات Claude للأدوات ويعرض العدد بجانب مؤشر الانتظار ويضيف الأمر /tally. لا حاجة إلى Node.js أو أداة تجميع أو خطوة بناء: يحمّل Claude Code ملفات .js و .ts مباشرة. الملفات هي: .claude-plugin/plugin.json · hooks/hooks.json · hooks/register.js.

first-mod/
├── .claude-plugin/
│   └── plugin.json
└── hooks/
    ├── hooks.json
    └── register.js

1. أنشئ المجلدات، ثم 2. احفظ ملف التعريف first-mod/.claude-plugin/plugin.json. لا يحتاج الـ mod حقولًا خاصة، لكن الاسم الذي يشبه أسماء Anthropic (كأن يبدأ بـ claude-) يفشل في التحقق:

mkdir -p first-mod/.claude-plugin first-mod/hooks
{
  "name": "first-mod",
  "version": "0.1.0",
  "description": "Counts Claude's tool calls, shows the count beside the spinner, and adds a /tally command",
  "author": { "name": "Your Name" }
}

3. دُلّ Claude Code على شيفرتك: المفتاح modules في first-mod/hooks/hooks.json يذكر مسارًا واحدًا نسبةً إلى هذا الملف، ووجوده هو ما يجعل الإضافة mod.

{
  "description": "The first-mod hooks module",
  "modules": ["./register.js"]
}

4. اكتب first-mod/hooks/register.js. يستدعي Claude Code الدالة المصدَّرة register ويمرر لها on، وكل استدعاء لـ on يسجّل hook لحدث واحد:

// The count, shared by the hooks below
let calls = 0

// Claude Code calls this once when the mod loads
export function register(on) {
  // Runs when the session starts: add the /tally command (observe)
  on('session.start', async ($, e, next) => {
    await $.command.register({
      name: 'tally',
      description: 'Show how many tool calls Claude has made',
    })
    return next(e)
  })

  // Runs each time Claude is about to use a tool (observe)
  on('tool.call', async ($, e, next) => {
    calls += 1
    $.ui.invalidate('ui.render')
    return next(e)
  })

  // Runs only for /tally and returns its own text (answer)
  on('command.run', { command: 'tally' }, async () => {
    return { text: 'Claude has made ' + calls + ' tool calls since this mod loaded' }
  })

  // Keeps Claude Code's spinner, with the count added (rewrite)
  on('ui.render', { component: 'Spinner' }, async ($, e, next) => {
    return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })
  })
}

يتلقى كل hook ثلاثة وسائط: $ (واجهة mods API)، و e (الحدث كبيانات عادية)، و next (تمرر الحدث إلى ما بعده وتعيد النتيجة). يقوم session.start و tool.call بالمراقبة؛ ويقوم command.run بالرد بنفسه دون استدعاء next، ويقصره المرشِّح { command: 'tally' } على /tally؛ أما ui.render فيعيد الكتابة بإضافة العدد إلى suffix في مؤشر الانتظار.

5. حمّله وجرّبه:

# Load first-mod for this session only
claude --plugin-dir ./first-mod

# Check the command without an interactive session
claude -p "/tally" --plugin-dir ./first-mod
# first-mod: Claude has made 0 tool calls since this mod loaded

اطلب مهمة تحتاج عدة استدعاءات أدوات (list the files here and read the README): سيعرض مؤشر الانتظار Thinking · tool calls: 2…، ثم يطبع /tally النص first-mod: Claude has made 2 tool calls since this mod loaded بالعدد الخاص بك. وإن لم يظهر /tally في قائمة الأوامر فالوحدة لم تُحمَّل.

6. عدّل وهو يعمل: غيّر ' · tool calls: ' إلى ' · tools used: ' واحفظ، فيُعاد تحميل first-mod ويظهر النص الجديد في مؤشر الانتظار التالي؛ وكل إعادة تحميل تشغّل register من جديد، فيعود العدّاد إلى الصفر.

تفضّل TypeScript؟ سمِّ الملف register.ts واجعل قيمة modules هي ["./register.ts"]. وعند التحميل عبر --plugin-dir يكتب Claude Code ملفات تعريف .d.ts مطابقة لإصدارك في .claude-plugin/types/، فيكمل محررك الشيفرة ويتحقق من الأنواع. وإن اختلفت صفحة في الوثائق عن هذه الملفات فاعتمد الملفات.

التثبيت والتحقق والاختبار والإيقاف والمشاركة

التثبيت: /plugin install <plugin>@<marketplace> داخل الجلسة، أو claude plugin install <plugin>@<marketplace> في الطرفية، ثم شغّل /reload-plugins في أي جلسة كانت مفتوحة.

التحقق: يجري claude plugin validate فحوص التحميل والتحليل الثابت نفسها التي يجريها Claude Code، دون تشغيل شيفرتك. يذكر سطر hooks: الأحداث المعالَجة (والمرشِّحات بين الأقواس المعقوفة)، ويذكر سطر calls: كل دالة من mods API تُستدعى، ويظهر سطرا env reads: و env writes: إن تعاملت الوحدة مع متغيرات البيئة:

claude plugin validate ./first-mod

  ❯ ./register.js hooks: session.start, tool.call, command.run{command=tally}, ui.render{component=Spinner}
  ❯ ./register.js calls: $.command.register, $.ui.invalidate

✔ Validation passed

غياب حدث تقصده يعني غالبًا خطأً إملائيًا ("tool.calls" is not an event). اكتب استدعاءات الواجهة كاملة مثل $.store.get('notes')، لا عبر اسم مستعار أو تفكيك $، واكتب أسماء الأحداث كنصوص حرفية.

الاختبار: يشغّل claude plugin test الاختبارات الآلية للـ mod دون جلسة أو تسجيل دخول أو شبكة.

الإيقاف: لـ mod واحد من تبويب Installed في /plugin؛ ولكل الـ mods المثبتة في جلسة واحدة بالتشغيل مع --safe-mode (تتوقف معها تخصيصاتك الأخرى)؛ ولكلها في كل مكان بإضافة "disableAllHooks": true إلى ~/.claude/settings.json (تتوقف معها settings hooks وسطر الحالة المخصص). أما الـ mods المدمجة مثل /diff فتُعطَّل من /plugin.

المشاركة: مجلد أو ملف .zip لعدد قليل من الأشخاص، أو متجر إضافات خاص بفريقك، أو الإعدادات المُدارة للمؤسسة كلها، أو متجر عام أو دليل إضافات Anthropic للجميع. وطوّر دائمًا على المجلد عبر --plugin-dir: الإضافات المثبتة تُخزَّن مؤقتًا حسب الإصدار، فلا تصلها تعديلاتك إلا بعد رفع رقم الإصدار وإعادة التثبيت.

الأمان: ما الذي يصل إليه الـ mod

Anthropic صريحة في ذلك: للـ mods صلاحيات الوصول نفسها التي يملكها Claude Code على جهازك، وهي لا تعمل في بيئة معزولة، فلا تثبّتها إلا من مصادر تثق بها. بعد تحميله يستطيع الـ mod:

  • التصرف باسمك: قراءة ملفاتك وتعديلها، وتشغيل البرامج، والاتصال بالشبكة؛
  • قراءة أسرارك: متغيرات البيئة وملفات الإعدادات، ومنها مفاتيح API؛
  • رؤية جلستك: كل مطالبة ترسلها وكل استدعاء أداة يجريه Claude؛
  • تغيير جلستك: إعادة كتابة المطالبات واستدعاءات الأدوات، وإرسال مطالبة كأنك كتبتها، ومراسلة جلسة أخرى لك؛
  • التصرف دون سؤالك: الموافقة على استدعاء أداة قبل أن تُسأل؛
  • استهلاك حصتك: استدعاء نموذج من باقتك أو بمفتاح API الخاص بك.

البيئة المعزولة (sandboxing) لا تغيّر هذا: فهي تعزل أوامر Bash التي يشغّلها Claude، أما العملية التي يطلقها الـ mod فتعمل خارجها. ويستطيع الـ mod الموافقة على استدعاء كانت قاعدة ask ستسألك عنه، أو استدعاء منعه hook من نوع PreToolUse خاص بك؛ والشيء الوحيد الذي لا يستطيع تغييره هو ما يعرضه طلب الإذن.

  1. ثبّت فقط من مؤلفين ومتاجر تثق بهم.
  2. استنسخ الملفات أولًا وشغّل claude plugin validate ./some-mod: يجب أن تطابق الأحداث والاستدعاءات المذكورة ما يدّعي الـ mod فعله.
  3. انتبه لمفاتيحك: الـ mod يرى متغيرات البيئة، وبحسب مركز مساعدة Anthropic فإن ضبط ANTHROPIC_API_KEY يجعل Claude Code يعتمد هذا المفتاح ويحاسب بأسعار API بدلًا من اشتراكك.
  4. إن تصرّف شيء بغرابة، فشغّل Claude Code مع --safe-mode لاستبعاد الـ mods.

أين تعمل الـ mods

تعمل الـ hooks في كل جلسة تحمّل الإضافة، لكن ما يرسمه الـ mod لا يظهر إلا في الطرفية وتطبيق سطح المكتب:

أين تشغّل Claude Codeتعمل الـ hooksيظهر ما يرسمه الـ mod
claude في الطرفية، بما فيها طرفيات المحررات وإضافة JetBrainsنعمنعم
تبويب Code في تطبيق سطح المكتب، عدا جلسات WSLنعمنعم، عدا العناصر المخصصة للطرفية فقط
جلسة WSL في تطبيق سطح المكتبلا، فالإضافات غير متاحة في جلسات WSLلا
لوحة المحادثة في إضافة VS Codeنعملا
claude -p و Agent SDKنعملا
Remote Control من claude.ai أو تطبيق الجوالنعم، في الجلسة على جهازكفي الطرفية على جهازك
جلسة سحابيةنعم، للإضافة التي تصل إلى الجلسة السحابيةلا

يستطيع الـ mod الذي يرسم أن يعرف أين يعمل فيعود إلى النص، لذا يبقى منطق الحماية والتسجيل فعّالًا في VS Code وفي تشغيلات claude -p ضمن CI.

الفرق والشركات

  • ضوابط الإضافات تسري: يسمح المسؤولون بمتاجر الإضافات أو يحظرونها — في باقتي Team و Enterprise يفعل ذلك المالك من لوحة الإدارة، وفي باقات Claude API وواجهات API الخارجية يدفع المسؤولون إعدادات مُدارة إلى أجهزة المستخدمين.
  • sec-default يُحمَّل أولًا في Team و Enterprise وعلى أي جهاز فيه إعدادات مُدارة، فيمنع الـ mods التي يثبتها المستخدم من الخطوات الخطرة مثل تجاوز قواعد الرفض (deny) في الأذونات؛ والمسؤول الذي يحمّل mods مؤسسته أولًا عليه إبقاء sec-default في القائمة.
  • allowManagedModsOnly يمنع mods المستخدمين الخاصة، بينما تبقى skills إضافاتهم وأوامرها ووكلاؤها وخوادم MCP فيها تعمل.
  • أفكار للفرق من Anthropic: لوحة لحالة CI/CD تتحدّث مع نجاح البناء أو فشله، وتأكيد قبل أي أمر يمسّ إعدادات الإنتاج، و mod تدقيق يُحمَّل أولًا ويسجّل كل استدعاء تجريه الـ mods الأخرى.

أي باقة تحتاج، ومن يشتري ماذا

الـ mods مجانية — لا تشترط الوثائق سوى الإصدار — لكنها تعمل داخل Claude Code، وبحسب صفحة أسعار Anthropic فهو مشمول في Pro و Max وغير متاح في Free. ويتشارك Claude Code حصة واحدة مع تطبيقات Claude، فطلب كتابة mod من Claude، أو تشغيل mod يستدعي نموذجًا، يستهلك منها.

أسعار Claude لدينا اليوم (مباشرة من نظام الطلبات)
  • لتجربة الـ mods واستخدام Claude Code من حين لآخر: تكفي Claude Pro.
  • عمل يومي بالوكلاء وبلوغ حد Pro كثيرًا: ينصح مركز مساعدة Anthropic بـ Max 5x ($100 شهريًا، نحو 5 أضعاف استخدام Pro لكل جلسة).
  • ما زلت تبلغ الحد على Max 5x: Max 20x ($200 شهريًا، نحو 20 ضعفًا من Pro). تُعاد حصة الجلسة في Max كل خمس ساعات، مع حد أسبوعي فوقها.
  • فرق الشركات التي تحتاج تحكمًا مركزيًا في المتاجر والـ mods: باقات Team أو Enterprise من Anthropic.

تفعيل على حسابك أم حساب جاهز. إن رُفضت بطاقتك أو لم يكن Claude متاحًا في بلدك، فادفع لنا بـ USDT عبر TRC20 أو BEP20. التفعيل على حسابك: الصق تصدير cookie لموقع claude.ai (ملف JSON من Cookie-Editor) في صفحة الطلب؛ يُفحص قبل الدفع، ويكتمل عادة خلال 5 إلى 30 دقيقة، وتُحذف البيانات بعد التسليم. يشترط تفعيل Max حسابًا يسجّل الدخول طبيعيًا وغير محظور؛ والحساب المجاني الذي لم يُدفع له ببطاقة بنكية من قبل لا يقبل Max، والحسابات الجديدة تمامًا تنتظر من 3 إلى 15 يومًا قبل Max 20x. وإلا فاشترِ حسابًا جاهزًا: حساب واحد لكل طلب، لمستخدم واحد، ويمكنك بحسب وصف المنتج ربط بريدك الخاص. بعد الدفع أكّد بريد التسليم (تصل رسالة التحقق من Cloudflare)؛ يُسلَّم Max الجاهز يدويًا (تعرض صفحة الطلب من 30 دقيقة إلى نحو 4 ساعات)، وفي Pro الجاهز ترسل معرّف المؤسسة (Organization ID) في صفحة الطلب. ثم سجّل الدخول إلى Claude Code بهذا الحساب. المزيد في الحساب الجاهز وشراء Claude Pro و Max بـ USDT. حسابات Max 5x / Max 20x الجاهزة غير متوفرة حاليًا، فاستخدم لـ Max 5x / Max 20x الشحن على حسابك (Max 5x / Max 20x) وفق شروط الأهلية أعلاه.

التجديد والاسترداد. كل طلب يغطي 30 يومًا، وتصلك تذكيرات قبل الانتهاء بـ 7 و 3 أيام ويوم واحد. يُجدَّد الحساب الجاهز بمراسلة تيليغرام @ccnb1937 برقم الطلب، بسعر التفعيل للباقة نفسها؛ ويُجدَّد التفعيل على حسابك بطلب جديد. إذا جعلت سياسة Anthropic الإقليمية الخدمة غير متاحة تُسترد قيمة الأيام غير المستخدمة بـ USDT؛ والحظر الناتج عن مخالفة سياسة استخدام Anthropic لا يُسترد؛ وتُعالَج المبالغ المستردة خلال يوم عمل واحد. إذا واجهت أي مشكلة فتواصل فورًا مع الدردشة المباشرة أسفل يمين الصفحة، أو راسل support@claudemax.shop.

ClaudeMax جهة مستقلة: ليست Anthropic ولا موزعًا معتمدًا، وتعمل منذ نوفمبر 2024 وخدمت أكثر من 20,000 مستخدم (بحسب إحصائنا). رُوجع هذا الدليل على وثائق Anthropic بتاريخ 2026-10-07، وفي أحداث الـ mods وواجهتها البرمجية تبقى الوثائق الرسمية الأحدث هي المرجع.