Agent Skills: زوّد Claude بمهارات مخصصة تحت الطلب
📚 التنقل في السلسلة: في المقال السابق 25 نظام الذاكرة (memory) تحدثنا عن "التذكر السلبي للحقائق" - أي كتابة تفضيلات المشروع وقواعده في
CLAUDE.mdلتجنب أن يسألك Claude عنها في كل مرة. هذا المقال يغير الاتجاه ليتحدث عن "تغليف القدرات بشكل نشط": تجميع مجموعة كاملة من خطوات التشغيل في Agent Skills، ليقوم Claude باستدعاء المهارة المناسبة بنفسه عند الحاجة.
"أليس الـ Skill مجرد اسم آخر لـ slash command؟ عندما أكتب /deploy فإنه يقوم بالنشر، فما الفرق بينه وبين .claude/commands/deploy.md القديم؟"
"الفرق شاسع. أمر slash يعمل فقط عندما تطلبه أنت صراحة؛ أما الـ Skill فيمكنك ألا تطلبه - فبمجرد أن يرى Claude أن هذه المهمة تتطابق معه، سيقوم باستدعائه بنفسه. كما أنه في الأوقات العادية لا يشغل سوى سطر واحد من السياق، ولا يُفرد النص كاملاً إلا عند استخدامه."
"... يستدعيه بنفسه؟ ألن يسبب ذلك فوضى، كيف سأعرف متى سيتحرك؟"
هذا سوء فهم شائع جدًا، وأنا شخصيًا كنت أفكر هكذا عندما بدأت استخدامه - كنت أضع أوامر commit.md الموجودة مسبقًا في .claude/skills/، وتعمل تمامًا كما في السابق، وكنت أتساءل "أليس هذا مجرد تغيير للمجلد؟". لاحقًا أدركت أن المشكلة تكمن في: التعامل مع الـ Skill على أنه مجرد غطاء لأمر slash. في الواقع، قامت الجهات الرسمية بدمج الأوامر المخصصة ضمن نظام Skills - فلا تزال ملفاتك في .claude/commands/ تعمل، لكن الـ Skill أضاف ثلاثة أشياء: إمكانية إرفاق ملفات مساعدة، إمكانية التشغيل التلقائي بواسطة Claude عند الحاجة، واستهلاك شبه معدوم للسياق في الأوقات العادية.
النص الرسمي: "تم دمج الأوامر المخصصة (Custom commands) في الـ skills. الملفات الموجودة في
.claude/commands/deploy.mdوالـ skill الموجود في.claude/skills/deploy/SKILL.mdكلاهما سينشئ/deployوسيعملان بنفس الطريقة."
في هذا المقال، سأشرح لك بالتفصيل ما هو الـ Skill، وكيف يمكنه "استدعاء نفسه" دون تضخيم السياق، ومن أين يأتي، وكيف يتم تشغيله.
بعد قراءة هذا المقال، ستحصل على:
- ما هو الـ Skill بالضبط - كيف يتحول ملف
SKILL.mdوالموارد المرفقة إلى "مهارة متخصصة" لـ Claude. - كيف "يُحمَّل عند الطلب" (الإفصاح التدريجي): أسرار توفير السياق واحتلاله لسطر واحد فقط في الأوقات العادية وتوسعه عند الاستخدام.
- الفرق بين الـ Skill وأوامر slash والـ Subagent في جدول واحد (مع ترك قرار الاختيار الكامل للمقال 30).
- من أين تأتي الـ Skills (المدمجة، المرفقة مع الإضافات، المكتوبة بنفسك)، وكيف يحدد المجلد من يمكنه استخدامها.
- كيفية تشغيله (عن طريق المطابقة التلقائية لـ description، دون الحاجة لحفظ الأوامر)، وكيفية التحقق من المتاح حاليًا.
01 افهم أولاً: ما هو الـ Skill بالضبط
الخلاصة أولاً: الـ Skill في جوهره هو مجرد ملف توضيحي يسمى SKILL.md، بالإضافة إلى بعض الملفات المرفقة الاختيارية، يتم تجميعها لتشكيل "مهارة متخصصة" تُسلم لـ Claude.
توضيح: الاختصارات (Shortcuts) في الهاتف. عندما تبرمج في "الاختصارات" على هاتف iPhone "وضع العودة للمنزل" - تشغيل الأضواء، وضبط المكيف، وتشغيل الموسيقى - لن تحتاج بعد برمجته لتشغيلها خطوة بخطوة، بل يكفي أن تنطق "وضع العودة للمنزل" لينفذها بالترتيب التلقائي. الـ Skill يؤدي نفس المهمة: تضع سلسلة ثابتة من الخطوات (مثل "لخّص التعديلات غير الملتزم بها وأبرز المخاطر") في SKILL.md، لتصبح هذه السلسلة إجراءً يمكن لـ Claude استدعاؤه بسهولة، دون الحاجة لطباعة الخطوات في كل مرة.
كيف يبدو SKILL.md؟ يتكون من جزأين فقط، كما توضح الوثائق الرسمية (هذا المثال محفوظ في ~/.claude/skills/summarize-changes/SKILL.md، واسم المجلد summarize-changes هو اسم الأمر الذي ستدخله لاحقًا):
---
description: تلخيص التعديلات غير الملتزم بها وتحديد المخاطر. يُستخدم عندما يسأل المستخدم عما تم تعديله، أو يطلب رسالة التزام (commit)، أو يطلب مني مراجعة الـ diff.
---
## التعديلات الحالية
!`git diff HEAD`
## التعليمات
قم بتلخيص التعديلات أعلاه في نقطتين أو ثلاث نقاط رئيسية، ثم اذكر المخاطر التي تلاحظها، مثل معالجة الأخطاء المفقودة، أو القيم الثابتة (hardcoded)، أو الاختبارات التي تحتاج إلى تحديث. إذا كان الـ diff فارغًا، فقل لا توجد تعديلات غير ملتزم بها.الجزء المحاط بـ --- في الأعلى يُسمى YAML frontmatter (منطقة البيانات الوصفية، تُكتب في بداية الملف بين خطي ---)، وهو يخبر Claude بماهية هذا الـ Skill ومتى يجب استخدامه؛ أما النص الأساسي بصيغة markdown في الأسفل، فهو التعليمات التي يجب على Claude اتباعها عند استدعاء المهارة فعليًا.
لاحظ السطر في المنتصف !`git diff HEAD` - هذا تصميم عبقري يُسمى حقن السياق الديناميكي (dynamic context injection): سيقوم Claude Code بتشغيل هذا الأمر أولاً، ويقوم بـاستبدال هذا السطر بمخرجاته، وبعد ذلك فقط يرى Claude محتوى الـ Skill. بالتالي لا يحصل Claude على "أمر بتشغيل diff"، بل يتلقى تعديلاتك الحقيقية والحالية جاهزة ومكتملة. هذه عملية معالجة مسبقة وليست من تنفيذ Claude نفسه.
الـ Skill ليس مجرد ملف SKILL.md وحسب، بل هو مجلد. الهيكل القياسي الرسمي يبدو هكذا:
my-skill/
├── SKILL.md # التعليمات الرئيسية (إلزامي)
├── template.md # قالب ليقوم Claude بتعبئته
├── examples/
│ └── sample.md # أمثلة مخرجات ليراها
└── scripts/
└── validate.sh # سكربت يمكنه تنفيذهوحده SKILL.md هو الإلزامي، والبقية اختيارية. وهنا يتفوق الـ Skill على أوامر slash القديمة: يمكنه إرفاق قوالب، وأمثلة، وسكربتات - السكربتات يمكن أن تكون بأي لغة، بينما يقوم Claude بالتنسيق، والسكربت يقوم بالعمل الشاق.
ثلاثة سيناريوهات حقيقية ستجعلك تدرك فورًا ما يمكن للـ Skill فعله:
- في كل مرة تطلب فيها من Claude إجراء commit، يجب عليك تذكيره "شغل الاختبارات أولاً، واكتب الـ commit باللغة الصينية، واستخدم بادئة feat" - اكتب هذا في Skill باسم
commit، ونفذه بجملة واحدة مستقبلاً. - اتفق الفريق على طريقة كتابة API محددة (تسمية RESTful، تنسيق خطأ موحد، فحص إلزامي) - اكتبها في Skill باسم
api-conventions، وسيطبقها تلقائيًا أي شخص يكتب الواجهات. - تريد إنشاء رسم بياني لهيكل الكود - الـ Skill الرسمي
codebase-visualizerيربط سكربت Python، وبعد تنفيذه سيفتح مخططًا شجريًا تفاعليًا في المتصفح مباشرةً.
💡 ملخص في جملة: الـ Skill هو حزمة مكونة من
SKILL.md(يحدد متى وكيف يُستخدم) بالإضافة لملفات مساعدة اختيارية تمثل مهارة متخصصة - تكتبها مرة واحدة، ويمكن لـ Claude استدعاؤها متى شاء، ويمكن ربطها بقوالب وسكربتات.
02 النقطة المحورية: الإفصاح التدريجي، وسر توفير السياق
هذا هو القسم الذي يجب استيعابه أكثر من غيره. كيف يمكن للـ Skill أن يحتوي على الكثير من المعلومات، ومع ذلك لا يكاد يستهلك سياقك؟ الإجابة في مصطلح واحد: الإفصاح التدريجي (progressive disclosure، ومعناه "التوسع التدريجي عند الحاجة"، حيث لا يتم تحميل النص الكامل إن لم يكن ذا صلة).
لنوضح أولاً لماذا هذا الأمر مهم. كما ذكرنا في 19 إدارة السياق، فإن "مساحة العمل" لدى Claude محدودة، وكل كلمة تدخلها تستهلك من هذه الميزانية وتضغط على مساحة تفكيره. إذا تم تحميل النصوص الكاملة لكل Skill بمجرد بدء الجلسة، فإن وجود عشرة Skills سيستهلك نصف مساحة عملك.
توضيح: قائمة الطعام والمطبخ في المطعم. عندما تجلس، يعطيك النادل قائمة طعام - كل طبق فيه سطر يضم اسمه ووصفًا بسيطًا لتأخذ فكرة سريعة. إذا طلبت "دجاج كونغ باو"، عندئذٍ فقط تُستخرج وصفة الطهي المفصلة في المطبخ ليتم الطهي بناءً عليها. الأطباق التي لم تطلبها، تظل وصفاتها في الدرج دون أن تأخذ مساحة على طاولتك. يعمل الـ Skill بنفس الطريقة:
- في الأوقات العادية: لا يرى Claude سوى جملة
descriptionلكل Skill (أسماء الأطباق في القائمة). - عند الصلة بالموضوع: عندما يتطابق سؤالك مع description معين، عندها فقط يتم تحميل النص الكامل لذلك الـ Skill (استخراج الوصفة المطابقة).
تشرح الوثائق الرسمية هذه القاعدة بوضوح تام:
في المحادثات العادية، يتم تحميل أوصاف الـ skill في السياق ليعرف Claude ما هو متاح، ولكن يتم تحميل محتوى الـ skill بالكامل فقط عند استدعائه.
لذلك يمكنك بثقة أن تملأ الـ Skill بالمراجع الطويلة وقوائم التحقق المفصلة - فقبل استخدامه، لا يكلفك شيئًا تقريبًا. وهذا هو السبب وراء النصيحة الرسمية بـ "تحويل المحتوى إلى Skill بدلاً من تكديسه في CLAUDE.md": فملف CLAUDE.md يظل متواجدًا بالكامل طوال الجلسة، بينما نصوص الـ Skill تأتي عند الحاجة فقط.

