Skip to main content
Ein Plugin ist ein Verzeichnis von Skills, Agents, Hooks und MCP-Servern sowie eine plugin.json-Datei, die als Manifest bezeichnet wird und das Plugin benennt. Claude Code lädt das Verzeichnis als eine Einheit, sodass Sie es mit Teamkollegen teilen, in mehreren Projekten installieren oder in einem Marketplace veröffentlichen können. Diese Seite ist für Personen, die ihre eigenen Plugins schreiben.
Diese Fälle werden auf anderen Seiten behandelt:
Beginnen Sie mit dem Abschnitt, der dem entspricht, was Sie bereits haben:

Entscheiden Sie, wann Sie ein Plugin verwenden

Skills, Agents, Hooks und MCP-Server funktionieren alle eigenständig in Ihrem Projekt oder Ihrem Home-Verzeichnis. Behalten Sie dieses eigenständige Setup bei, während es einem Projekt oder nur Ihnen dient. Erstellen Sie ein Plugin, wenn Sie das Setup mit Teamkollegen teilen, es in mehreren Projekten installieren oder versionierte Releases veröffentlichen möchten. Wenn Sie eigenständige Skills, Agents, Hooks und MCP-Konfiguration in ein Plugin verschieben, ändern sich ihr Speicherort und ihre Namen:
  • Wo die Dateien hingehen: unter das eigene Verzeichnis des Plugins, das als Plugin-Root bezeichnet wird, als skills/, agents/, hooks/hooks.json und .mcp.json.
  • Wie sie benannt werden: Plugin-Skills und Agents erhalten den Plugin-Namen als Präfix, z. B. /my-plugin:hello, sodass zwei Plugins jeweils einen hello-Skill bereitstellen können, ohne zu kollidieren.
Um ein vorhandenes Setup in ein Plugin zu verschieben, siehe Konvertieren Sie ein vorhandenes .claude/-Setup.

Erstellen Sie Ihr erstes Plugin

In dieser Anleitung erstellen Sie ein Plugin, dessen einzige Komponente ein Skill ist – eine Begrüßung – und führen es mit --plugin-dir aus, das ein Plugin für eine Sitzung lädt, ohne es zu installieren. Ein Plugin kann eine beliebige Mischung von Komponenten enthalten, z. B. Skills, Agents, Hooks und MCP-Server, und keine ist erforderlich; ein Skill ist das kleinste Beispiel, das das Layout zeigt. Sie benötigen Claude Code installiert und angemeldet. Öffnen Sie ein Terminal in dem Verzeichnis, in dem Sie das Plugin behalten möchten, z. B. ~/projects, und führen Sie die Befehle in diesen Schritten von dort aus aus. Sie können ein Plugin überall behalten, da Sie seinen Pfad an Claude Code übergeben, wenn Sie eine Sitzung starten.
1

Erstellen Sie das Plugin-Verzeichnis

Erstellen Sie das Plugin-Verzeichnis mit einem .claude-plugin/-Ordner darin, um das Manifest zu halten:
2

Schreiben Sie das Manifest

Das Manifest ist eine JSON-Datei namens plugin.json, die Claude Code den Namen des Plugins mitteilt und es beschreibt. Speichern Sie dieses als my-first-plugin/.claude-plugin/plugin.json:
my-first-plugin/.claude-plugin/plugin.json
Die vier Felder tun folgendes:
  • name: erforderlich. Es identifiziert das Plugin und wird zum Präfix für jeden Skill und Agent, den das Plugin bereitstellt. Setzen Sie keine Leerzeichen hinein.
  • description: der Text, den Benutzer für das Plugin in /plugin sehen.
  • version: optional. Das Setzen hält Benutzer auf dieser Version, bis Sie es ändern; Veröffentlichen Sie eine neue Version sagt, wann Sie es setzen oder weglassen sollten.
  • author: wem Anerkennung gebührt. name ist erforderlich darin; email und url sind optional.
