Erstellen und Verteilen eines Plugin-Marktplatzes
Erstellen und hosten Sie Plugin-Marktplätze, um Claude Code-Erweiterungen in Teams und Communities zu verteilen.
Ein Plugin-Marktplatz ist ein Katalog, mit dem Sie Plugins an andere verteilen können. Marktplätze bieten zentrale Entdeckung, Versionsverfolgung, automatische Updates und Unterstützung für mehrere Quellentypen, einschließlich Git-Repositories und lokaler Pfade. Diese Anleitung zeigt Ihnen, wie Sie Ihren eigenen Marktplatz erstellen, um Plugins mit Ihrem Team oder Ihrer Community zu teilen.
Möchten Sie Plugins aus einem vorhandenen Marktplatz installieren? Siehe Entdecken und Installieren vorgefertigter Plugins.
Übersicht
Das Erstellen und Verteilen eines Marktplatzes umfasst:
- Plugins erstellen: Erstellen Sie ein oder mehrere Plugins mit skills, Agents, hooks, MCP servers oder LSP servers. Diese Anleitung setzt voraus, dass Sie bereits Plugins zum Verteilen haben; siehe Plugins erstellen für Details zum Erstellen von Plugins.
- Marktplatzdatei erstellen: Definieren Sie eine
marketplace.json, die Ihre Plugins und deren Speicherorte auflistet. Siehe Marktplatzdatei erstellen. - Marktplatz hosten: Pushen Sie zu GitHub, GitLab oder einem anderen Git-Host. Siehe Marktplätze hosten und verteilen.
- Mit Benutzern teilen: Benutzer fügen Ihren Marktplatz mit
/plugin marketplace addhinzu und installieren einzelne Plugins. Siehe Plugins entdecken und installieren.
Sobald Ihr Marktplatz live ist, können Sie ihn aktualisieren, indem Sie Änderungen in Ihr Repository pushen. Benutzer aktualisieren ihre lokale Kopie mit /plugin marketplace update.
Anleitung: Erstellen Sie einen lokalen Marktplatz
Dieses Beispiel erstellt einen Marktplatz mit einem Plugin: ein quality-review skill für Code-Reviews. Sie erstellen die Verzeichnisstruktur, fügen ein skill hinzu, erstellen das Plugin-Manifest und den Marktplatzkatalog und installieren und testen ihn dann.
Erstellen Sie die Verzeichnisstruktur
mkdir -p my-marketplace/.claude-plugin
mkdir -p my-marketplace/plugins/quality-review-plugin/.claude-plugin
mkdir -p my-marketplace/plugins/quality-review-plugin/skills/quality-review
Erstellen Sie das skill
Erstellen Sie eine SKILL.md-Datei, die definiert, was das quality-review skill tut.
---
description: Review code for bugs, security, and performance
---
Review the code I've selected or the recent changes for:
- Potential bugs or edge cases
- Security concerns
- Performance issues
- Readability improvements
Be concise and actionable.
Erstellen Sie das Plugin-Manifest
Erstellen Sie eine plugin.json-Datei, die das Plugin beschreibt. Das Manifest befindet sich im .claude-plugin/-Verzeichnis.
{
"name": "quality-review-plugin",
"description": "Adds a quality-review skill for quick code reviews",
"version": "1.0.0",
"author": {
"name": "Your Name"
}
}
Das Festlegen von version bedeutet, dass Benutzer nur Updates erhalten, wenn Sie dieses Feld ändern. Erhöhen Sie es daher bei jeder Veröffentlichung. Ein Plugin mit einer command Quelle wird nicht durch dieses Feld fixiert. Wenn Sie version weglassen, kommt die Version aus der nächsten Quelle in der Versionsverwaltung.
Erstellen Sie die Marktplatzdatei
Erstellen Sie den Marktplatzkatalog, der Ihr Plugin auflistet.
{
"name": "my-plugins",
"owner": {
"name": "Your Name"
},
"plugins": [
{
"name": "quality-review-plugin",
"source": "./plugins/quality-review-plugin",
"description": "Adds a quality-review skill for quick code reviews"
}
]
}
Hinzufügen und Installieren
Starten Sie Claude Code aus dem Verzeichnis, das my-marketplace enthält, und führen Sie die folgenden Befehle aus. Der Installationsbefehl öffnet eine Plugin-Detailansicht, in der Sie einen Installationsbereich auswählen, um die Installation zu bestätigen. Überprüfen Sie die Installationszusammenfassung: Wenn sie Run /reload-plugins to activate. meldet, führen Sie diesen Befehl aus.
/plugin marketplace add ./my-marketplace
/plugin install quality-review-plugin@my-plugins
Probieren Sie es aus
Wählen Sie etwas Code in Ihrem Editor aus und führen Sie Ihr neues skill aus. Plugin-skills sind mit dem Plugin-Namen namespaced.
/quality-review-plugin:quality-review
Um mehr über die Möglichkeiten von Plugins zu erfahren, einschließlich hooks, Agents, MCP servers und LSP servers, siehe Plugins.
Wie Plugins installiert werden: Wenn Benutzer ein Plugin installieren, kopiert Claude Code das Plugin-Verzeichnis an einen Cache-Speicherort, mit Ausnahme einer command Quelle im Link-Modus, die stattdessen verwendet wird. Kopierte Plugins können keine Dateien außerhalb ihres Verzeichnisses mit Pfaden wie ../shared-utils referenzieren, da diese Dateien nicht kopiert werden.
Wenn Sie Dateien über Plugins hinweg teilen müssen, verwenden Sie Symlinks. Siehe Plugin-Caching und Dateiauflösung für Details.
Marktplatzdatei erstellen
Erstellen Sie .claude-plugin/marketplace.json im Stammverzeichnis Ihres Repositories. Diese Datei definiert den Namen Ihres Marktplatzes, Eigentümerinformationen und eine Liste von Plugins mit ihren Quellen.
Jeder Plugin-Eintrag benötigt mindestens einen name und eine source, die Claude Code mitteilt, woher es abgerufen werden soll. Siehe das vollständige Schema unten für alle verfügbaren Felder.
{
"name": "company-tools",
"owner": {
"name": "DevTools Team",
"email": "devtools@example.com"
},
"plugins": [
{
"name": "code-formatter",
"source": "./plugins/formatter",
"description": "Automatic code formatting on save",
"version": "2.1.0",
"author": {
"name": "DevTools Team"
}
},
{
"name": "deployment-tools",
"source": {
"source": "github",
"repo": "company/deploy-plugin"
},
"description": "Deployment automation tools"
}
]
}
Marktplatz-Schema
Erforderliche Felder
| Feld | Typ | Beschreibung | Beispiel |
|---|---|---|---|
name |
string | Marktplatz-Identifier in Kebab-Case, ohne Leerzeichen, Steuerzeichen oder bidirektionale Formatierungszeichen. Dies ist öffentlich sichtbar: Benutzer sehen es beim Installieren von Plugins (z. B. /plugin install my-tool@your-marketplace). Jeder Benutzer kann nur einen Marktplatz pro Name registrieren: Wenn er einen zweiten Marktplatz mit demselben Namen hinzufügt, ersetzt Claude Code den ersten. Um mehrere Plugins unter einem Marktplatznamen zu veröffentlichen, listen Sie diese alle in einer einzelnen marketplace.json auf. |
"acme-tools" |
owner |
object | Informationen zum Marktplatz-Betreuer (siehe Felder unten) | |
plugins |
array | Liste der verfügbaren Plugins | Siehe unten |
Reservierte Namen: Die folgenden Marktplatznamen sind für die offizielle Nutzung durch Anthropic reserviert und können nicht von Drittanbieter-Marktplätzen verwendet werden: claude-code-marketplace, claude-code-plugins, claude-plugins-official, claude-plugins-community, claude-community, anthropic-marketplace, anthropic-plugins, agent-skills, anthropic-agent-skills, knowledge-work-plugins, life-sciences, claude-for-legal, claude-for-financial-services, financial-services-plugins, first-party-plugins, healthcare. Namen, die offizielle Marktplätze imitieren, wie official-claude-plugins oder anthropic-plugins-v2, sind ebenfalls blockiert. Das Reservieren dieser Namen verhindert, dass sich ein Drittanbieter-Marktplatz als von Anthropic veröffentlichte Quelle darstellt.
Claude Code überprüft reservierte Namen jedes Mal, wenn es einen Marktplatz lädt, nicht nur wenn Sie einen hinzufügen. Ein Marktplatz, der unter einem dieser Namen registriert wurde, bevor der Name reserviert wurde, wird nicht mehr geladen und meldet, dass er von einer nicht vertrauenswürdigen Quelle registriert ist. Entfernen Sie diesen Marktplatz und fügen Sie ihn erneut aus der offiziellen Anthropic-Quelle hinzu. Ein Drittanbieter-Marktplatz, der von einem neu reservierten Namen betroffen ist, wird erneut geladen, sobald Sie ihn unter einem anderen Namen erneut hinzufügen. Vor v2.1.205 waren first-party-plugins und healthcare nicht reserviert, und ein Marktplatz, der bereits unter einem reservierten Namen registriert war, wurde weiterhin geladen.
Eigentümer-Felder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name |
string | Ja | Name des Betreuers oder Teams |
email |
string | Nein | Kontakt-E-Mail für den Betreuer |
url |
string | Nein | Website, GitHub-Profil oder Organisations-URL |
Optionale Felder
| Feld | Typ | Beschreibung |
|---|---|---|
$schema |
string | JSON-Schema-URL für Editor-Autovervollständigung und Validierung. Claude Code ignoriert dieses Feld beim Laden. |
description |
string | Kurze Marktplatzbeschreibung |
version |
string | Marktplatz-Manifest-Version |
metadata.pluginRoot |
string | Verzeichnis, das Claude Code für bare Plugin-Quellnamen auflöst. Siehe Relative Pfade. Erfordert Claude Code v2.1.239 oder später. |
allowCrossMarketplaceDependenciesOn |
array | Andere Marktplätze, von denen Plugins in diesem Marktplatz abhängen können. Abhängigkeiten von einem Marktplatz, der hier nicht aufgelistet ist, werden bei der Installation blockiert. Siehe Von einem Plugin aus einem anderen Marktplatz abhängen. |
renames |
object | Zuordnung von einem früheren Plugin-name zu seinem aktuellen Namen oder zu null, wenn das Plugin entfernt wurde. Ermöglicht es bestehenden Benutzern, automatisch zu migrieren, wenn Sie einen Eintrag in plugins umbenennen oder entfernen. Siehe Plugin umbenennen oder entfernen. Erfordert Claude Code v2.1.193 oder später. |
description und version werden auch unter metadata für Rückwärtskompatibilität akzeptiert.
Plugin-Einträge
Jeder Plugin-Eintrag im plugins-Array beschreibt ein Plugin und wo man es findet. Sie können jedes Feld aus dem Plugin-Manifest-Schema einbeziehen, wie description, version, author, commands und hooks, plus diese Marktplatz-spezifischen Felder: source, category, tags, strict, relevance, headers und headersHelper.
Erforderliche Felder
| Feld | Typ | Beschreibung |
|---|---|---|
name |
string | Plugin-Identifier in Kebab-Case, ohne Leerzeichen, Steuerzeichen oder bidirektionale Formatierungszeichen. Dies ist öffentlich sichtbar: Benutzer sehen es beim Installieren (z. B. /plugin install my-plugin@marketplace). |
source |
string|object | Wo das Plugin abgerufen werden soll (siehe Plugin-Quellen unten) |
Optionale Plugin-Felder
Standard-Metadatenfelder:
| Feld | Typ | Beschreibung |
|---|---|---|
displayName |
string | Benutzerfreundlicher Name, der in UI-Oberflächen angezeigt wird. Fällt auf name zurück, wenn weggelassen. Kann Leerzeichen und beliebige Groß-/Kleinschreibung enthalten. Wird nicht für Namensräume oder Suche verwendet. |
description |
string | Kurze Plugin-Beschreibung |
version |
string | Plugin-Version. Falls gesetzt (hier oder in plugin.json), wird das Plugin auf diese Zeichenkette festgelegt und Benutzer erhalten Updates nur, wenn sie sich ändert. Ein Plugin mit einer command-Quelle wird durch keines der beiden Felder festgelegt. Falls an keiner Stelle gesetzt, kommt die Version aus der nächsten Quelle in Versionsverwaltung. |
author |
object | Plugin-Autoreninformationen (name erforderlich; email und url optional) |
homepage |
string | Plugin-Homepage oder Dokumentations-URL |
repository |
string | Quellcode-Repository-URL |
license |
string | SPDX-Lizenz-Identifier (z. B. MIT, Apache-2.0) |
keywords |
array | Tags für Plugin-Entdeckung und Kategorisierung |
metadata |
object | Freies Objekt für Ihre eigenen Felder, wie Berechtigung oder Katalogdaten. Claude Code liest es nicht. Vor v2.1.222 meldete claude plugin validate den Schlüssel als unbekanntes Feld. |
category |
string | Plugin-Kategorie zur Organisation |
tags |
array | Tags für Suchbarkeit |
strict |
boolean | Steuert, ob plugin.json die Autorität für Komponentendefinitionen ist (Standard: true). Siehe Strict Mode unten. |
relevance |
object | Signale, die Claude Code mitteilen, wann dieses Plugin Benutzern empfohlen werden soll. Wirkt sich nur auf Marktplätze aus, die ein Administrator in verwalteten Einstellungen auf die Whitelist setzt. Siehe Plugins für Ihre Organisation empfehlen. |
defaultEnabled |
boolean | Ob das Plugin nach der Installation aktiviert ist (Standard: true). Setzen Sie auf false, um das Plugin deaktiviert zu installieren, bis sich der Benutzer anmeldet. Hat Vorrang vor dem gleichen Feld in der plugin.json des Plugins. Siehe Standardaktivierung. |
Komponenten-Konfigurationsfelder:
| Feld | Typ | Beschreibung |
|---|---|---|
skills |
string|array | Benutzerdefinierte Pfade zu Skill-Verzeichnissen, die <name>/SKILL.md enthalten |
commands |
string|array | Benutzerdefinierte Pfade zu flachen .md Skill-Dateien oder Verzeichnissen |
agents |
string|array | Benutzerdefinierte Pfade zu Agent-Dateien |
hooks |
string|object | Benutzerdefinierte hooks-Konfiguration oder Pfad zu hooks-Datei |
mcpServers |
string|object | MCP server-Konfigurationen oder Pfad zu MCP-Konfiguration |
lspServers |
string|object | LSP server-Konfigurationen oder Pfad zu LSP-Konfiguration |
Archive-Authentifizierungsfelder:
Setzen Sie diese, wenn der Eintrag eine archive-Quelle auf einem Server hat, der Anmeldedaten erfordert.
| Feld | Typ | Beschreibung |
|---|---|---|
headers |
object | HTTP-Header, die Claude Code beim Download des Archivs dieses Eintrags sendet. Überschreibt die Header des Marktplatzes mit demselben Namen. Erfordert Claude Code v2.1.238 oder später. |
headersHelper |
string | Befehl, der die HTTP-Header für den Archiv-Download dieses Eintrags als ein JSON-Objekt ausgibt, für eine Berechtigung, die abläuft. Siehe Archive-Downloads authentifizieren. Der Eintrag muss auch "strict": false setzen. Erfordert Claude Code v2.1.238 oder später. |
Plugin-Quellen
Plugin-Quellen teilen Claude Code mit, wo jedes einzelne Plugin in Ihrem Marktplatz abgerufen werden soll. Diese werden im source-Feld jedes Plugin-Eintrags in marketplace.json festgelegt.
Claude Code kopiert jedes installierte Plugin in den lokalen versionierten Plugin-Cache unter ~/.claude/plugins/cache, außer für eine command-Quelle im Link-Modus, die Claude Code stattdessen verwendet. Claude Code installiert auch die berechtigten Node.js-Paketabhängigkeiten des Plugins in die zwischengespeicherte Kopie.
| Quelle | Typ | Felder | Notizen |
|---|---|---|---|
| Relativer Pfad | string (z. B. "./my-plugin") |
keine | Lokales Verzeichnis im Marktplatz-Repo. Muss mit ./ beginnen, es sei denn, Sie schreiben einen bloßen Namen unter metadata.pluginRoot. Claude Code löst den Pfad relativ zum Marktplatz-Root auf, nicht zum .claude-plugin/-Verzeichnis |
github |
object | repo, ref?, sha? |
|
url |
object | url, ref?, sha? |
Git-URL-Quelle |
git-subdir |
object | url, path, ref?, sha? |
Unterverzeichnis in einem Git-Repo. Klont sparsam, um die Bandbreite für Monorepos zu minimieren |
npm |
object | package, version?, registry? |
Installiert über npm install |
archive |
object | url, sha256? |
Zip-Archiv, das über HTTPS heruntergeladen wird. Funktioniert ohne Git oder npm auf dem Computer des Benutzers. Erfordert Claude Code v2.1.224 oder später |
command |
object | command, timeout?, mode? |
Plugin-Verzeichnis, das durch Ausführung eines lokalen Befehls erzeugt wird, wird einmal pro Sitzung erneut ausgeführt, um Änderungen zu übernehmen. Erfordert Claude Code v2.1.229 oder später |
Marktplatz-Quellen vs. Plugin-Quellen: Dies sind unterschiedliche Konzepte, die unterschiedliche Dinge steuern.
- Marktplatz-Quelle: wo der
marketplace.json-Katalog selbst abgerufen werden soll. Wird festgelegt, wenn Benutzer/plugin marketplace addausführen oder inextraKnownMarketplaces-Einstellungen. Git-basierte Marktplatz-Quellen unterstützenref(Branch/Tag), aber nichtsha. - Plugin-Quelle: wo ein einzelnes Plugin in der Marktplatz-Liste abgerufen werden soll. Wird im
source-Feld jedes Plugin-Eintrags inmarketplace.jsonfestgelegt. Git-basierte Plugin-Quellen unterstützen sowohlref(Branch/Tag) als auchsha(exakter Commit).
Beispielsweise kann ein Marktplatz, der unter acme-corp/plugin-catalog gehostet wird (Marktplatz-Quelle), ein Plugin auflisten, das von acme-corp/code-formatter abgerufen wird (Plugin-Quelle). Die Marktplatz-Quelle und die Plugin-Quelle verweisen auf unterschiedliche Repositories und werden unabhängig voneinander angeheftet.
Die Git-basierten Quellentypen unten sind github, url und git-subdir. Wenn sowohl ref als auch sha auf einem von ihnen gesetzt sind, ist sha die effektive Anheftung. Claude Code ruft den angehefteten Commit direkt ab und checkt ihn aus.
Auf den meisten Git-Hosts, einschließlich GitHub, GitLab und Bitbucket, bedeutet dies, dass die Installation erfolgreich ist, auch wenn der Branch oder Tag, der durch ref benannt wird, inzwischen upstream gelöscht wurde, solange der Commit noch vom Repository aus erreichbar ist. Einige Server, wie AWS CodeCommit, unterstützen das Abrufen von Commits nach SHA nicht. Auf diesen Servern muss ref noch vorhanden sein und der angeheftete Commit muss von ihm aus erreichbar sein.
Wenn Sie Plugins über Organisationseinstellungen > Plugins verteilen, sind nur einige Quellentypen zulässig. Siehe Verteilung über Organisationseinstellungen.
Relative Pfade
Für Plugins im selben Repository verwenden Sie einen Pfad, der mit ./ beginnt:
{
"name": "my-plugin",
"source": "./plugins/my-plugin"
}
Pfade werden relativ zum Marktplatz-Root aufgelöst, das ist das Verzeichnis, das .claude-plugin/ enthält. Im obigen Beispiel verweist ./plugins/my-plugin auf <repo>/plugins/my-plugin, obwohl marketplace.json unter <repo>/.claude-plugin/marketplace.json lebt. Verwenden Sie nicht ../, um Pfade außerhalb des Marktplatz-Root zu referenzieren.
Ein bloßer Name ist ein einzelner Verzeichnisname ohne /, wie z. B. "formatter". Um bloße Namen statt ./-Pfade zu schreiben, setzen Sie metadata.pluginRoot auf das Verzeichnis, unter dem sie aufgelöst werden. Mit "pluginRoot": "./plugins" löst Claude Code "source": "formatter" zu ./plugins/formatter auf. Erfordert Claude Code v2.1.239 oder später.
metadata.pluginRoot muss selbst ein relativer Pfad im Marktplatz sein. Claude Code ignoriert ihn für eine Quelle, die bereits mit ./ beginnt. Eine Quelle, die ein / enthält, wie z. B. team-a/formatter, ist kein bloßer Name und benötigt immer noch das ./-Präfix, auch wenn metadata.pluginRoot gesetzt ist.
Claude Code löst relative Pfade gegen eine lokale Kopie des Marktplatzes auf, daher funktionieren sie, wenn Benutzer Ihren Marktplatz aus einer Git-Quelle oder einem lokalen Verzeichnis hinzufügen. Wenn Benutzer Ihren Marktplatz über eine direkte URL zur marketplace.json-Datei hinzufügen, werden relative Pfade nicht aufgelöst, da nur diese Datei heruntergeladen wird. Verwenden Sie für URL-basierte Verteilung stattdessen eine andere Plugin-Quelle. Siehe Fehlerbehebung für Details.
GitHub-Repositories
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo"
}
}
Sie können an einen bestimmten Branch, Tag oder Commit anheften:
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo",
"ref": "v2.0.0",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
| Feld | Typ | Beschreibung |
|---|---|---|
repo |
string | Erforderlich. GitHub-Repository im Format owner/repo |
ref |
string | Optional. Git-Branch oder Tag (Standard: Standard-Branch des Repositories) |
sha |
string | Optional. Vollständiger 40-stelliger Git-Commit-SHA zum Anheften an eine exakte Version |
Git-Repositories
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git"
}
}
Sie können an einen bestimmten Branch, Tag oder Commit anheften:
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git",
"ref": "main",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
| Feld | Typ | Beschreibung |
|---|---|---|
url |
string | Erforderlich. Vollständige Git-Repository-URL (https:// oder git@). Das .git-Suffix ist optional, daher funktionieren Azure DevOps- und AWS CodeCommit-URLs ohne das Suffix |
ref |
string | Optional. Git-Branch oder Tag (Standard: Standard-Branch des Repositories) |
sha |
string | Optional. Vollständiger 40-stelliger Git-Commit-SHA zum Anheften an eine exakte Version |
Git-Unterverzeichnisse
Verwenden Sie git-subdir, um auf ein Plugin zu verweisen, das sich in einem Unterverzeichnis eines Git-Repositories befindet. Claude Code verwendet einen sparsamen, teilweisen Klon, um nur das Unterverzeichnis abzurufen und die Bandbreite für große Monorepos zu minimieren.
{
"name": "my-plugin",
"source": {
"source": "git-subdir",
"url": "https://github.com/acme-corp/monorepo.git",
"path": "tools/claude-plugin"
}
}
Sie können an einen bestimmten Branch, Tag oder Commit anheften:
{
"name": "my-plugin",
"source": {
"source": "git-subdir",
"url": "https://github.com/acme-corp/monorepo.git",
"path": "tools/claude-plugin",
"ref": "v2.0.0",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
Das url-Feld akzeptiert auch eine GitHub-Kurzform (owner/repo) oder SSH-URLs (git@github.com:owner/repo.git).
| Feld | Typ | Beschreibung |
|---|---|---|
url |
string | Erforderlich. Git-Repository-URL, GitHub owner/repo-Kurzform oder SSH-URL |
path |
string | Erforderlich. Unterverzeichnispfad im Repo, das das Plugin enthält (z. B. "tools/claude-plugin") |
ref |
string | Optional. Git-Branch oder Tag (Standard: Standard-Branch des Repositories) |
sha |
string | Optional. Vollständiger 40-stelliger Git-Commit-SHA zum Anheften an eine exakte Version |
npm-Pakete
Plugins, die als npm-Pakete verteilt werden, werden mit npm install installiert. Dies funktioniert mit jedem Paket in der öffentlichen npm-Registry oder einer privaten Registry, die Ihr Team hostet.
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin"
}
}
Um an eine bestimmte Version anzuheften, fügen Sie das version-Feld hinzu:
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin",
"version": "2.1.0"
}
}
Um von einer privaten oder internen Registry zu installieren, fügen Sie das registry-Feld hinzu:
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin",
"version": "^2.0.0",
"registry": "https://npm.example.com"
}
}
| Feld | Typ | Beschreibung |
|---|---|---|
package |
string | Erforderlich. Paketname oder Scoped-Paket (z. B. @org/plugin) |
version |
string | Optional. Version oder Versionsspanne (z. B. 2.1.0, ^2.0.0, ~1.5.0) |
registry |
string | Optional. Benutzerdefinierte npm-Registry-URL. Standard ist die System-npm-Registry (normalerweise npmjs.org) |
Zip-Archive
Verwenden Sie archive, um ein Plugin als Zip-Datei zu verteilen, die Claude Code über HTTPS herunterlädt, damit Installationen ohne Git oder npm auf dem Computer des Benutzers funktionieren. Hosten Sie die Datei auf einem beliebigen statischen Dateiserver oder Artefakt-Repository, wie z. B. einem S3-Bucket, einem Artifactory-Repository für generische Artefakte oder nginx. Erfordert Claude Code v2.1.224 oder später. In den Versionen v2.1.120 bis v2.1.223 schlägt die Installation des Plugins mit This plugin uses a source type your Claude Code version does not support. Update Claude Code and try again. fehl; in älteren Versionen kann ein Marktplatz mit einem archive-Eintrag überhaupt nicht geladen werden.
Dieser Eintrag installiert das Plugin aus einer Zip-Datei auf einem Artefakt-Server:
{
"name": "my-plugin",
"source": {
"source": "archive",
"url": "https://artifacts.example.com/claude-plugins/my-plugin-2.1.0.zip"
}
}
Wenn Sie die Zip-Datei erstellen, können Sie den Inhalt des Plugins direkt zippen oder den Plugin-Ordner selbst zippen. Claude Code sucht nach .claude-plugin/ oben im Archiv und dann in einem einzelnen Top-Level-Ordner, daher funktionieren beide Layouts:
my-plugin.zip my-plugin.zip
├── .claude-plugin/ └── my-plugin/
│ └── plugin.json ├── .claude-plugin/
└── commands/ │ └── plugin.json
└── commands/
Claude Code sucht nicht tiefer als einen Ordner, daher schlägt ein Plugin, das tiefer verschachtelt ist, bei der Installation fehl. Claude Code lehnt Archive ab, die größer als 256 MiB sind.
Um die genaue Datei anzuheften, fügen Sie ein sha256-Feld mit dem Digest des Archivs hinzu:
{
"name": "my-plugin",
"source": {
"source": "archive",
"url": "https://artifacts.example.com/claude-plugins/my-plugin-2.1.0.zip",
"sha256": "6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1"
}
}
Wenn die heruntergeladene Datei nicht mit der Anheftung übereinstimmt, lehnt Claude Code die Installation ab und meldet Plugin archive integrity check failed.
Archive-Quellen akzeptieren diese Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
url |
string | Erforderlich. HTTPS-URL des Zip-Archivs. Claude Code lehnt http://-URLs sowie Loopback-, Link-Local- und Cloud-Metadaten-Hosts ab. Jeder Umleitungs-Hop muss die gleichen Regeln erfüllen, oder Claude Code lehnt den Download ab |
sha256 |
string | Optional. SHA-256-Digest des Archivs als 64 Hex-Zeichen, Groß- oder Kleinbuchstaben. Claude Code überprüft jeden Download dagegen und lehnt die Installation bei einer Nichtübereinstimmung ab |
Das sha256-Digest dient auch als Version des Plugins, wenn weder plugin.json noch der Marktplatz-Eintrag eine deklariert. Siehe Versionsverwaltung. Wenn Sie eine version deklarieren, ist diese Versionsnummer das Update-Signal, daher müssen Sie nach dem Ändern der Zip-Datei und ihres Digests auch die Version erhöhen, oder Benutzer behalten die zwischengespeicherte Kopie.
Archive-Downloads authentifizieren
Um einen Archive-Download zu authentifizieren, wie z. B. einen Download aus einer privaten Registry, setzen Sie die HTTP-Header, die Claude Code damit sendet. Setzen Sie headers auf der url-Quelle, von der Sie den Marktplatz registriert haben, wie z. B. einem extraKnownMarketplaces-Eintrag. In Claude Code v2.1.238 oder später können Sie ihn stattdessen auf dem Eintrag des Plugins setzen, neben source.
Wenn der Wert, den Sie in headers einfügen würden, kurzlebig ist, wie z. B. ein Token, den Ihre Registry auf Anfrage ausstellt, setzen Sie stattdessen einen headersHelper-Befehl an derselben Stelle. Claude Code führt den Befehl aus und sendet das JSON-Objekt, das er ausgibt, als Header dieses Ortes. Erfordert Claude Code v2.1.238 oder später.
Der Ort, den Sie wählen, entscheidet, welche Downloads die Header erhalten und wann Claude Code einen headersHelper-Befehl ausführt:
| Ort | Downloads, die die Header erhalten | Wann Claude Code einen headersHelper an diesem Ort ausführt |
|---|---|---|
Marktplatz-url-Quelle |
Archive-Downloads auf dem Ursprung der Marktplatz-URL, d. h. das gleiche Schema, Host und Port | Vor jedem Abrufen der marketplace.json des Marktplatzes und vor jedem Archive-Download auf diesem Ursprung. Claude Code verwendet die Ausgabe eines Laufs bis zu 60 Sekunden lang erneut |
| Plugin-Eintrag | Nur der Download dieses Eintrags | Nur wenn ein Benutzer dieses eine Plugin selbst installiert oder aktualisiert und den Befehl akzeptiert |
Wenn beide Orte einen Header mit dem gleichen Namen setzen, sendet Claude Code den Wert des Eintrags. Innerhalb eines Ortes überschreibt ein Header, den der Befehl ausgibt, einen Header mit dem gleichen Namen in der headers-Liste.
Fügen Sie einen headersHelper zu einem Plugin-Eintrag hinzu
Dieser Eintrag setzt headersHelper neben source. Er setzt auch "strict": false, was Claude Code von einem marketplace.json-Eintrag verlangt, der headersHelper setzt. Mit "strict": false ist der Marktplatz-Eintrag die gesamte Definition des Plugins, daher kann ein Benutzer überprüfen, was das Plugin enthält, bevor er den Befehl akzeptiert:
{
"name": "my-plugin",
"description": "Formatting commands for internal services",
"strict": false,
"commands": "./commands",
"source": {
"source": "archive",
"url": "https://registry.example.com/plugins/my-plugin-2.1.0.zip"
},
"headersHelper": "/opt/bin/mint-registry-token.sh"
}
Um den Eintrag zu überprüfen, führen Sie claude plugin install my-plugin@your-marketplace aus. Claude Code zeigt Ihnen den Befehl und die Archive-URL und lädt die Zip-Datei herunter, nachdem Sie akzeptieren.
Vor v2.1.238 hat Claude Code das Archive eines Eintrags ohne seine headers oder headersHelper heruntergeladen, daher schlugen Installationen, die sich darauf verließen, mit HTTP 401 while downloading plugin archive from fehl, gefolgt von der URL, mit dem Status-Code der Registry anstelle von 401.
Schreiben Sie den headersHelper-Befehl
Ob Sie headersHelper auf einer Marktplatz-url-Quelle oder auf einem Plugin-Eintrag setzen, schreiben Sie den Befehl, um diese Anforderungen zu erfüllen:
- Befehlstext: höchstens 500 Zeichen druckbares ASCII, ohne Lauf von vier oder mehr Leerzeichen.
- Ausgabe: geben Sie ein JSON-Objekt von Header-Namen und Zeichenkettenwerten auf stdout aus, dann beenden Sie mit 0 innerhalb von 10 Sekunden.
- Shell und Arbeitsverzeichnis: Claude Code führt den Befehl durch
shodercmd.exeunter Windows aus, vom Konfigurationsverzeichnis,~/.claudeoderCLAUDE_CONFIG_DIR. Geben Sie einen absoluten Pfad oder einen Befehl aufPATHan, da ein relativer Pfad gegen dieses Verzeichnis aufgelöst wird, nicht gegen das Projekt des Benutzers. - Variablen, die Claude Code entfernt: aus der Umgebung eines Befehls, der in einem
marketplace.json-Eintrag oder in einer Projekt-.claude/settings.jsonoder.claude/settings.local.jsongesetzt ist, entfernt Claude Code jede Variable, deren Name ein Wort wieTOKEN,SECRET,KEYoderAUTHenthält, einschließlichANTHROPIC_API_KEY. Claude Code wendet diese Entfernung nicht auf einen Befehl an, der in Benutzereinstellungen, einer--settings-Datei oder verwalteten Einstellungen gesetzt ist. - Variablen, die Claude Code setzt:
CLAUDE_CODE_MARKETPLACE_URLundCLAUDE_CODE_MARKETPLACE_NAMEfür den Befehl einerurl-Quelle, undCLAUDE_CODE_PLUGIN_NAMEundCLAUDE_CODE_PLUGIN_ARCHIVE_URLfür den Befehl eines Eintrags.CLAUDE_CODE_MARKETPLACE_NAMEist beim ersten Abrufen nach dem Hinzufügen eines Marktplatzes durch URL nicht gesetzt, da dieses Abrufen der Name liefert.
Ein Befehl, der ein Bearer-Token ausstellt, gibt ein Objekt wie dieses aus:
{"Authorization": "Bearer eyJhbGciOiJSUzI1NiJ9"}
Wenn Claude Code einen headersHelper-Befehl überspringt oder seine Ausgabe verwirft
Claude Code führt einen headersHelper-Befehl nicht aus oder verwirft Header, die von headers oder vom Befehl's Ausgabe kamen, in diesen Situationen:
- Befehl schlägt fehl: Wenn der Befehl mit Nicht-Null beendet wird, länger als 10 Sekunden läuft oder etwas anderes als ein JSON-Objekt von Zeichenkettenwerten ausgibt, macht Claude Code den Abruf oder Download nicht, für den er den Befehl ausgeführt hat.
- Marktplatz-URL beginnt nicht mit
https://: Claude Code führt den Befehl dieserurl-Quelle nicht aus und sendet nur die in ihremheaders-Feld aufgelisteten Header. - Umleitung verlässt den Ursprung: Wenn ein Download von der Archive-URL's Ursprung umgeleitet wird, verwirft Claude Code die
headers-Werte und die Befehlsausgabe sowohl der Marktplatz-url-Quelle als auch des Plugin-Eintrags. - Eintrag setzt einen Routing- oder Identity-Header: Claude Code verwirft Request-Routing- und Client-Identity-Namen wie
Host,CookieundX-Forwarded-*aus einem Eintrag'sheadersund Befehlsausgabe und behält Authentifizierungsnamen wieAuthorization. Claude Code filtert jedenmarketplace.json-Eintrag auf diese Weise und einen Inline-Einstellungseintrag je nachdem, welche Datei ihn deklariert. - Befehl in den Einstellungen eines
--add-dir-Verzeichnisses gesetzt: Claude Code ignoriert ihn, auf einerurl-Quelle und auf einem Inline-Plugin-Eintrag gleichermaßen, und sendet nur dieheadersdieser Datei. - Verwaltete Einstellungen blockieren den Befehl: Das Setzen von
disableCommandPluginSourcesauftrueblockiertheadersHelper-Befehle, undallowManagedHooksOnlyblockiert sie auch, es sei denn,disableCommandPluginSourcesist explizitfalse. Unter einer dieser Blockierungen führt Claude Code den Befehl immer noch für einen Marktplatz aus, den verwaltete Einstellungen selbst deklarieren.
Wie Benutzer einen headersHelper-Befehl akzeptieren
Ein Benutzer akzeptiert den Befehl eines Plugin-Eintrags jedes Mal, wenn er dieses eine Plugin selbst installiert oder aktualisiert, aus der eigenen Ansicht des Plugins in /plugin oder mit claude plugin install oder claude plugin update. Claude Code zeigt den Befehl und die Archive-URL und führt den Befehl nur aus, nachdem der Benutzer akzeptiert. In einer nicht-interaktiven Shell übergeben Sie --yes, um ihn zu akzeptieren.
Claude Code führt nur den Befehl aus, den er angezeigt hat, für die Archive-URL, die er angezeigt hat. Wenn sich der Befehl oder die Archive-URL des Eintrags dazwischen geändert haben, lehnt Claude Code die Installation oder Aktualisierung ab. Eine Änderung nur in der Abfragezeichenkette zählt nicht.
Installationen und Aktualisierungen, die den Befehl ablehnen, statt zu fragen
Bei jeder Operation außer einer einzelnen Plugin-Installation oder Aktualisierung führt Claude Code den Befehl eines Eintrags nicht aus und lädt sein Archive nicht herunter, daher bleibt das Plugin bei seiner installierten Version oder bleibt deinstalliert. Was der Benutzer sieht, hängt von der Operation ab:
- Installation mehrerer Plugins gleichzeitig, aus einem Plugin-Vorschlag oder als Abhängigkeit eines anderen Plugins: Claude Code lehnt das Plugin mit dem Befehl ab und verweist den Benutzer auf die eigene Ansicht dieses Plugins in
/plugin. Die anderen Plugins in einer Masseninstallation werden immer noch installiert. Ein Plugin, das vom abgelehnten Plugin abhängt, schlägt bei der Installation fehl, bis der Benutzer das abgelehnte Plugin selbst installiert. - Hintergrund-Auto-Update oder Sitzungsstart für ein Plugin, dessen Archive nie heruntergeladen wurde: Claude Code listet das Plugin auf der Registerkarte
/pluginFehler auf, damit der Benutzer weiß, dass er es manuell installieren oder aktualisieren muss. Ein Auto-Update, das die Ankündigung der installierten Version findet, listet nichts auf.
Wenn der headersHelper-Befehl einer Marktplatz-`url`-Quelle ausgeführt wird
Ein headersHelper einer Marktplatz-url-Quelle wird in einer Einstellungsdatei deklariert, wie z. B. einem extraKnownMarketplaces-Eintrag, statt im Katalog, den der Marktplatz veröffentlicht, daher fragt Claude Code den Benutzer nicht, ihn bei jeder Installation oder Aktualisierung zu akzeptieren. Die Einstellungsdatei, die ihn deklariert, entscheidet, wann Claude Code ihn ausführt:
| Einstellungsdatei | Wann Claude Code den Befehl ausführt |
|---|---|
Benutzereinstellungen, eine --settings-Datei oder eine verwaltete Einstellungsdatei auf dem Computer |
Ohne zu fragen, einschließlich während einer Hintergrund-Marktplatz-Aktualisierung |
Eine Projekt-.claude/settings.json oder .claude/settings.local.json |
Nur nachdem der Benutzer den Workspace-Trust-Dialog für diesen Ordner selbst akzeptiert. Eine -p- oder SDK-Sitzung zählt nicht als Akzeptanz, und auch nicht das Vertrauen, das einem übergeordneten Ordner gewährt wird |
| Server-verwaltete Einstellungen | Nur nachdem der Benutzer die bereitgestellten Einstellungen im Sicherheitsgenehmigungsdialog genehmigt |
In einer -p- oder SDK-Sitzung kann Claude Code den Sicherheitsgenehmigungsdialog nicht anzeigen. Es wendet die anderen bereitgestellten Einstellungen an, aber der Marktplatz-Abruf und jeder Archive-Download, der den Befehl benötigt, schlägt fehl, bis ein Benutzer in einer interaktiven Sitzung genehmigt hat.
Für einen Inline-Plugin-Eintrag in einer dieser Dateien verlangt Claude Code das gleiche Ordner-Vertrauen oder die gleiche Einstellungsgenehmigung wie für einen Marktplatz-Befehl in dieser Datei, und der Benutzer akzeptiert auch den Befehl des Eintrags bei jeder Installation oder Aktualisierung.
Command-Quellen
Verwenden Sie command, wenn ein lokal installiertes Tool das Plugin-Verzeichnis erzeugt, wie z. B. eine IDE, die ihr Plugin für die aktuell ausgewählte Toolchain rendert. Claude Code führt den Befehl aus, wenn der Benutzer das Plugin installiert, und führt ihn im Hintergrund einmal pro Sitzung erneut aus, damit Ihre Benutzer die geänderte Ausgabe des Tools ohne Neuinstallation übernehmen. Erfordert Claude Code v2.1.229 oder später. In v2.1.120 bis v2.1.228 schlägt die Installation des Plugins mit This plugin uses a source type your Claude Code version does not support. Update Claude Code and try again. fehl, und in älteren Versionen kann der ganze Marktplatz nicht geladen werden.
Dieser Eintrag installiert das Plugin aus dem Verzeichnis, das das Tool ausgibt:
{
"name": "my-plugin",
"source": {
"source": "command",
"command": "my-tool claude-plugin-path"
}
}
Claude Code führt den Befehl durch die Plattform-Shell aus, sh unter macOS und Linux oder cmd.exe unter Windows, vom Home-Verzeichnis des Benutzers. Der Befehl muss genau eine Zeile auf stdout ausgeben und mit Code 0 beenden. Diese Zeile ist der absolute Pfad eines Verzeichnisses, das das komplette Plugin enthält, wenn der Befehl beendet wird, und der Pfad kann sich zwischen Läufen ändern.
Claude Code stoppt einen Befehl, der länger als timeout Sekunden läuft, und die Installation oder Aktualisierung schlägt fehl. Claude Code lehnt auch den ausgegebenen Pfad in diesen Fällen ab, und die Installation oder Aktualisierung schlägt auf die gleiche Weise fehl:
- Das Verzeichnis hat keinen Plugin-Inhalt auf seiner obersten Ebene, wie z. B. ein
.claude-plugin/-Verzeichnis oder einskills/-,commands/-,agents/- oderhooks/-Verzeichnis - Das Verzeichnis ist das, in dem Claude Code gestartet wurde, oder eines seiner übergeordneten Verzeichnisse
- Unter Windows ist der Pfad ein UNC-Pfad
Command-Quellen akzeptieren diese Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
command |
string | Erforderlich. Shell-Befehl, der den absoluten Pfad des Plugin-Verzeichnisses als einzelne Zeile auf stdout ausgibt und 0 beendet. Muss druckbares ASCII sein, höchstens 500 Zeichen, ohne Läufe von vier oder mehr Leerzeichen, damit Benutzer den ganzen Befehl überprüfen können, den sie akzeptieren sollen |
timeout |
number | Optional. Ganze Anzahl von Sekunden, die auf den Befehl gewartet werden soll, bevor aufgegeben wird (Standard: 60, Maximum: 600) |
mode |
string | Optional. "copy" (Standard) kopiert das ausgegebene Verzeichnis in den Plugin-Cache. "link" verwendet das ausgegebene Verzeichnis an Ort und Stelle. Siehe Copy-Modus und Link-Modus |
Copy-Modus und Link-Modus
Mit dem Standard "mode": "copy" kopiert Claude Code das ausgegebene Verzeichnis in den versionierten Plugin-Cache und leitet die Plugin-Version von einem Hash des Verzeichnisinhalts ab. Ihr Tool kann das Verzeichnis nach dem Befehlsende löschen oder umschreiben, und ein erneuter Lauf, der identischen Inhalt erzeugt, zählt als aktuell. Claude Code lehnt die Installation eines Verzeichnisses ab, das größer als 256 MiB ist oder mehr als 20.000 Einträge enthält.
Setzen Sie "mode": "link" für große Plugin-Verzeichnisse, die nicht kopiert werden sollten, wie z. B. ein gerenderter SDK-Export. Claude Code füllt den Plugin-Cache-Eintrag mit einem Link zu jedem Top-Level-Eintrag des ausgegebenen Verzeichnisses und verwendet die Dateien an Ort und Stelle, daher wird nichts kopiert, Dateiinhalte werden nicht gehasht, und die Größenlimits gelten nicht. Die Installation schlägt fehl, wenn ein Top-Level-Eintrag ein Symlink ist, der außerhalb des ausgegebenen Verzeichnisses verweist. Claude Code überspringt auch die Node.js-Paketabhängigkeitsinstallation für ein Link-Modus-Plugin, daher geben Sie ein Verzeichnis aus, das bereits alle node_modules enthält, die das Plugin benötigt.
Halten Sie das ausgegebene Verzeichnis an Ort und Stelle, solange das Plugin installiert bleibt, da Claude Code das Plugin bei jedem Start durch diese Links lädt. Claude Code leitet die Plugin-Version vom echten Pfad des ausgegebenen Verzeichnisses und seinen Top-Level-Einträgen ab, nicht von den Dateien darin, daher geben Sie einen anderen Pfad aus, um neuen Inhalt zu signalisieren. In einer Sitzung, die im ausgegebenen Verzeichnis oder irgendwo darunter gestartet wird, lädt Claude Code das Plugin überhaupt nicht.
Claude Code unterstützt Link-Modus nicht unter Windows und lehnt die Installation eines Link-Modus-Plugins dort ab. Deklarieren Sie stattdessen "mode": "copy".
Wie Benutzer den Befehl akzeptieren
Claude Code führt Ihren Befehl auf dem Computer des Benutzers aus, daher bindet jeder Lauf an die explizite Akzeptanz des Benutzers:
- Wenn Benutzer das Plugin aus seinem Detailbildschirm in
/plugininstallieren oder es mitclaude plugin installoderclaude plugin updatein einem interaktiven Terminal installieren oder aktualisieren, zeigt Claude Code ihnen zuerst die genaue Befehlszeichenkette und zeichnet den akzeptierten Befehl für diese Installation auf. Einclaude plugin update, das auf der aufgezeichneten Akzeptanz des gleichen Befehls fortfahren kann, zeigt nichts. In einer nicht-interaktiven Shell, wie z. B. einem Bereitstellungsskript, übergeben Sie--yesanclaude plugin installoderclaude plugin update, um den Befehl zu akzeptieren, den es ausgibt. - Jeder andere Pfad führt nur den Befehl aus, den der Benutzer bereits akzeptiert hat. Dies umfasst Updates, die von
/plugingestartet werden, und die Hintergrund-Läufe, die in Wenn Claude Code den Befehl erneut ausführt beschrieben sind. Wenn keiner akzeptiert wurde, lehnt Claude Code die Ausführung des Befehls ab und teilt dem Benutzer mit, wie er ihn überprüfen kann. Claude Code installiert niemals ein Command-Quellen-Plugin als Abhängigkeit eines anderen Plugins, daher installieren Benutzer es selbst zuerst. - Wenn Sie den Eintrag's
commandändern oder seinenmodewechseln, behalten Benutzer die Version, die sie bereits haben, und Claude Code stoppt die erneute Ausführung des Befehls. In interaktiven Sitzungen zeigt die Registerkarte/pluginFehler den neuen Befehl, bis der Benutzer ihn überprüft und akzeptiert, indem erclaude plugin update <plugin>@<marketplace>ausführt.
Administratoren können Command-Quellen in einer Organisation mit der verwalteten Einstellung disableCommandPluginSources blockieren. Wenn eine Organisation allowManagedHooksOnly setzt, blockiert Claude Code Command-Quellen standardmäßig.
Wenn Claude Code den Befehl erneut ausführt
Das ausgegebene Verzeichnis spiegelt den Zustand des Tools zum Zeitpunkt der Befehlsausführung wider, daher führt Claude Code den Befehl zu diesen Zeiten erneut aus:
- Jedes Mal, wenn der Benutzer das Plugin installiert oder aktualisiert
- Einmal pro Sitzung für jedes aktivierte Command-Quellen-Plugin, im Hintergrund, kurz nach dem Sitzungsstart. Dieser Lauf geht nicht durch die Marktplatz-Auto-Update, daher hängt er nicht von der Auto-Update-Einstellung des Marktplatzes ab
- Beim Start oder auf
/reload-plugins, wenn die installierte Version eines aktivierten Plugins im Plugin-Cache fehlt
Claude Code überspringt die zwei Hintergrund-Läufe, wenn der Benutzer CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC setzt. Explizite Installationen und Aktualisierungen führen den Befehl immer noch mit dieser Variable gesetzt aus.
Wenn sich die gehashte Ausgabe des Befehls geändert hat, installiert Claude Code das Ergebnis als neue Version und lädt es in der laufenden interaktiven Sitzung erneut, wobei die gleichen Komponenten gewechselt werden, die /reload-plugins wechselt. Der Benutzer sieht eine Benachrichtigung, dass das Plugin erneut geladen wurde. Wenn das Neuladen an Ort und Stelle den Prompt-Cache der Sitzung ungültig machen würde, fordert Claude Code den Benutzer stattdessen auf, /reload-plugins auszuführen, was vor den Cache-Kosten warnt und angewendet wird, wenn es mit --force erneut ausgeführt wird.
Erweiterte Plugin-Einträge
Dieses Beispiel zeigt einen Plugin-Eintrag mit vielen optionalen Feldern, einschließlich benutzerdefinierter Pfade für Befehle, Agents, hooks und MCP-Server:
{
"name": "enterprise-tools",
"source": {
"source": "github",
"repo": "company/enterprise-plugin"
},
"description": "Enterprise workflow automation tools",
"version": "2.1.0",
"author": {
"name": "Enterprise Team",
"email": "enterprise@example.com"
},
"homepage": "https://docs.example.com/plugins/enterprise-tools",
"repository": "https://github.com/company/enterprise-plugin",
"license": "MIT",
"keywords": ["enterprise", "workflow", "automation"],
"category": "productivity",
"commands": [
"./commands/core/",
"./commands/enterprise/",
"./commands/experimental/preview.md"
],
"agents": ["./agents/security-reviewer.md", "./agents/compliance-checker.md"],
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"
}
]
}
]
},
"mcpServers": {
"enterprise-db": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"]
}
},
"strict": false
}
Wichtige Dinge zu beachten:
commandsundagents: Sie können mehrere Verzeichnisse oder einzelne Dateien angeben. Pfade sind relativ zum Plugin-Root und müssen darin bleiben.- Claude Code lehnt einen Pfad ab, der außerhalb des Plugin-Verzeichnisses aufgelöst wird, wie z. B.
./../shared.md, mit einempath escapes plugin directory-Fehler ab und lädt das Plugin immer noch ohne diese Komponente
- Claude Code lehnt einen Pfad ab, der außerhalb des Plugin-Verzeichnisses aufgelöst wird, wie z. B.
${CLAUDE_PLUGIN_ROOT}: Verwenden Sie diese Variable in Hook-Befehlen und MCP-Server-Konfigurationen, um auf Dateien im Installationsverzeichnis des Plugins zu verweisen.- Siehe die Substitutionstabelle für welche Konfigurationsfelder sie pro Servertyp ersetzen
- Verwenden Sie für Abhängigkeiten oder Status, die Plugin-Updates überstehen sollten, stattdessen
${CLAUDE_PLUGIN_DATA}
strict: false: Da dies auf false gesetzt ist, benötigt das Plugin keine eigeneplugin.json. Der Marktplatz-Eintrag definiert alles. Siehe Strict Mode unten.
Standardmäßig werden die Skills eines Plugins aus dem skills/-Verzeichnis unter seiner source geladen. Pfade, die im skills-Feld aufgelistet sind, werden zu diesem Scan hinzugefügt:
"skills": ["./skills/", "./extra-skills/"]
Wenn mehrere Plugin-Einträge einen skills/-Ordner im Marktplatz-Root gemeinsam nutzen (source: "./"), listen Sie stattdessen bestimmte Unterverzeichnisse auf, damit jeder Eintrag nur seine eigenen Skills lädt:
"source": "./",
"skills": ["./skills/code-review", "./skills/docs"]
Mit einer Marktplatz-Root-Quelle ist die aufgelistete Pfadliste die vollständige Menge für diesen Eintrag, und andere Verzeichnisse im gemeinsamen skills/-Ordner werden nicht geladen. Das Auflisten des skills/-Verzeichnisses selbst oder des Plugin-Root behält den vollständigen Scan bei. Wenn keiner der aufgelisteten Pfade existiert, wird stattdessen der Standard-Scan ausgeführt.
Strict Mode
Das strict-Feld steuert, ob plugin.json die Autorität für Komponentendefinitionen ist (skills, Agents, hooks, MCP-Server, Ausgabestile).
| Wert | Verhalten |
|---|---|
true (Standard) |
plugin.json ist die Autorität. Der Marktplatz-Eintrag kann es mit zusätzlichen Komponenten ergänzen, und beide Quellen werden zusammengeführt. |
false |
Der Marktplatz-Eintrag ist die gesamte Definition. Wenn das Plugin auch eine plugin.json hat, die Komponenten deklariert, ist das ein Konflikt und das Plugin kann nicht geladen werden. |
Wann jeder Modus verwendet werden sollte:
strict: true: Das Plugin hat seine eigeneplugin.jsonund verwaltet seine eigenen Komponenten. Der Marktplatz-Eintrag kann zusätzliche Skills oder hooks hinzufügen. Dies ist der Standard und funktioniert für die meisten Plugins.strict: false: Der Marktplatz-Betreiber möchte vollständige Kontrolle. Das Plugin-Repo stellt Rohdateien bereit, und der Marktplatz-Eintrag definiert, welche dieser Dateien als Skills, Agents, hooks usw. verfügbar gemacht werden. Nützlich, wenn der Marktplatz die Komponenten eines Plugins anders strukturiert oder kuratiert als vom Plugin-Autor beabsichtigt.
Marktplätze hosten und verteilen
Auf GitHub hosten (empfohlen)
GitHub ist die empfohlene Methode zum Hosten und Verteilen eines Marktplatzes:
- Repository erstellen: Richten Sie ein neues Repository für Ihren Marktplatz ein
- Marktplatzdatei hinzufügen: Erstellen Sie
.claude-plugin/marketplace.jsonmit Ihren Plugin-Definitionen - Mit Teams teilen: Benutzer fügen Ihren Marktplatz mit
/plugin marketplace add owner/repohinzu
Vorteile: Integrierte Versionskontrolle, Issue-Tracking und Team-Zusammenarbeitsfunktionen.
Auf anderen Git-Services hosten
Jeder Git-Hosting-Service funktioniert, wie GitLab, Bitbucket und selbstgehostete Server. Benutzer fügen mit der vollständigen Repository-URL hinzu:
/plugin marketplace add https://gitlab.com/company/plugins.git
Private Repositories
Claude Code unterstützt die Installation von Plugins aus privaten Repositories. Wenn Sie Ihren Marktplatz stattdessen über Organisationseinstellungen > Plugins verteilen, sind Ihre Git-Anmeldedaten nicht beteiligt: Die Organisationssynchronisierung liest das Marktplatz-Repository über die Claude GitHub App oder Ihre GitHub Enterprise App der Organisation, und eine Plugin-Quelle, die sie nicht authentifizieren kann, muss öffentlich sein. Siehe Über Organisationseinstellungen verteilen für die vollständigen Regeln.
Befehle, die Sie ausführen
Wenn Sie /plugin marketplace add, /plugin install, /plugin update oder /plugin marketplace update ausführen, verwendet Claude Code Ihre vorhandenen Git-Credential-Helper, daher funktioniert HTTPS-Zugriff über gh auth login, macOS Keychain oder git-credential-store genauso wie in Ihrem Terminal. SSH-Zugriff funktioniert, solange der Host bereits in Ihrer known_hosts-Datei vorhanden ist und der Schlüssel in ssh-agent geladen ist, da Claude Code interaktive SSH-Eingabeaufforderungen für den Host-Fingerprint und die Schlüsselpassphrase unterdrückt. GitHub owner/repo-Kurzform-Quellen klonen standardmäßig über SSH; legen Sie CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1 fest, um sie stattdessen über HTTPS zu klonen.
Hintergrund-Auto-Updates
Standardmäßig deaktiviert die Hintergrund-Aktualisierung Git-Credential-Helper für seinen git pull, sodass der Pull sich nicht bei privaten Repositories über HTTPS authentifizieren kann, auch wenn ein Helper konfiguriert ist. SSH-Remotes sind nicht betroffen: Ein in ssh-agent geladener Schlüssel authentifiziert Hintergrund-Pulls genauso wie die Befehle, die Sie ausführen. Wenn der Hintergrund-Pull fehlschlägt, greift Claude Code auf das erneute Klonen des Marktplatzes von Grund auf zurück. Das erneute Klonen verwendet Ihre gespeicherten Git-Anmeldedaten, kann aber bei großen Repositories zeitlich überschritten werden, daher können Auto-Updates für private Marktplätze intermittierend fehlschlagen.
Zwei Einstellungen machen private Marktplätze vorhersehbar:
- Legen Sie
CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1fest, um den vorhandenen Klon beizubehalten, wenn der Hintergrund-Pull fehlschlägt, anstatt zu löschen und erneut zu klonen. Ihre Plugins funktionieren weiterhin aus dem letzten synchronisierten Zustand, und manuelle Updates mit/plugin marketplace updateziehen immer noch mit Ihren Anmeldedaten. - Konfigurieren Sie einen Git-Credential-Helper, beispielsweise mit
gh auth setup-gitfür GitHub, damit das erneute Klonen-Fallback sich ohne Eingabeaufforderung authentifizieren kann.
Das Festlegen eines Provider-Tokens wie GITHUB_TOKEN in Ihrer Umgebung ermöglicht nicht von selbst die Hintergrund-Authentifizierung. Tokens wirken sich nur durch einen konfigurierten Credential-Helper aus, beispielsweise den Helper der gh CLI, der GH_TOKEN und GITHUB_TOKEN liest.
Um den Hintergrund-Pull selbst über HTTPS zu authentifizieren, konfigurieren Sie ein globales Git-URL-Rewrite. Das Rewrite bettet ein Token in die Remote-URL ein, sodass es wirksam wird, obwohl der Hintergrund-Pull Credential-Helper deaktiviert, und ein erfolgreicher Pull überspringt das erneute Klonen-Fallback. Das folgende Beispiel schreibt die URL des Marktplatz-Repositories um, um ein Zugriffs-Token einzuschließen:
git config --global url."https://x-access-token:YOUR_TOKEN@github.com/acme-corp/plugins".insteadOf "https://github.com/acme-corp/plugins"
Beschränken Sie das Rewrite auf den Marktplatz-Repository oder Organisations-Pfad. Ein Rewrite, dessen Basis nur der Host ist, gilt für jeden Abruf und Push zu diesem Host auf der Maschine und überschreibt Ihre normalen Anmeldedaten, einschließlich Pushes zu Ihren eigenen Repositories.
Jeder Provider erwartet einen anderen Benutzernamen in der umgeschriebenen URL, und die gleiche Pfad-Scoping gilt für jeden Provider. Für selbstgehostete Server ersetzen Sie den Hostnamen durch den Hostnamen Ihres Servers:
| Provider | Umgeschriebene URL-Form |
|---|---|
| GitHub | https://x-access-token:YOUR_TOKEN@github.com/acme-corp/plugins |
| GitLab | https://oauth2:YOUR_TOKEN@gitlab.com/acme-corp/plugins |
| Bitbucket | https://x-token-auth:YOUR_TOKEN@bitbucket.org/acme-corp/plugins |
Das Rewrite speichert das Token im Klartext in Ihrer Gitconfig, daher verwenden Sie ein Token mit Nur-Lese-Zugriff auf das Marktplatz-Repository.
Konfigurieren Sie in CI/CD-Umgebungen einen Git-Credential-Helper, bevor Sie Plugins aus privaten Repositories installieren. Auf GitHub Actions exportieren Sie ein Token mit Lesezugriff auf das Marktplatz-Repository als GH_TOKEN, führen Sie dann gh auth setup-git aus. Das Standard-Workflow-Token kann nur auf das eigene Repository des Workflows zugreifen, daher benötigt ein privater Marktplatz in einem anderen Repository ein persönliches Zugriffs-Token oder App-Token. Ein globales URL-Rewrite, das in der Pipeline konfiguriert ist, authentifiziert auch den Hintergrund-Pull direkt.
Über Organisationseinstellungen verteilen
Wenn Sie Plugins über Organisationseinstellungen > Plugins in einem Team- oder Enterprise-Plan verteilen, gelten diese Quellregeln:
- Das Marktplatz-Repository muss privat oder intern sein. Die Organisationssynchronisierung liest es über die Claude GitHub App oder Ihre GitHub Enterprise App der Organisation.
- Jede Plugin-Quelle muss vom Typ
github,urlodergit-subdirsein, oder ein relativer Pfad, der mit./beginnt. Wenn Sie ein Plugin untermetadata.pluginRootnach bloßem Namen auflisten, lehnt die Organisationssynchronisierung es als nicht unterstützte Quelle ab, daher schreiben Sie den Pfad aus, wie./plugins/deploy-tools. - Eine Plugin-Quelle kann in zwei Fällen privat sein:
- Eine github.com-Quelle, die den Besitzer des Marktplatz-Repositories teilt
- Eine Quelle auf Ihrem GitHub Enterprise-Host der Organisation mit der GHE App, die auf dem Repository installiert ist
- Die Organisationssynchronisierung ruft jede andere Quelle ohne Anmeldedaten ab, daher müssen github.com-Repositories unter einem anderen Besitzer und Repositories auf anderen Hosts wie GitLab oder Bitbucket öffentlich sein.
Siehe Plugins für Ihre Organisation verwalten für den Admin-Workflow.
Um private Plugins einzuschließen, platzieren Sie die Plugin-Ordner im Marktplatz-Repository und verweisen Sie auf sie mit einem relativen Pfad. Die Organisationssynchronisierung verpackt jedes Plugin während der Verteilung, daher benötigen Benutzer niemals Zugriff auf ein separates Quell-Repository.
Beispielsweise verweist dieser marketplace.json-Plugin-Eintrag auf ein Plugin, das Sie unter plugins/deploy-tools im Marktplatz-Repository committed haben:
{
"name": "deploy-tools",
"source": "./plugins/deploy-tools"
}
Halten Sie ausführbare Dateien aus dem Top-Level-bin-Verzeichnis heraus
Schließen Sie kein Top-Level-bin/-Verzeichnis in Plugins ein, die Sie über Organisationseinstellungen verteilen. claude.ai lehnt ein Plugin ab, das eines hat, unabhängig davon, ob das Plugin durch Marktplatz-Synchronisierung oder direktes Hochladen ankommt:
- Marktplatz-Synchronisierung: Die Organisationssynchronisierung lehnt dieses Plugin ab und synchronisiert den Rest des Marktplatzes. Die Fehlermeldung beginnt mit
Plugin contains a top-level bin/ directory. - Direktes Hochladen: Wenn Sie das Plugin stattdessen in Organisationseinstellungen > Plugins hochladen, lehnt claude.ai das Hochladen mit der gleichen Meldung ab.
Halten Sie ausführbare Dateien in einem anderen Verzeichnis, wie scripts/, und verweisen Sie auf sie als ${CLAUDE_PLUGIN_ROOT}/scripts/<name> aus Ihren Skills, Hooks oder MCP-Server-Konfigurationen.
Marktplätze für Ihr Team erforderlich machen
Sie können Ihr Repository so konfigurieren, dass Claude Code Ihren Marktplatz für Teammitglieder hinzufügt, sobald sie dem Projektordner vertrauen, ohne separate Eingabeaufforderung. Fügen Sie Ihren Marktplatz zu .claude/settings.json hinzu:
{
"extraKnownMarketplaces": {
"company-tools": {
"source": {
"source": "github",
"repo": "your-org/claude-plugins"
}
}
}
}
Sie können auch angeben, welche Plugins standardmäßig aktiviert sein sollen:
{
"enabledPlugins": {
"code-formatter@company-tools": true,
"deployment-tools@company-tools": true
}
}
Für vollständige Konfigurationsoptionen siehe Plugin-Einstellungen.
Wenn Sie eine lokale directory- oder file-Quelle mit einem relativen Pfad verwenden, wird der Pfad gegen den Haupt-Checkout Ihres Repositories aufgelöst. Wenn Sie Claude Code aus einem Git Worktree ausführen, verweist der Pfad immer noch auf den Haupt-Checkout, sodass alle Worktrees denselben Marktplatz-Speicherort teilen. Der Marktplatz-Status wird einmal pro Benutzer in ~/.claude/plugins/known_marketplaces.json gespeichert, nicht pro Projekt.
Plugins für Container vorab ausfüllen
Für Container-Images und CI-Umgebungen können Sie ein Plugins-Verzeichnis zur Build-Zeit vorab ausfüllen, damit Claude Code mit bereits verfügbaren Marktplätzen und Plugins startet, ohne zur Laufzeit etwas zu klonen. Legen Sie die Umgebungsvariable CLAUDE_CODE_PLUGIN_SEED_DIR fest, um auf dieses Verzeichnis zu verweisen.
Um mehrere Seed-Verzeichnisse zu schichten, trennen Sie Pfade mit : auf Unix oder ; auf Windows. Claude Code durchsucht jedes Verzeichnis in der Reihenfolge und verwendet den ersten Seed, der einen bestimmten Marktplatz oder Plugin-Cache enthält.
Das Seed-Verzeichnis spiegelt die Struktur von ~/.claude/plugins:
$CLAUDE_CODE_PLUGIN_SEED_DIR/
known_marketplaces.json
marketplaces/<name>/...
cache/<marketplace>/<plugin>/<version>/...
Um ein Seed-Verzeichnis zu erstellen, führen Sie Claude Code einmal während des Image-Builds aus, installieren Sie die benötigten Plugins, kopieren Sie dann das resultierende ~/.claude/plugins-Verzeichnis in Ihr Image und verweisen Sie CLAUDE_CODE_PLUGIN_SEED_DIR darauf.
Um den Kopierungsschritt zu überspringen, legen Sie CLAUDE_CODE_PLUGIN_CACHE_DIR während des Builds auf Ihren Ziel-Seed-Pfad fest, damit Plugins direkt dort installiert werden:
CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin marketplace add your-org/plugins
CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin install my-tool@your-plugins
Legen Sie dann CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed in der Laufzeitumgebung Ihres Containers fest, damit Claude Code beim Start aus dem Seed liest.
Beim Start registriert Claude Code Marktplätze, die in der Seed-Datei known_marketplaces.json gefunden werden, in der primären Konfiguration und verwendet Plugin-Caches, die unter cache/ gefunden werden, ohne erneut zu klonen. Dies funktioniert sowohl im interaktiven Modus als auch im nicht-interaktiven Modus mit dem -p-Flag.
Verhaltensdetails:
- Schreibgeschützt: Das Seed-Verzeichnis wird nie geschrieben. Auto-Updates sind für Seed-Marktplätze deaktiviert, da git pull auf einem schreibgeschützten Dateisystem fehlschlagen würde.
- Seed-Einträge haben Vorrang: Marktplätze, die in der Seed deklariert sind, überschreiben alle übereinstimmenden Einträge in der Benutzerkonfiguration bei jedem Start. Um sich von einem Seed-Plugin abzumelden, verwenden Sie
/plugin disable, anstatt den Marktplatz zu entfernen. - Pfadauflösung: Claude Code lokalisiert Marktplatz-Inhalte, indem es
$CLAUDE_CODE_PLUGIN_SEED_DIR/marketplaces/<name>/zur Laufzeit durchsucht, nicht indem es Pfaden vertraut, die in der Seed-JSON gespeichert sind. Dies bedeutet, dass die Seed korrekt funktioniert, auch wenn sie an einem anderen Pfad als dort, wo sie erstellt wurde, bereitgestellt wird. - Mutation ist blockiert: Das Ausführen von
/plugin marketplace removeoder/plugin marketplace updategegen einen Seed-verwalteten Marktplatz schlägt mit Anleitung fehl, um Ihren Administrator zu bitten, das Seed-Image zu aktualisieren. - Komponiert mit Einstellungen: Wenn
extraKnownMarketplacesoderenabledPluginseinen Marktplatz deklarieren, der bereits in der Seed vorhanden ist, verwendet Claude Code die Seed-Kopie, anstatt zu klonen.
Verwaltete Marktplatz-Einschränkungen
Für Organisationen, die strikte Kontrolle über Plugin-Quellen benötigen, können Administratoren einschränken, welche Plugin-Marktplätze Benutzer hinzufügen dürfen, indem sie die Einstellung strictKnownMarketplaces in verwalteten Einstellungen verwenden. Um auch die CLI-Flags abzulehnen, die Plugins, Agenten und MCP-Server für einen einzelnen Durchlauf seitenladen, kombinieren Sie es mit disableSideloadFlags. Um eine Zulassungsliste zu erstellen, welche Plugins von Marktplätzen als kontextuelle Installationsvorschläge angezeigt werden können, legen Sie pluginSuggestionMarketplaces fest.
strictKnownMarketplaces stimmt mit dem Marktplatz überein, aus dem ein Plugin stammt, nicht mit den Einträgen darin, daher können Benutzer immer noch ein Plugin mit einer command-Quelle aus einem zulässigen Marktplatz installieren. Um Command-Quellen auch zu blockieren, legen Sie disableCommandPluginSources fest.
Wenn strictKnownMarketplaces in verwalteten Einstellungen konfiguriert ist, hängt das Einschränkungsverhalten vom Wert ab:
| Wert | Verhalten |
|---|---|
| Nicht definiert (Standard) | Keine Einschränkungen. Benutzer können jeden Marktplatz hinzufügen |
Leeres Array [] |
Vollständige Sperrung. Blockiert jeden Marktplatz-Quelltyp, einschließlich des offiziellen Anthropic-Marktplatzes |
| Liste von Quellen | Zulassungsliste erzwungen. Benutzer können nur Marktplätze hinzufügen, die einem Eintrag entsprechen |
Häufige Konfigurationen
Deaktivieren Sie alle Marktplatz-Ergänzungen, einschließlich des offiziellen Anthropic-Marktplatzes:
{
"strictKnownMarketplaces": []
}
Nur den offiziellen Anthropic-Marktplatz zulassen. Der Abgleich für einen einzelnen Repository-Eintrag ist exakt, daher deckt dieser Eintrag keine ref- oder path-Varianten desselben Repositories ab:
{
"strictKnownMarketplaces": [
{
"source": "github",
"repo": "anthropics/claude-plugins-official"
}
]
}
Mit diesem Eintrag behält Claude Code einen bereits registrierten offiziellen Marktplatz verfügbar und registriert den Marktplatz auf einer neuen Maschine automatisch beim ersten Mal, wenn Sie Claude Code interaktiv starten.
Die automatische Registrierung deckt nicht jede Maschine ab. Sie fehlt am häufigsten:
- Nicht-interaktive Umgebungen, die vor dem ersten interaktiven Start der Maschine ausgeführt werden.
- Maschinen, auf denen Claude Code bereits interaktiv unter einer Richtlinie ausgeführt wurde, die den Marktplatz blockierte, wie die Sperrung mit leerem Array. Claude Code zeichnet den blockierten Versuch auf und versucht nicht erneut, nachdem die Richtlinie geändert wird.
Auf diesen Maschinen fügen Sie den Marktplatz zu extraKnownMarketplaces in derselben managed-settings.json hinzu, damit Claude Code ihn automatisch registriert, oder führen Sie claude plugin marketplace add anthropics/claude-plugins-official aus.
Nur bestimmte Marktplätze zulassen:
{
"strictKnownMarketplaces": [
{
"source": "github",
"repo": "acme-corp/approved-plugins"
},
{
"source": "github",
"repo": "acme-corp/security-tools",
"ref": "v2.0"
},
{
"source": "url",
"url": "https://plugins.example.com/marketplace.json"
}
]
}
Alle Marktplatz-Repositories unter einer GitHub-Organisation mit einem Owner-Wildcard-Eintrag zulassen. Owner-Wildcards erfordern Claude Code v2.1.223 oder später.
{
"strictKnownMarketplaces": [
{
"source": "github",
"repo": "acme-corp/*"
}
]
}
Alle Marktplätze von einem internen Git-Server mit Regex-Musterabgleich auf dem Host zulassen. Dies ist der empfohlene Ansatz für GitHub Enterprise Server oder selbstgehostete GitLab-Instanzen:
{
"strictKnownMarketplaces": [
{
"source": "hostPattern",
"hostPattern": "^github\\.example\\.com$"
}
]
}
Dateisystem-basierte Marktplätze aus einem bestimmten Verzeichnis mit Regex-Musterabgleich auf dem Pfad zulassen:
{
"strictKnownMarketplaces": [
{
"source": "pathPattern",
"pathPattern": "^/opt/approved/"
}
]
}
Verwenden Sie ".*" als pathPattern, um jeden Dateisystempfad zuzulassen und gleichzeitig Netzwerkquellen mit hostPattern zu steuern.
strictKnownMarketplaces schränkt ein, was Benutzer hinzufügen können, registriert aber nicht selbst Marktplätze. Um zulässige Marktplätze für Benutzer automatisch zu registrieren, fügen Sie sie zu extraKnownMarketplaces in derselben managed-settings.json hinzu.
Der offizielle Anthropic-Marktplatz ist der einzige, den Claude Code von selbst registriert, und nur wenn die Zulassungsliste ihn zulässt. Die automatische Registrierung fehlt auch auf einigen Maschinen, wie nicht-interaktiven Umgebungen und Maschinen, auf denen eine frühere Richtlinie ihn blockierte. Um diese Maschinen abzudecken, fügen Sie den offiziellen Marktplatz auch zu extraKnownMarketplaces hinzu. Für die beiden Einstellungen nebeneinander siehe die strictKnownMarketplaces-Referenz.
Wie Einschränkungen funktionieren
Einschränkungen werden überprüft, bevor Netzwerk- oder Dateisystemoperationen durchgeführt werden. Die Überprüfung wird beim Hinzufügen von Marktplätzen und beim Installieren, Aktualisieren, Aktualisieren und Auto-Update von Plugins durchgeführt. Wenn ein Marktplatz hinzugefügt wurde, bevor die Richtlinie konfiguriert wurde, und seine Quelle nicht mehr mit der Zulassungsliste übereinstimmt, weigert sich Claude Code, Plugins daraus zu installieren oder zu aktualisieren. Die gleiche Durchsetzung gilt für blockedMarketplaces.
Um jeden Marktplatz-Repository unter einem GitHub-Besitzer zu blockieren, verwenden Sie die Owner-Wildcard-Form in einem blockedMarketplaces-Eintrag: { "source": "github", "repo": "untrusted-org/*" }. Erfordert Claude Code v2.1.223 oder später. Für die Abgleichregeln, die zwischen der Blockliste und der Zulassungsliste unterscheiden, siehe Owner-Wildcards.
Wenn ein Benutzer eine https://-Repository-URL hinzufügt, die Claude Code klont statt abruft, wie eine bloße github.com- oder gitlab.com-Repository-URL, überprüft Claude Code sie auch gegen die url-Einträge in blockedMarketplaces. Claude Code blockiert die Ergänzung, wenn ein Eintrag die gleiche URL benennt. Bei diesem Vergleich ignoriert Claude Code das .git-Suffix und jeden Ref, den der Benutzer nach # anhängt. Erfordert Claude Code v2.1.232 oder später. Vor v2.1.232 stimmte Claude Code einen url-Eintrag nur gegen eine URL ab, die es als gehostete marketplace.json-Datei abrief.
Die Zulassungsliste verwendet exakten Abgleich für die meisten Quellentypen, abgesehen von Owner-Wildcard-github-Einträgen. Damit ein Marktplatz zulässig ist, müssen alle angegebenen Felder übereinstimmen:
- Für GitHub-Quellen:
repoist erforderlich, entweder benannt ein Repository oder verwendet die Owner-Wildcard-Formowner/*, um jedes Repository unter diesem Besitzer abzudecken. Für die Abgleichregeln von Wildcard-Einträgen, einschließlich der Fallregeln, siehe Owner-Wildcards. Für einzelne Repository-Einträge mussrefgenau übereinstimmen oder in beiden dem Marktplatz-Quelltyp und dem Zulassungslisten-Eintrag fehlen, und die gleiche Regel gilt fürpath - Für URL-Quellen: Die vollständige URL muss genau übereinstimmen
- Für
hostPattern-Quellen: Der Marktplatz-Host wird gegen das Regex-Muster abgeglichen - Für
pathPattern-Quellen: Der Dateisystempfad des Marktplatzes wird gegen das Regex-Muster abgeglichen
Der exakte Abgleich der Zulassungsliste behandelt URLs, die sich nur durch einen nachgestellten Schrägstrich, ein .git-Suffix oder das ssh://- und https://-Schema unterscheiden, als unterschiedliche Werte. Wenn Ihr Organisations-Marktplatz durch mehr als eine URL-Form geklont werden kann, bevorzugen Sie einen hostPattern-Eintrag gegenüber einer literalen URL, damit die https://-, ssh://- und user@host:path-Formen alle übereinstimmen.
Da strictKnownMarketplaces in verwalteten Einstellungen festgelegt ist, können einzelne Benutzer und Projektkonfigurationen diese Einschränkungen nicht überschreiben.
Für vollständige Konfigurationsdetails einschließlich aller unterstützten Quellentypen und Vergleich mit extraKnownMarketplaces siehe die strictKnownMarketplaces-Referenz.
Versionsauflösung und Release-Kanäle
Plugin-Versionen bestimmen Cache-Pfade und Update-Erkennung: Wenn die aufgelöste Version mit dem übereinstimmt, was ein Benutzer bereits hat, überspringen /plugin update und Auto-Update das Plugin. Für Git-basierte Quellen, wenn Sie version weglassen, verwendet Claude Code den aufgelösten Commit-SHA der Quelle, daher erhalten Benutzer ein Update, wenn sich dieser Commit ändert; dies ist die einfachste Einrichtung für interne oder aktiv entwickelte Plugins. Siehe Versionsverwaltung für die vollständige Auflösungsreihenfolge, einschließlich archive-Quellen.
Das Festlegen von version heftet das Plugin für jeden Quellentyp außer command an, dessen Version immer einen Hash dessen enthält, was der Befehl produziert hat. Wenn Sie "version": "1.0.0" in plugin.json deklarieren und neue Commits pushen, ohne diese Zeichenkette zu ändern, behalten bestehende Benutzer dieser Quellen die zwischengespeicherte Kopie, da Claude Code die gleiche Version sieht. Erhöhen Sie das Feld bei jeder Veröffentlichung, oder lassen Sie es weg, um auf die aufgelöste Version zurückzugreifen.
Vermeiden Sie das Festlegen von version sowohl in plugin.json als auch im Marktplatz-Eintrag. Claude Code verwendet immer den plugin.json-Wert ohne Warnung, daher kann eine veraltete Manifest-Version eine Version maskieren, die Sie in marketplace.json festgelegt haben.
Richten Sie Release-Kanäle ein
Um "stabile" und "neueste" Release-Kanäle für Ihre Plugins zu unterstützen, können Sie zwei Marktplätze einrichten, die auf verschiedene Refs oder SHAs desselben Repos verweisen. Sie können dann jeder Benutzergruppe ihren eigenen Marktplatz durch verwaltete Einstellungen auf eine von zwei Arten geben:
- Stellen Sie separate Endpoint-verwaltete Einstellungen, wie eine verwaltete Einstellungsdatei oder ein MDM-Profil, für die Geräte jeder Gruppe bereit. Wie Claude Code verwaltete Quellen kombiniert sagt, ob die Pro-Gruppe-Datei oder das Profil auf einem Gerät gilt, das auch eine organisationsweite Quelle hat.
- Definieren Sie eine Claude Apps Gateway-Richtlinie pro Gruppe. Das Gateway wendet die erste Richtlinie an, deren Abgleichsregel zu einem Benutzer passt, daher ordnen Sie die Richtlinien so, dass jeder Benutzer die Richtlinie seiner Gruppe erreicht. Eine Gruppen-Richtlinie
extraKnownMarketplacesersetzt die Catch-All-Richtlinie-Zuordnung, anstatt sie zu zusammenzuführen, daher listen Sie jeden Marktplatz auf, den die Gruppe in der Gruppen-Richtlinie benötigt, nicht nur ihren Kanal-Marktplatz.
Server-verwaltete Einstellungen aus der Admin-Konsole gelten für jeden Benutzer in Ihrer Organisation, daher können sie keine Pro-Gruppe-Zuweisung tragen.
Jeder Kanal muss sich zu einer anderen Version auflösen. Wenn Sie explizite Versionen verwenden, muss plugin.json eine andere version bei jedem angehefteten Ref deklarieren. Wenn Sie version weglassen, unterscheiden die unterschiedlichen Commit-SHAs bereits die Kanäle. Wenn zwei Refs sich zu der gleichen Versionskette auflösen, behandelt Claude Code sie als identisch und überspringt das Update.
Beispiel
{
"name": "stable-tools",
"plugins": [
{
"name": "code-formatter",
"source": {
"source": "github",
"repo": "acme-corp/code-formatter",
"ref": "stable"
}
}
]
}
{
"name": "latest-tools",
"plugins": [
{
"name": "code-formatter",
"source": {
"source": "github",
"repo": "acme-corp/code-formatter",
"ref": "latest"
}
}
]
}
Kanäle Benutzergruppen zuweisen
Weisen Sie jeden Marktplatz seiner Benutzergruppe durch die unter Release-Kanäle einrichten beschriebenen Pro-Gruppe-Endpoint-verwalteten Einstellungen oder Gateway-Richtlinie zu. Beispielsweise erhält die stabile Gruppe:
{
"extraKnownMarketplaces": {
"stable-tools": {
"source": {
"source": "github",
"repo": "acme-corp/stable-tools"
}
}
}
}
Die Early-Access-Gruppe erhält stattdessen latest-tools:
{
"extraKnownMarketplaces": {
"latest-tools": {
"source": {
"source": "github",
"repo": "acme-corp/latest-tools"
}
}
}
}
Abhängigkeitsversionen anheften
Ein Plugin kann seine Abhängigkeiten auf einen Semver-Bereich beschränken, damit Updates einer Abhängigkeit das abhängige Plugin nicht unterbrechen. Siehe Plugin-Abhängigkeitsversionen einschränken für die {plugin-name}--v{version} Git-Tag-Konvention, Bereichssyntax und wie mehrere Einschränkungen auf die gleiche Abhängigkeit kombiniert werden.
Ein Plugin umbenennen oder entfernen
Der name eines Plugins ist sein stabiler Bezeichner. Benutzer verweisen darauf in enabledPlugins, pluginConfigs und /plugin install-Befehlen, daher bricht das Ändern davon jede vorhandene Installation. Um das in der Benutzeroberfläche angezeigte Label zu ändern, ohne Installationen zu unterbrechen, legen Sie displayName fest und behalten Sie name unverändert.
Wenn Sie den name eines Plugins ändern müssen oder ein Plugin aus dem plugins-Array entfernen, fügen Sie einen Top-Level-renames-Eintrag hinzu, damit bestehende Benutzer migrieren, anstatt einen plugin-not-found-Fehler zu sehen. Die automatische Migration erfordert Claude Code v2.1.193 oder später. Ordnen Sie jeden früheren Namen seinem aktuellen Namen zu, oder zu null, wenn das Plugin nicht mehr existiert. Das folgende Beispiel benennt formatter in code-formatter um und verzeichnet, dass legacy-linter entfernt wurde:
{
"name": "acme-tools",
"owner": { "name": "Acme" },
"plugins": [
{ "name": "code-formatter", "source": "./plugins/code-formatter" }
],
"renames": {
"formatter": "code-formatter",
"legacy-linter": null
}
}
Wenn ein Benutzer Claude Code mit dem alten Namen noch in seinen Einstellungen startet, folgt Claude Code der renames-Zuordnung:
- Wenn der Eintrag auf einen neuen Namen verweist, lädt Claude Code das Plugin unter seinem neuen Namen und zeigt eine einzeilige Mitteilung wie
Renamed to "code-formatter" in the "acme-tools" marketplacean. Es schreibt dann den alten Schlüssel in den neuen Schlüssel in den Benutzer-, Projekt- und lokalen Einstellungsbereichen für sowohlenabledPluginsals auchpluginConfigsum, sodass die Mitteilung einmal angezeigt wird. - Für einen
null-Eintrag löscht Claude Code den alten Schlüssel und die Mitteilung meldet, dass das Plugin aus dem Marktplatz entfernt wurde. - Wenn das umbenannte Plugin eine Remote-Quelle wie
githubodernpmverwendet, meldet Claude Codeplugin-cache-missnach der Umbenennung und der Benutzer muss/plugin installeinmal ausführen, um es unter dem neuen Namen zu holen.
Behandeln Sie renames als Nur-Anhängen-Verlauf: Behalten Sie alte Einträge an Ort und Stelle, auch nachdem Sie erwarten, dass jeder Benutzer migriert hat. Claude Code folgt Ketten, daher wenn Sie später code-formatter in formatter-pro umbenennen, fügen Sie einen zweiten Eintrag hinzu, anstatt den ersten zu bearbeiten. Ein Benutzer, der immer noch das Original formatter aktiviert hat, löst sich dann durch beide Einträge zu formatter-pro auf.
Führen Sie claude plugin validate . nach dem Bearbeiten der Zuordnung aus; es lehnt jeden Eintrag ab, dessen Kette einen Zyklus bildet oder nicht bei null oder einem Namen in plugins endet.
Verwaltete und Richtlinieneinstellungen sind schreibgeschützt für Claude Code, daher können dort aktivierte Plugins nicht automatisch umgeschrieben werden. Das umbenannte Plugin wird weiterhin jede Sitzung geladen, aber die Umbenennungsmitteilung wiederholt sich, bis ein Administrator enabledPlugins in der verwalteten Einstellungsdatei aktualisiert, um den neuen Namen zu verwenden. Das gleiche gilt für Plugins, die über andere schreibgeschützte Quellen wie --add-dir aktiviert werden.
Frühere Versionen von Claude Code ignorieren das renames-Feld und melden plugin-not-found für den alten Namen.
Validierung und Tests
Testen Sie Ihren Marktplatz vor dem Teilen.
Validieren Sie die JSON-Syntax Ihres Marktplatzes aus Ihrem Marktplatz-Verzeichnis:
claude plugin validate .
Oder von innerhalb von Claude Code:
/plugin validate .
Fügen Sie den Marktplatz zum Testen hinzu:
/plugin marketplace add ./path/to/marketplace
Installieren Sie ein Test-Plugin, um zu überprüfen, ob alles funktioniert:
/plugin install test-plugin@marketplace-name
Für vollständige Plugin-Test-Workflows siehe Testen Sie Ihre Plugins lokal. Für technische Fehlerbehebung siehe Plugins-Referenz.
Verwalten Sie Marktplätze über die CLI
Claude Code bietet nicht-interaktive claude plugin marketplace Unterbefehle zum Scripting und zur Automatisierung. Diese entsprechen den /plugin marketplace Befehlen, die in einer interaktiven Sitzung verfügbar sind.
Plugin marketplace add
Fügen Sie einen Marktplatz aus einem GitHub-Repository, einer Git-URL, einer Remote-URL oder einem lokalen Pfad hinzu.
claude plugin marketplace add <source> [options]
Argumente:
<source>: GitHubowner/repoKurzform, Git-URL, Remote-URL zu einermarketplace.json-Datei oder lokaler Verzeichnispfad. Um an einen Branch oder Tag anzuheften, fügen Sie@refzur GitHub-Kurzform oder#refzu einer Git-URL hinzu
Eine URL muss ihr Schema enthalten. Ab Claude Code v2.1.196 wird ein Host, der ohne eines eingegeben wird, wie gitlab.example.com/team/plugins, als ungültige owner/repo Kurzform abgelehnt und die Fehlermeldung teilt Ihnen mit, dass Sie https:// hinzufügen oder ./ für einen lokalen Pfad verwenden sollen. Frühere Versionen lasen es als GitHub-Repository-Pfad fehl und schlagen beim Klonen mit einem GitHub-Fehler fehl.
Optionen:
| Option | Beschreibung | Standard |
|---|---|---|
--scope <scope> |
Wo der Marktplatz deklariert werden soll: user, project oder local. Siehe Plugin-Installationsbereiche |
user |
--sparse <paths...> |
Begrenzen Sie den Checkout auf bestimmte Verzeichnisse über git sparse-checkout. Nützlich für Monorepos |
Fügen Sie einen Marktplatz aus GitHub mit owner/repo Kurzform hinzu:
claude plugin marketplace add acme-corp/claude-plugins
Heften Sie an einen bestimmten Branch oder Tag mit @ref an:
claude plugin marketplace add acme-corp/claude-plugins@v2.0
Fügen Sie von einer Git-URL auf einem nicht-GitHub-Host hinzu:
claude plugin marketplace add https://gitlab.example.com/team/plugins.git
Fügen Sie von einer Remote-URL hinzu, die die marketplace.json-Datei direkt bereitstellt:
claude plugin marketplace add https://example.com/marketplace.json
Fügen Sie von einem lokalen Verzeichnis zum Testen hinzu:
claude plugin marketplace add ./my-marketplace
Deklarieren Sie den Marktplatz im Projektbereich, damit er mit Ihrem Team über .claude/settings.json geteilt wird:
claude plugin marketplace add acme-corp/claude-plugins --scope project
Für ein Monorepo begrenzen Sie den Checkout auf die Verzeichnisse, die Plugin-Inhalte enthalten:
claude plugin marketplace add acme-corp/monorepo --sparse .claude-plugin plugins
Plugin marketplace list
Listet alle konfigurierten Marktplätze auf.
claude plugin marketplace list [options]
Optionen:
| Option | Beschreibung |
|---|---|
--json |
Ausgabe als JSON |
Mit --json enthält jeder Eintrag name, source, ein installLocation-Feld mit dem lokalen Cache-Pfad, wo der Marktplatz gespeichert ist, und quellenspezifische Felder: repo für GitHub-Quellen, url für Git- und URL-Quellen und path für lokale Quellen. GitHub- und Git-Quellen enthalten auch ein ref-Feld, wenn der Marktplatz mit einem angehefteten Branch oder Tag hinzugefügt wurde.
Plugin marketplace remove
Entfernen Sie einen konfigurierten Marktplatz. Der Alias rm wird auch akzeptiert.
claude plugin marketplace remove <name> [options]
Argumente:
<name>: Marktplatz-Name zum Entfernen, wie vonclaude plugin marketplace listangezeigt. Dies ist dernameausmarketplace.json, nicht die Quelle, die Sie anaddübergeben haben
Optionen:
| Option | Beschreibung | Standard |
|---|---|---|
--scope <scope> |
Beschränken Sie die Entfernung auf einen einzelnen Einstellungsbereich: user, project oder local. Siehe Plugin-Installationsbereiche. Wenn weggelassen, wird die Deklaration aus jedem bearbeitbaren Bereich entfernt. Wenn angegeben, wird nur die Deklaration dieses Bereichs entfernt; der gemeinsame Status, der Cache und die installierten Plugin-Daten werden beibehalten, wenn der Marktplatz noch in einem anderen Bereich deklariert ist |
(alle Bereiche) |
Das Entfernen eines Marktplatzes aus seinem letzten verbleibenden Bereich deinstalliert auch alle Plugins, die Sie von ihm installiert haben. Um einen Marktplatz zu aktualisieren, ohne installierte Plugins zu verlieren, verwenden Sie stattdessen claude plugin marketplace update.
Plugin marketplace update
Aktualisieren Sie Marktplätze von ihren Quellen, um neue Plugins und Versionsänderungen abzurufen. Ein Marktplatz, der mit einem Branch oder Tag ref hinzugefügt wurde, wird auf den neuesten Commit dieses Refs aktualisiert, nicht auf den Standard-Branch des Repositorys.
claude plugin marketplace update [name]
Argumente:
[name]: Marktplatz-Name zum Aktualisieren, wie vonclaude plugin marketplace listangezeigt. Aktualisiert alle Marktplätze, wenn weggelassen
Sowohl remove als auch update schlagen fehl, wenn sie gegen einen Seed-verwalteten Marktplatz ausgeführt werden, der schreibgeschützt ist. Beim Aktualisieren aller Marktplätze werden Seed-verwaltete Einträge übersprungen und andere Marktplätze werden weiterhin aktualisiert. Um Seed-bereitgestellte Plugins zu ändern, bitten Sie Ihren Administrator, das Seed-Image zu aktualisieren. Siehe Plugins für Container vorab ausfüllen.
Fehlerbehebung
Marktplatz wird nicht geladen
Symptome: Kann Marktplatz nicht hinzufügen oder Plugins von ihm nicht sehen
Lösungen:
- Überprüfen Sie, dass die Marktplatz-URL erreichbar ist
- Überprüfen Sie, dass
.claude-plugin/marketplace.jsonim angegebenen Pfad vorhanden ist - Stellen Sie sicher, dass die JSON-Syntax gültig ist, indem Sie
claude plugin validate .oder/plugin validate .aus dem Marktplatz-Verzeichnis verwenden. Um Skill-, Agent- und Befehl-Frontmatter zu überprüfen, siehe Validieren Sie ein Plugin oder ein Verzeichnis ohne Manifest - Bestätigen Sie für private Repositories, dass Sie Zugriffsberechtigung haben
Marktplatz-Validierungsfehler
Führen Sie claude plugin validate . oder /plugin validate . aus Ihrem Marktplatz-Verzeichnis aus, um auf Probleme zu überprüfen. Wenn der Validator auf ein Marktplatz-Verzeichnis verweist, überprüft er marketplace.json auf Schema-Fehler, doppelte Plugin-Namen und Quellpfad-Traversal. Für jeden Eintrag, dessen source ein lokaler Pfad ist, validiert er auch die plugin.json dieses Plugins und warnt, wenn die version des Eintrags nicht mit der in plugin.json übereinstimmt. Probleme, die in der plugin.json eines Plugins gefunden werden, werden mit dem Eintrag-Index in der Form plugins[2] plugin.json → vorangestellt.
Ab Claude Code v2.1.196 umfasst die Pro-Eintrag-Überprüfung auch:
- Plugins, deren
source.ist - wird ausgeführt, wenn
marketplace.jsonaußerhalb eines.claude-plugin-Verzeichnisses liegt, wobei Quellen gegen das Verzeichnis der Datei selbst aufgelöst werden - meldet die Probleme jedes Eintrags, auch wenn ein anderer Teil der Datei Schema-Fehler hat
Frühere Versionen überspringen Plugins im Marktplatz-Root und steigen nur von einer .claude-plugin/marketplace.json ab.
Aus einem Marktplatz-Verzeichnis öffnet Claude Code nicht die Skill-, Agent-, Befehl- oder Hook-Dateien der Plugins. Um Fehler in diesen Dateien zu finden, siehe Validieren Sie ein Plugin oder ein Verzeichnis ohne Manifest. Die folgende Tabelle listet die häufigsten Fehler aus einem Marktplatz-Verzeichnis auf, mit der Ursache und Lösung für jeden:
| Fehler | Ursache | Lösung |
|---|---|---|
No manifest found in directory. Expected .claude-plugin/marketplace.json or .claude-plugin/plugin.json |
Das benannte Verzeichnis hat keine .claude-plugin/marketplace.json oder plugin.json, und keine Skill-, Agent- oder Befehlsdateien zum Überprüfen |
Führen Sie aus dem Marktplatz-Root aus, oder erstellen Sie .claude-plugin/marketplace.json mit erforderlichen Feldern |
Invalid JSON syntax: Unexpected token... |
JSON-Syntaxfehler in marketplace.json | Überprüfen Sie auf fehlende Kommas, zusätzliche Kommas oder nicht zitierte Strings |
Duplicate plugin name "x" found in marketplace |
Zwei Plugins teilen denselben Namen | Geben Sie jedem Plugin einen eindeutigen name-Wert |
plugins[0].source: Path contains ".." |
Quellpfad enthält .. |
Verwenden Sie Pfade relativ zum Marktplatz-Root ohne ... Siehe Relative Pfade |
Marketplace name cannot contain control or bidirectional-formatting characters |
Der Marktplatz-name enthält ein Unicode-Bidirektional-Formatierungszeichen oder ein Steuerzeichen, wie ein Escape oder ein Zeilenumbruch |
Entfernen Sie das Zeichen aus dem Namen. Vor v2.1.247 erzeugten diese Zeichen den Fehler Marketplace name impersonates an official Anthropic/Claude marketplace |
Plugin name cannot contain control or bidirectional-formatting characters |
Ein Plugin-name enthält ein Unicode-Bidirektional-Formatierungszeichen oder ein Steuerzeichen, wie ein Escape oder ein Zeilenumbruch |
Entfernen Sie das Zeichen aus dem Namen. Vor v2.1.247 führte Claude Code diese Überprüfung nicht durch |
Warnungen (nicht blockierend):
Marketplace has no plugins defined: Fügen Sie mindestens ein Plugin zumplugins-Array hinzuNo marketplace description provided: Fügen Sie eine Top-Level-descriptionhinzu, um Benutzern zu helfen, Ihren Marktplatz zu verstehenPlugin name "x" is not kebab-case: Benennen Sie in Kleinbuchstaben, Ziffern und Bindestriche um (z. B.my-plugin). Claude Code akzeptiert andere Formen, aber die claude.ai-Marktplatz-Synchronisierung lehnt sie ab.Marketplace name "x" is reserved in Claude Desktop: Der Marktplatz ist mitorg,org-provisionedoderunknownbenannt, in beliebiger Schreibweise. Claude Code akzeptiert diese Namen, aber die verwaltete Marktplatz-Synchronisierung von Claude Desktop lehnt den gesamten Marktplatz ab. Benennen Sie den Marktplatz um. Vor v2.1.221 führteclaude plugin validatediese Überprüfung nicht durch.Marketplace name "x" is not accepted by Claude DesktopoderPlugin name "x" is not accepted by Claude Desktop: Claude Desktop akzeptiert Namen von bis zu 128 Zeichen, bestehend aus Buchstaben, Ziffern,.,_und-, beginnend mit einem Buchstaben oder einer Ziffer. Claude Code akzeptiert andere Formen, aber die verwaltete Marktplatz-Synchronisierung von Claude Desktop lehnt einen Marktplatz ab, dessen Name die Überprüfung nicht besteht, und lässt einen Plugin-Eintrag, dessen Name nicht akzeptiert wird, stillschweigend fallen. Benennen Sie den Marktplatz oder das Plugin um. Vor v2.1.221 führteclaude plugin validatediese Überprüfungen nicht durch.
Validieren Sie ein Plugin oder ein Verzeichnis ohne Manifest
Um Skill-, Agent- und Befehlsdateien zu finden, deren Frontmatter nicht analysiert wird, führen Sie claude plugin validate aus und benennen Sie das Verzeichnis, das sie enthält. Claude Code schaut nicht außerhalb des benannten Verzeichnisses. Jede Ausführung außer einer gegen ein Plugin, das eine plugin.json hat, erfordert Claude Code v2.1.233 oder später.
Wählen Sie das zu benennende Verzeichnis
Claude Code überprüft verschiedene Dateien, je nachdem, welches Verzeichnis Sie benennen. Finden Sie, was Sie überprüfen möchten, in der ersten Spalte, und führen Sie den Befehl dieser Zeile aus:
| Zu überprüfen | Führen Sie aus | Claude Code überprüft |
|---|---|---|
Ein Plugin, das eine plugin.json hat |
claude plugin validate ./plugins/my-plugin |
plugin.json, hooks/hooks.json und die Verzeichnisse skills, agents und commands im Plugin-Root |
Ein Verzeichnis von Skills, Agents oder Befehlen, wie ein Plugin, das noch keine plugin.json hat |
claude plugin validate .claude/skills, ~/.claude/agents oder ./my-plugin/agents |
Jede Skill-, Agent- oder Befehlsdatei in diesem Verzeichnis |
Ein Ordner, dessen Skill seine Root-SKILL.md ist |
claude plugin validate ./skills, benennend das skills-Verzeichnis, das den Ordner enthält |
Die Root-SKILL.md jedes Ordners. Das Halte-Verzeichnis muss skills benannt sein; ein Ordner unter einem anderen Namen, wie plugins/, hat keine Ausführung, die seine Root-SKILL.md überprüft |
| Die drei Verzeichnisse eines Projekts auf einmal | claude plugin validate .claude oder das Projekt-Root, wenn es kein .claude-plugin/-Manifest hat |
.claude/skills, .claude/agents und .claude/commands |
| Ihre Verzeichnisse auf Benutzerebene | claude plugin validate ~/.claude |
~/.claude/skills, ~/.claude/agents und ~/.claude/commands |
Überprüfen Sie ein Plugin, dessen Skill seine Root-`SKILL.md` ist
Wenn Sie claude plugin validate gegen ein Plugin-Verzeichnis ausführen, überprüft Claude Code keine SKILL.md im Plugin-Root. Wenn das Plugin in einem Verzeichnis namens skills sitzt, führen Sie den Befehl zweimal aus:
- Benennen Sie dieses
skills-Verzeichnis, um die Root-SKILL.mddes Plugins zu überprüfen. - Benennen Sie das Plugin-Verzeichnis, um den Rest zu überprüfen.
Wenn das Plugin unter einem anderen Namen sitzt, wie plugins/, ist die skills-Verzeichnis-Ausführung nicht verfügbar, und keine Ausführung überprüft seine Root-SKILL.md.
Überprüfen Sie Dateien hinter Symlinks
Wenn Sie claude plugin validate ausführen, folgt Claude Code nicht Symlinks innerhalb des benannten Verzeichnisses. Was es tut, hängt davon ab, wo der Link ist:
- Ein verknüpftes
skills-,agents- odercommands-Verzeichnis unter dem Plugin- oder.claude-Root: Claude Code warnt, dass nichts darin gelesen wurde. - Ein verknüpfter Eintrag innerhalb eines
skills-,agents- odercommands-Verzeichnisses: Claude Code überspringt ihn und warnt pro Verzeichnis, wie viele Einträge es übersprungen hat, die eine Sitzung laden würde. - Das
skills-,agents- odercommands-Verzeichnis, das Sie benennen, ist selbst ein Symlink, oder sein übergeordnetes.claude-Verzeichnis ist: Claude Code meldet einen Fehler und überprüft nichts darin. Benennen Sie stattdessen das echte Verzeichnis.
In zwei Skills-Fällen wird die Ausführung mit Warnungen bestanden. Um die verknüpften Dateien zu überprüfen, führen Sie erneut aus und benennen Sie ein Verzeichnis, das sie direkt enthält:
- Ein Plugin, dessen
skills-Verzeichnis auf die Skills eines Sibling-Plugins verlinkt: Benennen Sie das Verzeichnis des Sibling-Plugins. - Ein verknüpfter Skill-Eintrag in
~/.claude/skillsoder.claude/skills: Claude Code folgt dem Eintrag in einer Sitzung. Um ihn zu überprüfen, benennen Sie ein Verzeichnis namensskills, das den echten Ordner enthält.
Lesen Sie die Validierungsergebnisse
Eine saubere Ausführung endet mit Validation passed.
No manifest found in directory bedeutet, dass Claude Code dort keine plugin.json oder marketplace.json gefunden hat, und keine Skill-, Agent- oder Befehlsdatei in den Verzeichnissen, die es darunter überprüft. Benennen Sie stattdessen das skills-, agents- oder commands-Verzeichnis, das Ihre Dateien enthält.
Zwei der Fehler, die Claude Code aus diesen Ausführungen meldet, mit der Lösung für jeden:
YAML frontmatter failed to parse: ...: Beheben Sie das YAML im Frontmatter-Block der Skill-, Agent- oder Befehlsdatei. Bis Sie das tun, liest eine Sitzung keine Frontmatter-Felder aus der DateiInvalid JSON syntax: ...aufhooks/hooks.json: Beheben Sie die JSON-Syntax. Bis Sie das tun, lädt eine Sitzung das Plugin ohne die Hooks in dieser Datei. Claude Code meldet diesen Fehler nur in einer Plugin-Ausführung
In einer Plugin-Ausführung warnt Claude Code auch vor einer CLAUDE.md im Plugin-Root. Für Pfade, die Sie durch die Komponenten-Pfadfelder in plugin.json festlegen, überprüft Claude Code, dass jeder Pfad vorhanden ist, liest aber die Dateien dort nicht.
Plugin-Installationsfehler
Symptome: Marktplatz wird angezeigt, aber Plugin-Installation schlägt fehl
Lösungen:
- Überprüfen Sie, dass Plugin-Quell-URLs erreichbar sind
- Überprüfen Sie, dass Plugin-Verzeichnisse erforderliche Dateien enthalten
- Überprüfen Sie für GitHub-Quellen, dass Repositories öffentlich sind oder Sie Zugriff haben
- Testen Sie Plugin-Quellen manuell durch Klonen/Herunterladen
- Wenn die Quelle sowohl
refals auchshafestlegt, blockiert ein gelöschter Upstream-Branch oder Tag die Installation nicht auf den meisten Git-Hosts, einschließlich GitHub, GitLab und Bitbucket. Auf Servern, die das Abrufen von Commits nach SHA nicht unterstützen, wie AWS CodeCommit, muss dierefimmer noch vorhanden sein und der angeheftete Commit muss von ihr erreichbar sein. Wenn die Installation immer noch fehlschlägt, bestätigen Sie, dass der angeheftete Commit immer noch im Repository vorhanden ist
Authentifizierung für private Repositories schlägt fehl
Symptome: Authentifizierungsfehler beim Installieren von Plugins aus privaten Repositories
Lösungen:
Für manuelle Installation und Updates:
- Überprüfen Sie, dass Sie bei Ihrem Git-Anbieter authentifiziert sind (führen Sie z. B.
gh auth statusfür GitHub aus) - Überprüfen Sie, dass Ihr Credential-Helper konfiguriert ist:
git config --global credential.helper - Führen Sie
git ls-remote <marketplace-url>aus, um zu testen, ob Git sich selbst authentifizieren kann. Wenn Git nach einem Benutzernamen oder Passwort fragt, speichern Sie zuerst die Anmeldedaten: Führen Sie für GitHub über HTTPSgh auth setup-gitaus, und für SSH-Remotes laden Sie Ihren Schlüssel inssh-agent
Für Hintergrund-Auto-Updates:
- Standardmäßig deaktivieren Hintergrund-Aktualisierungen Git-Credential-Helper für den Pull, sodass der Pull nicht über HTTPS authentifizieren kann. SSH-Remotes mit einem in
ssh-agentgeladenen Schlüssel authentifizieren sich immer noch. Ein fehlgeschlagener Pull löst ein erneutes Klonen von Grund auf aus, das Ihre gespeicherten Anmeldedaten verwendet, aber bei großen Repositories möglicherweise zeitüberschreitet - Legen Sie
CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1fest, um den vorhandenen Klon beizubehalten, wenn der Hintergrund-Pull fehlschlägt - Konfigurieren Sie einen Git-Credential-Helper, z. B.
gh auth setup-git, damit das Fallback-Neuklon authentifizieren kann - Wenn das Neuklon bei einem großen Repository zeitüberschreitet, erhöhen Sie das Limit mit
CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS - Konfigurieren Sie ein Git-URL-Rewrite mit Bereich auf das Marktplatz-Repository, damit der Hintergrund-Pull direkt authentifiziert
- Oder aktualisieren Sie private Marktplätze manuell mit
/plugin marketplace update <name>, das Ihre Anmeldedaten verwendet
Marktplatz-Updates schlagen in Offline-Umgebungen fehl
Symptome: Marktplatz git pull schlägt im Hintergrund fehl und Claude Code versucht wiederholt ein erneutes Klonen, das nicht erfolgreich sein kann.
Ursache: Standardmäßig versucht Claude Code ein erneutes Klonen von Grund auf, wenn ein git pull fehlschlägt. In Offline- oder Airgapped-Umgebungen schlägt das erneute Klonen auf die gleiche Weise fehl, und die Wiederherstellung des vorherigen Cache danach ist Best-Effort. Die Aktualisierung wird im Hintergrund nach dem Start ausgeführt, sodass sie den Start nicht verzögert, aber jede Sitzung wiederholt die fehlgeschlagenen Versuche und jede Git-Operation kann das 120-Sekunden-Timeout abwarten.
Lösung: Legen Sie CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1 fest, um den Neuklon-Versuch zu überspringen und den vorhandenen Cache beizubehalten, wenn der Pull fehlschlägt:
export CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1
Für vollständig Offline-Bereitstellungen, bei denen das Repository nie erreichbar sein wird, verwenden Sie stattdessen CLAUDE_CODE_PLUGIN_SEED_DIR, um das Plugins-Verzeichnis zur Build-Zeit vorab auszufüllen.
Git-Operationen zeitüberschreitung
Symptome: Plugin-Installation oder Marktplatz-Updates schlagen mit einem Timeout-Fehler fehl, wie "Git clone timed out after 120s" oder "Git pull timed out after 120s".
Ursache: Claude Code verwendet ein 120-Sekunden-Timeout für alle Git-Operationen, einschließlich Klonen von Plugin-Repositories und Abrufen von Marktplatz-Updates. Große Repositories oder langsame Netzwerkverbindungen können dieses Limit überschreiten.
Lösung: Erhöhen Sie das Timeout mit der Umgebungsvariable CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS. Der Wert ist in Millisekunden:
export CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS=300000 # 5 Minuten
Plugins mit relativen Pfaden schlagen in URL-basierten Marktplätzen fehl
Symptome: Einen Marktplatz über URL hinzugefügt (z. B. https://example.com/marketplace.json), aber Plugins mit relativen Pfadquellen wie "./plugins/my-plugin" schlagen mit "path not found"-Fehlern fehl.
Ursache: Das Hinzufügen eines URL-basierten Marktplatzes lädt nur die marketplace.json-Datei selbst herunter, und Claude Code lädt Plugin-Dateien nicht nach relativem Pfad von diesem Server herunter. Relative Pfade im Marktplatz-Eintrag verweisen auf Dateien auf dem Remote-Server, die nicht heruntergeladen wurden.
Lösungen:
- Verwenden Sie externe Quellen: Ändern Sie Plugin-Einträge in jede Plugin-Quelle außer einem relativen Pfad:
{ "name": "my-plugin", "source": { "source": "github", "repo": "owner/repo" } } - Verwenden Sie einen Git-basierten Marktplatz: Hosten Sie Ihren Marktplatz in einem Git-Repository und fügen Sie ihn mit der Git-URL hinzu. Git-basierte Marktplätze klonen das gesamte Repository, wodurch relative Pfade funktionieren.
Dateien nicht gefunden nach Installation
Symptome: Plugin wird installiert, aber Verweise auf Dateien schlagen fehl, besonders Dateien außerhalb des Plugin-Verzeichnisses
Ursache: Plugins werden in ein Cache-Verzeichnis kopiert, anstatt an Ort und Stelle verwendet zu werden, außer für eine command-Quelle im Link-Modus. Pfade, die auf Dateien außerhalb eines kopierten Plugin-Verzeichnisses verweisen (wie ../shared-utils), funktionieren nicht, da diese Dateien nicht kopiert werden.
Lösungen: Siehe Plugin-Caching und Dateiauflösung für Workarounds, einschließlich Symlinks und Verzeichnisumstrukturierung.
Für zusätzliche Debugging-Tools und häufige Probleme siehe Debugging- und Entwicklungstools.
Siehe auch
- Entdecken und Installieren vorgefertigter Plugins - Installieren von Plugins aus vorhandenen Marktplätzen
- Plugins - Erstellen Ihrer eigenen Plugins
- Plugins-Referenz - Vollständige technische Spezifikationen und Schemas
- Plugin-Einstellungen - Plugin-Konfigurationsoptionen
- strictKnownMarketplaces-Referenz - Verwaltete Marktplatz-Einschränkungen