الـ skills هي قدرات قابلة لإعادة الاستخدام، Claude بيكتشفها ويستعملها تلقائيًا بناءً على السياق. مش مجرد أوامر بسيطة — الـ skills بتدعم progressive loading عشان تفضل خفيفة، وحقن dynamic context من الـ shell، وعزل التنفيذ عبر subagents، والتحكم في طريقة الاستدعاء. في الموديول ده، هنتعلم إزاي تصمّم وتبني skills فعّالة.
إزاي الـ Skills بتتحمّل
Claude بيحمّل الـ skills بطريقة خفيفة. الـ descriptions بتتحمّل عشان Claude يبقى عارف إيه الإمكانيات المتاحة. محتوى SKILL.md الكامل مبيتحمّلش غير لما الـ skill تتفعّل فعلًا، والملفات المساعدة مبتتقراش غير لما يحتاجها.
يعني تقدر تثبّت skills كتير من غير ما تزحم الـ context window. Claude بيعرف إنها موجودة من الـ descriptions، وبعدين يحمّل التعليمات الفعلية بس للـ skills اللي قرر يستعملها.
الـ skills بتتخزن في .claude/skills/<name>/SKILL.md لنطاق المشروع (بتتعمل لها commit في git) أو ~/.claude/skills/<name>/SKILL.md للنطاق الشخصي. الـ plugin skills بتستخدم namespace بالشكل plugin-name:skill-name عشان ما تتعارضش مع الـ skills التانية. لو فيه skills بنفس الاسم مش plugins، ترتيب الأولوية بيكون: enterprise > personal > project.
كمان، Claude بيكتشف الـ skills تلقائيًا من مجلدات .claude/skills/ المتداخلة في subdirectories جوة الـ project root. مثلًا، لو بتشتغل جوه packages/frontend/، Claude هيلاقي كمان الـ skills اللي موجودة في packages/frontend/.claude/skills/. ده بيخلّي الـ skills تتوزّع جنب الـ packages أو الـ services في الـ monorepo setups.
.claude/skills/code-review/
├── SKILL.md # Instructions (required)
├── templates/
│ └── review-checklist.md
└── scripts/
└── analyze-metrics.py
كتابة Descriptions فعّالة
الـ description هو أهم جزء في الـ skill. هو اللي بيتحكم إمتى Claude يفعّل الـ skill تلقائيًا، ولازم يكون فيه إشارات كافية عشان Claude يقدر يربطها بطلبات المستخدم الحقيقية. description غامض زي “helps with code” مش هيشتغل أبدًا. لكن description محدد فيه trigger terms واضحة — ده اللي بيفرق:
---
name: security-review
description: Scan code for security vulnerabilities including injection flaws, authentication issues, and data exposure. Use when reviewing code changes, preparing a PR, or when the user mentions security, vulnerabilities, or audit.
---
حط نوع المهمة (“scan”، “generate”، “analyze”)، والمجال (“security”، “API”، “database”)، وعبارات trigger صريحة (“when the user mentions”، “use when”). قائمة الـ skills بتقطع النص المجمّع من description مع when_to_use عند 1,536 حرف لكل entry، فحط الـ use case الأساسي في الأول وخلّي عبارات الـ trigger الإضافية في when_to_use:
---
name: security-review
description: Scan code for security vulnerabilities including injection flaws, authentication issues, and data exposure.
when_to_use: When reviewing code changes, preparing a PR, or when the user mentions security, vulnerabilities, or audit.
---
Claude بيخصص حوالي 1% من الـ context window لمجموع الـ skill descriptions، مع fallback بحد أقصى 8,000 حرف عند الحاجة، وSLASH_COMMAND_TOOL_CHAR_BUDGET بيخلّيك ترفع الحد. شغّل /context عشان تتأكد إن الـ skills مش بتتحذف من القائمة.
الملفات المساعدة بتوسّع الـ skill من غير ما تنفخ الـ Level 2 context. اعمل لها reference من SKILL.md بمسارات نسبية:
For the full review checklist, see [templates/review-checklist.md](templates/review-checklist.md).
Claude بيقرأ الملفات المساعدة عبر bash لما يحتاجها. خلّي SKILL.md تحت 500 سطر، وحط المراجع التفصيلية في ملفات منفصلة.
الـ Dynamic Context والتحكم في الاستدعاء
صيغة !command بتنفّذ أوامر shell قبل ما محتوى الـ skill يوصل لـ Claude. الناتج بيتحقن مباشرة — Claude بيشوف النتيجة بس، مش الأمر. بالطريقة دي بتدي الـ skills سياق حي:
---
name: pr-summary
description: Summarize pull request changes. Use when asked to review or summarize a PR.
context: fork
agent: Explore
---
## PR context
- Diff: !`gh pr diff`
- Comments: !`gh pr view --comments`
- Changed files: !`gh pr diff --name-only`
Summarize the intent and key changes in this pull request.
حقل shell بيحدد الـ shell اللي هيتستخدم في كتل !command. حطه powershell بدل الـ bash الافتراضي لما تشتغل على Windows والـ PowerShell tool مفعل (CLAUDE_CODE_USE_POWERSHELL_TOOL=1):
---
name: windows-helper
description: Manage Windows services and configurations
shell: powershell
---
فيه خاصيتين في الـ frontmatter بيتحكموا في مين يقدر يفعّل الـ skill. disable-model-invocation: true معناها إن المستخدم بس يقدر يفعّلها عبر /skill-name — Claude مش هيشغّلها تلقائيًا أبدًا. استعمل ده لأي skill ليها side effects (زي deploy أو push أو إرسال رسائل). user-invocable: false بتخفي الـ skill من قائمة / بس تسيب Claude يشغّلها تلقائيًا — مفيدة للـ skills اللي بتشتغل كمعرفة خلفية مش كأوامر.
paths: بتاخد قائمة YAML من الـ globs اللي بتحدد إمتى الـ skill تنطبق. لما تحطها، الـ skill مبتتحمّلش غير لما الـ working directory يطابق واحد من الـ globs. ده بيمنع الـ skills الخاصة بمشروع معين من التداخل مع sessions تانية:
---
name: api-generator
description: Generate REST API endpoints from schema definitions.
paths: ["src/**/*.ts", "tests/**"]
---
effort بيتحكم في عمق التحليل. القيم المتاحة: low للبحث السريع أو توليد boilerplate، وmedium لأغلب المهام، وhigh للتحليل العميق اللي محتاج تفكير دقيق:
---
name: security-review
description: Scan code for security vulnerabilities.
effort: high
---
context: fork بيشغّل الـ skill في subagent معزول بـ context window خاص بيه. الـ agent field بيحدد نوع الـ agent: Explore للبحث القراءة فقط، Plan للتخطيط، general-purpose لأي حاجة محتاجة كل الأدوات. المحادثة الأساسية بتفضل نضيفة والـ subagent هو اللي بيشيل الحمل التقيل.
حقل model بيحدد الـ model اللي هيتستخدم لما الـ skill تتفعّل. ده مفيد لما المهمة بتستفيد من نقاط قوة model معين (مثلاً، opus للاستدلال المعقد، sonnet للتنفيذ السريع):
---
name: deep-analysis
description: Thoroughly analyze the codebase for a specific pattern or issue
context: fork
agent: Explore
model: opus
disable-model-invocation: true
---
Analyze $ARGUMENTS across the entire codebase:
1. Use Glob and Grep to find all occurrences
2. Read each file and understand context
3. Summarize patterns, inconsistencies, and recommendations
الـ Arguments والوصول للأدوات
الـ skills بتقبل arguments بطريقتين. $ARGUMENTS بيمسك كل حاجة بعد اسم الأمر كـ string واحد. $0، $1، $2 بيمسكوا الـ arguments الفردية المفصولة بمسافات. كمان تقدر تعرّف arguments بالاسم عن طريق حقل arguments في الـ frontmatter — الأسماء بتتربط بالترتيب، يعني $issue بتتوسّع للـ argument الأول و$branch للتاني. كل الاستبدالات بتحصل قبل ما الـ prompt يوصل لـ Claude. argument-hint بيحسّن الـ autocomplete في قائمة الـ slash عن طريق عرض الـ arguments المتوقعة:
---
name: review-pr
description: Review a GitHub PR by number
argument-hint: "<pr-number> <priority>"
allowed-tools: Bash(gh *), Read, Grep, Glob
---
Review PR #$0 with priority $1. Focus on security and performance.
Reference our standards in [standards/code-review.md](standards/code-review.md).
الاستخدام: /review-pr 456 high — $0 بتبقى 456، و$1 بتبقى high.
allowed-tools بيمنح صلاحية للأدوات المذكورة وقت ما الـ skill تكون فعّالة — مش بيقيّد الأدوات المتاحة. إعدادات الصلاحيات بتاعتك لسه بتتحكم في الأدوات المش مذكورة.
بجانب الـ positional arguments، الـ skills بتدعم متغيرات استبدال مدمجة: ${CLAUDE_SESSION_ID} لمعرف الجلسة الحالية (مفيد للتسجيل)، ${CLAUDE_EFFORT} لمستوى الـ effort الفعّال، و${CLAUDE_SKILL_DIR} لمجلد ملف SKILL.md بتاع الـ skill (استخدمه للإشارة لـ scripts مربوطة بالـ skill بصرف النظر عن الـ working directory).
ملفات الأوامر القديمة في .claude/commands/*.md لسه شغّالة بس الـ skills هي الصيغة المنصوح بيها. لو الاتنين موجودين بنفس الاسم، الـ skill بتاخد الأولوية.
التحكم في ظهور الـ Skills
إعداد skillOverrides في settings.json بيتحكم في ظهور الـ skills من غير ما تعدّل الـ frontmatter بتاع الـ skill نفسها. ده مفيد للـ skills المشتركة في المشروع أو اللي جاية من plugins ومش تقدر تعدّلها. قائمة /skills بتخلّيك تغيّر الحالات بشكل تفاعلي — ظلّل الـ skill، اضغط Space للتنقل بين الحالات، وEnter للحفظ في .claude/settings.local.json:
{
"skillOverrides": {
"legacy-context": "name-only",
"deploy": "off"
}
}
القيم المتاحة: "on" (الافتراضي — ظهور كامل)، "name-only" (الاسم ظاهر بس الـ description مخفي)، "user-invocable-only" (مخفي من Claude بس موجود في قائمة /)، "off" (مخفي تمامًا).
الـ Skills المدمجة
Claude Code بييجي معاه skills مدمجة متاحة من غير ما تحتاج تعمل install.
تلات skills مدمجة بتشتغل مع بعض عشان تشغّل وتختبر التطبيق بتاعك مقابل السلوك الفعلي مش بس الـ tests:
| Skill | الغرض |
|---|---|
/run | شغّل التطبيق بتاعك وشوف التغيير شغّال |
/verify | ابني وشغّل التطبيق عشان تتأكد إن التغيير بيعمل اللي المفروض |
/run-skill-generator | علّم /run و/verify إزاي يبنوا ويشغّلوا المشروع بتاعك |
/run و/verify بيستنتجوا طريقة التشغيل من نوع المشروع (CLI، server، TUI، browser-driven) ومن package.json أو Makefile أو الـ README. للمشاريع اللي محتاجة حاجة أكتر من تشغيل عادي — database أو env file أو بناء متعدد الخطوات — شغّل /run-skill-generator مرة واحدة. هو بيشغّل التطبيق من بيئة نظيفة، ويسجّل اللي نجح، ويعمله commit كـ skill خاصة بالمشروع في .claude/skills/run-<name>/. بعد كده /run و/verify بيتبعوا الـ recipe المسجّلة بدل ما يخمّنوا.
/less-permission-prompts بيعمل scan للـ transcripts من محادثاتك ويقترح قائمة allowlist مُرتبة حسب الأولوية لـ .claude/settings.json بناءً على أوامر Bash و MCP اللي بتستخدمها بشكل متكرر. شغّله بعد كم جلسة عشان يولّد إعدادات صلاحيات مخصصة للـ workflow بتاعك:
/less-permission-prompts