Jedes andere Feld ist in der Manifest-Referenz.Nur plugin.json geht in .claude-plugin/. Der Skill, den Sie als nächstes hinzufügen, geht direkt unter my-first-plugin/, neben diesem Ordner.
3

Fügen Sie einen Skill hinzu

Die einzige Komponente dieses Plugins ist ein Skill. Jeder Skill ist ein Verzeichnis unter skills/, das eine SKILL.md-Datei enthält. Erstellen Sie das Verzeichnis des Skills:
Erstellen Sie dann my-first-plugin/skills/hello/SKILL.md mit diesem Inhalt:
my-first-plugin/skills/hello/SKILL.md
Die Zeile disable-model-invocation: true bedeutet, dass Claude den Skill nicht von selbst ausführt, sodass nur Sie ihn auslösen. Entfernen Sie diese Zeile aus einem Skill, den Claude von selbst ausführen soll. Der Befehl des Skills kombiniert den Plugin-Namen und den Namen des Skills, sodass Sie diesen als /my-first-plugin:hello ausführen. Für die anderen Frontmatter-Felder siehe die Skill-Frontmatter-Referenz.
4

Validieren Sie das Plugin

Überprüfen Sie das Manifest und das Frontmatter des Skills, bevor Sie etwas ausführen:
Der Befehl gibt den Manifest-Pfad aus, den er überprüft hat, und ✔ Validation passed. Wenn er stattdessen ✘ Validation failed ausgibt, benennt jede Zeile über dieser Ergebniszeile das zu behebende Feld. Schauen Sie jede Nachricht unter claude plugin validate meldet Fehler nach.
5

Führen Sie Claude Code mit dem Plugin aus

Starten Sie eine Sitzung mit dem geladenen Plugin:
Sobald Claude Code startet, führen Sie den Skill aus:
Claude antwortet mit einer Begrüßung.
Das Plugin wird nur in Sitzungen geladen, die Sie mit --plugin-dir starten. Um weiterhin daran zu arbeiten, ohne das Flag zu verwenden, oder um einen .zip-Build zu testen, siehe Entwickeln Sie ohne einen Marketplace.

Teilen Sie Ihr Plugin

Ein Plugin, das Sie mit Erstellen Sie Ihr erstes Plugin erstellt haben, existiert nur auf Ihrem Computer. Wenn es für andere Personen bereit ist, gibt es drei Möglichkeiten, es ihnen zu geben:

Plugin-Layout

Jede Art von Komponente, z. B. Skills, Agents, Hooks und MCP-Server, geht in ein festes Verzeichnis unter dem Plugin-Root, das das Verzeichnis ist, das Sie an --plugin-dir übergeben. Fügen Sie nur die Verzeichnisse hinzu, die Sie verwenden. Um durch ein vollständiges Plugin-Verzeichnis zu klicken und zu lesen, was jede Datei tut, öffnen Sie den Plugin-Explorer. Die Tabelle listet die Verzeichnisse auf, mit denen die meisten Plugins beginnen, und das vollständige Layout listet den Rest auf.
Nur plugin.json geht in .claude-plugin/. Komponenten, die dort gespeichert sind, werden nicht geladen.Der Plugin-Root ist das eigene Verzeichnis des Plugins, nicht ~/.claude/ selbst. Eine .mcp.json, die unter ~/.claude/.mcp.json gespeichert ist, wird nicht geladen.

Entwickeln Sie ohne einen Marketplace

Sie benötigen keinen Marketplace, um ein Plugin auszuführen, das Sie schreiben. Laden Sie es stattdessen direkt von der Festplatte oder einer URL:
  • --plugin-dir: lädt ein Verzeichnis oder .zip-Archiv für eine Sitzung.
  • --plugin-url: ruft ein .zip-Archiv von einer URL für eine Sitzung ab.
  • claude plugin init: erstellt ein Plugin unter ~/.claude/skills/, das in jeder Sitzung geladen wird.
