في الفصول الخمسة الماضية ثبّتنا Claude Code وأعطيناه التعليمات وخرجنا من التعثّر وصمّمنا الأذونات. وهذا الفصل حديث عن إعادة تشكيل الأداة نفسها. والتوسعات لا تُستعمل بحفظ أسمائها. والنافع هو جدول يقابل بين «ما الذي يحلّ ضيقك الحالي» وبينها.
خريطة التمييز ― أربعة أسئلة تحسم الأمر
التوسعات ستّ، لكن ما تفكّر فيه أربعة فقط: أيكفي الرجاء / أتريد أثراً مؤكّداً / أتريد فصل السياق / أتريد الوصل بالخارج ― فإن سألت نفسك بهذا الترتيب تحدّد الجواب تحديداً شبه قاطع.
إن كان الإخلال أحياناً غير قاتل فالكلام يكفي. والجواب CLAUDE.md (مقدّمات عامة) أو Skills (إجراءات عمل بعينه)
إن كان الإخلال مرة واحدة يضرّك، فأوقفه بآلية. والجواب hooks. تجري حتماً دون أن يتوسّط حكم النموذج.
إن كنت لا تريد أن تدفن مخرجات ضخمة مسارك الأصلي، فاجعله يعمل خارجاً ولا تتسلّم إلا الخلاصة. والجواب subagents
إن لزمتك معلومة لا سبيل للذكاء الاصطناعي إلى معرفتها (القيمة الحالية في قاعدة البيانات، أو محتوى نظام المهامّ). والجواب MCP
والسؤال الخامس «أستوزّع هذا على غيرك» ― فإن كنت ستوزّعه فـplugins. وأكثر ما يلتبس Q1 وQ2، أي CLAUDE.md وSkills وhooks. فكلها تبدو سواء، والفارق بينها متى تُقرأ ومن ينفّذها.
CLAUDE.md ― ذاكرة لا تزول، إلا أن تطيلها فتزول
CLAUDE.md ملف إن وضعته في جذر المشروع قُرئ تلقائياً في كل جلسة (وإن أردته مشتركاً بين كل مشاريعك فـ~/.claude/CLAUDE.md). ولأنه ملف، فلا يناله ما رأيناه في الفصل الأول من «نسيان أول الحديث متى طال». وهو موضع ما تشرحه في كل مرة.
وعبارة «يقول إنه قرأه ثم لا يلتزم» ليست تقصيراً بل مشكلة بنيوية، ولها ثلاثة أسباب.
- الوسط يغرق ― فالتعليمات الواقعة في وسط نصّ طويل يسهل إغفالها، وكلما أطلته صار ما في وسطه من قواعد في حكم المعدوم
- الضغط يلخّصها ― فمتى جرى الضغط سُحقت قواعد التشغيل الدقيقة. ولهذا تكثر المخالفات كلما تقدّمت الجلسة
- التعليمة الأحدث تغلب ― فجملة «التزم الآن على أي حال» تجعله يتخطّى إجراء تحقّق قرأه قبل مئات الأدوار
والعلاج الحذف. والقاعدة التجريبية التي تعمل بيقين هي البقاء في حدود 100 إلى 150 سطراً. فإن تجاوزتها فأبقِ في الصدر الأحكام القاطعة وحدها وانقل التفاصيل إلى ملف آخر (فالتكرار يولّد التعارض، ولذلك يبقى الأصل في موضع واحد). ولا تضع «CRITICAL» إلا على ما لا يُسقَط، واجعل العبارة قابلة للحكم عليها من الخارج ― «اكتب في ثلاثة أسطر أو أقلّ» لا «اكتب بعناية».
وقوله «قرأتُه» ليس دليلاً. فالمعيار الوحيد سلوكه بعد التنفيذ. والقاعدة التي لا يُلتزَم بها مهما أعدت صياغتها ليست مشكلة صياغة ― بل هي شغل القسم التالي.
hooks ― لا رجاء بل أثر مؤكّد
«لا تعدّل ملف .env» ― إن كتبتها في CLAUDE.md التُزم بها في تسعة أعشار الحالات. وإن كان العُشر المتخلّف لا يضرّك فالنصّ يكفي. وإن كان يضرّك فـhooks ― هذا هو مفرق الطريق.
وhooks أوامر صدفة تُنفَّذ تلقائياً عند نقاط محدّدة. والذي يشغّلها ليس النموذج بل برنامج Claude Code نفسه (الحزام)، فتجري حتماً دون انتظار حكم. والصورة الكاملة في ما hooks في Claude Code. ونقاط الإطلاق المعتمدة تسع.
SessionStart عند البدء أو الاستئناف
UserPromptSubmit عقب الإرسال مباشرةً [يمكن الحجب]
PreToolUse قبيل الأداة = البوّاب [يمكن الحجب]
PostToolUse بعد نجاح الأداة = التنسيق [يمكن الحجب]
Notification انتظار الإدخال أو انتظار الإذن
Stop نهاية الردّ [يمكن الحجب]
SubagentStop انتهاء الوكيل الفرعي [يمكن الحجب]
SessionEnd انتهاء الجلسة
PreCompact قبل الضغط [يمكن الحجب]
ومعنى «يمكن الحجب» أنك تستطيع إيقاف العملية عند تلك النقطة. فتردّ الأوامر الخطرة من الباب عند PreToolUse، وتنسّق تلقائياً عند PostToolUse ― وهذان هما المدخلان المعتادان. ويُكتب الإعداد تحت مفتاح "hooks" في settings.json، وموضع الملف هو الذي يحدّد النطاق (~/.claude/ لك وحدك، و.claude/ مشترك، وsettings.local.json لك أنت فقط).
{ "hooks": {
"PostToolUse": [
{ "matcher": "Edit|Write",
"hooks": [ { "type": "command", "command": "..." } ] }
] } }
والبنية اسم الحدث ثم مصفوفة من المطابق مع الأمر. وmatcher هو اسم الأداة المستهدفة (يُفصَل بـ| كما في "Edit|Write"، وحذفه يطابق كل شيء). والخطّاف يتسلّم JSON من الدخل القياسي ويجيب برمز خروج ― 0 للنجاح، و2 للحجب (ويُسلَّم خرج الخطأ القياسي إلى Claude). ومسار الملف المستهدف موجود في JSON الداخل أيضاً، فيمكنك أن تكتب «أوقفه إن كان المسار هذا».
والخطّافات تشدّ القيود ولا ترخيها أبداً. فإرجاعها إذناً لا يفعل إلا تخطّي المطالبة، وقواعد المنع غالبة دائماً. ومنع PreToolUse يعمل حتى في النمط الذي يتخطّى كل الموافقات، فيصلح أرضيةً تحت ما أرخيته في الفصل الخامس.
وأما الثمن فمقدَّم. فـhooks تنفّذ أوامر صدفة عشوائية تلقائياً بصلاحياتك أنت. والوثائق الرسمية تقول صراحةً إن المسؤولية عليك وحدك. فلا تُعِدّ إلا ما تثق به، وتحقّق من المدخلات. والإعداد يُثبَّت عند بدء الجلسة، فإن أصلحته ولم يتغيّر شيء فافتح جلسة جديدة.
subagents ― تفويض بسياق منفصل
مخرجات الاختبارات كاملةً أو سجلّ ضخم ― متى تراكم نصّ كثير كان من المفترض أن يُقرأ ويُرمى، دُفعت المقدّمات المهمّة خارجاً. وsubagents آلية تشغّل ذلك العمل في سياق آخر ولا تعيد إليك إلا خلاصة النتيجة. ولها نافذة سياق ومطالبة نظام وأذونات أدوات خاصة بها، ولا ترى سجلّ محادثتك، فلا يعود ركام البحث إلى المسار الأصلي.
- يفيد الفصل ― في الاستقصاء الواسع، والتحقّق المصحوب بمخرجات كثيرة، والمهامّ المكتفية بذاتها التي يكفي منها الاستنتاج
- يخسّرك الفصل ― في المعالجة المتتابعة، وكثرة الأخذ والردّ، والعمل المتوازي على الملفات نفسها، والإصلاح الذي ينتهي بخطوة أو خطوتين
وهي ميزة قياسية تُستعمل بلا إعداد. وإن أردت إضافة تعريف فاكتبه في .claude/agents/<الاسم>.md (أو ~/.claude/agents/ إن أردته مشتركاً)، وضع في مقدّمة YAML الحقول name وdescription وtools وmodel. وإدارتها بـ/agents، واستدعاؤها بـ@agent-<الاسم>. وابدأ بالوكلاء القياسيين: وكيل الاستكشاف ووكيل التخطيط والوكيل العام.
وdescription هو مفتاح الاستدعاء. فالوكيل الرئيس ينظر فيه ليحكم هل يفوّض إليه، فإن كان غامضاً لم يُستدعَ ولا مرة. فحدّد فيه ماذا يفعل ومتى يُستعمل ― وهذا الفخّ نفسه موجود في Skills.
وأما Agent Teams الملتبس بها فآلية تتعاون فيها عدة جلسات مستقلّة عبر قائمة مهامّ مشتركة. وهي تجريبية باشتراك صريح ومعطّلة افتراضياً (CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1). ولأنها تشغّل نسخاً منفصلة فاستهلاك الرموز فيها كبير، ولا يمكن تعشيشها. والمقارنة في الفرق بين subagents وAgent Teams. وإن ترددت فالجلسة الواحدة أو subagents.
Skills ― تحويل الإجراءات إلى رصيد
في مقابل النمطيات من نوع «افعلها بهذه الخطوات كل مرة»، ميزة Skills أنها لا تُفتَح إلا عند الحاجة. وحقيقتها مجلد محوره ملف SKILL.md. تكتب في صدره name وdescription، وتحته الإجراءات بصيغة Markdown، ويمكنك أن تضمّ إليه reference/ وscripts/. ويكفي أن تضعه في .claude/skills/ (للمشروع) أو ~/.claude/skills/ (للمشترك) حتى يُتعرَّف عليه.
والجوهر الكشف المتدرّج. فالذي يُقرأ عند بدء الجلسة هو description القصير لكل مهارة فقط، ولا يُحمَّل المتن ولا المرفقات إلا حين يطابقها طلبك. ولذلك لن يمتلئ سياقك المعتاد تقريباً مهما أضفت منها العشرات ― وهذا هو الفارق الحاسم عن CLAUDE.md الذي يُحمَّل بتمامه دائماً. وبالمقابل ما لا يطابق لا يُفتَح أبداً. فإن كان description غامضاً، فالإجراءات التي كتبتها كأنها غير موجودة. وطريقة الكتابة في ما Claude Agent Skills.
وفي سطر واحد: CLAUDE.md مقدّمات تُقرأ دائماً، وSkills دليل إجراءات يفتحه Claude بحكمه، وhooks معالجة تجري حتماً.
MCP ― مدّ اليد إلى أنظمة خارجية
الثلاثة السابقة توسعات تغيّر طريقة العمل. أما MCP (Model Context Protocol) وحده فـيوسّع مدى ما يصل إليه ― وهو معيار يمدّ اليد إلى ما لا سبيل بنيوياً للذكاء الاصطناعي إلى معرفته، كالقيمة الحالية في قاعدة البيانات أو تذكرة في نظام المهامّ. وصورتا الاتصال اثنتان، وموضع التعثّر فيهما مختلف.
- محلي (stdio) ― يُشغَّل الخادم على حاسوبك كعملية فرعية. والتعثّر يقع في التشغيل نفسه (المسار، ومتغيّرات البيئة، وحلّ اسم الأمر)
- بعيد (HTTP) ― يُتّصل بخادم في السحابة عبر رابط. والتعثّر في المصادقة غالباً، أي أن الردّ 401 أو 403
فلا تجمع «لا يتّصل» في سلّة واحدة، وانظر أولاً في الحالة بـ/mcp. فإن كانت failed فهو التشغيل المحلي، وإن كانت needs authentication فهي مصادقة البعيد، وإن كانت pending approval فهو انتظار الإذن ― والحالة هي التي تحدّد خطوتك. والمعالجة مجموعة في كيف تُصلح خطأ اتصال خادم MCP.
وله مزالق خاصة أيضاً. فملف الإعداد المشترك .mcp.json يوضع في جذر المستودع (لا تحت .claude/ ولا داخل settings.json)، ومفاتيح API توضع في env الخاص بكل خادم. وعلى Windows، لأن npx في حقيقته ملف أوامر دفعي، يمرّ الأمر إن مرّرته عبر cmd بصيغة /c npx ....
والخوادم الموصولة تستهلك السياق. فمجرّد تراكم تعريفات الأدوات يضغط على السياق. والأسلم أن تعطّل الخوادم التي لا تستعملها.
plugins ― تحزيم المجموعة وتوزيعها
متى تناثرت عندك المهارات وتعريفات الوكلاء الفرعيين والخطّافات وإعدادات MCP، فـplugins هي التي تجعلها هيئة تُحزَم وتُوزَّع. وأكثر ما يُخطأ فيه قاعدة الأدلّة. فالبيان يوضع في .claude-plugin/plugin.json، وهو الشيء الوحيد الذي يوضع في .claude-plugin/. أما skills/ وagents/ وhooks/hooks.json و.mcp.json فـتوضع في الجذر.
/plugin marketplace add owner/repo ← تسجيل فهرس
/plugin install name@marketplace ← تثبيت واحدة منه على حدة
/plugin list ← التحقّق مما هو مثبَّت
والتثبيت على مرحلتين. سجّل الفهرس، ثم ثبّت منه واحدة واحدة ― فإضافة الفهرس وحدها لا تثبّت شيئاً. والنطاقات هي user (كل المشاريع) وproject (كل من يعمل عليه) وlocal (أنت وحدك) وmanaged (يوزّعه مسؤول ولا يُعدَّل)، وproject هو المناسب لتوحيد الفريق. وطريقة صنعها بنفسك في ما plugins وmarketplace.
والإضافة قد تنفّذ شيفرة عشوائية بصلاحياتك أنت ― هذا نصّ الوثائق الرسمية صراحةً. وAnthropic لا تفحص إضافات الغير ولا خوادم MCP المرفقة بها. فـلا تثبّت إلا ما جاء من ناشر تثق به. وتصميم الأذونات من الفصل الخامس يعود إليك هنا في هيئة شيفرة كتبها غيرك.
بأيّها تبدأ ― حديث الترتيب
عرضنا ستّاً، لكن لا يلزمك إدخالها كلها. فإدخالها قبل وجود مشكلة لا يزيدك إلا تعقيداً في الإعداد. والترتيب من العرَض.
- تشرح الشرح نفسه كل مرة ← CLAUDE.md. وإن كان لعمل بعينه فـSkills
- كتبتها ولا يُلتزَم بها ← احذف أولاً. ولا تنقل إلى hooks إلا ما يقع منه ضرر فعلي
- يمتلئ السياق سريعاً ← انقل الاستقصاءات الثقيلة إلى subagents، وعطّل ما لا يلزم من MCP
- لا يصل الذكاء الاصطناعي إلى المعلومة ← MCP. صِل واحداً واحداً، ولا تنتقل إلى التالي حتى ترى الأول يعمل
- تريد توزيع الإعداد نفسه ← plugins. وأحزم ما استقام لك استعماله وحده
- لا يضايقك شيء ← لا تُدخل شيئاً. وهذه خير حال
والسطر الأخير ليس مزاحاً. فـالتوسعات تزيد أسباب التعثّر أيضاً ― وكثيراً ما تكون حقيقة «Claude Code يتصرّف بغرابة» طبقةً أضفتها أنت. ولهذا يأتي تشخيص الفصل الرابع أولاً.
الخلاصة
- معيار الاختيار أربعة أسئلة: أيكفي الرجاء (CLAUDE.md وSkills) / أتريد أثراً مؤكّداً (hooks) / أتريد فصل السياق (subagents) / أتريد الوصل بالخارج (MCP). وللتوزيع plugins
- CLAUDE.md ذاكرة تعبر الجلسات. وإطالته تُغرق وسطه وتميّعه بالضغط وتجعله يخسر أمام التعليمة الأحدث. فـاحذف وصرّح بالأولوية
- hooks ينفّذها الحزام، فـلا يتوسّطها حكم. وتشدّ القيود ولا ترخيها
- subagents تعمل في سياق منفصل ولا تعيد إلا خلاصة. ولا تناسب المعالجة المتتابعة ولا كثرة الأخذ والردّ
- Skills لا تُفتَح إلا حين يطابق
description، وهذا كشف متدرّج. فتكثيرها خفيف، لكن غموض الوصف يمنع استدعاءها - MCP معيار يوسّع مدى ما يصل إليه. وحالة
/mcpهي التي تحدّد خطوتك - plugins صندوق التوزيع. وشيفرة غيرك تجري بصلاحياتك، فتحقّق من الناشر
- وترتيب الإدخال من العرَض. واحداً واحداً بعد أن تولد المشكلة
وكلما توسّعت زاد الاستهلاك. ونتناول أخيراً التشغيل الذي يمكّنك من الاستمرار طويلاً. انتقل إلى الفصل السابع «الكلفة والحدود».