Zum Hauptinhalt springen
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 (Git-Repositories, lokale Pfade und mehr). 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:
  1. Plugins erstellen: Erstellen Sie ein oder mehrere Plugins mit Befehlen, 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.
  2. Marktplatzdatei erstellen: Definieren Sie eine marketplace.json, die Ihre Plugins und deren Speicherorte auflistet (siehe Marktplatzdatei erstellen).
  3. Marktplatz hosten: Pushen Sie zu GitHub, GitLab oder einem anderen Git-Host (siehe Marktplätze hosten und verteilen).
  4. Mit Benutzern teilen: Benutzer fügen Ihren Marktplatz mit /plugin marketplace add hinzu 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.
1

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
2

Erstellen Sie das skill

Erstellen Sie eine SKILL.md-Datei, die definiert, was das /quality-review skill tut.
my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md
---
description: Review code for bugs, security, and performance
disable-model-invocation: true
---

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

Erstellen Sie das Plugin-Manifest

Erstellen Sie eine plugin.json-Datei, die das Plugin beschreibt. Das Manifest befindet sich im .claude-plugin/-Verzeichnis.
my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json
{
  "name": "quality-review-plugin",
  "description": "Adds a /quality-review skill for quick code reviews",
  "version": "1.0.0"
}
4

Erstellen Sie die Marktplatzdatei

Erstellen Sie den Marktplatzkatalog, der Ihr Plugin auflistet.
my-marketplace/.claude-plugin/marketplace.json
{
  "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"
    }
  ]
}
5

Hinzufügen und Installieren

Fügen Sie den Marktplatz hinzu und installieren Sie das Plugin.
/plugin marketplace add ./my-marketplace
/plugin install quality-review-plugin@my-plugins
6

Probieren Sie es aus

Wählen Sie etwas Code in Ihrem Editor aus und führen Sie Ihren neuen Befehl aus.
/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. Das bedeutet, dass Plugins keine Dateien außerhalb ihres Verzeichnisses mit Pfaden wie ../shared-utils referenzieren können, da diese Dateien nicht kopiert werden.Wenn Sie Dateien über Plugins hinweg teilen müssen, verwenden Sie Symlinks (die während des Kopierens verfolgt werden). 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 (wo man ihn abrufen kann). Siehe das vollständige Schema unten für alle verfügbaren Felder.
{
  "name": "company-tools",
  "owner": {
    "name": "DevTools Team",
    "email": "[email protected]"
  },
  "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

FeldTypBeschreibungBeispiel
namestringMarktplatz-Identifier (Kebab-Case, keine Leerzeichen). Dies ist öffentlich sichtbar: Benutzer sehen es beim Installieren von Plugins (z. B. /plugin install my-tool@your-marketplace)."acme-tools"
ownerobjectInformationen zum Marktplatz-Betreuer (siehe Felder unten)
pluginsarrayListe der verfügbaren PluginsSiehe 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, anthropic-marketplace, anthropic-plugins, agent-skills, knowledge-work-plugins, life-sciences. Namen, die offizielle Marktplätze imitieren (wie official-claude-plugins oder anthropic-tools-v2), sind ebenfalls blockiert.

Eigentümer-Felder

FeldTypErforderlichBeschreibung
namestringJaName des Betreuers oder Teams
emailstringNeinKontakt-E-Mail für den Betreuer

Optionale Metadaten

FeldTypBeschreibung
metadata.descriptionstringKurze Marktplatzbeschreibung
metadata.versionstringMarktplatz-Version
metadata.pluginRootstringBasisverzeichnis, das relativen Plugin-Quellpfaden vorangestellt wird (z. B. "./plugins" ermöglicht es Ihnen, "source": "formatter" statt "source": "./plugins/formatter" zu schreiben)

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, hooks usw.), plus diese Marktplatz-spezifischen Felder: source, category, tags und strict.

Erforderliche Felder

FeldTypBeschreibung
namestringPlugin-Identifier (Kebab-Case, keine Leerzeichen). Dies ist öffentlich sichtbar: Benutzer sehen es beim Installieren (z. B. /plugin install my-plugin@marketplace).
sourcestring|objectWo das Plugin abgerufen werden soll (siehe Plugin-Quellen unten)

Optionale Plugin-Felder