Wenn zwei Plugins, die auf unterschiedliche Weise geladen werden, denselben Namen haben, siehe Name-Konflikte, um zu sehen, welches Claude Code behält.

Laden Sie ein Plugin für eine Sitzung

Sie können ein Plugin für eine einzelne Sitzung auf drei Arten laden: von einem Verzeichnis oder .zip-Archiv auf der Festplatte mit --plugin-dir, von einer URL mit --plugin-url oder von einer Umgebungsvariablen, wenn Sie kein Flag hinzufügen können. Jedes Plugin wird nur für diese Sitzung geladen, und nichts wird in Ihren Einstellungen dafür geschrieben. Wenn Sie die Dateien des Plugins während der Sitzung bearbeiten, führen Sie /reload-plugins aus, um die Änderungen zu laden.

Von einem Verzeichnis oder .zip

Wenn Sie claude von Ihrer Shell aus starten, übergeben Sie --plugin-dir mit dem Plugin-Root-Verzeichnis oder einem .zip-Archiv davon. Wiederholen Sie das Flag, um mehrere Plugins zu laden:

Von einem Ordner mit Plugins

Um mehrere Plugins von einem Ort zu laden, übergeben Sie einen Ordner, der sie enthält, z. B. --plugin-dir ./plugins. Das Laden eines Ordners mit Plugins erfordert Claude Code v2.1.265 oder später. Wenn der Ordner kein .claude-plugin/-Verzeichnis und keine Plugin-Komponenten auf seiner obersten Ebene hat, behandelt Claude Code ihn als einen Ordner mit Plugins. Jeder unmittelbare Unterordner, der ein .claude-plugin/plugin.json-Manifest hat, wird dann als separates Plugin geladen. Alles andere im Ordner wird ohne Fehler übersprungen, einschließlich eines Unterordners, der kein Manifest hat. Wenn ein Plugin im Ordner nicht geladen wird, überprüfen Sie, dass sein Unterordner ein .claude-plugin/plugin.json hat. In einer interaktiven Sitzung können Sie auch Plugins im Ordner nach dem Start hinzufügen und entfernen:
  • Ein Unterordner, den Sie hinzufügen, wird als neues Plugin geladen, sobald sein Manifest vorhanden ist.
  • Wenn Sie einen Unterordner entfernen, wird sein Plugin entladen.
Eine Nachricht erscheint in der Sitzung für jede dieser Änderungen. Wenn das Laden oder Entladen eines Plugins während des Gesprächs den Prompt-Cache ungültig machen würde, wird die Änderung stattdessen gehalten, und die Nachricht teilt Ihnen mit, dass Sie /reload-plugins ausführen sollen, um sie anzuwenden.

Von einer URL

Wenn Sie claude von Ihrer Shell aus starten, übergeben Sie --plugin-url mit der Adresse eines .zip-Archivs, z. B. eines Build-Artefakts, das Ihre CI veröffentlicht:
Claude Code lädt das Archiv beim Start herunter. Um mehrere zu laden, wiederholen Sie das Flag oder übergeben Sie die URLs durch Leerzeichen getrennt in einem Argument in Anführungszeichen. Zeigen Sie das Flag nur auf Archive, die Sie kontrollieren oder denen Sie vertrauen. Wenn Claude Code das Archiv nicht abrufen kann oder das Archiv ungültig ist, startet es ohne das Plugin und zeichnet einen Plugin-Ladefehler auf, den Sie auf der Registerkarte Errors des /plugin-Managers überprüfen können.

Von einer Umgebungsvariablen

