Vertiefung zu Modul 10 · Bündeln, verteilen, aktualisieren
Modul 10 sagt, warum man Konfiguration bündelt. Hier geht es darum, wie das Bündel aussieht — und wo es klemmt.
Was ein Plugin bündelt und wie die Teile heißen
Fast alles, was auch in einem .claude/-Verzeichnis liegen kann — jede Art in ihrem eigenen Ordner, alle optional.
skills/, commands/, agents/, workflows/hooks/, monitors/.mcp.json, .lsp.jsonoutput-styles/, themes/scripts/, bin/ — was in bin/ liegt, ist als nackter Befehl aufrufbar.plugin.json liegt in .claude-plugin/. Alle Komponentenordner liegen daneben, im Plugin-Wurzelverzeichnis. Das ist der Fehler, den man genau einmal macht — und dann eine halbe Stunde sucht, warum nichts lädt.Das Manifest ist optional. Ohne es findet Claude Code die Komponenten an den Standardorten und leitet den Namen aus dem Verzeichnis ab.
name das einzige Pflichtfeld. Alles andere ist Metadaten oder Pfadangabe.version steuert Updates. Ohne sie dient der Git-Commit als Version, jeder Commit gilt als neu. Mit ihr gibt es Updates nur beim Anheben.claude plugin validate --strict macht daraus einen Fehler.keywords als Zeichenkette statt Liste ist ein Ladefehler.Ein Pfad im Manifest verhält sich je Feld anders. Bei einem Feld kommt der eigene Pfad dazu, bei den übrigen tritt er an die Stelle des Standardordners.
| Feld | Verhalten |
|---|---|
skills | ergänzt — skills/ wird immer gescannt, die eigenen Pfade kommen dazu |
commands, agents, workflows, outputStyles | ersetzt — sobald gesetzt, wird der Standardordner nicht mehr gescannt |
hooks, mcpServers, lspServers | eigene Zusammenführungsregeln |
"commands": ["./commands/", "./extras/"]. Alle Pfade sind relativ zum Plugin-Wurzelverzeichnis und beginnen mit ./.Plugin-Skills sind immer mit Namensraum versehen: /plugin-name:skill-name. Das verhindert Kollisionen, wenn zwei Plugins denselben Skill mitbringen.
name aus plugin.json — nicht displayName, der ist reine Anzeige.skills/.enabledPlugins und /plugin der Katalog-Name.plugin-dev:agent-creator..claude/ in ein Plugin: Projekt-Agenten überschreiben gleichnamige Plugin-Agenten. Skills nicht — sie sind namespaced, also bleiben /name und /plugin:name beide da.Katalog, Quellen, Versionen
.claude-plugin/marketplace.json im Wurzelverzeichnis des Katalogs. Kein Dienst, kein Konto, keine Anmeldung — eine Datei mit drei Pflichtfeldern.
name, owner mit name, und plugins als Liste.name und source. Erlaubt ist zusätzlich jedes Feld des Manifests.Fünf Quelltypen. Für den Kurs zählt der erste: ein lokales Verzeichnis genügt, und die Doku beschreibt das ausdrücklich als Testweg.
./ beginnen, liegt im Katalog-Verzeichnis.github mit repo, optional ref und sha.url für eine beliebige Git-Adresse, git-subdir für ein Unterverzeichnis daraus.npm über die Paketverwaltung.ref und sha gesetzt, gewinnt der sha.sha.Wer version setzt, pinnt das Plugin auf diesen String. Neue Commits allein bewirken dann nichts.
version: Updates gibt es erst beim Anheben. /plugin update meldet vorher „already at the latest version".version: der Git-Commit ist die Version — jeder Commit ist ein Update.plugin.json über den Katalogeintrag.Wo der Schalter steht — und was im Plugin nicht gilt
enabledPlugins trägt Einträge der Form "plugin@katalog": true. Wo der Eintrag steht, entscheidet, ob er wirkt.
false in den User-Settings verpufft, wenn das Projekt das Plugin aktiviert — Projekt schlägt User..claude/settings.local.json.pluginConfigs wird nur aus User-Settings und Managed Settings gelesen. Projekt- und Local-Einträge werden ignoriert — damit ein geklontes Repository keine Werte in Hook- und MCP-Konfigurationen einschleusen kann.Ein Plugin verteilt Fähigkeiten — es kann sich aber nicht selbst Rechte, Anschlüsse oder einen Lebenszyklus mitgeben.
| Wo | Was nicht funktioniert |
|---|---|
| Plugin-Subagent | hooks, mcpServers, permissionMode — ausdrücklich „for security reasons" |
Plugin-settings.json | nur agent und subagentStatusLine; alles andere wird stillschweigend ignoriert |
CLAUDE.md im Plugin | wird nicht als Projektkontext geladen — Anweisungen gehören in einen Skill |
| Pfade nach draußen | ../shared-utils fehlt nach der Installation; Symlinks aus dem Katalog heraus werden übersprungen |
| Hook-Matcher auf eigenen MCP-Server | der bloße Server-Schlüssel feuert nie — es braucht den vollen Namen mit Plugin-Präfix |
Ein Plugin bringt fremden Code mit, der Hooks registrieren und Werkzeuge freigeben kann. Entsprechend gibt es Schalter dafür — nur in Managed Settings.
strictKnownMarketplaces begrenzt, welche Kataloge überhaupt hinzugefügt werden dürfen.blockedMarketplaces ist die Sperrliste. Geprüft vor dem Herunterladen — gesperrte Quellen berühren das Dateisystem nie.strictPluginOnlyCustomization dreht es um: Skills, Agenten, Hooks und MCP-Server dürfen dann nur aus Plugins kommen.disableSideloadFlags schließt die Umgehung über --plugin-dir und Verwandte.pluginTrustMessage eigenen Text anhängen. Ein Plugin zu installieren heißt, seinem Autor Werkzeugzugriff in eurem Repository zu geben.Die Entscheidung, die vor dem Bauen kommt
Ein Plugin lohnt sich ab dem zweiten Repository, nicht ab der zweiten Datei. Vorher ist .claude/ im Projekt einfacher und ehrlicher.
cgs-demoDas Begleitplugin bündelt je eine Komponente jeder Art. Seine Nutzlast ist ein Link-Prüfer — klein, ohne Abhängigkeiten, in jedem Schulungs-Repository nützlich.
allowed-tools mit ${CLAUDE_PLUGIN_ROOT}.PostToolUse, schreibt nach ${CLAUDE_PLUGIN_DATA}.Was von diesem Deck hängenbleiben soll.
name das einzige Pflichtfeld..claude-plugin/ liegt nur plugin.json. Alle Komponentenordner liegen daneben.version pinnt. Ohne sie ist jeder Commit ein Update, mit ihr gibt es keins, bis sie steigt.hooks, mcpServers und permissionMode weg.marketplace.json, die auflistet, welche Plugins es gibt und woher sie kommen. Kein Dienst: ein lokales Verzeichnis oder ein Git-Repository genügt.
plugin.json in .claude-plugin/. Trägt Metadaten und optional eigene Pfade zu den Komponenten. Insgesamt optional; ohne sie gelten die Standardorte.
/cgs-demo:checking-links. Er kommt aus dem Feld name und verhindert Kollisionen zwischen Plugins.
Alle Rechte vorbehalten
Diese Schulungsunterlagen sind urheberrechtlich geschützt. Vervielfältigung, Weitergabe oder kommerzielle Nutzung — auch in Auszügen — nur mit ausdrücklicher schriftlicher Genehmigung der CGS IT Solutions GmbH.
cgsit-claude-training · Erweiterung 5 · Plugins · v0.10.0