.claude-plugin/plugin.json, der diesen Ordner ersetzt oder ergänzt, und einen Namen, den der Benutzer sieht. Für jede Schlüssels vollständige Feldtabelle siehe die Manifest-Referenz.
Verwenden Sie diese Seite, um eine Komponente zu einem Plugin hinzuzufügen, das bereits geladen wird.
Nachdem Sie eine Komponente hinzugefügt haben, führen Sie /reload-plugins in einer laufenden Sitzung aus oder starten Sie eine neue, damit Claude Code sie lädt. Um die Datei der Komponente vor dem Laden zu überprüfen, führen Sie claude plugin validate . in Ihrer Shell aus dem Plugin-Verzeichnis aus.
Diese Fälle werden auf anderen Seiten behandelt:
- Ihr erstes Plugin erstellen: Beginnen Sie mit Plugin erstellen
- Plugin von jemand anderem installieren: Siehe Plugins installieren
- Ihre Plugin-Benutzer sind auf claude.ai oder in Cowork: Ein anderer Satz von Komponenten wird dort geladen. Siehe Plugins auf claude.ai und in Cowork
Plugin-Verzeichnis erkunden
Der Explorer zeigt ein Beispiel-Plugin,my-plugin, das an seinem Standard-Speicherort eine von jeder Art von Komponente hat:
- Ein Review-Skill und einen
about-Befehl - Einen Security-Review-Subagenten
- Einen Hook, der Dateien nach Claude-Bearbeitungen formatiert, und den
scripts/-Ordner, den er aufruft - Einen Log-Monitor
- Einen Output-Stil und ein Farbschema
- Einen Route-Audit-Workflow
- Eine
hello-plugin-Ausführungsdatei - Standard-Einstellungen
- Einen lokalen MCP-Server und einen Go-Sprachserver
Fügen Sie jede Art von Komponente hinzu
Jeder Abschnitt unten behandelt eine Art von Komponente: wo ihre Dateien im Plugin gehen, ein Beispiel, das validiert, was der Benutzer sieht, sobald das Plugin geladen wird, und der Manifest-Schlüssel, der den Standard-Speicherort ändert. Fügen Sie die hinzu, die Ihr Plugin benötigt; keine ist erforderlich.Skills
Ein Skill ist eineSKILL.md-Datei, die Claude laden kann, wenn ihre Beschreibung der Aufgabe entspricht. Der Benutzer kann ihn auch als Befehl ausführen. Speichern Sie jeden Skill in seinem eigenen Verzeichnis unter skills/:
SKILL.md eine description, damit Claude weiß, wann er sie verwenden soll:
skills/review/SKILL.md
/my-plugin:review den Skill aus. Der Befehlsname und wer ihn aufrufen kann, folgen diesen Regeln:
- Befehlsname:
/<plugin>:<directory>, alsoskills/review/SKILL.mdinmy-pluginist/my-plugin:review. Wenn Sienamein der Frontmatter setzen, ersetzt es das letzte Segment und das Plugin-Präfix bleibt. Siehe wie ein Skill seinen Befehlsnamen erhält - Wer ruft ihn auf: Claude, der Benutzer oder beide, gesteuert durch Frontmatter. Siehe Kontrollieren Sie, wer einen Skill aufruft
skills/-Verzeichnisses platzieren:
- Zusätzliche Verzeichnisse: Listen Sie sie im
skills-Manifest-Schlüssel auf. Sie ergänzen den Standard-skills/-Scan, anstatt ihn zu ersetzen, anders alscommandsundagents - Ein einzelner Skill im Plugin-Root: Ohne
skills/-Verzeichnis und ohneskills-Manifest-Schlüssel lädt eineSKILL.mdim Plugin-Root als ein Skill. Setzen Sienamein seiner Frontmatter, da sonst eine Marketplace-Installation den Skill nach seinem Cache-Verzeichnis benennt, anstatt nach Ihrem Plugin
CLAUDE.md im Plugin-Root, und claude plugin validate warnt CLAUDE.md at the plugin root is not loaded as project context.
Für Frontmatter-Felder und unterstützende Dateien siehe Skills.
Befehle
Ein Befehl ist eine einzelne Markdown-Datei, die der Benutzer nach Name ausführt, wie/my-plugin:about.
Befehle sind das ältere Format, und Skills ersetzen sie für neue Arbeiten. Ein Skill wird auf die gleiche Weise nach Name ausgeführt, und er kann auch unterstützende Dateien in seinem Verzeichnis tragen. Behalten Sie
commands/ für Dateien, die Sie von .claude/commands/ verschieben.commands/<file>.md und er wird zu /<plugin>:<file>. Ein Unterverzeichnis fügt ein Segment hinzu, also ist commands/db/migrate.md /my-plugin:db:migrate.
Befehlsdateien nehmen die gleiche Frontmatter wie Skills.
Definieren Sie Befehle im Manifest
Sie brauchen dies nur, wenn Sie Befehlsdateien irgendwo anders alscommands/ behalten möchten, oder um einen kurzen Befehl in plugin.json ohne separate Markdown-Datei zu definieren. Setzen Sie den commands-Manifest-Schlüssel, und Claude Code liest ihn statt commands/ zu scannen. Der Schlüssel nimmt einen Pfad, ein Array von Pfaden oder ein Objekt, das jeden Befehlsnamen entweder auf eine source-Datei oder inline content abbildet.
Dieses Manifest definiert /my-plugin:about inline, ohne Markdown-Datei:
.claude-plugin/plugin.json
/my-plugin:about in der Sitzung aus, um zu bestätigen, dass es geladen wurde.
Für die vollständige Schlüsselsyntax siehe commands.
Agents
Ein Subagent ist ein separater Assistent mit seinen eigenen Anweisungen und Kontextfenster, dem Claude eine Aufgabe delegieren kann. Jede Markdown-Datei unteragents/ definiert einen:
agents/security-reviewer.md
my-plugin:security-reviewer genannt, und der Benutzer kann ihn explizit aufrufen mit @agent-my-plugin:security-reviewer. Die Namensform ist <plugin>:<name>, wobei <name> aus der Frontmatter kommt, oder aus dem Dateinamen, wenn es keine gibt.
Der agents-Manifest-Schlüssel ersetzt den agents/-Scan.
Organisieren Sie Agents in Unterordnern
Sie können Plugin-Agent-Dateien in Unterordnern vonagents/ platzieren. Claude Code lädt sie rekursiv und verbindet den Plugin-Namen, jeden Unterordnernamen und den Dateinamen mit Doppelpunkten, um den scoped Namen des Agenten zu bilden. Zum Beispiel lädt agents/review/security.md in einem Plugin namens my-plugin als my-plugin:review:security. Zwei Einstellungen ändern diesen Namen:
- Frontmatter
name: Sie ersetzt nur den Dateinamen, alsoname: auditinagents/review/security.mdlädt alsmy-plugin:review:audit - Manifest
agents-Feld: Eine Datei, die Sie dort auflisten, lädt ohne Unterordnernamen, also"agents": "./custom/review/security.md"lädt alsmy-plugin:security
Frontmatter-Felder in Plugin-Agents
Die Frontmatter eines Plugin-Agenten folgt diesen Regeln:- Unterstützte Felder:
name,description,model,effort,maxTurns,tools,disallowedTools,skills,memory,background,omitClaudeMd,isolation,colorund dercacheTtl-Schlüssel vonexperimental. Der einzige gültigeisolation-Wert ist"worktree". Siehe unterstützte Frontmatter-Felder für das, was jedes tut - Ignorierte Felder:
permissionMode,hooks,mcpServersundinitialPrompt. Eine Agent-Datei kann nicht auf eigene Faust Hooks oder MCP-Server hinzufügen, daher fügen Sie diese stattdessen als Plugin-Hooks und MCP-Server hinzu - Frontmatter, die nicht analysiert wird: Der Agent lädt immer noch mit jedem Feld ignoriert. Er wird nach der Datei benannt, und seine Beschreibung liest
Agent from my-plugin plugin. Führen Sieclaude plugin validatein Ihrer Shell aus, um diese Dateien zu finden
Hooks
Ein Hook führt etwas automatisch an einem Punkt im Lebenszyklus von Claude Code aus, wie zum Beispiel nach jeder Dateibearbeitung: ein Shell-Befehl, eine HTTP-Anfrage, ein MCP-Tool-Aufruf, ein Prompt an ein Modell oder ein Subagent. Speichern Sie die Hooks des Plugins inhooks/hooks.json im Plugin-Root, unter einem Top-Level-"hooks"-Schlüssel, in der gleichen Form wie das hooks-Objekt in settings.json. Das ermöglicht es Ihnen, einen bestehenden Settings-Hook unverändert zu kopieren.
Dieser Hook führt ein gebündeltes Script nach jedem Write oder Edit aus:
hooks/hooks.json
scripts/format.sh und machen Sie es ausführbar.
Laden Sie das Plugin und bitten Sie Claude, eine Datei zu bearbeiten. Ein PostToolUse-Hook, der 0 beendet, zeigt nichts im Transkript, daher bestätigen Sie, dass er mit Debug-Logging oder durch das, was das Script selbst ändert, gelaufen ist.
Hooks in hooks/hooks.json und im hooks-Manifest-Schlüssel laden beide. Für jedes Ereignis und seine Nutzlast siehe Hook-Ereignisse.
Wenn Plugin-Hooks auslösen
Die Hooks eines Plugins warten nicht darauf, dass einer der Skills oder Befehle des Plugins verwendet wird. Claude Code registriert sie, wenn eine Sitzung das Plugin lädt, und sie lösen auf ihren Ereignissen von da an aus. Um einzuschränken, wann ein Hook läuft, verengen Sie seinenmatcher.
Wenn ein Hook nie auslöst, siehe Hooks, die nicht auslösen.
Umgebung, Anführungszeichen und Matching von MCP-Tools
Die Umgebung des Hooks, die Anführungszeichen von${CLAUDE_PLUGIN_ROOT} und Matcher für die eigenen MCP-Tools des Plugins funktionieren wie folgt:
- Umgebung: Jeder Hook-Prozess erhält
CLAUDE_PLUGIN_ROOTundCLAUDE_PLUGIN_DATAin seiner Umgebung, plusCLAUDE_PLUGIN_OPTION_<KEY>für jeden Benutzerkonfiguration-Wert, damit Ihr Script sie von dort lesen kann - Anführungszeichen: Wenn
commandkeineargshat, läuft es durch eine Shell, daher wickeln Sie den${CLAUDE_PLUGIN_ROOT}-Pfad in doppelte Anführungszeichen, wie das Beispielhooks/hooks.jsonunter Hooks tut, um den erweiterten Pfad ein Shell-Wort zu halten. Wenn Sie stattdessenargsübergeben, wird jedes Element als ein Argument ohne Shell übergeben und braucht keine Anführungszeichen. Siehe Exec-Form und Shell-Form - Matching der eigenen MCP-Tools des Plugins: Ein Tool von einem MCP-Server, den dieses Plugin deklariert, wird
mcp__plugin_<plugin>_<server>__<tool>genannt, daher schreiben Sie diesen vollständigen Namen in den Matcher. Ein Matcher nur auf dem Servernamen löst nie aus. Siehe Match MCP-Tools
MCP-Server
Ein MCP-Server gibt Claude Tools von einem externen System. Deklarieren Sie ihn in.mcp.json im Plugin-Root, in der gleichen Form wie ein Projekt .mcp.json. Diese .mcp.json deklariert einen Server namens db:
.mcp.json
mcpServers-Wrapper weglassen und db auf der Top-Level der Datei platzieren.
Laden Sie das Plugin und führen Sie /mcp aus, um zu bestätigen, dass der Server als plugin:my-plugin:db erscheint.
claude plugin validate überprüft .mcp.json und meldet einen Server-Eintrag, den Claude Code zur Ladezeit als Fehler ablegen würde. Erfordert Claude Code v2.1.281 oder später.
Für wo ein schlechter Eintrag zur Ladezeit angezeigt wird, siehe MCP-Server, die nicht starten.
Der mcpServers-Manifest-Schlüssel nimmt eine inline Server-Map, einen Pfad zu einer JSON-Datei oder ein Array davon. Wenn ein Manifest-Server den gleichen Namen wie einer in .mcp.json hat, ersetzt der Manifest-Server ihn.
Erreichen Sie Benutzer auf claude.ai und Cowork
Ein lokaler Stdio-Server, wie derdb-Server unter MCP-Server, läuft in Claude Code und in einer Cowork-Sitzung, die auf Ihrem Computer in der Claude Desktop-App läuft, aber nicht auf claude.ai. Um Benutzer dort auch zu erreichen, referenzieren Sie einen Remote-Server durch seine https://-URL, die claude.ai und Cowork dem Benutzer als Connector anbieten.
Server-Namen, Tool-Namen und Neuladen
Die Namen des Servers, die Variable-Substitution und das Neuladen-Verhalten folgen diesen Regeln:- Server-Name:
plugin:<plugin>:<server>, also derdb-Server inmy-pluginistplugin:my-plugin:dbin/mcp. Verwenden Sie die gleiche Form, um den Server in einemmcp_tool-Hook zu benennen - Tool-Namen:
mcp__plugin_<plugin>_<server>__<tool>, also einquery-Tool auf diesemdb-Server istmcp__plugin_my-plugin_db__query. Das ist der Name, der in Berechtigungsregeln und Hook-Matchern verwendet wird - Substitution:
${CLAUDE_PLUGIN_ROOT}und die anderen Pfad-Variablen werden incommand,argsundenversetzt. Keine Anführungszeichen sind inargserforderlich, da jedes Element als ein Argument übergeben wird - Neuladen: Wenn der Benutzer
/reload-pluginsausführt und das Neuladen angewendet wird, behält ein Server, dessen Konfiguration unverändert ist, seine Verbindung. Ein Server, dessen Konfiguration sich geändert hat, verbindet sich neu, und einer, den Sie entfernt haben, trennt sich
Schließen Sie einen verpackten MCPB-Server ein
DermcpServers-Schlüssel akzeptiert auch einen verpackten Server als MCPB-Datei, deren Erweiterung .mcpb oder die ältere .dxt ist. Zeigen Sie den Schlüssel auf die Datei, als Pfad im Plugin oder eine https://-URL:
.claude-plugin/plugin.json
name im Manifest des Bundles.
Für Transporte und Authentifizierung siehe MCP.
LSP-Server
Ein LSP-Server gibt Claude Diagnostik und Code-Navigation für eine Sprache. Wenn ein offizielles Code-Intelligence-Plugin Ihre Sprache bereits abdeckt, installieren Sie das statt einen zu schreiben. Andernfalls deklarieren Sie den Server in.lsp.json im Plugin-Root:
.lsp.json
command ist der Name des Binärs, mit seinen Argumenten in args. extensionToLanguage braucht mindestens eine Erweiterung, jede beginnend mit ..
claude plugin validate liest diese Datei nicht. Wenn ein Eintrag ungültig ist, wird die ganze Datei zur Ladezeit übersprungen und Invalid LSP server config for ".lsp.json" erscheint in der /plugin-Registerkarte Errors.
Ihr Plugin konfiguriert die Verbindung, installiert aber nicht das Server-Binär, und jede Dateierweiterung bekommt einen Server:
- Fehlendes Binär: Claude Code startet
commandnach Name aus demPATHdes Benutzers. Wenn das Binär nicht da ist, schlägt der Server fehl zu starten undclaude --debugprotokolliertLSP server <name> failed to start - Erweiterungs-Konflikte: Wenn zwei aktivierte Server die gleiche Erweiterung beanspruchen, behandelt der erste registrierte diese Dateien und der andere wird nicht für sie verwendet, ob die Server von einem Plugin oder zwei kommen. Die
/plugin-Registerkarte Errors zeigt die WarnungLSP server "<name>" is not used for <ext> files
lspServers-Manifest-Schlüssel nimmt die gleiche Map inline, einen Pfad zu einer JSON-Datei oder ein Array davon, und seine Server ergänzen die in .lsp.json. Wenn ein Manifest-Server den gleichen Namen wie einer in .lsp.json hat, ersetzt der Manifest-Server ihn.
Für transport, Timeouts, Neustarts und die anderen Felder siehe lspServers.
Senden Sie Log-Ausgabe an stderr, nicht stdout. Claude Code liest den stdout eines Servers nur als Protokoll-Nachrichten und akzeptiert Nachrichten-Header bis zu 64 KiB und einen Nachrichten-Text bis zu 32 MiB.
Claude Code trennt einen Server, der eines der Limits überschreitet oder nicht-Protokoll-Ausgabe an stdout schreibt, und zählt die Trennung als Absturz für restartOnCrash und maxRestarts. Wenn Sie mit --debug laufen, schreibt Claude Code einen Fehler, der die Ursache benennt, in das Debug-Log.
Ausführbare Dateien
Dateien inbin/ im Plugin-Root sind auf dem PATH der Shell des Bash-Tools, während das Plugin aktiviert ist, daher kann Claude sie als bloße Befehle ausführen. Fügen Sie ein ausführbares Script hinzu:
bin/hello-plugin
chmod +x bin/hello-plugin ausführbar und laden Sie das Plugin. Wenn Sie Claude bitten, hello-plugin auszuführen, zeigt das Bash-Tool-Ergebnis die Ausgabe des Scripts.
Plugin-bin/-Verzeichnisse kommen nach den eigenen PATH-Einträgen des Benutzers, daher kann ein Plugin nicht git, ls oder einen anderen System-Befehl überschatten.
claude.ai und Cowork installieren kein Plugin, das ein Top-Level-bin/-Verzeichnis hat, einschließlich eines, das Sie über claude.ai-Organisationseinstellungen verteilen.
Standard-Einstellungen
Um Standard-Einstellungen zu setzen, die gelten, während das Plugin aktiviert ist, fügen Sie einesettings.json im Plugin-Root hinzu, oder setzen Sie das gleiche Objekt inline im settings-Manifest-Schlüssel. Zwei Schlüssel wirken sich aus, agent und subagentStatusLine, und jeder andere Schlüssel wird gelöscht.
Setzen Sie agent, um einen der eigenen Agents des Plugins als Haupt-Thread auszuführen:
settings.json
security-reviewer-Agenten.
Für alles, das der Schlüssel kontrolliert, siehe die agent-Einstellung.
Wenn der gleiche Schlüssel an mehr als einem Ort gesetzt ist, entscheiden diese Regeln, welcher Wert angewendet wird:
- Datei über Manifest: Wenn beide existieren und
settings.jsonmindestens einen unterstützten Schlüssel setzt, wendetsettings.jsonan und das Manifestsettingswird ignoriert - Benutzer-Einstellungen über Plugin-Standard: Über Einstellungs-Quellen hinweg sind Plugin-Standard die niedrigste Schicht, daher überschreibt Ihr eigenes
agenteines Benutzers in~/.claude/settings.jsonIhres - Zwei Plugins setzen den gleichen Schlüssel: Der Wert vom zuletzt geladenen Plugin wendet an, und
claude --debugprotokolliertoverrides setting
subagentStatusLine-Form siehe Subagent-Statuszeilen.
Themen und Output-Stile
Ein Plugin kann Farbschemas und Output-Stile enthalten. Beide erscheinen in den gleichen Pickern wie die des Benutzers. Für jeden setzt der Manifest-Schlüssel den Ordner-Scan.
Plugin-Themen sind schreibgeschützt, daher wenn ein Benutzer eines in
/theme bearbeitet, wird die Bearbeitung als Kopie in seinem eigenen Themen-Verzeichnis gespeichert.
Dieses Thema färbt den Prompt-Akzent und Fehlertext auf der dunklen Voreinstellung um:
themes/dracula.json
Kanäle
Ein Kanal ermöglicht es einem externen System wie einer Chat-App, Nachrichten in eine Sitzung zu senden. In einem Plugin ist ein Kanal einer der MCP-Server plus einchannels-Eintrag, der sich daran bindet und seine eigene Konfiguration auffordern kann. Dieses Manifest bindet einen Kanal an einen telegram-Server und fragt nach einem Bot-Token:
.claude-plugin/plugin.json
server muss einem Schlüssel in mcpServers entsprechen. Die pro-Kanal userConfig nimmt die gleiche Form wie der Top-Level-userConfig-Schlüssel.
Für das, was der Server implementieren muss und wie Benutzer einen Kanal-Plugin aktivieren, siehe Als Plugin verpacken in der Kanäle-Referenz. Für die Feldtabelle siehe channels.
Monitore
Ein Monitor ist ein Shell-Befehl, der im Hintergrund für die ganze Sitzung läuft. Was er ausgibt, erreicht Claude als Benachrichtigungen, daher kann Claude auf ein Protokoll oder eine Statusänderung reagieren, ohne gebeten zu werden, es zu beobachten. Speichern Sie die Einträge inmonitors/monitors.json:
monitors/monitors.json
- Nur interaktive Sitzungen: Plugin-Monitore starten in einer interaktiven Sitzung und nie im nicht-interaktiven Modus mit dem
-p-Flag. Sie starten auch nur, wo das Monitor-Tool verfügbar ist - Keine Benutzerkonfiguration:
commanderhält die Pfad-Variablen und${ENV_VAR}aus der Umgebung, aber nie${user_config.*}. Ein Monitor, der einen referenziert, startet nicht, und Monitor-Prozesse erhalten auch nichtCLAUDE_PLUGIN_OPTION_<KEY> - Deaktivieren während der Sitzung: Wenn Sie ein Plugin während der Sitzung deaktivieren, stoppt Claude Code nicht die Monitore, die bereits laufen. Sie stoppen, wenn die Sitzung endet
experimental.monitors-Manifest-Schlüssel nimmt das gleiche Array inline oder einen Pfad zu einer JSON-Datei und wird statt monitors/monitors.json gelesen.
Für den when-Trigger und die anderen Felder siehe monitors.
Fragen Sie den Benutzer nach Konfigurationswerten
Deklarieren Sie die Werte, die Ihr Plugin vom Benutzer benötigt, imuserConfig-Manifest-Schlüssel, damit Benutzer nicht settings.json selbst bearbeiten. Jede Option erscheint in einem Dialog mit seinem title als Label und seiner description darunter.
Setzen Sie "sensitive": true für einen Token oder ein Passwort. Der Dialog maskiert dann die Eingabe, und der Wert wird in sicherer Speicherung statt settings.json gespeichert.
Dieses Manifest fragt nach einem Endpunkt und einem Token:
.claude-plugin/plugin.json
Wenn der Konfigurationsdialog erscheint
Der Dialog erscheint nur in der interaktiven/plugin-Schnittstelle. Er öffnet sich für jede Option, die noch nicht gesetzt ist, wenn der Benutzer eines der folgenden tut:
- Installiert das Plugin in
/plugin - Führt
/plugin install <plugin>@<marketplace>in einer Sitzung aus - Aktiviert das Plugin aus der Installed-Registerkarte in
/plugin
/plugin configure <plugin>@<marketplace> aus.
Der claude plugin install-Shell-Befehl fordert nie userConfig-Werte auf. Um Werte aus der Shell zu setzen, übergeben Sie jeden als --config KEY=VALUE. Wenn Optionen ungesetzt bleiben, druckt der Befehl eine userConfig options not yet set-Zeile, die beide Wege benennt, um sie zu setzen. Der userConfig-Dialog erscheint nie zitiert die Zeile.
Für die Optionsfelder, wo jeder Wert gespeichert wird, wie eine Komponente einen gespeicherten Wert referenziert und welche Felder ${user_config.*} ablehnen, siehe Benutzerkonfiguration.
Referenzieren Sie Plugin-Pfade und speichern Sie Daten
Sie wissen nicht, wo Ihr Plugin installiert wird, daher referenzieren Sie seine Dateien und Daten durch diese Variablen statt fester Pfade. Sie werden in Skill-, Befehls- und Agent-Inhalten, in Hook- und Monitor-Befehlen und in MCP- und LSP-Server-Konfigurationen ersetzt. Sie werden auch an Hook-, MCP- und LSP-Prozesse exportiert:${CLAUDE_PLUGIN_ROOT}: Das Installationsverzeichnis des Plugins. Jede Version hat ihr eigenes Cache-Verzeichnis, daher ändert sich der Pfad, wenn das Plugin aktualisiert wird. Schreiben Sie keinen Zustand dort${CLAUDE_PLUGIN_DATA}: Ein Verzeichnis, das Updates überlebt, fürnode_modules, virtuelle Umgebungen und Caches. Es wird zu~/.claude/plugins/data/<id>/aufgelöst und wird erstellt, wenn zuerst referenziert${CLAUDE_PROJECT_DIR}: Das Projekt-Root, der gleiche Wert, den Hooks erhalten
<id> die Plugin-ID mit jedem Zeichen außer Buchstaben, Ziffern, _ und - ersetzt durch -, daher wird my-plugin@my-marketplace zu my-plugin-my-marketplace.
Auf Windows verwenden die ersetzten Pfade Schrägstriche, daher liest eine Shell Backslashes nicht als Escapes.
Installieren Sie Abhängigkeiten in das Daten-Verzeichnis
Für ein Marketplace-installiertes Plugin installiert Claude Code automatisch berechtigte Node.js-Paket-Abhängigkeiten, wenn es das Plugin zwischenspeichert, daher müssen Sie sie möglicherweise nicht selbst installieren. Wenn Sie es tun, installiert dieserSessionStart-Hook node_modules in ${CLAUDE_PLUGIN_DATA} beim ersten Lauf und erneut nach einer Aktualisierung, die package.json ändert:
hooks/hooks.json
~/.claude/plugins/data/<id>/node_modules. Ein MCP-Server kann dann NODE_PATH auf ${CLAUDE_PLUGIN_DATA}/node_modules in seinem env setzen. Für welche Felder welche Variable ersetzen, siehe Umgebungsvariablen.
Nächste Schritte
- Plugin-Manifest-Referenz:
plugin.json-Felder, Pfad-Regeln und das Standard-Layout - Testen Sie Plugins mit Evals: Überprüfen Sie, dass die Komponenten, die Sie hinzugefügt haben, Claudes Verhalten so ändern, wie Sie beabsichtigen
- Veröffentlichen und verteilen Sie ein Plugin: Versionieren Sie das Plugin und setzen Sie es in einen Marketplace
- Beheben Sie Plugin-Probleme: Was zu tun ist, wenn eine Komponente nicht lädt oder ein Hook nicht auslöst