Um Plugins in einer Sitzung zu laden, in der Sie das Flag --plugin-dir nicht hinzufügen können, listen Sie ihre absoluten Pfade stattdessen in der Umgebungsvariablen CLAUDE_CODE_PLUGIN_DIRS auf. Claude Code lädt jeden Pfad, wie es einen --plugin-dir-Pfad lädt. Diese Plugins werden zusätzlich zu allen geladen, die Sie mit --plugin-dir übergeben. Projekt- und lokale Einstellungen können diese Variable nicht setzen. CLAUDE_CODE_PLUGIN_DIRS erfordert Claude Code v2.1.280 oder später. Verwaltete Einstellungen können --plugin-dir und CLAUDE_CODE_PLUGIN_DIRS ausschalten. Siehe Flags, die ein Plugin für eine Sitzung laden. Um ein Plugin zusammen mit einem Plugin zu testen, von dem es abhängt, siehe Testen Sie ein Plugin und seine Abhängigkeit lokal.

Machen Sie ein Plugin in jeder Sitzung geladen

Ihr persönliches Skills-Verzeichnis ist ~/.claude/skills/. Claude Code lädt jeden Ordner dort, der ein .claude-plugin/plugin.json enthält, als Plugin in jeder Sitzung, ohne Flag und ohne Installationsschritt. claude plugin init erstellt ein solches Plugin für Sie.

Erstellen Sie das Plugin mit claude plugin init

claude plugin init schreibt ein Starter-Plugin unter ~/.claude/skills/. Erfordert Claude Code v2.1.157 oder später. Erstellen Sie eines von Ihrer Shell aus:
Der Befehl erstellt ~/.claude/skills/my-tool/ mit einem .claude-plugin/plugin.json und einem Root-SKILL.md. Er gibt ✔ Created plugin "my-tool" at ~/.claude/skills/my-tool gefolgt von It will auto-load next session as my-tool@skills-dir. Run /reload-plugins to load it now. aus. Übergeben Sie --with skills, um claude plugin init zu haben, um einen Skill unter skills/ für Sie zu erstellen. Die anderen --with-Werte sind in der Plugin-Befehls-Referenz.

Benennen Sie die Skills des Plugins

Der Root-Skill unter ~/.claude/skills/my-tool/SKILL.md ist auch ein persönlicher Skill, sodass Sie ihn als /my-tool aufrufen, nicht als /my-tool:my-tool. Skills, die Sie unter skills/ im Plugin hinzufügen, erhalten das Plugin-Namen-Präfix, z. B. /my-tool:example.

Stoppen Sie das Laden des Plugins

Um das Laden eines erstellten Plugins zu stoppen, löschen Sie sein Verzeichnis, oder führen Sie claude plugin disable my-tool@skills-dir in Ihrer Shell mit dem Namen my-tool@skills-dir aus, den claude plugin init gedruckt hat. In der ID my-tool@skills-dir steht skills-dir an der Stelle, wo ein Marketplace-Name stehen würde, da das Plugin von Ihrem Skills-Verzeichnis geladen wird, nicht von einem Marketplace.

Teilen Sie das Plugin über ein Repository

claude plugin init schreibt das Plugin in Ihr persönliches Skills-Verzeichnis unter ~/.claude/skills/, sodass es für Sie in jedem Projekt geladen wird. Um ein Plugin für alle in einem Repository zu laden, erstellen Sie das gleiche Layout selbst unter <project>/.claude/skills/<name>/, einschließlich seines .claude-plugin/plugin.json. Siehe Plugins, die über ein Repository geteilt werden, um die Bedingungen zu sehen, unter denen Claude Code es lädt.

Testen und Debuggen

