.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 Plugin-Struktur und Tests und die Komponentenunterstützungstabelle
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
Jede Art von Komponente hinzufügen
Jeder der folgenden Abschnitte behandelt eine Art von Komponente: wo ihre Dateien im Plugin liegen, ein Beispiel, das die Validierung besteht, was der Benutzer sieht, sobald das Plugin geladen ist, und den Manifest-Schlüssel, der den Standardspeicherort ändert. Fügen Sie diejenigen hinzu, die Ihr Plugin benötigt; keine ist erforderlich.Skills
Ein Skill ist eineSKILL.md-Datei, die Claude laden kann, wenn ihre Beschreibung zur Aufgabe passt. Der Benutzer kann ihn auch als Befehl ausführen. Speichern Sie jeden Skill in einem eigenen Verzeichnis unter skills/:
SKILL.md eine description, damit Claude weiß, wann er verwendet werden soll:
skills/review/SKILL.md
/my-plugin:review den Skill aus. Der Befehlsname und wer ihn aufrufen kann, folgen diesen Regeln:
- Befehlsname:
/<plugin>:<directory>, also istskills/review/SKILL.mdinmy-plugingleich/my-plugin:review. Wenn Sienameim Frontmatter festlegen, ersetzt es das letzte Segment, und das Plugin-Präfix bleibt erhalten. Siehe wie ein Skill seinen Befehlsnamen erhält - Wer ihn aufruft: Claude, der Benutzer oder beide, gesteuert über das Frontmatter. Siehe Steuern, wer einen Skill aufruft
skills/ ablegen:
- Zusätzliche Verzeichnisse: Führen Sie sie im Manifest-Schlüssel
skillsauf. Sie ergänzen den Standard-Scan vonskills/, anstatt ihn zu ersetzen, anders als beicommandsundagents - Ein einzelner Skill im Plugin-Stammverzeichnis: Ohne
skills/-Verzeichnis und ohne Manifest-Schlüsselskillswird eineSKILL.mdim Plugin-Stammverzeichnis als ein Skill geladen. Legen Sienamein ihrem Frontmatter fest, da eine Marketplace-Installation den Skill sonst nach seinem Cache-Verzeichnis benennt statt nach Ihrem Plugin
CLAUDE.md im Plugin-Stammverzeichnis, und claude plugin validate warnt mit CLAUDE.md at the plugin root is not loaded as project context.
Wenn eine Regel jedes Mal gelten muss, etwa das Blockieren von Bearbeitungen geschützter Dateien, fügen Sie sie dem Plugin als Hook statt als Skill hinzu. Um zwischen beiden zu wählen, siehe den Tab „Hook vs Skill“ unter Ähnliche Funktionen vergleichen.
Informationen zu Frontmatter-Feldern und unterstützenden Dateien finden Sie unter Skills.
Befehle
Ein Befehl ist eine einzelne Markdown-Datei, die der Benutzer über ihren Namen ausführt, etwa/my-plugin:about.
Befehle sind das ältere Format, und Skills lösen sie für neue Arbeiten ab. Ein Skill wird auf dieselbe Weise über seinen Namen ausgeführt und kann zusätzlich unterstützende Dateien in seinem Verzeichnis mitführen. Behalten Sie
commands/ für Dateien bei, die Sie aus .claude/commands/ übernehmen.commands/<file>.md, und er wird zu /<plugin>:<file>. Ein Unterverzeichnis fügt ein Segment hinzu, sodass commands/db/migrate.md zu /my-plugin:db:migrate wird.
Befehlsdateien verwenden dasselbe Frontmatter wie Skills.
Befehle im Manifest definieren
Dies benötigen Sie nur, wenn Sie Befehlsdateien an einem anderen Ort alscommands/ ablegen oder einen kurzen Befehl direkt in plugin.json ohne separate Markdown-Datei definieren möchten. Legen Sie den Manifest-Schlüssel commands fest, und Claude Code liest ihn, anstatt commands/ zu scannen. Der Schlüssel akzeptiert einen Pfad, ein Array von Pfaden oder ein Objekt, das jedem Befehlsnamen entweder eine source-Datei oder Inline-content zuordnet.
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 er geladen wurde.
Die vollständige Syntax des Schlüssels finden Sie unter commands.
Agenten
Ein Subagent ist ein separater Assistent mit eigenen Anweisungen und eigenem Kontextfenster, an den Claude eine Aufgabe delegieren kann. Jede Markdown-Datei unteragents/ definiert einen:
agents/security-reviewer.md
my-plugin:security-reviewer, und der Benutzer kann ihn explizit aufrufen mit @agent-my-plugin:security-reviewer. Die Namensform ist <plugin>:<name>, wobei <name> aus dem Frontmatter-Feld name stammt oder aus dem Dateinamen, wenn dieses Feld fehlt.
Der Manifest-Schlüssel agents ersetzt den Scan von agents/.
Agenten in Unterordnern organisieren
Sie können Agentendateien eines Plugins in Unterordnern vonagents/ ablegen. Claude Code lädt sie rekursiv und verbindet den Plugin-Namen, jeden Unterordnernamen und den Dateinamen mit Doppelpunkten zum bereichsbezogenen Namen des Agenten. Beispielsweise wird agents/review/security.md in einem Plugin namens my-plugin als my-plugin:review:security geladen. Zwei Einstellungen ändern diesen Namen:
- Frontmatter
name: Es ersetzt nur den Dateinamen, sodassname: auditinagents/review/security.mdalsmy-plugin:review:auditgeladen wird - Manifest-Feld
agents: Eine dort aufgeführte Datei wird ohne Unterordnernamen geladen, sodass"agents": "./custom/review/security.md"alsmy-plugin:securitygeladen wird
Frontmatter-Felder in Plugin-Agenten
Das Frontmatter eines Plugin-Agenten folgt diesen Regeln:- Unterstützte Felder:
name,description,model,effort,maxTurns,autoCompactWindow,tools,disallowedTools,skills,memory,background,omitClaudeMd,isolation,colorund der SchlüsselcacheTtlvonexperimental. Der einzige gültige Wert fürisolationist"worktree". Was jedes Feld bewirkt, erfahren Sie unter unterstützte Frontmatter-Felder - Ignorierte Felder:
permissionMode,hooks,mcpServersundinitialPrompt. Eine Agentendatei kann selbst keine Hooks oder MCP-Server hinzufügen, fügen Sie diese daher stattdessen als Plugin-Hooks und MCP-Server hinzu - Ein
namemit mehr als 256 Zeichen: Claude Code ignoriert ihn und benennt den Agenten nach seiner Datei, wie es auch geschieht, wenn das Feld fehlt - Frontmatter, das sich nicht parsen lässt: Der Agent wird trotzdem geladen, wobei alle Felder ignoriert werden. Er wird nach der Datei benannt, und seine Beschreibung lautet
Agent from my-plugin plugin. Führen Sieclaude plugin validatein Ihrer Shell aus, um diese Dateien zu finden
Hooks
Ein Hook führt an einem Punkt im Lebenszyklus von Claude Code automatisch etwas aus, etwa nach jeder Dateibearbeitung: einen Shell-Befehl, eine HTTP-Anfrage, einen MCP-Tool-Aufruf, einen Prompt an ein Modell oder einen Subagenten. Speichern Sie die Hooks des Plugins inhooks/hooks.json im Plugin-Stammverzeichnis unter einem "hooks"-Schlüssel auf oberster Ebene, in derselben Form wie das hooks-Objekt in settings.json. So können Sie einen vorhandenen Einstellungs-Hook unverändert übernehmen.
Dieser Hook führt nach jedem Write oder Edit ein mitgeliefertes Skript 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 mit 0 beendet wird, zeigt im Transkript nichts an. Bestätigen Sie daher seine Ausführung mit Debug-Logging oder anhand dessen, was das Skript selbst ändert.
Hooks in hooks/hooks.json und im Manifest-Schlüssel hooks werden beide geladen. Alle Ereignisse und ihre Payloads finden Sie unter Hook-Ereignisse.
Wenn ein anderes aktiviertes Plugin denselben Namen hat, registriert eines der beiden seine Hooks aus hooks/hooks.json, und die des anderen werden ausgelassen. Welches das ist und welcher Hinweis in /plugin Sie darüber informiert, erfahren Sie unter Hooks, wenn zwei aktivierte Plugins denselben Namen haben.
Um Hooks als JavaScript-Funktionen zu schreiben, die innerhalb von Claude Code laufen und in dessen Oberfläche zeichnen können, führen Sie eine Moduldatei unter einem modules-Schlüssel in derselben hooks/hooks.json auf. Ein Plugin mit einer solchen Datei ist ein Mod. Siehe Einen Mod erstellen.
Wann Plugin-Hooks ausgelöst werden
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 werden von da an bei ihren Ereignissen ausgelöst. Um einzuschränken, wann ein Hook ausgeführt wird, grenzen Sie seinenmatcher ein.
Wenn ein Hook nie ausgelöst wird, siehe Hooks, die nicht ausgelöst werden.
Umgebung, Anführungszeichen und Abgleich von MCP-Tools
Die Umgebung des Hooks, das Setzen von${CLAUDE_PLUGIN_ROOT} in Anführungszeichen 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 sowieCLAUDE_PLUGIN_OPTION_<KEY>für jeden Wert der Benutzerkonfiguration, sodass Ihr Skript sie von dort lesen kann - Anführungszeichen: Wenn
commandkeineargshat, wird es über eine Shell ausgeführt. Setzen Sie den Pfad${CLAUDE_PLUGIN_ROOT}daher in doppelte Anführungszeichen, wie imhooks/hooks.json-Beispiel unter Hooks, damit der expandierte Pfad ein einzelnes Shell-Wort bleibt. Wenn Sie stattdessenargsübergeben, wird jedes Element ohne Shell als ein Argument übergeben und benötigt keine Anführungszeichen. Siehe Exec-Form und Shell-Form - Abgleich der eigenen MCP-Tools des Plugins: Ein Tool von einem MCP-Server, den dieses Plugin deklariert, heißt
mcp__plugin_<plugin>_<server>__<tool>. Schreiben Sie daher diesen vollständigen Namen in den Matcher. Ein Matcher allein auf den Servernamen wird nie ausgelöst. Siehe MCP-Tools abgleichen
MCP-Server
Ein MCP-Server stellt Claude Tools aus einem externen System zur Verfügung. Deklarieren Sie ihn in.mcp.json im Plugin-Stammverzeichnis, in derselben Form wie eine Projekt-.mcp.json. Diese .mcp.json deklariert einen Server namens db:
.mcp.json
mcpServers-Wrapper auch weglassen und db auf die oberste Ebene der Datei setzen.
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 prüft .mcp.json und meldet einen Servereintrag, den Claude Code beim Laden verwerfen würde, als Fehler. Erfordert Claude Code v2.1.281 oder neuer.
Wo ein fehlerhafter Eintrag beim Laden angezeigt wird, erfahren Sie unter MCP-Server, die nicht starten.
Der Manifest-Schlüssel mcpServers akzeptiert eine Inline-Server-Map, einen Pfad zu einer JSON-Datei oder ein Array davon. Wenn ein Manifest-Server denselben Namen wie einer in .mcp.json hat, ersetzt der Manifest-Server diesen.
Benutzer auf claude.ai und in Cowork erreichen
Ein lokaler stdio-Server, etwa derdb-Server unter MCP-Server, läuft in Claude Code und in einer Cowork-Sitzung, die in der Claude Desktop-App auf Ihrem Rechner läuft, aber nicht auf claude.ai. Um auch Benutzer dort zu erreichen, verweisen Sie über seine https://-URL auf einen Remote-Server, den claude.ai und Cowork dem Benutzer als Konnektor anbieten, wie unter Einen MCP-Konnektor mit seinem Skill bündeln gezeigt.
Servernamen, Tool-Namen und Neuladen
Die Namen des Servers, die Variablenersetzung und das Verhalten beim Neuladen folgen diesen Regeln:- Servername:
plugin:<plugin>:<server>, also ist derdb-Server inmy-pluginin/mcpgleichplugin:my-plugin:db. Verwenden Sie dieselbe Form, um den Server in einemmcp_tool-Hook zu benennen - Tool-Namen:
mcp__plugin_<plugin>_<server>__<tool>, also ist einquery-Tool auf diesemdb-Server gleichmcp__plugin_my-plugin_db__query. Diesen Namen verwenden Sie in Berechtigungsregeln und Hook-Matchern - Ersetzung:
${CLAUDE_PLUGIN_ROOT}und die anderen Pfadvariablen werden incommand,argsundenversetzt. Inargssind keine Anführungszeichen nötig, da jedes Element als ein Argument übergeben wird - Neuladen: Wenn der Benutzer
/reload-pluginsausführt und das Neuladen greift, behält ein Server mit unveränderter Konfiguration seine Verbindung. Ein Server, dessen Konfiguration sich geändert hat, verbindet sich neu, und einer, den Sie entfernt haben, trennt die Verbindung
Einen gepackten MCPB-Server einbinden
Der SchlüsselmcpServers akzeptiert auch einen gepackten Server als MCPB-Datei mit der Endung .mcpb oder der älteren .dxt. Lassen Sie den Schlüssel auf die Datei verweisen, als Pfad innerhalb des Plugins oder als https://-URL:
.claude-plugin/plugin.json
name im Manifest des Bundles.
Das eigene Manifest eines Bundles kann in einem user_config-Block Einstellungen deklarieren, die der Server vom Benutzer benötigt. Ein gebündelter Server mit einer erforderlichen Einstellung ohne gespeicherten Wert startet nicht. Der Tab Errors in /plugin zeigt Bundled MCP server "<name>" was not started: it needs configuration an.
Benutzer geben die Werte auf eine von zwei Arten an:
- In
/plugin: Wählen Sie das Plugin auf dem Tab Installed aus und wählen Sie Configure - Bei der Installation, über die Shell: Übergeben Sie
--config <server>.<key>=<value>anclaude plugin install. Erfordert Claude Code v2.1.285 oder neuer und funktioniert nur für ein Bundle, das innerhalb des Plugins gepackt ist.
LSP-Server
Ein LSP-Server stellt Claude Diagnosen und Code-Navigation für eine Sprache zur Verfügung. Wenn ein offizielles Code-Intelligence-Plugin Ihre Sprache bereits abdeckt, installieren Sie dieses, anstatt selbst eines zu schreiben. Andernfalls deklarieren Sie den Server in.lsp.json im Plugin-Stammverzeichnis:
.lsp.json
command ist der Name der Binärdatei, deren Argumente in args stehen. extensionToLanguage benötigt mindestens eine Dateiendung, die jeweils mit . beginnt.
claude plugin validate liest diese Datei nicht. Wenn ein Eintrag ungültig ist, wird die gesamte Datei beim Laden übersprungen, und Invalid LSP server config for ".lsp.json" erscheint im Tab Errors von /plugin.
Ihr Plugin konfiguriert die Verbindung, installiert aber nicht die Binärdatei des Servers, und jede Dateiendung erhält einen Server:
- Fehlende Binärdatei: Claude Code startet
commandüber seinen Namen aus demPATHdes Benutzers. Wenn die Binärdatei dort nicht vorhanden ist, startet der Server nicht, undclaude --debugprotokolliertLSP server <name> failed to start - Konflikte bei Dateiendungen: Wenn zwei aktivierte Server dieselbe Dateiendung beanspruchen, verarbeitet der zuerst registrierte diese Dateien, und der andere wird dafür nicht verwendet, unabhängig davon, ob die Server aus einem oder zwei Plugins stammen. Der Tab Errors in
/pluginzeigt die WarnungLSP server "<name>" is not used for <ext> filesan
lspServers akzeptiert dieselbe 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 denselben Namen wie einer in .lsp.json hat, ersetzt der Manifest-Server diesen.
Informationen zu transport, Timeouts, Neustarts und den anderen Feldern finden Sie unter lspServers.
Senden Sie Log-Ausgaben an stderr, nicht an stdout. Claude Code liest die stdout-Ausgabe eines Servers ausschließlich als Protokollnachrichten und akzeptiert Nachrichten-Header bis 64 KiB und einen Nachrichtentext bis 32 MiB.
Claude Code trennt die Verbindung zu einem Server, der eines der Limits überschreitet oder Ausgaben außerhalb des Protokolls an stdout schreibt, und zählt die Trennung als Absturz für restartOnCrash und maxRestarts. Wenn Sie mit --debug ausführen, schreibt Claude Code einen Fehler mit der Ursache in das Debug-Log.
Ausführbare Dateien
Dateien inbin/ im Plugin-Stammverzeichnis liegen im PATH der Shell des Bash-Tools, solange das Plugin aktiviert ist, sodass Claude sie als einfache Befehle ausführen kann. Ein Befehl, den Claude mit dem PowerShell-Tool außerhalb der Sandbox ausführt, findet sie ebenfalls in seinem PATH, ein in einer Sandbox ausgeführter PowerShell-Befehl dagegen nicht. Fügen Sie ein ausführbares Skript 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 Ergebnis des Bash-Tools die Ausgabe des Skripts.
Die bin/-Verzeichnisse von Plugins stehen hinter den eigenen PATH-Einträgen des Benutzers, sodass ein Plugin git, ls oder einen anderen Systembefehl nicht überdecken kann.
claude.ai und Cowork installieren kein Plugin mit einem bin/-Verzeichnis auf oberster Ebene, auch keines, das Sie über die Organisationseinstellungen von claude.ai verteilen.
Standardeinstellungen
Um Standardwerte festzulegen, die gelten, solange das Plugin aktiviert ist, fügen Sie einesettings.json im Plugin-Stammverzeichnis hinzu oder setzen Sie dasselbe Objekt inline in den Manifest-Schlüssel settings. Zwei Schlüssel werden wirksam, agent und subagentStatusLine, und alle anderen Schlüssel werden verworfen.
Legen Sie agent fest, um einen der eigenen Agenten des Plugins als Hauptthread auszuführen:
settings.json
security-reviewer.
Alles, was der Schlüssel steuert, finden Sie unter der Einstellung agent.
Wenn derselbe Schlüssel an mehr als einer Stelle festgelegt ist, entscheiden diese Regeln, welcher Wert gilt:
- Datei vor Manifest: Wenn beide vorhanden sind und
settings.jsonmindestens einen unterstützten Schlüssel festlegt, giltsettings.json, undsettingsim Manifest wird ignoriert - Benutzereinstellungen vor Plugin-Standardwerten: Über alle Einstellungsquellen hinweg bilden Plugin-Standardwerte die unterste Ebene, sodass ein eigenes
agentdes Benutzers in~/.claude/settings.jsonIhres überschreibt - Zwei Plugins legen denselben Schlüssel fest: Es gilt der Wert des zuletzt geladenen Plugins, und
claude --debugprotokolliertoverrides setting
subagentStatusLine finden Sie unter Statuszeilen für Subagenten.
Themes und Ausgabestile
Ein Plugin kann Farbthemes und Ausgabestile enthalten. Beide erscheinen in denselben Auswahlmenüs wie die eigenen des Benutzers. Für beide gilt: Wenn Sie den Manifest-Schlüssel festlegen, ersetzt dieser den Ordner-Scan.
Plugin-Themes sind schreibgeschützt. Wenn ein Benutzer eines in
/theme bearbeitet, wird die Bearbeitung daher als Kopie in seinem eigenen Theme-Verzeichnis gespeichert.
Dieses Theme färbt den Prompt-Akzent und den Fehlertext der dunklen Voreinstellung um:
themes/dracula.json
Channels
Ein Channel ermöglicht es einem externen System wie einer Chat-App, Nachrichten in eine Sitzung zu senden. In einem Plugin ist ein Channel einer der MCP-Server plus einchannels-Eintrag, der an ihn gebunden ist und seine eigene Konfiguration abfragen kann. Dieses Manifest bindet einen Channel an einen telegram-Server und fragt nach einem Bot-Token:
.claude-plugin/plugin.json
server muss einem Schlüssel in mcpServers entsprechen. Das kanalspezifische userConfig hat dieselbe Form wie der userConfig-Schlüssel auf oberster Ebene.
Was der Server implementieren muss und wie Benutzer ein Channel-Plugin aktivieren, erfahren Sie unter Als Plugin paketieren in der Channels-Referenz. Die Feldtabelle finden Sie unter channels.
Monitore
Ein Monitor ist ein Shell-Befehl, der während der gesamten Sitzung im Hintergrund läuft. Was er ausgibt, erreicht Claude als Benachrichtigungen, sodass Claude auf ein Log oder eine Statusänderung reagieren kann, ohne zur Beobachtung aufgefordert zu werden. Speichern Sie die Einträge inmonitors/monitors.json:
monitors/monitors.json
- Interaktive Sitzungen: Plugin-Monitore starten nicht im nicht interaktiven Modus mit dem Flag
-p - Mindestversion: Auf Amazon Bedrock, Claude Platform on AWS, Google Cloud’s Agent Platform oder Microsoft Foundry sowie bei gesetztem
DISABLE_TELEMETRYoderCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICerfordern Monitore Claude Code v2.1.310 oder neuer. Die Anforderung gilt, wenn das Abrufen von Feature-Flags deaktiviert ist - Keine Benutzerkonfiguration:
commanderhält die Pfadvariablen und${ENV_VAR}aus der Umgebung, aber nie${user_config.*}. Ein Monitor, der auf eine solche verweist, startet nicht, und Monitor-Prozesse erhalten auch keinCLAUDE_PLUGIN_OPTION_<KEY> - Deaktivieren während der Sitzung: Wenn Sie ein Plugin während einer Sitzung deaktivieren, stoppt Claude Code bereits laufende Monitore nicht. Sie stoppen, wenn die Sitzung endet
experimental.monitors akzeptiert dasselbe Array inline oder einen Pfad zu einer JSON-Datei und wird anstelle von monitors/monitors.json gelesen.
Informationen zum Trigger when und zu den anderen Feldern finden Sie unter 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 ist Teil der interaktiven/plugin-Schnittstelle. Wenn der Benutzer eines der folgenden tut, öffnet er sich für jede Option, die noch nicht gesetzt ist:
- 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 Dialog des VS Code-Erweiterung Plugins verwalten fragt nach nicht gesetzten Optionen als Formular nach einer Installation, und ein Zahnradsymbol in der Zeile des Plugins öffnet das Formular erneut mit jeder Option.
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 bei der Installation, oder leiten Sie ein JSON-Objekt an claude plugin configure --values-stdin danach weiter.
Wenn Optionen ungesetzt bleiben, druckt claude plugin install eine userConfig options not yet set-Zeile. Für den genauen Text der Zeile siehe Der userConfig-Dialog erscheint nie.
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.
Unter Windows verwenden die meisten ersetzten Pfade Schrägstriche, wie in C:/Users/you/.... Ihre nativen Backslashes behalten sie in einem Hook in Exec-Form und in einem Hook, der über PowerShell ausgeführt wird. PowerShell ist die Standard-Shell unter Windows, wenn Git Bash nicht installiert ist.
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