Créer et partager un plugin Claude Code
Un dossier, un manifeste, et tes Skills deviennent installables par toute l'équipe. Avec les pièges de structure qui font échouer le chargement.
Une Skill posée dans .claude/ reste chez toi. Un plugin, c'est la même chose
emballée pour être installée par quelqu'un d'autre : versionnée, nommée, et
distribuable via un dépôt. C'est la différence entre « j'ai un truc pratique »
et « toute l'équipe l'a ».
Skill seule ou plugin ?
Standalone (.claude/) | Plugin | |
|---|---|---|
| Nom d'appel | /hello | /mon-plugin:hello |
| Portée | Un projet, ou toi | Partageable, versionnable |
| Bon pour | Itérer vite, essayer | Diffuser, figer une version |
Commence toujours en standalone. On convertit en plugin le jour où quelqu'un d'autre en a besoin, pas avant.
Avant de commencer
- Claude Code installé et authentifié
- Une Skill ou un agent qui te sert déjà
- Vingt minutes
1Créer le dossier et le manifeste
mkdir -p mon-plugin/.claude-plugin
Puis mon-plugin/.claude-plugin/plugin.json :
{
"name": "mon-plugin",
"description": "Ce que fait le plugin, en une phrase.",
"version": "1.0.0",
"author": { "name": "Ton nom" }
}
Le name sert d'espace de noms : les Skills du plugin s'appellent
/mon-plugin:nom-de-la-skill. C'est ce qui évite les collisions quand deux
plugins ont une Skill du même nom.
Le version est facultatif, mais si tu le renseignes, les utilisateurs ne
reçoivent une mise à jour que lorsque tu l'incrémentes.
2Poser les composants au bon endroit
C'est ici que la plupart des plugins échouent au chargement.
mon-plugin/
├── .claude-plugin/
│ └── plugin.json <- seul fichier dans ce dossier
├── skills/
│ └── revue/SKILL.md
├── agents/
│ └── relecteur.md
├── hooks/
│ └── hooks.json
└── .mcp.json
L'erreur classique
skills/, agents/, hooks/ ne vont pas dans .claude-plugin/. Seul
plugin.json y vit. Tout le reste est à la racine du plugin. Un plugin dont
les Skills sont dans .claude-plugin/skills/ se charge sans rien exposer, et
aucun message ne t'explique pourquoi.
Un plugin qui ne contient qu'une Skill peut poser son SKILL.md directement à
la racine. Dès qu'il peut en contenir deux, utilise skills/.
3Tester sans installer
claude --plugin-dir ./mon-plugin
Le plugin est chargé pour cette session seulement. Dans Claude Code :
/mon-plugin:revue
Vérifie aussi que les agents apparaissent dans /context, et que les hooks se
déclenchent sur l'événement attendu.
Après une modification, pas besoin de relancer :
/reload-plugins
Charger plusieurs plugins
Le drapeau se répète : claude --plugin-dir ./a --plugin-dir ./b. Il accepte
aussi une archive .zip.
4Valider avant de partager
claude plugin validate ./mon-plugin
La commande sort ✔ Validation passed, éventuellement avec des avertissements
qui ne bloquent pas. Ajoute --strict pour les traiter comme des erreurs.
C'est la même vérification que celle du pipeline de revue de la place de marché communautaire, autant la passer chez toi.
5Distribuer
Trois options, de la plus simple à la plus visible :
- Un dépôt privé avec une place de marché interne, pour l'équipe.
- La place de marché communautaire : les utilisateurs l'ajoutent avec
/plugin marketplace add anthropics/claude-plugins-community, puis installent depuis@claude-community. - Un
.ziphébergé, chargé au démarrage avecclaude --plugin-url https://…/mon-plugin.zip, pour une session seulement.
Avant de diffuser : un README.md avec l'installation et un exemple d'usage.
Sans ça, personne ne sait quand se servir du plugin.
Convertir un .claude/ existant
mkdir -p mon-plugin/.claude-plugin
cp -r .claude/skills mon-plugin/
cp -r .claude/agents mon-plugin/
Les hooks bougent de settings.json vers hooks/hooks.json, avec le même
format d'objet.
Supprimer les originaux
Un agent défini dans .claude/agents/ prend le pas sur l'agent de même nom
venu d'un plugin. Tant que tu n'as pas supprimé l'original, tu testes l'ancien
sans le savoir.
Ce qu'un plugin peut embarquer
| Dossier | Contenu |
|---|---|
skills/ | Skills, un dossier par Skill avec SKILL.md |
agents/ | Sous-agents |
hooks/hooks.json | Automatisations sur événements |
.mcp.json | Serveurs MCP livrés avec le plugin |
.lsp.json | Serveurs de langage, pour l'intelligence de code |
bin/ | Exécutables ajoutés au PATH quand le plugin est actif |
settings.json | Réglages par défaut appliqués à l'activation |
Le dernier mérite l'attention : un plugin peut activer un de ses agents comme fil principal, et donc changer le comportement par défaut de Claude Code. À manier avec prudence, surtout sur un plugin partagé.
Tu as d’autres ressources comme ça ?
Ce que tu viens de lire est entièrement gratuit. Une nouvelle ressource part chaque semaine dans la newsletter : guides, modèles à copier et liens triés, sans compte à créer.
Me contacter
Une question, un projet, une envie de collaborer ? Écris-moi.
Cette page est en accès libre, n’hésite pas à la partager.