Wenn eine Änderung an Ihrem Plugin nicht angezeigt wird, arbeiten Sie diese Überprüfungen der Reihe nach durch. Jede teilt Ihnen mit, was Claude Code mit dem Plugin getan hat:
  1. Führen Sie in Ihrer Shell claude plugin validate <path> aus. Es überprüft das Manifest und das Frontmatter jeder Skill-, Agent- und Command-Datei und beendet sich mit 0 bei Validation passed. Fügen Sie --strict hinzu, um auch bei Warnungen fehlzuschlagen. Exit-Codes und Verzeichnisbehandlung sind in der Plugin-Befehls-Referenz.
  2. Führen Sie in der laufenden Sitzung /reload-plugins aus, um Änderungen anzuwenden, die Sie auf der Festplatte vorgenommen haben. Es gibt eine Reloaded:-Zeile mit Zählungen aus. Bestätigen Sie dann, dass ein Skill geladen wurde, indem Sie seinen /plugin-name:skill-Befehl eingeben, oder indem Sie das Plugin auf der Registerkarte Installed von /plugin finden.
  3. Führen Sie in der gleichen Sitzung /plugin aus. Die Registerkarte Installed listet Ihr Plugin auf und zeigt in den Details des Plugins die Komponenten, die Claude Code gefunden hat. Die Registerkarte Errors listet auf, was nicht geladen wurde und warum, z. B. ein Pfad in Ihrem Manifest, der nicht existiert.
  4. Führen Sie in Ihrer Shell claude plugin list aus. Es gibt Session-only- und Skills-Directory-Plugins in ihren eigenen Abschnitten mit Status: ✔ loaded oder dem Ladefehler aus. Um das Plugin einzubeziehen, das Sie entwickeln, übergeben Sie --plugin-dir mit seinem Pfad vor plugin list.
Um einen MCP-Server zu überprüfen, führen Sie /mcp in der Sitzung aus, um den Status des Servers zu sehen. Wenn der Server gesund ist, listet /mcp ihn als verbunden auf. Wenn nicht, siehe MCP-Server, die nicht starten. Um einen Hook zu überprüfen, lösen Sie das Ereignis aus, das er abgleicht. Bitten Sie Claude beispielsweise, eine Datei zu bearbeiten, um einen PostToolUse-Hook auszulösen. Lesen Sie dann das Debug-Protokoll, das zeigt, welche Hooks abgeglichen wurden, ihre Exit-Codes und ihre Ausgabe. Die nächsten Abschnitte behandeln die Fehler, auf die Sie bei der Entwicklung am ehesten stoßen, und die Seite zur Fehlerbehebung hat den vollständigen Eintrag für jeden.

Ein Komponentenpfad wird nicht gefunden

Die Registerkarte Errors von /plugin zeigt <component> path not found: <path>, z. B. commands path not found. Ein Komponentenpfad in Ihrem Manifest, z. B. commands, skills, agents oder hooks, zeigt auf nichts. Beheben Sie den Pfad oder erstellen Sie das Verzeichnis, und führen Sie dann /reload-plugins in der Sitzung aus. Siehe commands path not found.

--plugin-dir bei einem Marketplace-Root lädt die Plugins unter plugins/ nicht

--plugin-dir nimmt das Plugin-Root-Verzeichnis, das .claude-plugin/plugin.json und die Komponentenverzeichnisse wie skills/ enthält. Wenn Sie es stattdessen auf einen Marketplace-Root zeigen, liest Claude Code marketplace.json nicht, sodass ein Plugin unter plugins/ nicht geladen wird, und Sie sehen keinen Fehler. Zeigen Sie das Flag auf den Ordner eines Plugins, oder fügen Sie den Marketplace hinzu. Siehe den Eintrag zur Fehlerbehebung.

Das Plugin wird geladen, aber seine Skills fehlen

Das Verzeichnis skills/ befindet sich in .claude-plugin/, oder ein skills-Eintrag im Manifest zeigt auf eine Datei. Verschieben Sie skills/ zum Plugin-Root, zeigen Sie jeden skills-Eintrag auf ein Verzeichnis, das SKILL.md enthält, und führen Sie /reload-plugins in der Sitzung aus. Siehe Plugin wird geladen, aber seine Skills fehlen.

Der userConfig-Dialog wird nie angezeigt

Der Dialog für die userConfig-Optionen Ihres Plugins ist Teil der Installation über /plugin in einer Sitzung. Das Laden mit --plugin-dir zeigt ihn nicht, und auch nicht claude plugin install in der Shell. Führen Sie mit dem geladenen Plugin /plugin configure <plugin-name> in der Sitzung aus, um ihn zu öffnen. Siehe Der userConfig-Dialog wird nie angezeigt.

