Créer une skill Claude pour Shager : SKILL.md, arborescence et les règles qui rendent la publication multicomptes reproductible

Faire de la diffusion Shager une Agent Skill Claude : un en-tête qui se déclenche bien, des fichiers de référence, un script REST et où placer la skill.

Une skill Claude pour Shager, c'est un dossier qui contient un fichier SKILL.md. Son en-tête YAML comporte un name et une description, suivis d'instructions qui expliquent à Claude comment mener la diffusion avec les outils de Shager : quels appels passer, dans quel ordre, et quelles règles ne souffrent aucune exception. Placez-la dans ~/.claude/skills/shager-distribution/ pour votre usage personnel, ou dans .claude/skills/shager-distribution/ au sein d'un dépôt pour votre équipe : Claude Code la charge quand une demande correspond, ou quand vous tapez /shager-distribution.

La connexion à Shager est la partie facile. C'est dans la skill que vous codifiez le jugement : variation des légendes, liens suivis, brouillons par défaut, et conduite à tenir quand l'API dit non.

Pourquoi écrire une skill plutôt qu'un long prompt ?

Parce que le prompt que vous peaufinez le mardi a disparu le jeudi, et que le collègue qui ne l'a pas vu en écrit un moins bon. La présentation des Agent Skills d'Anthropic décrit les skills comme des ressources du système de fichiers chargées à la demande. Seuls le nom et la description restent dans le contexte tant que la skill ne s'est pas déclenchée. Ensuite, SKILL.md est lu, et les fichiers supplémentaires auxquels il renvoie ne sont lus qu'en cas de besoin. Vous pouvez donc vous permettre des instructions détaillées sans les payer dans chaque conversation.

Dans le cas de Shager, la procédure reste stable tandis que le contenu change chaque semaine. C'est exactement le profil d'une bonne skill.

Structure du dossier d'un skill : SKILL.md avec un nom et une description, et des instructions pour travailler avec Shager.
Un seul skill apprend à l'agent toute la routine, à chaque fois.

Quelles sont les règles de l'en-tête de SKILL.md ?

D'après la même page de présentation, name et description sont obligatoires. name compte au maximum 64 caractères, uniquement des lettres minuscules, des chiffres et des tirets, et ne peut pas contenir les mots réservés « anthropic » ou « claude ». description ne peut pas être vide, compte au maximum 1 024 caractères et doit indiquer à la fois ce que fait la skill et quand l'utiliser, car c'est à partir de ce texte que Claude rapproche les demandes.

Claude Code ajoute des champs facultatifs, documentés dans Use Skills in Claude Code : allowed-tools pour les outils que Claude peut utiliser sans demander tant que la skill est active, disable-model-invocation pour la rendre uniquement manuelle, argument-hint pour l'autocomplétion, entre autres. Le nom du dossier, ou name s'il est renseigné, devient la commande slash.

À quoi doit ressembler le dossier ?

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

SKILL.md contient la procédure. reference/tools.md regroupe le détail des champs de create_post et upload_media_from_url, lu uniquement quand Claude en a besoin. scripts/shager.py est une solution de repli REST facultative pour les environnements sans serveur MCP. La documentation de Claude Code recommande de garder SKILL.md sous les 500 lignes et de déplacer le détail dans des fichiers séparés : c'est exactement ce découpage.

Shager publie aussi un fichier de skill maintenu à jour à l'adresse https://shager.ai/skills/shager/SKILL.md. C'est une bonne base à lire avant d'écrire la vôtre ; la version ci-dessous y ajoute des règles propres aux agences.

Le fichier SKILL.md

---
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

Quelques choix méritent d'être expliqués.

La liste allowed-tools ne contient que des opérations de lecture. create_post, schedule_post, request_approval et cancel_post demandent toujours une autorisation dans Claude Code : un humain voit donc chaque écriture. Les outils MCP sont nommés mcp__<server>__<tool>, ce qui suppose que vous avez enregistré le serveur sous le nom shager, comme dans connecter Shager à Claude Code.

La ligne consacrée à Instagram reflète le fonctionnement du réseau : les liens dans les légendes et les commentaires n'y sont pas cliquables. Le premier commentaire avec le lien suivi est utile sur les pages Facebook et sur YouTube.