Standard-Metadatenfelder:
FeldTypBeschreibung
descriptionstringKurze Plugin-Beschreibung
versionstringPlugin-Version
authorobjectPlugin-Autoreninformationen (name erforderlich, email optional)
homepagestringPlugin-Homepage oder Dokumentations-URL
repositorystringQuellcode-Repository-URL
licensestringSPDX-Lizenz-Identifier (z. B. MIT, Apache-2.0)
keywordsarrayTags für Plugin-Entdeckung und Kategorisierung
categorystringPlugin-Kategorie zur Organisation
tagsarrayTags für Suchbarkeit
strictbooleanSteuert, ob plugin.json die Autorität für Komponentendefinitionen ist (Standard: true). Siehe Strict Mode unten.
Komponenten-Konfigurationsfelder:
FeldTypBeschreibung
commandsstring|arrayBenutzerdefinierte Pfade zu Befehlsdateien oder -verzeichnissen
agentsstring|arrayBenutzerdefinierte Pfade zu Agent-Dateien
hooksstring|objectBenutzerdefinierte hooks-Konfiguration oder Pfad zu hooks-Datei
mcpServersstring|objectMCP server-Konfigurationen oder Pfad zu MCP-Konfiguration
lspServersstring|objectLSP server-Konfigurationen oder Pfad zu LSP-Konfiguration

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. Sobald ein Plugin geklont oder auf den lokalen Computer kopiert wird, wird es in den lokalen versionierten Plugin-Cache unter ~/.claude/plugins/cache kopiert.
QuelleTypFelderNotizen
Relativer Pfadstring (z. B. "./my-plugin")Lokales Verzeichnis im Marktplatz-Repo. Muss mit ./ beginnen
githubobjectrepo, ref?, sha?
urlobjecturl, ref?, sha?Git-URL-Quelle
git-subdirobjecturl, path, ref?, sha?Unterverzeichnis in einem Git-Repo. Klont sparsam, um die Bandbreite für Monorepos zu minimieren
npmobjectpackage, version?, registry?Installiert über npm install
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 add ausführen oder in extraKnownMarketplaces-Einstellungen. Unterstützt ref (Branch/Tag), aber nicht sha.
  • Plugin-Quelle — wo ein einzelnes Plugin in der Marktplatz-Liste abgerufen werden soll. Wird im source-Feld jedes Plugin-Eintrags in marketplace.json festgelegt. Unterstützt sowohl ref (Branch/Tag) als auch sha (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.

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 aus .claude-plugin/ herauszuklettern.
Relative Pfade funktionieren nur, wenn Benutzer Ihren Marktplatz über Git hinzufügen (GitHub, GitLab oder Git-URL). Wenn Benutzer Ihren Marktplatz über eine direkte URL zur marketplace.json-Datei hinzufügen, werden relative Pfade nicht korrekt aufgelöst. Verwenden Sie für URL-basierte Verteilung stattdessen GitHub-, npm- oder Git-URL-Quellen. 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"
  }
}
FeldTypBeschreibung
repostringErforderlich. GitHub-Repository im Format owner/repo
refstringOptional. Git-Branch oder Tag (Standard: Standard-Branch des Repositories)
shastringOptional. 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"
  }
}
FeldTypBeschreibung
urlstringErforderlich. Vollständige Git-Repository-URL (https:// oder git@). Das .git-Suffix ist optional, daher funktionieren Azure DevOps- und AWS CodeCommit-URLs ohne das Suffix
refstringOptional. Git-Branch oder Tag (Standard: Standard-Branch des Repositories)
shastringOptional. 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 ([email protected]:owner/repo.git).
FeldTypBeschreibung
urlstringErforderlich. Git-Repository-URL, GitHub owner/repo-Kurzform oder SSH-URL
pathstringErforderlich. Unterverzeichnispfad im Repo, das das Plugin enthält (z. B. "tools/claude-plugin")
refstringOptional. Git-Branch oder Tag (Standard: Standard-Branch des Repositories)
shastringOptional. 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"
  }
}
FeldTypBeschreibung
packagestringErforderlich. Paketname oder Scoped-Paket (z. B. @org/plugin)
versionstringOptional. Version oder Versionsspanne (z. B. 2.1.0, ^2.0.0, ~1.5.0)
registrystringOptional. Benutzerdefinierte npm-Registry-URL. Standard ist die System-npm-Registry (normalerweise npmjs.org)

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 servers:
{
  "name": "enterprise-tools",
  "source": {
    "source": "github",
    "repo": "company/enterprise-plugin"
  },
  "description": "Enterprise workflow automation tools",
  "version": "2.1.0",
  "author": {
    "name": "Enterprise Team",
    "email": "[email protected]"
  },
  "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:
  • commands und agents: Sie können mehrere Verzeichnisse oder einzelne Dateien angeben. Pfade sind relativ zum Plugin-Root.
  • ${CLAUDE_PLUGIN_ROOT}: Verwenden Sie diese Variable in hooks und MCP server-Konfigurationen, um auf Dateien im Installationsverzeichnis des Plugins zu verweisen. Dies ist notwendig, da Plugins beim Installieren an einen Cache-Speicherort kopiert werden. 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 eigene plugin.json. Der Marktplatz-Eintrag definiert alles. Siehe Strict Mode unten.

Strict Mode

Das strict-Feld steuert, ob plugin.json die Autorität für Komponentendefinitionen ist (Befehle, Agents, hooks, skills, MCP servers, Ausgabestile).
WertVerhalten
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.
falseDer 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 eigene plugin.json und verwaltet seine eigenen Komponenten. Der Marktplatz-Eintrag kann zusätzliche Befehle 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 Befehle, 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 bietet die einfachste Verteilungsmethode:
  1. Repository erstellen: Richten Sie ein neues Repository für Ihren Marktplatz ein
  2. Marktplatzdatei hinzufügen: Erstellen Sie .claude-plugin/marketplace.json mit Ihren Plugin-Definitionen
  3. Mit Teams teilen: Benutzer fügen Ihren Marktplatz mit /plugin marketplace add owner/repo hinzu
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. Für manuelle Installation und Updates verwendet Claude Code Ihre vorhandenen Git-Credential-Helper. Wenn git clone für ein privates Repository in Ihrem Terminal funktioniert, funktioniert es auch in Claude Code. Häufige Credential-Helper sind gh auth login für GitHub, macOS Keychain und git-credential-store. Hintergrund-Auto-Updates werden beim Start ohne Credential-Helper ausgeführt, da interaktive Eingabeaufforderungen Claude Code am Start hindern würden. Um Auto-Updates für private Marktplätze zu aktivieren, legen Sie das entsprechende Authentifizierungstoken in Ihrer Umgebung fest:
AnbieterUmgebungsvariablenNotizen
GitHubGITHUB_TOKEN oder GH_TOKENPersönliches Zugriffs-Token oder GitHub App-Token
GitLabGITLAB_TOKEN oder GL_TOKENPersönliches Zugriffs-Token oder Projekt-Token
BitbucketBITBUCKET_TOKENApp-Passwort oder Repository-Zugriffs-Token
Legen Sie das Token in Ihrer Shell-Konfiguration fest (z. B. .bashrc, .zshrc) oder übergeben Sie es beim Ausführen von Claude Code:
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
Konfigurieren Sie das Token für CI/CD-Umgebungen als geheime Umgebungsvariable. GitHub Actions stellt automatisch GITHUB_TOKEN für Repositories in derselben Organisation bereit.

Lokal vor der Verteilung testen

Testen Sie Ihren Marktplatz lokal, bevor Sie ihn teilen:
/plugin marketplace add ./my-local-marketplace
/plugin install test-plugin@my-local-marketplace
Für die vollständige Palette von Add-Befehlen (GitHub, Git-URLs, lokale Pfade, Remote-URLs) siehe Marktplätze hinzufügen.

Marktplätze für Ihr Team erforderlich machen

Sie können Ihr Repository so konfigurieren, dass Teammitglieder automatisch aufgefordert werden, Ihren Marktplatz zu installieren, wenn sie dem Projektordner vertrauen. 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.

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 der erste Seed, der einen bestimmten Marktplatz oder Plugin-Cache enthält, gewinnt. Das Seed-Verzeichnis spiegelt die Struktur von ~/.claude/plugins:
$CLAUDE_CODE_PLUGIN_SEED_DIR/
  known_marketplaces.json
  marketplaces/<name>/...
  cache/<marketplace>/<plugin>/<version>/...
Der einfachste Weg, ein Seed-Verzeichnis zu erstellen, ist, Claude Code einmal während des Image-Builds auszuführen, die benötigten Plugins zu installieren, dann das resultierende ~/.claude/plugins-Verzeichnis in Ihr Image zu kopieren und CLAUDE_CODE_PLUGIN_SEED_DIR darauf zu verweisen. 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.
  • Komponiert mit Einstellungen: Wenn extraKnownMarketplaces oder enabledPlugins einen 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. Wenn strictKnownMarketplaces in verwalteten Einstellungen konfiguriert ist, hängt das Einschränkungsverhalten vom Wert ab:
WertVerhalten
Nicht definiert (Standard)Keine Einschränkungen. Benutzer können jeden Marktplatz hinzufügen
Leeres Array []Vollständige Sperrung. Benutzer können keine neuen Marktplätze hinzufügen
Liste von QuellenBenutzer können nur Marktplätze hinzufügen, die genau mit der Zulassungsliste übereinstimmen

Häufige Konfigurationen

Deaktivieren Sie alle Marktplatz-Ergänzungen:
{
  "strictKnownMarketplaces": []
}
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 Marktplätze von einem internen Git-Server mit Regex-Musterabgleich auf dem Host zulassen:
{
  "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 automatisch verfügbar zu machen, ohne dass Benutzer /plugin marketplace add ausführen müssen, kombinieren Sie es mit extraKnownMarketplaces in derselben managed-settings.json. Siehe Beide zusammen verwenden.

Wie Einschränkungen funktionieren

Einschränkungen werden früh im Plugin-Installationsprozess validiert, bevor Netzwerkanfragen oder Dateisystemoperationen auftreten. Dies verhindert unbefugte Marktplatz-Zugriffversuche. Die Zulassungsliste verwendet exakten Abgleich für die meisten Quellentypen. Damit ein Marktplatz zulässig ist, müssen alle angegebenen Felder genau übereinstimmen:
  • Für GitHub-Quellen: repo ist erforderlich, und ref oder path müssen auch übereinstimmen, wenn sie in der Zulassungsliste angegeben sind
  • 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
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. Sie können die Version im Plugin-Manifest (plugin.json) oder im Marktplatz-Eintrag (marketplace.json) angeben.
Vermeiden Sie nach Möglichkeit, die Version an beiden Stellen festzulegen. Das Plugin-Manifest gewinnt immer stillschweigend, was dazu führen kann, dass die Marktplatz-Version ignoriert wird. Legen Sie für Plugins mit relativen Pfaden die Version im Marktplatz-Eintrag fest. Legen Sie für alle anderen Plugin-Quellen die Version im Plugin-Manifest fest.

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 die beiden Marktplätze verschiedenen Benutzergruppen über verwaltete Einstellungen zuweisen.
Die plugin.json des Plugins muss eine andere version bei jedem angehefteten Ref oder Commit deklarieren. Wenn zwei Refs oder Commits die gleiche Manifest-Version haben, 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 der entsprechenden Benutzergruppe über verwaltete Einstellungen 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"
      }
    }
  }
}