Überprüfen Sie, dass das Plugin Claudes Verhalten ändert

Ein Plugin, das ohne Fehler geladen wird, kann immer noch nicht steuern, wie Claude auf die beabsichtigte Weise funktioniert. claude plugin eval, das Sie in Ihrer Shell ausführen, führt Ihre Testfälle mit und ohne das Plugin aus und bewertet den Unterschied. Siehe Testen Sie Plugins mit Evals, beginnend mit Erstellen Sie Ihre erste Eval-Suite.

Konvertieren Sie ein vorhandenes .claude/-Setup

Wenn Sie bereits Skills, Agents oder Hooks unter dem .claude/-Verzeichnis eines Projekts haben, können Sie sie in ein Plugin verschieben, ohne sie umzuschreiben. Führen Sie die Befehle in diesen Schritten vom Projekt-Root aus, das das Verzeichnis ist, das .claude/ enthält, da die cp-Pfade relativ dazu sind.
1

Erstellen Sie die Plugin-Struktur

Erstellen Sie das Plugin-Verzeichnis und seinen .claude-plugin/-Ordner neben .claude/. Sie können das Plugin danach überall verschieben.
Erstellen Sie my-plugin/.claude-plugin/plugin.json:
my-plugin/.claude-plugin/plugin.json
2

Kopieren Sie Ihre vorhandenen Dateien

Kopieren Sie jedes Konfigurationsverzeichnis, das Sie haben, zum Plugin-Root, und überspringen Sie den Befehl für jedes Verzeichnis, das Sie nicht haben.
Führen Sie ls -a my-plugin aus, um zu bestätigen, dass jedes Verzeichnis, das Sie kopiert haben, neben .claude-plugin angezeigt wird.
3

Verschieben Sie Ihre Hooks

Wenn Sie Hooks in .claude/settings.json oder .claude/settings.local.json haben, erstellen Sie ein Hooks-Verzeichnis:
Erstellen Sie my-plugin/hooks/hooks.json und kopieren Sie das hooks-Objekt aus Ihrer Einstellungsdatei hinein. Das Format ist das gleiche.Dieses Beispiel zeigt die Form mit einem Hook, der einen Linter auf jede Datei ausführt, die Claude schreibt oder bearbeitet. Ersetzen Sie das Beispiel durch Ihr eigenes hooks-Objekt.
my-plugin/hooks/hooks.json
4

Testen Sie das migrierte Plugin

Laden Sie das Plugin für eine Sitzung:
Überprüfen Sie jede Komponente unter ihrem neuen Namen:
  • Skills: führen Sie /my-plugin:deploy für einen Skill aus, der /deploy war.
  • Subagents: bitten Sie Claude, den my-plugin:reviewer-Agent für einen Agent zu verwenden, der reviewer war.
  • Hooks: lösen Sie das Ereignis aus, das jeder Hook abgleicht.
Wenn etwas fehlt, arbeiten Sie sich durch Testen und Debuggen.
Während die Originale noch unter .claude/ sind, bleiben sie neben den Kopien des Plugins geladen:
  • Skills und Agents: die beiden Sätze kollidieren nicht, da die Skills und Agents des Plugins das Präfix my-plugin: tragen. /deploy und /my-plugin:deploy funktionieren beide, und Claude sieht reviewer und my-plugin:reviewer als zwei Subagents.
  • Hooks: Hooks haben kein Präfix, sodass ein Hook, der sowohl in Ihrer Einstellungsdatei als auch in hooks/hooks.json ist, jedes Mal zweimal ausgeführt wird, wenn sein Ereignis auslöst.
Nachdem Sie bestätigt haben, dass das Plugin funktioniert, löschen Sie die Originale aus .claude/ und entfernen Sie das hooks-Objekt aus Ihrer Einstellungsdatei.

Nächste Schritte