Plugin-Komponenten-Referenz
Skills
Plugins fügen Skills zu Claude Code hinzu und erstellen/name Verknüpfungen, die Sie oder Claude aufrufen können.
Speicherort: skills/ oder commands/ Verzeichnis im Plugin-Root, oder eine einzelne SKILL.md Datei im Plugin-Root
Dateiformat: Skills sind Verzeichnisse mit SKILL.md; Befehle sind einfache Markdown-Dateien
Skill-Struktur:
- Skills und Befehle werden automatisch erkannt, wenn das Plugin installiert wird
- Claude kann sie automatisch basierend auf dem Task-Kontext aufrufen
- Skills können unterstützende Dateien neben SKILL.md enthalten
skills/ Verzeichnis und kein skills Manifest-Feld hat, wird eine SKILL.md im Plugin-Root als einzelner Skill geladen. Setzen Sie das Frontmatter-Feld name, um den Aufrufen-Namen des Skills zu steuern. Ohne dieses Feld greift Claude Code auf den Installationsverzeichnisnamen zurück, der bei vom Marktplatz installierten Plugins ein Versionsstring ist, der sich bei jedem Update ändert. Für Plugins, die mehr als einen Skill versenden, verwenden Sie das oben gezeigte skills/ Verzeichnis-Layout.
Vollständige Details finden Sie unter Skills.
Agents
Plugins können spezialisierte Subagents für spezifische Aufgaben bereitstellen, die Claude automatisch aufrufen kann, wenn dies angemessen ist. Speicherort:agents/ Verzeichnis im Plugin-Root
Dateiformat: Markdown-Dateien, die Agent-Fähigkeiten beschreiben
Agent-Struktur:
name, description, model, effort, maxTurns, tools, disallowedTools, skills, memory, background und isolation Frontmatter-Felder. Der einzige gültige isolation Wert ist "worktree". Aus Sicherheitsgründen werden hooks, mcpServers und permissionMode für von Plugins bereitgestellte Agents nicht unterstützt.
Integrationspunkte:
- Agents erscheinen in der @-mention Typeahead unter ihrem scoped Namen, wie
my-plugin:code-reviewer, sobald das Plugin aktiviert ist - Claude kann Agents automatisch basierend auf dem Task-Kontext aufrufen
- Agents können manuell von Benutzern aufgerufen werden
- Plugin-Agents funktionieren neben integrierten Claude-Agents
Hooks
Plugins können Event-Handler bereitstellen, die automatisch auf Claude Code Events reagieren. Speicherort:hooks/hooks.json im Plugin-Root oder inline in plugin.json
Format: JSON-Konfiguration mit Event-Matchern und Aktionen
Hook-Konfiguration:
Hook-Typen:
command: Shell-Befehle oder Skripte ausführenhttp: Das Event JSON als POST-Anfrage an eine URL sendenmcp_tool: Ein Tool auf einem konfigurierten MCP-Server aufrufenprompt: Ein Prompt mit einem LLM evaluieren (verwendet$ARGUMENTSPlatzhalter für Kontext)agent: Einen agentic Verifier mit Tools für komplexe Verifikationsaufgaben ausführen
if Felder verwenden den scoped Tool-Namen mcp__plugin_<plugin-name>_<server-name>__<tool>, und das mcp_tool Hook-Feld server verwendet plugin:<plugin-name>:<server-name>. Ein Matcher, der gegen den bloßen Server-Schlüssel geschrieben wird, wird nie ausgelöst. Siehe Match MCP tools und Plugin-bereitgestellte MCP-Server.
MCP-Server
Plugins können Model Context Protocol (MCP) Server bündeln, um Claude Code mit externen Tools und Services zu verbinden. Speicherort:.mcp.json im Plugin-Root oder inline in plugin.json
Format: Standard MCP-Server-Konfiguration
MCP-Server-Konfiguration:
- Plugin MCP-Server starten automatisch, wenn das Plugin aktiviert wird
- Server erscheinen als Standard MCP-Tools in Claudes Toolkit
- Server-Fähigkeiten integrieren sich nahtlos mit Claudes vorhandenen Tools
- Plugin-Server können unabhängig von Benutzer MCP-Servern konfiguriert werden
LSP-Server
Plugins können Language Server Protocol (LSP) Server bereitstellen, um Claude Echtzeit-Code-Intelligenz beim Arbeiten an Ihrer Codebasis zu geben. LSP-Integration bietet:- Sofortige Diagnose: Claude sieht Fehler und Warnungen sofort nach jeder Bearbeitung
- Code-Navigation: Gehe zu Definition, finde Referenzen und Hover-Informationen
- Sprachbewusstsein: Typinformationen und Dokumentation für Code-Symbole
.lsp.json im Plugin-Root oder inline in plugin.json
Format: JSON-Konfiguration, die Language Server Namen ihren Konfigurationen zuordnet
.lsp.json Dateiformat:
plugin.json:
Optionale Felder:
restartOnCrash und shutdownTimeout erfordern Claude Code v2.1.205 oder später. Vor v2.1.205 akzeptierte das Konfigurationsschema beide Optionen, aber das Setzen einer dieser Optionen führte dazu, dass Claude Code diesen LSP-Server beim Startup vollständig übersprungen hat, wobei der Grund nur in der claude --debug Ausgabe sichtbar war.
Mehrere Server für die gleiche Erweiterung: Wenn mehr als ein aktivierter LSP-Server die gleiche Dateierweiterung in extensionToLanguage deklariert, ob die Server von einem Plugin oder von verschiedenen Plugins stammen, verarbeitet der zuerst registrierte Server Dateien mit dieser Erweiterung und die anderen starten nie. Die /plugin Schnittstelle zeigt eine Warnung an, die das Plugin benennt, dessen Server aktiv ist.
Server, die nicht initialisiert werden können: Claude Code überspringt einen Server, dessen Konfiguration ungültig ist, zum Beispiel einer, dem command oder extensionToLanguage fehlt, und die anderen konfigurierten Server starten trotzdem. Führen Sie claude --debug aus, um zu sehen, warum ein Server übersprungen wurde.
Ein übersprungener Server beansprucht seine Dateierweiterungen nicht, daher kann ein anderer gültiger Server, der die gleiche Erweiterung deklariert, von demselben oder einem anderen Plugin, diese Dateien trotzdem verarbeiten. Vor v2.1.205 beanspruchte ein Server, der nicht initialisiert werden konnte, immer noch seine Erweiterungen und blockierte einen anderen gültigen Server für die gleiche Erweiterung.
Verfügbare LSP-Plugins:
Installieren Sie zuerst den Language Server, dann installieren Sie das Plugin vom Marktplatz.
Monitore
Plugins können Hintergrund-Monitore deklarieren, die Claude Code automatisch startet, wenn das Plugin aktiv ist. Jeder Monitor führt einen Shell-Befehl für die Lebensdauer der Session aus und liefert jede stdout-Zeile an Claude als Benachrichtigung, damit Claude auf Log-Einträge, Statusänderungen oder abgerufene Events reagieren kann, ohne aufgefordert zu werden, die Überwachung selbst zu starten. Plugin-Monitore verwenden den gleichen Mechanismus wie das Monitor-Tool und teilen seine Verfügbarkeitsbeschränkungen. Sie laufen nur in interaktiven CLI-Sessions, laufen unsandboxed auf der gleichen Vertrauensebene wie Hooks und werden auf Hosts übersprungen, wo das Monitor-Tool nicht verfügbar ist. Speicherort:monitors/monitors.json im Plugin-Root oder inline in plugin.json
Format: JSON-Array von Monitor-Einträgen
Die folgende monitors/monitors.json überwacht einen Deployment-Status-Endpunkt und ein lokales Error-Log:
experimental.monitors in plugin.json auf das gleiche Array. Um von einem nicht-Standard-Pfad zu laden, setzen Sie experimental.monitors auf einen relativen Pfad-String wie "./config/monitors.json". Monitore sind eine experimentelle Komponente.
Erforderliche Felder:
Optionale Felder:
Der
command Wert unterstützt die Pfad-Substitutionen ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA} und ${CLAUDE_PROJECT_DIR}, plus alle ${ENV_VAR} aus der Umgebung. Stellen Sie dem Befehl cd "${CLAUDE_PLUGIN_ROOT}" && voran, wenn das Skript aus dem Plugin-eigenen Verzeichnis ausgeführt werden muss.
Ein Monitor command kann nicht auf ${user_config.*} Werte verweisen. Der Befehl läuft durch eine Shell, daher lehnt Claude Code den Monitor mit einem Fehler ab, anstatt den Wert zu ersetzen. Monitor-Prozesse erhalten keine CLAUDE_PLUGIN_OPTION_<KEY> Umgebungsvariablen, daher sollte das Monitor-Skript den Wert aus einer Konfigurationsdatei lesen, die es besitzt. Vor v2.1.207 ersetzten Monitor-Befehle ${user_config.*} Werte.
Das Deaktivieren eines Plugins während einer Session stoppt nicht die Monitore, die bereits laufen. Sie stoppen, wenn die Session endet.
Themes
Plugins können Farbthemes versenden, die in/theme neben den integrierten Voreinstellungen und den lokalen Themes des Benutzers angezeigt werden. Ein Theme ist eine JSON-Datei in themes/ mit einer base Voreinstellung und einer sparsamen overrides Map von Farb-Tokens. Themes sind eine experimentelle Komponente.
custom:<plugin-name>:<slug> in der Konfiguration des Benutzers. Plugin-Themes sind schreibgeschützt; das Drücken von Ctrl+E auf einem in /theme kopiert es in ~/.claude/themes/, damit der Benutzer die Kopie bearbeiten kann.
Plugin-Installationsbereiche
Wenn Sie ein Plugin installieren, wählen Sie einen Bereich, der bestimmt, wo das Plugin verfügbar ist und wer es sonst noch verwenden kann:
Plugins verwenden das gleiche Bereichssystem wie andere Claude Code Konfigurationen. Installationsanweisungen und Bereichs-Flags finden Sie unter Plugins installieren. Eine vollständige Erklärung der Bereiche finden Sie unter Konfigurationsbereiche.
Skills-Verzeichnis-Plugins
Jeder Ordner unter einem Skills-Verzeichnis, das ein.claude-plugin/plugin.json Manifest enthält, wird beim nächsten Session als Plugin mit dem Namen <name>@skills-dir geladen, ohne Marktplatz und ohne Installationsschritt. Erstellen Sie einen mit plugin init. Im Gegensatz zu einer Marktplatz-Installation wird das Plugin an Ort und Stelle erkannt, anstatt in den Plugin-Cache kopiert zu werden.
Ein Skills-Verzeichnis-Baum unterstützt drei unterschiedliche Dinge:
Wählen Sie, von wo das Plugin geladen wird
Ein Projekt-Bereich-Plugin wird in das Repository eingecheckt und erreicht jeden Mitarbeiter, der es klont. Da dieser Inhalt aus dem Repository und nicht von Ihnen stammt, wird er nur nach dem gleichen Trust-Gate geladen, das
.claude/settings.json regelt, und Komponenten, die Code ausführen, sind weiter eingeschränkt:
- MCP-Server, die es deklariert, durchlaufen die gleiche Pro-Server-Genehmigung wie ein Projekt
.mcp.json - LSP-Server starten nur, nachdem Sie dem Workspace vertrauen
- Hintergrund-Monitore werden nicht geladen
Bearbeiten, neu laden und deaktivieren Sie ein Skills-Verzeichnis-Plugin
Änderungen, die Sie an derSKILL.md eines Skills vornehmen, treten sofort in der aktuellen Session in Kraft. Änderungen an den anderen Komponenten des Plugins, wie hooks/, .mcp.json, agents/ und output-styles/, tun dies nicht. Führen Sie /reload-plugins aus oder starten Sie Claude Code neu, um diese zu übernehmen. Siehe Live-Änderungserkennung.
Um das Laden eines Skills-Verzeichnis-Plugins zu stoppen, löschen Sie seinen Ordner oder deaktivieren Sie ihn nach Name. Es gibt keinen uninstall Schritt, da nichts von einem Marktplatz installiert wurde.
Plugin-Manifest-Schema
Die.claude-plugin/plugin.json Datei definiert die Metadaten und Konfiguration Ihres Plugins. Dieser Abschnitt dokumentiert alle unterstützten Felder und Optionen.
Das Manifest ist optional. Wenn es weggelassen wird, erkennt Claude Code Komponenten automatisch in Standardspeicherorten und leitet den Plugin-Namen aus dem Verzeichnisnamen ab. Verwenden Sie ein Manifest, wenn Sie Metadaten oder benutzerdefinierte Komponentenpfade bereitstellen müssen.
Vollständiges Schema
Erforderliche Felder
Wenn Sie ein Manifest einschließen, istname das einzige erforderliche Feld.
Dieser Name wird für die Namensgebung von Komponenten verwendet. Beispielsweise wird der Agent
agent-creator für das Plugin mit dem Namen plugin-dev in der Benutzeroberfläche als plugin-dev:agent-creator angezeigt.
Nicht erkannte Felder
Claude Code ignoriert Top-Level-Felder, die es nicht erkennt. Sie können Metadaten aus einem anderen Ökosystem inplugin.json behalten und das Plugin wird trotzdem geladen. Dies macht es praktisch, ein Manifest zu verwalten, das gleichzeitig als VS Code- oder Cursor-Erweiterungsmanifest, eine npm package.json oder ein MCPB/DXT-Bundle-Manifest dient.
claude plugin validate meldet nicht erkannte Felder als Warnungen, nicht als Fehler. Wenn ein Feld ein oder zwei Zeichen von einem erkannten entfernt ist, schlägt die Warnung den wahrscheinlich beabsichtigten Namen vor. Ein Plugin mit nur Warnungen zu nicht erkannten Feldern besteht die Validierung und wird zur Laufzeit geladen.
Felder mit dem falschen Typ schlagen immer noch fehl. Beispielsweise ist ein keywords Wert, der ein String statt eines Arrays ist, ein Ladefehler, und claude plugin validate meldet ihn als solchen.
Übergeben Sie --strict, um Warnungen als Fehler zu behandeln. Verwenden Sie es in CI, um einen falsch geschriebenen Feldnamen oder ein Feld, das von einem anderen Tool-Manifest übrig geblieben ist, vor der Veröffentlichung zu erfassen, obwohl das Plugin zur Laufzeit geladen würde.
Metadaten-Felder
Standardaktivierung
Setzen SiedefaultEnabled: false in plugin.json, um ein Plugin zu versenden, das deaktiviert installiert wird. Der Benutzer schaltet es mit claude plugin enable <plugin> oder der /plugin Schnittstelle ein. Verwenden Sie dies für Plugins, die Kosten hinzufügen oder einen Bereich, in den sich ein Benutzer einwählen sollte, wie eines, das sich mit einem externen Service verbindet. Dies erfordert Claude Code v2.1.154 oder später. Frühere Versionen ignorieren das Feld und aktivieren das Plugin bei der Installation.
defaultEnabled ist der Fallback, wenn nichts anderes den Zustand des Plugins entschieden hat. Zwei Dinge haben Vorrang vor ihm:
- Die Einstellung des Benutzers: Ein Eintrag für das Plugin in
enabledPluginsin jedem Einstellungsbereich. Einmal geschrieben, bleibt es über Plugin-Updates und Neuinstallationen bestehen, daher ändert das Ändern vondefaultEnabledin einer späteren Version nicht einen bestehenden Benutzer. - Eine Abhängigkeitsanforderung: Wenn ein Plugin von einem anderen erforderlich ist, das aktiv ist, schreibt Claude Code
truedafür bei Installation oder Aktivierung. Das gibt ihm eine explizite Einstellung, daher gilt sein eigener Standard nicht mehr. Siehe Aktivieren oder Deaktivieren eines Plugins mit Abhängigkeiten.
plugin.json hat. Siehe Optionale Plugin-Felder.
Komponentenpfad-Felder
Experimentelle Komponenten
Komponenten unter demexperimental Schlüssel, themes und monitors, haben ein Manifest-Schema, das sich zwischen Releases ändern kann, während sie stabilisieren. Wo Sie sie deklarieren, ist eine separate Migration: das Top-Level funktioniert immer noch, claude plugin validate warnt, und eine zukünftige Version wird experimental.* erfordern.
Benutzerkonfiguration
DasuserConfig Feld deklariert Werte, die Claude Code den Benutzer abfragt, wenn das Plugin aktiviert wird. Verwenden Sie dies, anstatt Benutzer zu zwingen, settings.json manuell zu bearbeiten.
Jeder Wert ist für die Substitution als
${user_config.KEY} in MCP- und LSP-Server-Konfigurationen und Hook-Befehlen verfügbar. Nicht-sensitive Werte können auch in Skill- und Agent-Inhalten ersetzt werden. Alle Werte werden an Hook-Prozesse als CLAUDE_PLUGIN_OPTION_<KEY> Umgebungsvariablen exportiert, wobei <KEY> der Optionsschlüssel in Großbuchstaben ist.
Felder, die in einer Shell ausgeführt werden, lehnen ${user_config.*} ab: Das Ersetzen eines konfigurierten Werts in einem Shell-Befehl würde der Shell ermöglichen, alles auszuführen, was dieser Wert enthält, daher schlägt die Komponente mit einem Fehler fehl. Jedes abgelehnte Feld hat eine alternative Möglichkeit, den Wert zu übergeben:
Vor v2.1.207 ersetzten diese Felder
${user_config.KEY} Werte; aktualisieren Sie Plugins, die sich darauf verlassen haben.
Nicht-sensitive Werte werden unter dem pluginConfigs Schlüssel in settings.json als pluginConfigs[<plugin-id>].options gespeichert. Claude Code schreibt den Schlüssel in Benutzereinstellungen und liest ihn aus Benutzereinstellungen, dem --settings Flag und verwalteten Einstellungen zurück; Einträge in einer Projekt-.claude/settings.json oder .claude/settings.local.json werden ignoriert. Vor v2.1.207 las Claude Code auch Projekt- und lokale Einstellungen.
Sensitive Werte gehen zum macOS Keychain oder zu ~/.claude/.credentials.json auf Plattformen, wo kein unterstützter Keychain verfügbar ist. Keychain-Speicher wird mit OAuth-Tokens geteilt und hat ein ungefähres Gesamtlimit von 2 KB, daher halten Sie sensitive Werte klein.
Kanäle
Daschannels Feld ermöglicht es einem Plugin, einen oder mehrere Nachrichtenkanäle zu deklarieren, die Inhalte in die Konversation injizieren. Jeder Kanal bindet sich an einen MCP-Server, den das Plugin bereitstellt.
server Feld ist erforderlich und muss einem Schlüssel in den mcpServers des Plugins entsprechen. Das optionale Pro-Kanal userConfig verwendet das gleiche Schema wie das Top-Level-Feld, wodurch das Plugin Bot-Tokens oder Owner-IDs abfragen kann, wenn das Plugin aktiviert wird.
Pfad-Verhaltensregeln
Ob ein benutzerdefinierter Pfad das Standard-Verzeichnis des Plugins ersetzt oder erweitert, hängt vom Feld ab:- Ersetzt den Standard:
commands,agents,outputStyles,experimental.themes,experimental.monitors. Beispielsweise wird das Standard-Verzeichniscommands/nicht gescannt, wenn das Manifestcommandsangibt. Um den Standard zu behalten und mehr hinzuzufügen, listen Sie ihn explizit auf:"commands": ["./commands/", "./extras/"] - Fügt zum Standard hinzu:
skills. Das Standard-Verzeichnisskills/wird immer gescannt, und Verzeichnisse, die inskillsaufgelistet sind, werden zusammen mit ihm geladen. Ausnahme: für einen Marktplatz-Eintrag, dessensourcezum Marktplatz-Root aufgelöst wird, ersetzt das Deklarieren spezifischer Unterverzeichnisse den Scan - Eigene Merge-Regeln: hooks, MCP-Server und LSP-Server. Siehe jeden Abschnitt für die Kombinationsweise mehrerer Quellen
claude plugin list und der /plugin Detailansicht. Das Plugin wird weiterhin mit den Manifest-Pfaden geladen. Es wird keine Warnung angezeigt, wenn der Manifest-Schlüssel auf den Standard-Ordner verweist, beispielsweise "commands": ["./commands/deploy.md"], da der Ordner in diesem Fall explizit adressiert wird.
Für alle Pfadfelder:
- Alle Pfade müssen relativ zum Plugin-Root sein und mit
./beginnen - Komponenten aus benutzerdefinierten Pfaden verwenden die gleichen Benennungs- und Namensgebungsregeln
- Mehrere Pfade können als Arrays angegeben werden
- Wenn ein Skill-Pfad auf ein Verzeichnis verweist, das direkt ein
SKILL.mdenthält, beispielsweise"skills": ["./"]verweist auf den Plugin-Root, bestimmt das Frontmatter-FeldnameinSKILL.mdden Aufrufen-Namen des Skills. Dies gibt einen stabilen Namen unabhängig vom Installationsverzeichnis. Wennnamenicht im Frontmatter gesetzt ist, wird der Verzeichnis-Basename als Fallback verwendet.
SKILL.md in seinem Root hat, kein skills/ Unterverzeichnis und kein skills Manifest-Feld hat, wird automatisch als Single-Skill-Plugin in Claude Code v2.1.142 und später geladen. Sie müssen "skills": ["./"] in plugin.json für dieses Layout nicht setzen. Der Aufrufen-Name des Skills folgt der gleichen Regel wie oben: das Frontmatter-Feld name oder der Verzeichnis-Basename als Fallback.
Pfad-Beispiele:
Umgebungsvariablen
Claude Code bietet drei Variablen zum Referenzieren von Pfaden:
Alle drei werden als Umgebungsvariablen an Hook-Prozesse und an MCP- und LSP-Server-Subprozesse exportiert. Welche Felder sie inline ersetzen, hängt von der Plugin-Komponente ab:
In Hook-Befehlen verwenden Sie Exec-Form mit
args, damit jeder Pfad als ein Argument ohne Anführungszeichen übergeben wird. In Shell-Form-Hooks und Monitor-Befehlen wickeln Sie die Variablen in doppelte Anführungszeichen ein, wie in "${CLAUDE_PROJECT_DIR}/scripts/server.sh". Dieser Shell-Form-Hook führt ein mit einem Plugin gebündeltes Skript aus:
${CLAUDE_PLUGIN_ROOT} ändert sich, wenn das Plugin aktualisiert wird. Das Verzeichnis der vorherigen Version bleibt etwa sieben Tage nach einem Update auf der Festplatte, bevor es bereinigt wird, aber behandeln Sie es als kurzlebig und schreiben Sie keinen Status dort.
Wenn ein Plugin während einer Sitzung aktualisiert wird, verwenden Hook-Befehle, Monitore, MCP-Server und LSP-Server weiterhin den Pfad der vorherigen Version. Führen Sie /reload-plugins aus, um Hooks, MCP-Server und LSP-Server auf den neuen Pfad umzuschalten; Monitore erfordern einen Neustart der Sitzung.
MCP-Server können auch die roots/list Anfrage aufrufen, um die Arbeitsverzeichnisse der Sitzung zur Laufzeit zu lesen. Siehe was roots/list zurückgibt und wann Claude Code den Server über Änderungen benachrichtigt.
Persistentes Datenverzeichnis
Das${CLAUDE_PLUGIN_DATA} Verzeichnis wird zu ~/.claude/plugins/data/{id}/ aufgelöst, wobei {id} der Plugin-Bezeichner mit Zeichen außerhalb von a-z, A-Z, 0-9, _ und - ist, die durch - ersetzt werden. Für ein Plugin, das als formatter@my-marketplace installiert ist, ist das Verzeichnis ~/.claude/plugins/data/formatter-my-marketplace/.
Eine häufige Verwendung ist die einmalige Installation von Sprachabhängigkeiten und deren Wiederverwendung über Sessions und Plugin-Updates hinweg. Da das Datenverzeichnis länger lebt als jede einzelne Plugin-Version, kann eine Überprüfung auf Verzeichnisexistenz allein nicht erkennen, wenn ein Update das Abhängigkeitsmanifest des Plugins ändert. Das empfohlene Muster vergleicht das gebündelte Manifest mit einer Kopie im Datenverzeichnis und installiert neu, wenn sie sich unterscheiden.
Dieser SessionStart Hook installiert node_modules beim ersten Durchlauf und erneut, wenn ein Plugin-Update ein geändertes package.json enthält:
diff beendet sich mit Nonzero, wenn die gespeicherte Kopie fehlt oder sich vom gebündelten unterscheidet, was sowohl den ersten Durchlauf als auch abhängigkeitsändernde Updates abdeckt. Wenn npm install fehlschlägt, entfernt das nachfolgende rm das kopierte Manifest, damit die nächste Session erneut versucht.
Skripte, die in ${CLAUDE_PLUGIN_ROOT} gebündelt sind, können dann gegen die persistierten node_modules ausgeführt werden:
/plugin Schnittstelle zeigt die Verzeichnisgröße an und fragt vor dem Löschen. Die CLI löscht standardmäßig; übergeben Sie --keep-data, um es zu bewahren.
Plugin-Caching und Dateiauflösung
Plugins werden auf eine von zwei Arten angegeben:- Durch
claude --plugin-diroderclaude --plugin-url, für die Dauer einer Session. - Durch einen Marktplatz, installiert für zukünftige Sessions.
~/.claude/plugins/cache), anstatt sie an Ort und Stelle zu verwenden. Das Verständnis dieses Verhaltens ist wichtig, wenn Sie Plugins entwickeln, die auf externe Dateien verweisen.
Jede installierte Version ist ein separates Verzeichnis im Cache. Wenn Sie ein Plugin aktualisieren oder deinstallieren, wird das vorherige Versionsverzeichnis als verwaist markiert und automatisch 7 Tage später entfernt. Die Gnadenfrist ermöglicht es gleichzeitigen Claude Code Sessions, die bereits die alte Version geladen haben, ohne Fehler weiter zu laufen.
Claudes Glob- und Grep-Tools überspringen verwaiste Versionsverzeichnisse während Suchen, daher enthalten Dateiergebnisse keinen veralteten Plugin-Code.
Pfad-Traversal-Einschränkungen
Installierte Plugins können nicht auf Dateien außerhalb ihres Verzeichnisses verweisen. Pfade, die außerhalb des Plugin-Root traversieren (wie../shared-utils), funktionieren nach der Installation nicht, da diese externen Dateien nicht in den Cache kopiert werden.
Dateien innerhalb eines Marktplatzes mit Symlinks freigeben
Wenn Ihr Plugin Dateien mit anderen Teilen desselben Marktplatzes freigeben muss, können Sie symbolische Links in Ihrem Plugin-Verzeichnis erstellen. Wie ein Symlink behandelt wird, wenn das Plugin in den Cache kopiert wird, hängt davon ab, wo sein Ziel aufgelöst wird:- Innerhalb des eigenen Verzeichnisses des Plugins: Der Symlink wird als relativer Symlink im Cache beibehalten, sodass er zur Laufzeit weiterhin zum kopierten Ziel aufgelöst wird.
- Anderswo innerhalb desselben Marktplatzes: Der Symlink wird dereferenziert. Der Inhalt des Ziels wird stattdessen in den Cache kopiert. Dies ermöglicht es einem Meta-Plugin, sein
skills/-Verzeichnis mit Skills zu verknüpfen, die von anderen Plugins im Marktplatz definiert werden. - Außerhalb des Marktplatzes: Der Symlink wird aus Sicherheitsgründen übersprungen. Dies verhindert, dass Plugins beliebige Host-Dateien wie Systempfade in den Cache ziehen.
--plugin-dir installiert oder aus einem lokalen Pfad installiert werden, werden nur Symlinks beibehalten, die sich innerhalb des eigenen Verzeichnisses des Plugins auflösen. Alle anderen werden übersprungen.
Der folgende Befehl erstellt einen Link von innerhalb eines Marktplatz-Plugins zu einem gemeinsamen Skill, der von einem Geschwister-Plugin definiert wird. Verwenden Sie unter Windows mklink /D von einer erhöhten Eingabeaufforderung oder aktivieren Sie den Entwicklermodus:
Plugin-Verzeichnisstruktur
Standard-Plugin-Layout
Ein vollständiges Plugin folgt dieser Struktur:CLAUDE.md Datei im Plugin-Root wird nicht als Projektkontext geladen. Plugins tragen Kontext durch Skills, Agents und Hooks bei, anstatt durch CLAUDE.md. Um Anweisungen bereitzustellen, die in Claudes Kontext geladen werden, fügen Sie diese in einen Skill ein.
Datei-Speicherorte-Referenz
CLI-Befehle-Referenz
Claude Code bietet CLI-Befehle für nicht-interaktive Plugin-Verwaltung, nützlich für Scripting und Automatisierung.plugin init
Erstellen Sie ein neues Plugin unter~/.claude/skills/<name>/. In der nächsten Claude Code Session wird es automatisch als <name>@skills-dir geladen und erscheint in /plugin und claude plugin list ohne Installationsschritt.
Siehe Skills-Verzeichnis-Plugins für Bereichs- und Vertrauensanforderungen.
<name>: Plugin-Name. Wird zum Skill-Namespace und zum Verzeichnisnamen unter~/.claude/skills/, daher kann er keine Leerzeichen oder Pfad-Trennzeichen enthalten.
Aliase:
new
Jeder --with Wert fügt eine Starter-Datei für diese Komponente hinzu, bereit zum Bearbeiten:
Das erstellte Plugin verwendet die
@skills-dir Quelle anstelle eines Marktplatzes. Administratoren können diese Quelle mit strictKnownMarketplaces blockieren oder indem sie {"source": "skills-dir"} zu blockedMarketplaces in verwalteten Einstellungen hinzufügen. Wenn blockiert, schlägt plugin init fehl, bevor etwas geschrieben wird.
Beispiele:
plugin install
Installieren Sie ein Plugin aus verfügbaren Marktplätzen.<plugin>: Plugin-Name oderplugin-name@marketplace-namefür einen bestimmten Marktplatz
Der Bereich bestimmt, welche Einstellungsdatei das installierte Plugin hinzugefügt wird. Beispielsweise schreibt
--scope project zu enabledPlugins in .claude/settings.json, wodurch das Plugin für alle verfügbar wird, die das Projekt-Repository klonen.
Beispiele:
plugin uninstall
Entfernen Sie ein installiertes Plugin.<plugin>: Plugin-Name oderplugin-name@marketplace-name
Aliase:
remove, rm
Standardmäßig löscht das Deinstallieren aus dem letzten verbleibenden Bereich auch das ${CLAUDE_PLUGIN_DATA} Verzeichnis des Plugins. Verwenden Sie --keep-data, um es zu bewahren, beispielsweise beim Neuinstallieren nach dem Testen einer neuen Version.
plugin prune
Entfernen Sie automatisch installierte Plugin-Abhängigkeiten, die nicht mehr von einem installierten Plugin benötigt werden. Abhängigkeiten, die Claude Code eingezogen hat, um dasdependencies Feld eines anderen Plugins zu erfüllen, werden entfernt; Plugins, die Sie direkt installiert haben, werden niemals berührt.
Aliase:
autoremove
Der Befehl listet verwaiste Abhängigkeiten auf und fragt vor dem Entfernen um Bestätigung. Um ein Plugin zu entfernen und seine Abhängigkeiten in einem Schritt zu bereinigen, führen Sie claude plugin uninstall <plugin> --prune aus.
claude plugin prune erfordert Claude Code v2.1.121 oder später.plugin enable
Aktivieren Sie ein deaktiviertes Plugin. Wenn das Plugin Abhängigkeiten deklariert, aktiviert Claude Code diese transitiv im gleichen Bereich, und der Befehl schlägt fehl, wenn eine Abhängigkeit nicht installiert ist.<plugin>: Plugin-Name oderplugin-name@marketplace-name
plugin disable
Deaktivieren Sie ein Plugin, ohne es zu deinstallieren. Schlägt fehl, wenn ein anderes aktiviertes Plugin von dem Ziel abhängt. Die Fehlermeldung enthält einen verketteten Befehl, der zuerst alle abhängigen Plugins deaktiviert.<plugin>: Plugin-Name oderplugin-name@marketplace-name
plugin update
Aktualisieren Sie ein Plugin auf die neueste Version.<plugin>: Plugin-Name oderplugin-name@marketplace-name
plugin list
Listet installierte Plugins mit ihrer Version, Quell-Marktplatz und Aktivierungsstatus auf.
Innerhalb einer interaktiven Sitzung druckt
/plugin list die gleiche Auflistung inline. Die interaktive Form akzeptiert --enabled oder --disabled, um nur Plugins in diesem Zustand anzuzeigen, und ls als Kurzform für list.
plugin details
Zeigen Sie das Komponenten-Inventar eines Plugins und die geschätzten Token-Kosten an. Die Ausgabe listet alle Komponenten auf, die das Plugin bereitstellt, gruppiert als Skills, Agents, Hooks, MCP-Server und LSP-Server, zusammen mit einer Schätzung, wie viele Token es jeder Sitzung hinzufügt. Die Skills-Gruppe umfasst sowohlskills/ als auch commands/ Einträge.
<name>: Plugin-Name oderplugin-name@marketplace-name
Die Ausgabe zeigt zwei Kostenzahlen für jede Komponente:
- Always-on: Token, die jeder Sitzung durch den Auflistungstext des Plugins hinzugefügt werden, wie Skill-Beschreibungen, Agent-Beschreibungen und Befehlsnamen, unabhängig davon, ob eine Komponente ausgelöst wird.
- On-invoke: Token, die eine Komponente kostet, wenn sie ausgelöst wird. Wird pro Komponente angezeigt, nicht als Plugin-Gesamtsumme, da eine typische Sitzung nur eine Teilmenge von Komponenten aufruft.
count_tokens API für Ihr aktives Modell berechnet. Pro-Komponenten-Zahlen werden proportional von dieser Gesamtsumme skaliert. Wenn die API nicht erreichbar ist, greift der Befehl auf eine zeichenbasierte Schätzung zurück.
plugin tag
Erstellen Sie ein Release-Git-Tag für das Plugin im aktuellen Verzeichnis. Führen Sie es im Ordner des Plugins aus. Siehe Tag-Plugin-Releases.Debugging- und Entwicklungstools
Debugging-Befehle
Verwenden Sieclaude --debug, um Plugin-Lade-Details zu sehen:
Dies zeigt:
- Welche Plugins geladen werden
- Alle Fehler in Plugin-Manifesten
- Skill-, Agent- und Hook-Registrierung
- MCP-Server-Initialisierung
Häufige Probleme
Beispiel-Fehlermeldungen
Manifest-Validierungsfehler:Invalid JSON syntax: Unexpected token } in JSON at position 142: Überprüfen Sie auf fehlende Kommas, zusätzliche Kommas oder nicht zitierte StringsPlugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required: Ein erforderliches Feld fehltPlugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...: JSON-Syntaxfehler
Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.: Befehlspfad existiert, enthält aber keine gültigen BefehlsdateienPlugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.: DersourcePfad in marketplace.json verweist auf ein nicht existierendes VerzeichnisPlugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.: Entfernen Sie doppelte Komponentendefinitionen oder entfernen Siestrict: falseim Marktplatz-Eintrag
Hook-Fehlerbehebung
Hook-Skript wird nicht ausgeführt:- Überprüfen Sie, dass das Skript ausführbar ist:
chmod +x ./scripts/your-script.sh - Überprüfen Sie die Shebang-Zeile: Erste Zeile sollte
#!/bin/bashoder#!/usr/bin/env bashsein - Überprüfen Sie, dass der Pfad
${CLAUDE_PLUGIN_ROOT}verwendet:"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh" - Testen Sie das Skript manuell:
./scripts/your-script.sh
- Überprüfen Sie, dass der Event-Name korrekt ist (Groß-/Kleinschreibung beachten):
PostToolUse, nichtpostToolUse - Überprüfen Sie, dass das Matcher-Muster Ihre Tools passt:
"matcher": "Write|Edit"für Dateivorgänge - Bestätigen Sie, dass der Hook-Typ gültig ist:
command,http,mcp_tool,promptoderagent
MCP-Server-Fehlerbehebung
Server wird nicht gestartet:- Überprüfen Sie, dass der Befehl existiert und ausführbar ist
- Überprüfen Sie, dass alle Pfade die
${CLAUDE_PLUGIN_ROOT}Variable verwenden - Überprüfen Sie die MCP-Server-Logs:
claude --debugzeigt Initialisierungsfehler - Testen Sie den Server manuell außerhalb von Claude Code
- Stellen Sie sicher, dass der Server ordnungsgemäß in
.mcp.jsonoderplugin.jsonkonfiguriert ist - Überprüfen Sie, dass der Server das MCP-Protokoll ordnungsgemäß implementiert
- Überprüfen Sie auf Verbindungs-Timeouts in der Debug-Ausgabe
Verzeichnisstruktur-Fehler
Symptome: Plugin wird geladen, aber Komponenten (Skills, Agents, Hooks) fehlen. Korrekte Struktur: Komponenten müssen sich im Plugin-Root befinden, nicht innerhalb von.claude-plugin/. Nur plugin.json gehört in .claude-plugin/.
.claude-plugin/ befinden, verschieben Sie sie in den Plugin-Root.
Debug-Checkliste:
- Führen Sie
claude --debugaus und suchen Sie nach „loading plugin” Meldungen - Überprüfen Sie, dass jedes Komponentenverzeichnis in der Debug-Ausgabe aufgelistet ist
- Überprüfen Sie Dateiberechtigungen, die das Lesen der Plugin-Dateien ermöglichen
Verteilungs- und Versionierungs-Referenz
Versionsverwaltung
Claude Code verwendet die Version des Plugins als Cache-Schlüssel, der bestimmt, ob ein Update verfügbar ist. Wenn Sie/plugin update ausführen oder Auto-Update aktiviert ist, berechnet Claude Code die aktuelle Version und überspringt das Update, wenn es mit der bereits installierten Version übereinstimmt.
Die Version wird aus dem ersten dieser Felder aufgelöst, das gesetzt ist:
- Das Feld
versionin derplugin.jsondes Plugins - Das Feld
versionim Marketplace-Eintrag des Plugins inmarketplace.json - Der Git-Commit-SHA des Plugin-Quellcodes für
github,url,git-subdirund relative-path-Quellen in einem Git-gehosteten Marketplace unknown, fürnpm-Quellen oder lokale Verzeichnisse, die sich nicht in einem Git-Repository befinden
Wenn Sie explizite Versionen verwenden, folgen Sie semantischer Versionierung (
MAJOR.MINOR.PATCH): Erhöhen Sie MAJOR für Breaking Changes, MINOR für neue Features, PATCH für Bugfixes. Dokumentieren Sie Änderungen in einer CHANGELOG.md.
Siehe auch
- Plugins - Tutorials und praktische Verwendung
- Plugin-Marktplätze - Erstellen und Verwalten von Marktplätzen
- Skills - Skill-Entwicklungsdetails
- Subagents - Agent-Konfiguration und Fähigkeiten
- Hooks - Event-Handling und Automatisierung
- MCP - Integration externer Tools
- Einstellungen - Konfigurationsoptionen für Plugins