plugin.json ou dans son entrée marketplace. Par défaut, une dépendance suit la dernière version disponible, donc une version en amont peut modifier la dépendance sans avertissement. Les contraintes de version vous permettent de maintenir une dépendance à une plage de version testée jusqu’à ce que vous décidiez de la mettre à jour.
Lorsque vous installez un plugin qui déclare des dépendances, Claude Code les résout et les installe automatiquement, à l’exception d’une dépendance dont l’entrée marketplace a une command source ou une headersHelper, que vous installez vous-même en premier. Par la suite, /reload-plugins, la mise à jour automatique du marketplace du plugin dépendant, la réexécution de claude plugin install sur le plugin dépendant, et claude plugin marketplace add installent chacun toute dépendance déclarée qui n’est pas encore installée, selon les mêmes règles ; si l’une reste non résolue, consultez Résoudre les erreurs de dépendance.
Ce guide est destiné aux auteurs de plugins qui déclarent des dépendances dans plugin.json et aux responsables de marketplace qui balisent les versions. Les dépendances ici sont d’autres plugins ; pour les packages npm et Bun qu’un plugin utilise lui-même, consultez Dépendances de packages Node.js. Pour installer des plugins qui ont des dépendances, consultez Découvrir et installer des plugins. Pour le schéma de manifeste complet, consultez la Référence des plugins.
Pourquoi contraindre les versions des dépendances
Considérez un marketplace interne où deux équipes publient des plugins. L’équipe plateforme maintientsecrets-vault, un serveur MCP qui encapsule un backend de secrets. L’équipe de déploiement maintient deploy-kit, qui appelle secrets-vault pour récupérer les identifiants lors des déploiements.
deploy-kit est testé contre secrets-vault v2.1.0. Sans contrainte de version, la prochaine fois que l’équipe plateforme balisera une version qui renomme un outil MCP, la mise à jour automatique déplacera chaque secrets-vault de l’ingénieur vers la nouvelle version et deploy-kit se cassera.
Avec une contrainte de version, deploy-kit déclare qu’il a besoin de secrets-vault dans la plage ~2.1.0. Les ingénieurs avec deploy-kit installé restent sur le correctif 2.1.x le plus élevé correspondant. L’équipe de déploiement effectue la mise à niveau selon son propre calendrier en publiant une nouvelle version de deploy-kit avec une contrainte plus large.
Déclarer une dépendance avec une contrainte de version
Listez les dépendances dans le tableaudependencies du plugin.json de votre plugin.
Le manifeste suivant déclare une dépendance sans version et une dépendance contrainte :
.claude-plugin/plugin.json
"audit-logger" dans l’exemple ci-dessus, qui dépend de la version que le marketplace de ce plugin fournit. Pour plus de contrôle, utilisez un objet avec ces champs :
Les versions de pré-version telles que
2.0.0-beta.1 sont exclues sauf si votre plage opte pour un suffixe de pré-version comme ^2.0.0-0.
Regrouper les plugins pour une équipe
En plus duname obligatoire, un manifeste de plugin peut se composer uniquement d’un tableau dependencies. Son installation récupère chaque dépendance, ce qui en fait un moyen de regrouper un ensemble de plugins curatisé derrière une seule installation.
Par exemple, une équipe de plateforme peut publier des bundles spécifiques à un rôle dans une marketplace interne afin que les ingénieurs exécutent une seule commande claude plugin install au lieu d’installer chaque outil séparément :
.claude-plugin/plugin.json
backend-standard résout et installe les quatre dépendances.
Pour ajouter un outil à l’ensemble standard ultérieurement, publiez une nouvelle version de backend-standard avec la dépendance supplémentaire. La mise à jour automatique est désactivée par défaut pour les marketplaces non-Anthropic, donc les ingénieurs récupèrent la nouvelle version de l’une des deux façons suivantes :
- Activez la mise à jour automatique pour la marketplace dans
/plugin. La prochaine mise à jour automatique déplace le bundle vers la nouvelle version et installe les dépendances qu’il ajoute. - Exécutez
claude plugin update backend-standard, puis/reload-pluginspour installer les dépendances nouvellement ajoutées.
enabledPlugins dans les paramètres gérés.
Dépendre d’un plugin d’un autre marketplace
Par défaut, Claude Code refuse d’installer automatiquement une dépendance qui se trouve dans un marketplace différent de celui du plugin qui la déclare. Cela empêche un marketplace de silencieusement extraire des plugins d’une source que vous n’avez pas examinée. Pour l’autoriser, le responsable du marketplace racine ajoute le nom du marketplace cible àallowCrossMarketplaceDependenciesOn dans marketplace.json. Le marketplace racine est celui qui héberge le plugin que l’utilisateur installe ; seule sa liste d’autorisation est consultée, donc la confiance ne s’enchaîne pas à travers les marketplaces intermédiaires.
Le marketplace.json suivant permet à deploy-kit de dépendre d’un plugin de acme-shared :
.claude-plugin/marketplace.json
cross-marketplace nommant le champ à définir. Les utilisateurs peuvent toujours installer la dépendance manuellement en premier, ce qui satisfait la contrainte sans modifier la liste d’autorisation.
Tester un plugin et sa dépendance localement
Si vous développez un plugin et le plugin dont il dépend en même temps, chargez les deux avec--plugin-dir :
plugin.json local n’a pas besoin d’une version. Avant la v2.1.242, une entrée de dépendance qui nommait une marketplace ne correspondait jamais à la copie locale, et Claude Code désactivait votre plugin au chargement.
Quand les deux plugins se trouvent dans un dossier parent unique, vous pouvez passer ce dossier à --plugin-dir une seule fois. Si le dossier n’est pas lui-même un plugin, Claude Code charge chaque dossier enfant qui a un .claude-plugin/plugin.json. Nécessite Claude Code v2.1.265 ou ultérieur.
Si vous n’avez pas installé la dépendance depuis sa marketplace, votre plugin arrête de se charger quand la copie locale disparaît :
- Vous avez désactivé la copie locale : Claude Code désactive votre plugin au prochain chargement de plugin. Pour une entrée de dépendance qui nomme une marketplace, Claude Code rapporte
Dependency "<name>@inline" is disabled — enable it or remove the dependency; pour une entrée de nom simple, il rapporte la dépendance par son nom simple.<name>@inlineest comment Claude Code identifie chaque plugin--plugin-diret--plugin-url. - Vous avez démarré une session sans le drapeau
--plugin-dirde la dépendance : Claude Code rapporte la dépendance comme non installée. Passez le drapeau à nouveau, ou installez la dépendance depuis sa marketplace.
Versions des plugins de balises pour la résolution de version
Claude Code résout les contraintes de version par rapport aux balises git du référentiel qui héberge la dépendance : le référentiel propre du plugin pour les sources de plugingithub, url et git-subdir, ou le référentiel de la marketplace pour un plugin que la marketplace référence par un chemin relatif. Pour que Claude Code trouve les versions disponibles d’une dépendance, les versions du plugin en amont doivent être balisées en utilisant une convention de nommage spécifique.
Balisez chaque version comme {plugin-name}--v{version}, où {version} correspond au champ version dans le plugin.json de ce commit. À partir du répertoire du plugin, exécutez :
claude plugin tag dérive le nom de la balise du manifeste du plugin et de l’entrée de la marketplace qui l’entoure. Avant de créer la balise, elle valide le contenu du plugin, vérifie que plugin.json et l’entrée de la marketplace s’accordent sur la version, exige un arbre de travail propre sous le répertoire du plugin, et refuse si la balise existe déjà.
--pushpousse la balise vers la télécommandeorigin, donc le référentiel a besoin d’une télécommandeoriginconfigurée. Passez--remotepour pousser vers une autre.- Si la poussée échoue, la balise est toujours créée localement et la commande se termine avec une erreur.
- Avec
--push, une exécution réussie se termine parCreated tag secrets-vault--v2.1.0etPushed to origin, où la dernière ligne nomme la télécommande vers laquelle elle a été poussée. Sans--push, la commande affiche la commandegit pushà exécuter à la place. --dry-runaffiche ce qui serait balisé sans le créer.
git tag secrets-vault--v2.1.0 directement est équivalente si vous gardez plugin.json et l’entrée de la marketplace synchronisés vous-même.
Le préfixe du nom du plugin permet à un référentiel de marketplace d’héberger plusieurs plugins avec des lignes de version indépendantes. Le séparateur --v est analysé comme une correspondance de préfixe sur le nom complet du plugin, donc les noms de plugin qui contiennent des traits d’union sont gérés correctement.
Lorsque vous installez un plugin qui déclare { "name": "secrets-vault", "version": "~2.1.0" }, Claude Code répertorie les balises du référentiel qui héberge secrets-vault, filtre celles commençant par secrets-vault--v, et récupère la version la plus élevée satisfaisant ~2.1.0. Si aucune balise du référentiel propre du plugin ne satisfait la plage, l’installation échoue avec Dependency "secrets-vault@acme-tools" has no git tag satisfying ~2.1.0, qui nomme la dépendance avec sa marketplace. Pour un plugin avec chemin relatif sans balise correspondante, Claude Code installe la copie actuelle de la marketplace à la place et vérifie la contrainte lors du chargement du plugin.
Pour un plugin que la marketplace référence par un chemin relatif, une marketplace ajoutée comme chemin de dossier local résout les balises de la même manière lorsque le dossier est un référentiel git. Cela nécessite Claude Code v2.1.196 ou ultérieur. Dans deux cas, Claude Code installe la dépendance à partir du contenu actuel du dossier à la place :
- Les versions antérieures ne lisent pas les balises d’une marketplace de dossier local, donc une dépendance contrainte se charge uniquement si cette copie satisfait la plage.
- Un dossier local qui n’est pas un référentiel git n’a pas de balises, quelle que soit la version.
version du plugin.json, donc les vérifications de contrainte utilisent la balise qui a été réellement récupérée même si la version du plugin.json à ce commit a une valeur obsolète. Le nom du répertoire de cache pour une installation résolue par balise inclut un suffixe SHA de commit de 12 caractères, donc si un responsable force-déplace une balise vers un commit différent, l’installation suivante obtient un répertoire de cache frais au lieu de réutiliser du contenu obsolète.
Pour les dépendances avec une source de plugin
npm, archive ou command, la contrainte ne contrôle pas quelle version est récupérée, puisque la résolution basée sur les balises s’applique uniquement aux sources sauvegardées par git. La contrainte est toujours vérifiée au moment du chargement, et le plugin dépendant est désactivé avec dependency-version-unsatisfied si la version installée ne la satisfait pas. Pour une source command, Claude Code vérifie la version dans le plugin.json de la dépendance et ignore le suffixe de hachage de contenu ; une dépendance dont le plugin.json ne définit pas de version ne satisfait aucune contrainte, donc définissez-en une avant de la contraindre.Claude Code n’installe jamais lui-même une dépendance avec une source command, donc les utilisateurs l’installent d’abord. Claude Code n’exécute jamais non plus le headersHelper sur l’entrée de la marketplace d’une dépendance, donc les utilisateurs installent d’abord ce plugin.Comment les contraintes interagissent
Lorsque plusieurs plugins installés contraignent la même dépendance, Claude Code intersecte leurs plages et résout la dépendance à la version la plus élevée qui satisfait tous les critères. Le tableau ci-dessous montre comment les combinaisons courantes se résolvent.
La mise à jour automatique récupère une dépendance contrainte à la balise git la plus élevée qui satisfait la plage de chaque plugin installé, plutôt qu’à la dernière version du marketplace, de sorte que la dépendance continue à recevoir des mises à jour dans sa plage autorisée. Si aucune balise ne satisfait toutes les plages, la mise à jour automatique ignore cette dépendance et répertorie l’ignorance dans l’onglet Erreurs de
/plugin, en nommant le plugin contraignant.
Lorsque vous désinstallez le dernier plugin qui contraint une dépendance, la dépendance n’est plus maintenue et reprend le suivi de son entrée marketplace lors de la prochaine mise à jour.
Activer ou désactiver un plugin avec des dépendances
Cette section couvre les plugins installés à partir d’une marketplace. Pour une copie que vous avez chargée avec--plugin-dir, voir Tester un plugin et sa dépendance localement.
L’activation d’un plugin active également les plugins dont il dépend, et la désactivation d’un plugin est bloquée si un autre plugin activé en a toujours besoin.
Lorsque vous activez un plugin, Claude Code active également ses dépendances au même scope. Si une dépendance a ses propres dépendances, Claude Code les active également. Le message de succès liste ce qui d’autre a été activé avec le plugin que vous avez nommé. Si une dépendance ne peut pas être activée, la commande refuse et vous dit ce qui bloque et comment corriger :
Ceci s’applique même lorsqu’une dépendance définit
defaultEnabled: false dans son manifeste, car Claude Code écrit un true explicite pour celle-ci. La même chose s’applique à l’installation : une dépendance extraite pour satisfaire un plugin actif s’installe avec true indépendamment de sa propre valeur par défaut.
Lorsque vous désactivez un plugin, Claude Code refuse si un autre plugin activé en dépend toujours. L’erreur nomme les plugins qui en dépendent et vous donne une commande chaînée qui les désactive dans le bon ordre, se terminant par celui que vous avez demandé.
Par exemple, si deploy-kit dépend de secrets-vault, la désactivation de secrets-vault seule échoue avec une sortie similaire à ce qui suit :
Supprimer les dépendances auto-installées orphelines
Les dépendances auto-installées restent sur le disque après la désinstallation des plugins qui les ont installées, au cas où vous réinstalliez un plugin dépendant ou souhaiteriez continuer à utiliser la dépendance directement. Pour les nettoyer, exécutezclaude plugin prune pour lister les dépendances auto-installées qui n’ont plus aucun plugin installé les exigeant et les supprimer après une invite de confirmation.
Nothing to prune avec la raison et se termine. C’est le résultat attendu sur une installation récente, pas une erreur.
Par défaut, prune fonctionne à la portée utilisateur et demande une confirmation avant de supprimer quoi que ce soit :
--scope projectou--scope localcible une portée différente.--dry-runliste ce qui serait supprimé sans rien modifier.-yignore l’invite de confirmation. Lorsque stdin ou stdout n’est pas un terminal, prune liste les orphelins et se termine sans les supprimer sauf si vous passez-y.
--prune à claude plugin uninstall. Après suppression du plugin nommé, Claude Code analyse et supprime toute dépendance auto-installée qui est maintenant orpheline. Les plugins que vous avez installés vous-même ne sont jamais nettoyés, uniquement ceux installés automatiquement via le tableau dependencies d’un autre plugin.
Le même comportement de confirmation s’applique. Lorsque stdin ou stdout n’est pas un terminal, la désinstallation se termine quand même, mais l’étape prune liste les orphelins et ne supprime rien sauf si vous passez -y.
Par exemple, pour désinstaller deploy-kit et nettoyer les dépendances qu’il laisse derrière :
Résoudre les erreurs de dépendance
Les problèmes de dépendance apparaissent dansclaude plugin list et dans l’interface /plugin, sous forme de messages d’erreur descriptifs plutôt que les codes littéraux de ce tableau. Claude Code désactive le plugin affecté jusqu’à ce que vous résolviez l’erreur. Le tableau ci-dessous liste les erreurs les plus courantes et comment les résoudre.
Pour vérifier ces erreurs par programmation, exécutez
claude plugin list --json. Les plugins avec des problèmes incluent un champ errors les listant. Les plugins qui se sont chargés correctement omettent le champ.
Voir aussi
- Créer des plugins : créez des plugins avec des skills, des agents et des hooks
- Créer et distribuer un marketplace de plugins : hébergez des plugins pour votre équipe
- Référence des plugins : le schéma complet de
plugin.json - Gestion des versions : comment la version propre d’un plugin est résolue et utilisée comme clé de cache