# ابنِ مهارة Claude لـ Shager: ملف SKILL.md وبنية المجلد والقواعد التي تجعل النشر على حسابات كثيرة قابلًا للتكرار

_2026-09-30 · حوّل التوزيع عبر Shager إلى مهارة Claude: مقدمة YAML تُفعَّل في الوقت المناسب، وملفات مرجعية، وسكربت REST مساعد، والمكان الصحيح لحفظ المهارة._

مهارة Claude لـ Shager مجلد فيه ملف `SKILL.md`، تتضمن مقدمته بصيغة YAML حقلي `name` و`description`، وتليها تعليمات تخبر Claude كيف يدير التوزيع عبر أدوات Shager: أي الاستدعاءات يجري، وبأي ترتيب، وأي القواعد لا تنكسر أبدًا. ضعها في `~/.claude/skills/shager-distribution/` لاستخدامك الشخصي، أو في `.claude/skills/shager-distribution/` داخل مستودع لفريقك، فيحمّلها Claude Code حين يتطابق معها طلب، أو حين تكتب `/shager-distribution`.

الاتصال بـ Shager هو الجزء السهل. المهارة هي المكان الذي ترمّز فيه حسن التقدير: تنويع النصوص، والروابط المُتتبَّعة، والمسودات كخيار افتراضي، وما يجب فعله حين ترفض الـ API.

## لماذا تكتب مهارة بدل تعليمات طويلة؟

لأن التعليمات التي تتقنها يوم الثلاثاء تضيع يوم الخميس، وزميلك الذي لم يرها يكتب أسوأ منها. تصف [نظرة Anthropic العامة على Agent Skills](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview) المهارات بأنها موارد في نظام الملفات تُحمَّل عند الطلب. لا يبقى في السياق سوى الاسم والوصف إلى أن تُفعَّل المهارة. عندها يُقرأ `SKILL.md`، ولا تُقرأ الملفات الإضافية التي يشير إليها إلا عند الحاجة. فيمكنك أن تكتب تعليمات مفصلة من دون أن تدفع ثمنها في كل محادثة.

وفي حالة Shager تحديدًا، الإجراء ثابت بينما يتغير المحتوى كل أسبوع. وهذه بالضبط مواصفات المهارة الجيدة.

## ما قواعد مقدمة SKILL.md؟

بحسب صفحة النظرة العامة نفسها، الحقلان `name` و`description` إلزاميان. لا يتجاوز `name` 64 حرفًا، ولا يضم إلا أحرفًا لاتينية صغيرة وأرقامًا وشرطات، ولا يجوز أن يحتوي على الكلمتين المحجوزتين «anthropic» أو «claude». ولا يكون `description` فارغًا، ولا يتجاوز 1024 حرفًا، ويجب أن يذكر ما تفعله المهارة ومتى تُستخدم معًا، لأن Claude يطابق الطلبات معه.