Validierung und Tests

Testen Sie Ihren Marktplatz vor dem Teilen. Validieren Sie Ihre Marktplatz-JSON-Syntax:
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.

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.json im angegebenen Pfad vorhanden ist
  • Stellen Sie sicher, dass die JSON-Syntax gültig ist und das Frontmatter wohlgeformt ist, indem Sie claude plugin validate oder /plugin validate verwenden
  • 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. Der Validator überprüft plugin.json, Skill/Agent/Befehl-Frontmatter und hooks/hooks.json auf Syntax- und Schema-Fehler. Häufige Fehler:
FehlerUrsacheLösung
File not found: .claude-plugin/marketplace.jsonFehlendes ManifestErstellen 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 marketplaceZwei Plugins teilen denselben NamenGeben 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
YAML frontmatter failed to parse: ...Ungültiges YAML in einer Skill-, Agent- oder BefehlsdateiBeheben Sie die YAML-Syntax im Frontmatter-Block. Zur Laufzeit wird diese Datei ohne Metadaten geladen.
Invalid JSON syntax: ... (hooks.json)Malformed hooks/hooks.jsonBeheben Sie die JSON-Syntax. Eine malformed hooks/hooks.json verhindert, dass das gesamte Plugin geladen wird.
Warnungen (nicht blockierend):
  • Marketplace has no plugins defined: Fügen Sie mindestens ein Plugin zum plugins-Array hinzu
  • No marketplace description provided: Fügen Sie metadata.description hinzu, um Benutzern zu helfen, Ihren Marktplatz zu verstehen
  • Plugin name "x" is not kebab-case: Der Plugin-Name enthält Großbuchstaben, Leerzeichen oder Sonderzeichen. 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.

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

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 status für GitHub aus)
  • Überprüfen Sie, dass Ihr Credential-Helper korrekt konfiguriert ist: git config --global credential.helper
  • Versuchen Sie, das Repository manuell zu klonen, um zu überprüfen, dass Ihre Anmeldedaten funktionieren
Für Hintergrund-Auto-Updates:
  • Legen Sie das entsprechende Token in Ihrer Umgebung fest: echo $GITHUB_TOKEN
  • Überprüfen Sie, dass das Token die erforderlichen Berechtigungen hat (Lesezugriff auf das Repository)
  • Überprüfen Sie für GitHub, dass das Token den repo-Scope für private Repositories hat
  • Überprüfen Sie für GitLab, dass das Token mindestens den read_repository-Scope hat
  • Überprüfen Sie, dass das Token nicht abgelaufen ist

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: URL-basierte Marktplätze laden nur die marketplace.json-Datei selbst herunter. Sie laden keine Plugin-Dateien vom 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, um stattdessen GitHub-, npm- oder Git-URL-Quellen zu verwenden:
    { "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. Pfade, die auf Dateien außerhalb des 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