La règle « brouillons par défaut » est appliquée deux fois. Une fois dans les instructions, et une seconde fois en fournissant à l'environnement de la skill une clé dépourvue du scope publish. Les instructions orientent ; les scopes imposent.

Liste numérotée de règles de sécurité pour un agent qui publie à grande échelle : une légende différente par compte, l'étalement, une validation humaine, une clé aux droits limités, la vérification des fêtes et l'arrêt en cas d'erreur.
Des règles qui gardent les comptes en bonne santé, même par centaines.

reference/errors.md

# 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 : la solution de repli REST

Quand MCP n'est pas configuré, la skill peut quand même fonctionner via l'API REST, décrite dans le document OpenAPI. Une petite fonction utilitaire évite que Claude improvise du code HTTP à chaque fois :

#!/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()

Ajoutez à SKILL.md une ligne du type « If the shager MCP tools are unavailable, run scripts/shager.py with the same operation paths », et listez les chemins dans reference/tools.md. La page de présentation précise que lorsque Claude exécute un script fourni avec la skill, seule sa sortie entre dans le contexte, pas le code.

Où placer la skill ?

Environnement Emplacement Peut-elle joindre Shager ?
Claude Code, usage personnel ~/.claude/skills/shager-distribution/ Oui, via MCP ou le script. Les skills placées ici ont le même accès réseau que n'importe quel programme de votre machine
Claude Code, équipe .claude/skills/shager-distribution/ versionné dans un dépôt Oui, comme ci-dessus
claude.ai Importée sous forme de zip dans Settings, Features L'accès réseau dépend des paramètres de l'utilisateur et de l'administrateur
API Claude Importée via la Skills API Non : sur l'API, les skills s'exécutent sans accès réseau

Cette dernière ligne vient tout droit des contraintes d'exécution décrites dans la présentation, et elle en surprend plus d'un. Sur l'API, utilisez le serveur MCP de Shager ou vos propres appels d'outils pour la partie réseau, et limitez la skill aux instructions. Notez aussi que les skills personnalisées ne se synchronisent pas d'un environnement à l'autre : une skill importée sur claude.ai n'est pas disponible dans Claude Code.

Comment la tester ?

  1. Formulez une demande qui devrait la déclencher sans la nommer : « Prépare la publication portes ouvertes de cette semaine pour tous les clubs Harbor Fitness. » Vérifiez que Claude lit la skill.
  2. Formulez une demande qui ne devrait pas la déclencher : « Quelle est la bonne longueur de légende pour un Reel ? » La skill doit rester à l'écart.
  3. Lancez /shager-distribution Harbor Fitness https://example.com/clip.mp4 et vérifiez qu'elle s'arrête au tableau des brouillons.
  4. Utilisez une clé sans publish et demandez-lui de programmer. Elle doit expliquer l'erreur 403 au lieu de tourner en boucle.

FAQ

Le nom de la skill peut-il contenir « claude » ?

Non. Les règles d'Anthropic réservent les mots « anthropic » et « claude » dans le champ name. Choisissez par exemple shager-distribution ; le titre de votre documentation peut tout de même indiquer qu'il s'agit d'une skill Claude.

La skill doit-elle contenir la clé API ?

Non. Conservez la clé dans la configuration du client MCP ou dans une variable d'environnement comme SHAGER_API_KEY. Une skill est un dossier destiné à être partagé, qui finit souvent dans git ; une clé placée dedans finit par fuiter.

La même skill fonctionne-t-elle dans Cursor ou Codex ?

Le format SKILL.md est celui d'Anthropic, mais les instructions qu'il contient sont du texte brut. Les équipes collent souvent le corps du fichier dans les règles de Cursor ou dans un fichier de prompt Codex. Les noms d'outils sont les mêmes dans tous les clients, puisqu'ils viennent du serveur MCP de Shager.

Prochaine étape

Une skill qui prépare des brouillons sur demande constitue la base. L'article suivant la transforme en routine de diffusion hebdomadaire qui planifie la semaine, prépare les publications de chaque client, achemine les validations et rend compte des clics, avec les points de contrôle humains aux bons endroits.

Essayez sur vos propres comptes.

Gratuit pendant le lancement, sans carte. Connectez, écrivez une fois, et Shager publie et mesure.