توضح هذه الصورة مرحلتي "الإفصاح التدريجي" بوضوح: على اليسار، الحالة الطبيعية للجلسة - تشغل ثلاثة Skills في السياق جملة description واحدة فقط لكل منها، وتبقى مساحة العمل فارغة؛ وعلى اليمين، بعد أن طابق سؤالك أحد الأوصاف، يتم تحميل النص الكامل لذلك الـ Skill فقط، بينما يظل الآخرون مجرد أسطر قصيرة. يُظهر هذا فورًا أين يكمن التوفير.
ولكن هناك ثمن مصاحب يجب أن تعرفه وإلا ستقع في مطب: بمجرد تحميل الـ Skill، سيظل نصه مقيمًا طوال الجلسة المتبقية - لن يعيد Claude قراءته في كل جولة لاحقة. بناءً على النص الرسمي:
عندما تقوم أنت أو Claude باستدعاء skill، يدخل محتوى
SKILL.mdالمعروض كرسالة فردية في المحادثة، ويظل هناك لبقية الجلسة.
هذا يعني أمرين: أولاً، كل سطر في نص الـ Skill هو تكلفة token متكررة، فلا تضف حشواً، وتقترح الوثائق الرسمية إبقاء SKILL.md ضمن حدود 500 سطر، ونقل المراجع الطويلة إلى ملفات منفصلة تُحمل عند الحاجة؛ ثانيًا، اكتب "إرشادات دائمة" بدلاً من "خطوات لمرة واحدة" - لأنها ستبقى متواجدة طوال الوقت، يجب كتابتها كـ "توجيهات تطبق على كامل المهمة"، وليس كـ "في الخطوة الأولى افعل كذا" التي تنتهي صلاحيتها بعد الاستخدام.
وقد وقعت شخصيًا في هذا المطب: كتبت Skill، وفي الجولات الأولى كان يتبعه تمامًا، ولكن لاحقًا شعرت "وكأنه نسي هذه التعليمات"، وكان رد فعلي الأول هو الاعتقاد بوجود مشكلة في التحميل وإعادة تشغيل Claude ليقرأه من جديد. بعد البحث في الوثائق أدركت - المحتوى لا يزال موجودًا في الغالب، لكن النموذج انتقل لاختيار أداة أخرى. الحل يكمن في توضيح الـ description والتعليمات بشكل أفضل لجعله يفضل هذا الـ Skill، بدلاً من التشكيك في آلية التحميل.
💡 ملخص في جملة: الإفصاح التدريجي = يعرض فقط description في الأوقات العادية، ولا يفرد النص إلا عند استدعائه، مما يعني أنه لا يضخم السياق مهما كثرت الـ Skills؛ ولكن بعد الإفصاح، سيبقى المحتوى متواجدًا، لذا يجب أن يكون النص موجزًا ومكتوبًا كإرشادات دائمة.
03 الـ Skill، أوامر slash، والـ Subagent: ما الفرق بينهم؟
جوهر الجدل في بداية المقال يكمن في هذا القسم. يخلط الكثيرون بين هذه الثلاثة، في حين أن أدوارهم مختلفة تمامًا. سأوضح هنا أكثر النقاط إرباكًا، وسأترك جدول اتخاذ القرار الكامل لـ "متى تختار أيهم" للمقال 30، لنركز هنا على "التفريق بينهم".
دعونا نوحد المصطلحات أولاً:
- أمر slash: إجراء تطلبه أنت يدويًا بكتابة
/xxx. - الـ Skill: مهارة مجمعة، يمكنك استدعاؤها يدويًا، ويمكن لـ Claude استدعاؤها تلقائيًا عند الحاجة.
- الـ Subagent (الوكيل الفرعي): مساعد فرعي يعمل بـ سياق مستقل، تفوض له المحادثة الرئيسية مهمة لينفذها في عالمه الخاص ثم يعود بالنتائج (وقد ناقشناه بالتفصيل في 23 الوكلاء الفرعيون).
إليك المفهوم الأساسي لكسر سوء الفهم الأولي: أوامر slash والـ Skill ليسا متعارضين، بل إن أمر slash هو أحد طرق استدعاء الـ Skill. قامت الجهات الرسمية بدمج الأوامر المخصصة في الـ Skills - عندما تُنشئ Skill باسم commit، يمكنك بشكل طبيعي استدعاؤه عبر /commit. الفرق الحقيقي لا يكمن في "الاسم"، بل في مَن يمكنه البدء به، وهل يستهلك السياق أم لا:
| البعد | أمر slash (النمط القديم .claude/commands/) | الـ Skill | الـ Subagent |
|---|---|---|---|
| مَن يمكنه البدء به | أنت فقط (بكتابة /) | أنت + Claude كلاهما يستطيع (تلقائي) | تفويض من المحادثة الرئيسية |
| في أي سياق يعمل | في المحادثة الحالية | في المحادثة الحالية (افتراضيًا) | في سياق فرعي مستقل |
| هل يستهلك السياق دائمًا | —— | لا يستهلك سوى جملة description | لا يستهلك (يُشغل عند الطلب) |
| هل يمكنه إرفاق ملفات | لا يمكن | نعم (قوالب / سكربتات / أمثلة) | يعتمد على تعريفه الخاص |
| الأنسب لـ | الإجراءات الثابتة التي تريد التحكم في وقتها يدويًا | المهارات المتخصصة التي تترك لـ Claude استخدامها عند الحاجة | المهام الفرعية الثقيلة والمستقلة التي تعمل بمعزل |
بعد فهم هذا الجدول، يتبدد الجدل الافتتاحي: مفهوم "أمر slash" هو مجرد آلية التشغيل اليدوية للـ Skill؛ وهو يتجاهل أن نفس الـ Skill يمكن أن يتم تشغيله تلقائياً بواسطة Claude.
هل سيسبب "التشغيل التلقائي" فوضى؟ لا، لأنك تستطيع التحكم بدقة في من يملك صلاحية استدعائه. تتيح الوثائق الرسمية مفتاحي تحكم في الـ frontmatter:
disable-model-invocation: true: وحدك من يستطيع استدعاؤه. يُستخدم للمهام التي لها آثار جانبية وتريد التحكم بوقتها بنفسك - مثل/deploy،/commit، أو إرسال رسالة Slack. بالتأكيد لا تريد أن يقوم Claude بـ "النشر" بمفرده لمجرد أنه "رأى الكود وكأنه مكتمل".user-invocable: false: Claude وحده من يستطيع استدعاؤه. يُستخدم للـ Skills من نوع "المعلومات الخلفية" - مثلlegacy-system-contextالذي يشرح كيفية عمل النظام القديم، يكفي أن يعرفه Claude عند الحاجة، بينما لن يشكل أمر/legacy-system-contextأمرًا مفيدًا لك لطباعته.
لذا، فـ "الفوضى" قابلة للسيطرة: إذا كنت تخشى من قيامه بإجراءات عشوائية، استخدم disable-model-invocation: true لقفله على الوضع اليدوي فقط؛ وهذا بالضبط الحل السليم للمشكلة المذكورة في البداية.
💡 ملخص في جملة: أوامر slash هي آلية التشغيل اليدوي للـ Skill، والـ Subagent هو مساعد فرعي يعمل بسياق مستقل - ولكل منها دور مختلف؛ إذا خفت من تصرفات الـ Skill التلقائية، فاستخدم
disable-model-invocation: trueلحصره بندائك أنت فقط.
04 من أين تأتي الـ Skills: المدمجة، المرفقة مع الإضافات، المكتوبة بنفسك
عرفنا ماهيتها، ولكن من أين تأتي الـ Skills؟ لها ثلاثة مصادر، من الأقرب إلى الأبعد.
المصدر الأول: الـ Skills المدمجة (المرفقة) - جاهزة للاستخدام، وموجودة في كل جلسة. يأتي Claude Code مزودًا بمجموعة من الـ Skills المرفقة، ولا تحتاج لتثبيتها. من ضمنها /code-review (مراجعة الكود)، /debug (تصحيح الأخطاء)، /batch (التشغيل الدفعي)، /loop (التشغيل المتكرر)، /claude-api (مرجع واجهة برمجة تطبيقات Claude) وغيرها. وهناك ثلاثة مهام مصممة لـ "التشغيل والتحقق": /run (تشغيل التطبيق لرؤية أثر التغيير)، /verify (البناء والتشغيل للتأكد من عمل التعديلات كما هو متوقع)، /run-skill-generator (تعليم الأمرين السابقين كيفية بناء وتشغيل مشروعك). يمكنك رؤيتها في القائمة بمجرد كتابة /.
ملاحظة: الـ Skills المرفقة تختلف عن الأوامر المدمجة مثل
/helpو/compact. الأوامر المدمجة تنفذ منطقًا ثابتًا مباشرة؛ بينما الـ Skills المرفقة مبنية على التلقين (prompt-based) - يتم إعطاء Claude توجيهات مفصلة ليقوم بتنفيذها باستخدام أدواته الخاصة. وطريقة استدعائهما واحدة بكتابة/متبوعة بالاسم.
المصدر الثاني: المرفقة مع الإضافات (Plugins) - تُثبَّت الإضافة وتأتي معها الـ Skills الخاصة بها. كما رأينا في 24 الإضافات، يمكن للإضافات تضمين حزمة من الامتدادات. والـ Skills هي إحدى هذه الأشياء: عبر إنشاء مجلد skills/ داخل الإضافة، ستصبح هذه الـ Skills متاحة بمجرد تفعيل الإضافة. وتستخدم إضافات الـ Skill تسمية من نوع اسم-الإضافة:اسم-المهارة (مثل /my-plugin:review)، ولذلك فهي لن تتعارض أبدًا مع أسماء الـ Skills الخاصة بك.
المصدر الثالث: المكتوبة بنفسك - وهذا هو الاستخدام الرئيسي للـ Skills. يمكنك تحويل التعليمات، وقوائم التحقق، والإجراءات متعددة الخطوات التي تقوم بلصقها بشكل متكرر إلى ملف SKILL.md، لتصبح مهارة خاصة بك. يوفر المستند الرسمي معيارًا عمليًا جدًا لتمييز ذلك:
عندما تستمر في لصق نفس التعليمات أو قوائم التحقق أو الإجراءات متعددة الخطوات في المحادثة، أو عندما يتطور جزء من CLAUDE.md إلى إجراء بدلاً من حقيقة، قم بإنشاء skill.
هذه العبارة توضح الفصل بين الـ Skill و CLAUDE.md، وهو ما يربط مباشرة مع المقال السابق: يحتوي CLAUDE.md على "الحقائق" (مثل نوع حزمة التكنولوجيا المستخدمة أو الاتفاقيات)، بينما يضم الـ Skill "الإجراءات" (مثل كيفية تقسيم المهمة وإنجازها خطوة بخطوة). فإذا وجدت نفسك تكتب في CLAUDE.md "الخطوة الأولى... الخطوة الثانية..."، فيجب نقل هذا الجزء ليكون داخل Skill.
الجدول التالي يساعدك في تحديد متى تستخدم الـ Skill:
| السيناريو الخاص بك | ❌ توقف عن فعل هذا | ✅ استخدم الـ Skill |
|---|---|---|
| تكرر نفس خطوات الـ commit في كل مرة | كتابة الخطوات يدويًا في كل مرة | اكتب Skill باسم commit واستدعه بكلمة واحدة |
| للفريق طريقة ثابتة لكتابة واجهات API | تكديسها في CLAUDE.md لتشغل السياق كاملاً | اكتبها في Skill ولا تُحمَّل إلا عند الحاجة |
| تود الحصول على تقرير مرئي معين | تشرح متطلباتك بالتفصيل في كل مرة | اربطها بـ Skill يحتوي على سكربت التوليد |
💡 ملخص في جملة: مصادر الـ Skill ثلاثة - المدمجة (جاهزة للاستخدام)، والمرفقة مع الإضافات (تأتي مع ما تثبته)، والمكتوبة بنفسك (وهي الأساس)؛ ومعيار كتابتك لـ Skill هو: هل تقوم بلصق نفس سلسلة الخطوات بشكل متكرر؟
05 الموقع يحدد من يمكنه الاستخدام + كيف يتم التشغيل، وكيف تتحقق
نصل في هذا الجزء الأخير إلى ثلاث أمور عملية بحتة: أين تضع الـ Skill الذي كتبته، كيف يتم تشغيله، وكيف تتحقق مما لديك حاليًا.
موقع التخزين يحدد من يمكنه استخدامه
يوضح الجدول التالي المواقع الرسمية، ووضع الـ Skill في مكان خاطئ = لن يتمكن الشخص المعني من استخدامه، ما عليك سوى اتباع الجدول:
| النطاق | أين يوضع | من يمكنه استخدامه |
|---|---|---|
| الشخصي | ~/.claude/skills/<skill-name>/SKILL.md | جميع مشاريعك |
| المشروع | .claude/skills/<skill-name>/SKILL.md | هذا المشروع فقط |
| الإضافة | <plugin>/skills/<skill-name>/SKILL.md | كل مكان يُفعّل فيه هذا الـ plugin |
| الشركة | راجع إعدادات الاستضافة | جميع من في المؤسسة |
المنطق واضح: إذا كنت ستستخدمه لوحدك ومتاح لجميع مشاريعك (كعادات الـ commit الخاصة بك مثلاً)، ضعه في المستوى الشخصي ~/.claude/skills/؛ أما إذا كان مخصصًا لهذا المشروع فقط وتريد أن يستخدمه الفريق (كطريقة نشر المشروع)، فضعه في مستوى المشروع .claude/skills/ وأرسله إلى مستودع الإصدارات (repository).
ماذا لو تطابقت الأسماء؟ حددت الجهات الرسمية الأولوية كالتالي: الشركة > الشخصي > المشروع (الـ Skills التابعة للإضافات لا تنافس على الاسم لأنها تستخدم مساحة أسماء مستقلة (namespace)). وهناك تحذير أمني هام جدًا يجب الانتباه إليه: عندما يتم حفظ الـ Skill الخاص بالمشروع في المستودع ويسحبه آخرون، يجب أن يجتاز أولاً حوار "الثقة بمساحة العمل (Workspace Trust)" - وذلك لأن allowed-tools الموجود في الـ Skill يمكن أن يمنح نفسه صلاحيات لأدوات متعددة، فـقبل الوثوق بالمستودع، تأكد من مراجعة ما كُتب في الـ Skill الخاص بالمشروع، لئلا يتم منح صلاحيات خفية لـ Skill مجهول المصدر.
كيفية التشغيل: عبر المطابقة التلقائية لـ description، دون الحاجة لحفظ الأوامر
هذا هو الجانب الأكثر راحة في الـ Skills: لا حاجة لتذكر أمر يبدأ بـ /، تحدث بشكل طبيعي فحسب. سيأخذ Claude كلماتك ويطابقها مع description كل Skill، وإذا وجد تطابقاً، فسيقوم باستدعاء الـ Skill المقابل تلقائيًا.
لنأخذ الـ Skill المسمى summarize-changes من القسم 01 كمثال، فقد كُتب في الـ description "يُستخدم عندما يسأل المستخدم عما تم تعديله..."، لذا يمكنك تشغيله بطريقتين:
ما الذي قمت بتعديله؟/summarize-changesالأولى هي تشغيله تلقائياً بواسطة Claude (حيث لم تذكر اسم الـ Skill بل طابقه هو)؛ والثانية هي استدعاؤه بالاسم مباشرةً. في الاستخدام اليومي يُنصح بالطريقة الأولى - اكتفِ بذكر احتياجك ودعه يتولى التشغيل. وهذا يوضح لك أهمية كتابة الـ description بشكل دقيق عند إنشاء الـ Skill: يجب أن يحتوي الـ description على "الكلمات المفتاحية التي سيقولها المستخدم طبيعيًا"، لكي يتم التطابق بدقة. القاعدة الأولى في مستند استكشاف الأخطاء لحل "عدم تشغيل الـ Skill" هي فحص ذلك:
تحقق مما إذا كان الوصف يتضمن كلمات رئيسية من الطبيعي أن يقولها المستخدم.
كيفية التحقق: ما هي الـ Skills المتاحة حاليًا
بعد تثبيت الكثير وتواجد مجموعة مدمجة، كيف تعرف ما تملكه الآن؟ أسهل طريقة هي سؤاله بعبارة واحدة:
ما هي الـ Skills المتاحة حالياً؟سيقوم بسرد جميع الـ Skills المتاحة لك في الوقت الحالي. وهذا الإجراء يُعد من الخطوات الأساسية في الفحص الرسمي لمشاكل الـ Skill - التأكد أولاً من وجوده ضمن القائمة قبل الحديث عن عدم عمله. يمكنك أيضًا رؤية الأوامر المتاحة يدويًا بطلب القائمة عبر كتابة /، ويساعدك أمر /doctor في فحص ما إذا كان "وصف الـ Skill قد تم قصه بسبب كثرة الإضافات" (إذا زاد عدد الـ Skills لدرجة معينة، تُضغط الأوصاف لتوفير مساحة الرموز، مما قد يؤدي لإزالة الكلمات المفتاحية المستخدمة في المطابقة).
💡 ملخص في جملة: المستوى الشخصي يُوضع في
~/.claude/skills/، ومستوى المشروع في.claude/skills/، وعند تعارض الأسماء تكون الأولوية: الشركة > الشخصي > المشروع؛ التشغيل يعتمد على المطابقة التلقائية لـ description، ولا يلزم تذكر الأوامر؛ وجملةWhat skills are available?تتيح لك التحقق من المتاح حاليًا.
06 تدريب عملي: شاهد "التشغيل التلقائي" و"الإفصاح التدريجي" في 5 دقائق
القراءة وحدها لا تكفي لتثبيت المعلومة. الخطوات المبسطة أدناه لن تتطلب كتابة سكربتات معقدة، بل ستمكنك من مشاهدة شيئين بأم عينيك: كيف يتم تشغيل الـ Skill تلقائياً من خلال جملة واحدة، وكيف يقتصر وجوده في الأوقات العادية على سطر واحد فقط. يمكنك تطبيقها بالكامل داخل مجلد فارغ.
الخطوة الأولى: أنشئ مجلد Skill شخصي (أنظمة Mac / Linux)
mkdir -p ~/.claude/skills/explain-selfلمستخدمي Windows: ما عليك سوى إنشاء مجلد explain-self داخل المسار C:\Users\اسم_المستخدم_الخاص_بك\.claude\skills\.
النتيجة المتوقعة: ستلاحظ وجود مجلد explain-self فارغ جديد داخل ~/.claude/skills/.
الخطوة الثانية: اكتب أبسط نموذج لـ SKILL.md
استخدم محرر النصوص المفضل لديك، واحفظ المحتوى التالي داخل ~/.claude/skills/explain-self/SKILL.md:
---
description: اشرح فقرة من الكود أو رسالة خطأ بلغة بسيطة ومبسطة. يُستخدم عندما يقول المستخدم "ما معنى هذا الكود"، "ما سبب هذا الخطأ"، أو "اقرأ لي هذا".
---
## التعليمات
قم بشرح الكود أو رسالة الخطأ المقدمة من المستخدم بلغة مبسطة وسهلة الفهم للمبتدئين:
1. اشرح الفكرة العامة في جملة واحدة.
2. قم بتحليلها سطراً بسطر أو فقرة بفقرة.
3. إذا كانت رسالة خطأ، أوضح السبب الأكثر احتمالاً وكيفية إصلاحه.
لا تكدس المصطلحات التقنية، واستخدم التشبيهات الحياتية كلما أمكن.لاحظ أن قسم description تم كتابته بعناية متضمنًا عبارات مثل "ما معنى هذا الكود" أو "ما سبب هذا الخطأ"، وهي عبارات ستستخدمها بشكل طبيعي - وهذه هي الخطافات (hooks) التي ستقوم بتفعيل التشغيل التلقائي.
النتيجة المتوقعة: سيحتوي مجلد explain-self على ملف SKILL.md.
الخطوة الثالثة: شغل Claude وتأكد من تعرفه على هذا الـ Skill
claudeبعد الدخول اكتب:
ما هي الـ Skills المتاحة حالياً؟النتيجة المتوقعة: في القائمة المرتجعة للـ Skills المتاحة، ستجد explain-self بجانبه جملة description التي كتبتها. رؤيتك له في القائمة تعني أن الـ Skill قد تم تحميله بنجاح. (وهذه الخطوة تثبت أيضًا ميزة الإفصاح التدريجي: في هذه اللحظة، لا يوجد في السياق سوى جملة description واحدة، ولم تُحمَّل سطور التعليمات الفعلية بعد).
الخطوة الرابعة: استخدم لغة عادية لتشغيله، دون كتابة اسمه
تعمد عدم كتابة /explain-self، بل قل جملة تتطابق مع description:
ما معنى هذا الكود: print(sum([1,2,3]) / len([1,2,3]))النتيجة المتوقعة: سيقوم Claude تلقائيًا باستدعاء الـ Skill المسمى explain-self (ستلاحظ في رده إشعارًا يفيد بأن الـ Skill تم تشغيله)، ثم سيقوم بالشرح باتباع خطواتك الثلاث - سيوضح الفكرة العامة أولاً (حساب المتوسط لهذه الأرقام الثلاثة)، ثم سيقوم بالتحليل تدريجياً، مع تقليل المصطلحات. لقد أخرج الأداة المناسبة دون انتظار أمر صريح منك، وهذا هو التشغيل التلقائي.
الخطوة الخامسة: قارن ذلك بالنداء اليدوي بالاسم
جرب الوضع اليدوي بكتابة:
/explain-self ما سبب هذا الخطأ: ZeroDivisionError: division by zeroالنتيجة المتوقعة: سيتم تشغيل نفس الـ Skill وبنفس التأثير كما في الخطوة الرابعة - والفرق الوحيد أن هذه المرة كان استدعاؤه بـ طلب مباشر منك. وهذا يؤكد ما ورد في الجدول في القسم 03: كلاهما "أنت + Claude" يمكنه بدء التشغيل للوصول إلى المهارة نفسها.
باتمام هذه الخطوات الخمس، ستكون قد تأكدت عملياً من الميزتين الجوهريتين للـ Skill: "التشغيل التلقائي عبر مطابقة الوصف" و "اقتصار التواجد العادي على جملة وصفية واحدة".
💡 ملخص في جملة: قم بإنشاء
~/.claude/skills/explain-self/SKILL.md، استخدمWhat skills are available?للتحقق من تحميله، ثم جرب تشغيله باستخدام "لغة عادية" وأيضًا عبر/الاسم- مشاهدتك التشغيلين التلقائي واليدوي وهما يقودان لنفس النتيجة هي أفضل من قراءة عشرة ملفات توثيق.
07 الخلاصة
في هذا المقال قمنا بمراجعة Agent Skills من مفهوم "ما هي" إلى تفاصيل "كيفية استخدامها" - حيث تمكن Claude من أن لا يكون مجرد لوح فارغ، بل يأتي وهو مزود بمهارات متخصصة يمكن استدعاؤها عند الطلب.
لنلخص النقاط الأساسية معاً:
| ما تود معرفته | الجواب | النقاط الجوهرية |
|---|---|---|
| ما هو الـ Skill؟ | حزمة تتألف من SKILL.md + ملفات مساعدة اختيارية | يوضح frontmatter متى يُستخدم، ويوضح النص الأساسي كيفية عمله |
| لماذا لا يستهلك السياق؟ | الإفصاح التدريجي (Progressive disclosure) | يعرض جملة description واحدة فقط في الوضع العادي، ولا يُفرد النص كاملاً إلا عند استخدامه |
| ما الفرق بينه وبين slash و Subagent؟ | الاختلاف في الأدوار | slash هو أمر يدوي، و Subagent يعمل في سياق مستقل (انظر جدول المقارنة في المقال 30) |
| من أين يأتي الـ Skill؟ | مدمج / مع إضافة / مكتوب يدويًا | لصق نفس الخطوات مراراً = حان الوقت لتكتبه بنفسك |
| أين يوضع، كيف يُشغَّل، كيف أتحقق منه؟ | المجلد يحدد من يستخدمه | يعتمد التشغيل على مطابقة description تلقائيًا؛ يمكن التحقق بالسؤال ما هي الـ Skills المتاحة حالياً؟ |
يفترض بك الآن أن تتمكن من: شرح مكونات الـ Skill، مبدأ "الإفصاح التدريجي" في توفير السياق؛ التمييز بين أدوار الـ Skill، أوامر slash، و Subagent؛ معرفة مصادر الـ Skill الثلاثة، وأن موقع حفظه يحدد من يمكنه استخدامه؛ وفهم أن التشغيل يعتمد على التطابق التلقائي للوصف دون الحاجة لحفظ الأوامر. إن مجموعة أدوات "استدعاء القدرات المتخصصة عند الطلب" هي الخطوة الأهم في تحويل Claude من "مساعد عام" إلى "خبير يتقن طريقة عملك الخاصة".
المقال التالي 27 "أمثلة على استخدام Skills" - كان المقال الحالي يعج بالمفاهيم والآليات، أما المقال القادم فسيكون تطبيقياً تماماً: سيرشدك لتثبيت Skill فعّال من الصفر، تشغيله بيدك، ومراقبته وهو ينهي المهمة. فكر قليلاً، ما هي المهام اليومية التي تطلب فيها من Claude تكرار نفس سلسلة الخطوات مراراً؟ سنأخذ إحدى هذه المهام في المقال القادم، ونحولها إلى أداة يمكنك تشغيلها بعبارة واحدة فقط.