يضيف Claude Code حقولًا اختيارية موثقة في [استخدام المهارات في Claude Code](https://code.claude.com/docs/en/skills): `allowed-tools` للأدوات التي يستطيع Claude استخدامها دون استئذان ما دامت المهارة نشطة، و`disable-model-invocation` لجعلها يدوية فقط، و`argument-hint` للإكمال التلقائي، وغيرها. ويصبح اسم المجلد، أو `name` إن حُدِّد، أمر الشرطة المائلة.

## كيف يجب أن يبدو المجلد؟

```text
shager-distribution/
  SKILL.md
  reference/
    tools.md
    errors.md
  scripts/
    shager.py
```

يضم `SKILL.md` الإجراء. ويضم `reference/tools.md` تفاصيل الحقول لـ `create_post` و`upload_media_from_url`، ولا يُقرأ إلا حين يحتاج إليه Claude. أما `scripts/shager.py` فبديل REST اختياري للبيئات التي لا يتوفر فيها خادم MCP. توصي وثائق Claude Code بأن يبقى `SKILL.md` أقل من 500 سطر وبنقل التفاصيل إلى ملفات منفصلة، وهذا هو التقسيم نفسه.

ينشر Shager أيضًا ملف مهارة يُحدَّث باستمرار في https://shager.ai/skills/shager/SKILL.md. إنه نقطة انطلاق جيدة تقرؤها قبل أن تكتب مهارتك، والنسخة أدناه تضيف قواعد خاصة بالوكالات.

## ملف SKILL.md

```markdown
---
name: shager-distribution
description: Distribute a post or video to many social accounts through Shager (Facebook Pages, Instagram professional accounts, YouTube channels). Use when the user asks to post, schedule, draft or distribute content to client accounts, account groups or "all locations", or asks which account drove clicks.
argument-hint: "[workspace] [brief or media URL]"
allowed-tools: mcp__shager__whoami mcp__shager__list_workspaces mcp__shager__list_channels mcp__shager__list_groups mcp__shager__get_post mcp__shager__list_posts mcp__shager__get_analytics
---

# Shager distribution

## Before anything
1. Call whoami. Note the scopes and whether this is a sandbox.
2. Resolve the workspace by name with list_workspaces. If two match, ask.
3. Call list_channels and list_groups. Only target channels with status ACTIVE.

## Building the post
1. Media: call upload_media_from_url. For vertical video pass width,
   height and duration_ms so Shager can validate Reels, Shorts and Stories.
2. Captions: write one caption per channel in per_channel. Keep facts,
   prices and dates identical; vary the opening line, structure and the
   local detail (city, branch, presenter) taken from the channel name.
3. Links: never paste a raw URL into captions. Pass it as cta_url so each
   account gets its own short link and UTM tags. Put the call to action
   in first_comment for Facebook and YouTube. Instagram does not make
   comment links clickable, so for Instagram channels mention "link in bio".
4. Set campaign to a lowercase slug, e.g. "spring-open-day-2026".
5. Set label to something a human will recognize in the calendar.

## Drafts by default
Create the post WITHOUT schedule_at unless the user gave an explicit date
and time in this conversation. Show a table of channel, network, format and
the first line of each caption, and wait for confirmation.

## Scheduling
Only when confirmed: call schedule_post with schedule_at in ISO 8601 with
the workspace's UTC offset. If the workspace requires approval, call
request_approval instead and return the approval_url to the user.

## When Shager says no
Read error.code, do not retry blindly. See reference/errors.md.

## Reporting
For "how did it do", call get_analytics for the date range and present
clicks by account, highest first, plus the top posts.

Field details for create_post: reference/tools.md
```

بعض القرارات في هذا الملف تستحق الدفاع عنها.

قائمة `allowed-tools` لا تضم إلا عمليات القراءة. أما `create_post` و`schedule_post` و`request_approval` و`cancel_post` فما زالت تطلب الإذن في Claude Code، فيرى إنسان كل عملية كتابة. تُسمّى أدوات MCP بصيغة `mcp__<server>__<tool>`، وهذا يفترض أنك سجّلت الخادم باسم `shager` كما في [ربط Shager بـ Claude Code](/ar/blog/connect-shager-to-claude-code).

سطر Instagram يعكس سلوك الشبكة: الروابط في النصوص والتعليقات غير قابلة للنقر هناك. أما التعليق الأول الذي يحمل الرابط المُتتبَّع فيؤدي دوره على صفحات Facebook وعلى YouTube.

قاعدة «المسودات كخيار افتراضي» مفروضة مرتين: مرة في التعليمات، ومرة بمنح بيئة المهارة مفتاحًا لا يملك صلاحية `publish`. التعليمات توجّه، والصلاحيات تفرض.

## ملف reference/errors.md

```markdown
# Shager error codes

401 unauthorized: key missing or malformed. Stop and tell the user.
403 forbidden: key lacks a scope. If scheduling, say a human must schedule
    or grant publish at app.shager.ai/dashboard/agents.
403 sandbox_unclaimed: show the claim link from signup; nothing else to do.
404 not_found: re-list channels or posts; ids are per workspace.
409 not_scheduled: the post is not scheduled; get_post and report status.
422 rejected: a network rule failed. Quote the message, fix the input
    (length, format, media), and try once more.
429 rate_limited: wait 60 seconds, then continue. Never loop per account.
```

## ملف scripts/shager.py: بديل REST

حين لا يكون MCP مُعدًّا، تستطيع المهارة العمل رغم ذلك عبر REST API الموصوفة في [مستند OpenAPI](https://app.shager.ai/api/v1/openapi.json). دالة مساعدة صغيرة تمنع Claude من ارتجال كود HTTP في كل مرة:

```python
#!/usr/bin/env python3
"""Usage: shager.py METHOD PATH [JSON_BODY]
Example: shager.py GET /workspaces
         shager.py POST /workspaces/WS_ID/posts '{"caption": "..."}'"""
import json, os, sys, requests

API = "https://app.shager.ai/api/v1"

def main():
    method, path = sys.argv[1].upper(), sys.argv[2]
    body = json.loads(sys.argv[3]) if len(sys.argv) > 3 else None
    r = requests.request(
        method, f"{API}{path}",
        headers={"Authorization": f"Bearer {os.environ['SHAGER_API_KEY']}"},
        json=body, timeout=90,
    )
    payload = r.json()
    if not r.ok:
        e = payload["error"]
        print(json.dumps({"status": r.status_code, "code": e["code"], "message": e["message"]}))
        sys.exit(1)
    print(json.dumps(payload["data"], indent=2))

if __name__ == "__main__":
    main()
```

أضف إلى `SKILL.md` سطرًا مثل «If the shager MCP tools are unavailable, run scripts/shager.py with the same operation paths»، واسرد المسارات في `reference/tools.md`. وتشير صفحة النظرة العامة إلى أنه حين يشغّل Claude سكربتًا مرفقًا بالمهارة، لا يدخل السياقَ سوى مخرجاته، لا الكود.

## أين يجب أن توجد المهارة؟

| البيئة | الموقع | هل تصل إلى Shager؟ |
|---|---|---|
| Claude Code، شخصيًا | `~/.claude/skills/shager-distribution/` | نعم، عبر MCP أو السكربت. للمهارات هناك وصول الشبكة نفسه الذي لأي برنامج على جهازك |
| Claude Code، للفريق | `.claude/skills/shager-distribution/` مودَعة في مستودع | نعم، كما في السطر السابق |
| claude.ai | تُرفع كملف zip من Settings ثم Features | يختلف الوصول إلى الشبكة حسب إعدادات المستخدم والمسؤول |
| Claude API | تُرفع عبر Skills API | لا: المهارات على الـ API تعمل دون وصول إلى الشبكة |

السطر الأخير مأخوذ مباشرة من قيود بيئة التشغيل في صفحة النظرة العامة، وهو يفاجئ كثيرين. على الـ API، استخدم خادم MCP الخاص بـ Shager أو استدعاءات أدواتك الخاصة للجانب الشبكي، واجعل المهارة مقتصرة على التعليمات. ولاحظ أيضًا أن المهارات المخصصة لا تتزامن بين البيئات، فالمهارة المرفوعة إلى claude.ai ليست موجودة في Claude Code.

## كيف تختبرها؟

1. اطلب شيئًا يجب أن يفعّلها دون أن تسمّيها: «Draft this week's open-day post for all Harbor Fitness locations.» تحقق من أن Claude يقرأ المهارة.
2. اطلب شيئًا يجب ألا يفعّلها: «What's a good caption length for Reels?» يجب أن تبقى المهارة خارج الأمر.
3. شغّل `/shager-distribution Harbor Fitness https://example.com/clip.mp4` وتحقق من أنها تتوقف عند جدول المسودات.
4. استخدم مفتاحًا لا يملك `publish` واطلب منها الجدولة. يجب أن تشرح الخطأ 403 بدل الدوران في حلقة.

## الأسئلة الشائعة

### هل يمكن أن يتضمن اسم المهارة كلمة «claude»؟

لا. قواعد مهارات Anthropic تحجز الكلمتين «anthropic» و«claude» في حقل `name`. استخدم اسمًا مثل `shager-distribution`، ويمكن لعنوان وثائقك أن يذكر أنها مهارة Claude.

### هل يجب أن تحفظ المهارة مفتاح API؟

لا. احفظ المفتاح في إعدادات عميل MCP أو في متغير بيئة مثل `SHAGER_API_KEY`. المهارة مجلد قابل للمشاركة وكثيرًا ما ينتهي في git، والمفتاح الموجود داخلها ينتهي مسرّبًا.

### هل تعمل المهارة نفسها في Cursor أو Codex؟

صيغة `SKILL.md` خاصة بـ Anthropic، لكن التعليمات داخلها نص عادي. كثيرًا ما تلصق الفرق متنها في قواعد Cursor أو في ملف تعليمات لـ Codex. وأسماء الأدوات نفسها في كل عميل، لأنها تأتي من خادم MCP الخاص بـ Shager.

## الخطوة التالية

المهارة التي تكتب المسودات عند الطلب هي الأساس. ويحوّلها المقال التالي إلى [روتين توزيع أسبوعي](/ar/blog/skill-weekly-distribution-routine) يخطط للأسبوع، ويكتب مسودات منشورات كل عميل، ويوجّه الموافقات، ويرفع تقارير النقرات، مع نقاط التحقق البشرية في أماكنها الصحيحة.

---
Source: https://shager.ai/ar/blog/build-a-claude-skill-for-shager
