Dominic Böttger

← Zurück zum Blog

Veröffentlicht am 20. Januar 2026 von Dominic Böttger (vor 2 Monaten) · 10 Min. Lesezeit

Wenn du mit Claude Code in einem Team arbeitest, hast du wahrscheinlich schon die Stärke von Skills und Plugins entdeckt. Aber hier ist die Sache: Der eingebaute Marktplatz ist großartig für allgemeine Tools, doch viele Teams brauchen maßgeschneiderte Skills für ihre spezifischen Workflows.

Diese Anleitung führt dich durch das Erstellen und Verwalten eines privaten Plugin-Marktplatzes – ob auf GitHub gehostet oder lokal aus einem geklonten Repository genutzt.

Was sind Claude Code Plugins?

Bevor wir in die Marktplatz-Struktur eintauchen, klären wir, was wir hier bauen.

Plugins sind Pakete, die die Fähigkeiten von Claude Code erweitern. Jedes Plugin kann enthalten:

  • Skills: Vordefinierte Prompts und Workflows, die Claude ausführen kann
  • Commands: Slash-Befehle für häufige Aktionen
  • Agents: Spezialisierte Sub-Agents für bestimmte Aufgaben
  • Hooks: Ereignisgesteuerte Automatisierungsauslöser

Ein Marktplatz ist einfach eine Registry, die Claude Code mitteilt, wo diese Plugins zu finden sind und was sie enthalten.

Repository-Struktur

Hier ist die empfohlene Struktur für einen privaten Plugin-Marktplatz:

my-team-plugins/
├── .claude-plugin/
│   └── marketplace.json       # Plugin registry
├── plugins/
│   ├── api-client/
│   │   └── skills/
│   │       └── fetch/
│   │           ├── SKILL.md
│   │           └── scripts/
│   │               └── fetch.py
│   ├── database/
│   │   └── skills/
│   │       └── query/
│   │           ├── SKILL.md
│   │           └── reference/
│   │               └── schema-guide.md
│   └── planner/
│       └── skills/
│           └── tasks/
│               └── SKILL.md
└── README.md

Schauen wir uns die einzelnen Komponenten an.

Die Marktplatz-Registry

Das Herzstück deines Marktplatzes ist .claude-plugin/marketplace.json. Diese Datei teilt Claude Code mit, welche Plugins verfügbar sind und wo sie zu finden sind:

{
  "name": "acme-plugins",
  "displayName": "Acme Corp Plugins",
  "plugins": [
    {
      "name": "api-client",
      "description": "API client utilities for REST and GraphQL endpoints. Use when working with external APIs.",
      "source": "./plugins/api-client",
      "skills": ["./skills/fetch"]
    },
    {
      "name": "database",
      "description": "Database query tools for PostgreSQL and MySQL. Activate for database operations.",
      "source": "./plugins/database",
      "skills": ["./skills/query"]
    },
    {
      "name": "planner",
      "description": "Task and project planning utilities. Use for managing tasks, sprints, and project workflows.",
      "source": "./plugins/planner",
      "skills": ["./skills/tasks"]
    }
  ]
}

Wichtige Felder:

FeldBeschreibung
nameEindeutiger Bezeichner für den Marktplatz (kebab-case)
displayNameLesbarer Name, der in Claude Code angezeigt wird
plugins[].namePlugin-Bezeichner (muss mit dem Verzeichnisnamen übereinstimmen)
plugins[].descriptionWann dieses Plugin verwendet werden soll – Claude nutzt dies als Kontext
plugins[].sourceRelativer Pfad zum Plugin-Verzeichnis
plugins[].skillsArray von Skill-Pfaden innerhalb des Plugins

Plugin-Verzeichnisstruktur

Jedes Plugin liegt in seinem eigenen Verzeichnis unter plugins/. Die Struktur ist:

plugins/plugin-name/
└── skills/
    └── skill-name/
        ├── SKILL.md          # Erforderlich: Der Skill-Prompt/die Anweisungen
        ├── scripts/          # Optional: Unterstützende Skripte
        │   └── helper.py
        └── reference/        # Optional: Referenzdokumentation
            └── docs.md

SKILL.md ist die einzige erforderliche Datei. Sie enthält die Anweisungen, denen Claude beim Aufrufen des Skills folgt. Hier ein einfaches Beispiel:

# API Fetch Skill

When the user asks to fetch data from an API, follow these steps:

1. Determine the HTTP method (GET, POST, PUT, DELETE)
2. Identify required headers and authentication
3. Construct the request using the provided scripts
4. Parse and format the response

## Authentication Handling

For APIs requiring authentication, check for:
- Bearer tokens in environment variables
- API keys in project configuration
- OAuth credentials if applicable

## Example Usage

User: "Fetch the user list from our backend"
Action: Use GET request to /api/users endpoint

Namenskonventionen

Die richtige Benennung ist wichtig. Claude Code verwendet ein durch Doppelpunkte getrenntes Namensmuster zur Identifizierung von Skills: plugin-name:skill-name.

Das Plugin:Skill-Muster verstehen

Wenn du einen Skill aufrufst, referenzierst du ihn in diesem Format:

plugin-name:skill-name

Zum Beispiel bei dieser Verzeichnisstruktur:

plugins/
└── planner/              # Plugin-Name: "planner"
    └── skills/
        └── tasks/        # Skill-Name: "tasks"
            └── SKILL.md

Der Skill wird als planner:tasks referenziert.

  • planner ist der Plugin-Name (das Verzeichnis unter plugins/)
  • tasks ist der Skill-Name (das Verzeichnis unter skills/)

Dies erzeugt einen klaren Namespace, der Kollisionen verhindert, wenn mehrere Plugins existieren. Du könntest z.B. haben:

ReferenzPluginSkillZweck
planner:tasksplannertasksProjektaufgaben verwalten
planner:sprintsplannersprintsSprint-Planung
database:querydatabasequeryDatenbankabfragen ausführen
database:migratedatabasemigrateDatenbankmigrationen

Gute Namensbeispiele

planner:tasks             # Plugin für Planung, Skill verwaltet Aufgaben
api-client:fetch          # Plugin ist ein API-Client, Skill ruft Daten ab
database:query            # Plugin für Datenbank, Skill führt Abfragen aus
docs:generate             # Plugin für Doku, Skill generiert sie

Was vermieden werden sollte

Wiederhole nicht den Plugin-Namen im Skill:

planner:planner-tasks     # Schlecht - redundantes "planner"
database:database-query   # Schlecht - "database" erscheint zweimal

Der Plugin-Name liefert bereits den Kontext, daher sollte der Skill-Name neue Informationen hinzufügen, nicht wiederholen.

Verwende keine generischen Skill-Namen:

utils:skill               # Schlecht - was macht "skill"?
tools:helper              # Schlecht - zu vage

Richtlinien für Plugin-Benennung

  • Verwende kebab-case (Kleinbuchstaben mit Bindestrichen): api-client, nicht apiClient oder API_Client
  • Sei beschreibend aber prägnant: planner statt project-task-management-system
  • Spiegle die Domäne oder Technologie wider: msgraph, postgres, slack
  • Denke daran als Namespace: Alles unter diesem Plugin bezieht sich auf diese Domäne

Richtlinien für Skill-Benennung

  • Verwende Aktionsverben wenn der Skill eine Aktion ausführt: query, fetch, generate, deploy
  • Verwende Substantive wenn der Skill eine Ressource verwaltet: tasks, users, config
  • Halte es kurz – ein oder zwei Wörter sind ideal
  • Dupliziere keine Informationen aus dem Plugin-Namen

Praxisbeispiele

So funktioniert die Benennung für ein Team mit mehreren Plugins:

# Projektmanagement-Plugin
planner:tasks           # Aufgaben erstellen, aktualisieren, auflisten
planner:sprints         # Sprint-Zyklen verwalten
planner:reports         # Fortschrittsberichte generieren

# Microsoft Graph Integration
msgraph:mail            # E-Mails senden und lesen
msgraph:calendar        # Kalendertermine verwalten
msgraph:users           # Benutzerverzeichnis abfragen

# Datenbankoperationen
postgres:query          # SQL-Abfragen ausführen
postgres:migrate        # Migrationen anwenden
postgres:backup         # Sichern und Wiederherstellen

# Interne Tools
deploy:staging          # Auf Staging deployen
deploy:production       # Auf Produktion deployen

Jedes Plugin gruppiert verwandte Funktionalität, und jeder Skill-Name zeigt klar an, was er innerhalb dieser Domäne tut.

Einen privaten Marktplatz registrieren

Jetzt zum praktischen Teil: Wie nutzt du deinen privaten Marktplatz tatsächlich?

Option 1: Lokaler Marktplatz (Empfohlen)

Der zuverlässigste Ansatz für private Marktplätze ist, das Repository lokal zu klonen und den lokalen Pfad zu registrieren. Das vermeidet Authentifizierungsprobleme und ermöglicht sofortige Updates während der Entwicklung.

Klone zunächst dein Marktplatz-Repository:

# Klonen via SSH (empfohlen für private Repos)
git clone git@github.com:acme-corp/claude-plugins.git ~/Development/claude-plugins

Füge dann den lokalen Pfad zu deinen Claude Code Einstellungen hinzu.

Für macOS/Linux (~/.claude/settings.json):

{
  "extraKnownMarketplaces": {
    "acme": {
      "source": {
        "source": "local",
        "directory": "/home/username/Development/claude-plugins"
      }
    }
  }
}

Für Windows (%USERPROFILE%\.claude\settings.json):

{
  "extraKnownMarketplaces": {
    "acme": {
      "source": {
        "source": "local",
        "directory": "C:\\Users\\username\\Development\\claude-plugins"
      }
    }
  }
}

Nach dem Hinzufügen dieser Konfiguration:

  1. Starte Claude Code neu
  2. Führe /marketplace aus, um verfügbare Plugins zu sehen
  3. Installiere Plugins mit /install acme:planner

Vorteile lokaler Marktplätze:

  • Sofortige Updates: Änderungen an SKILL.md-Dateien werden sofort wirksam
  • Keine Netzwerkabhängigkeit: Funktioniert offline
  • Keine Credential-Konflikte: Arbeitet mit deinem bestehenden Git/gh CLI Setup
  • Einfache Entwicklung: Skills testen, bevor du sie ins Remote-Repository pushst

Um deine Plugins zu aktualisieren, ziehe einfach die neuesten Änderungen:

cd ~/Development/claude-plugins && git pull

Option 2: GitHub-gehosteter Marktplatz (nur öffentliche Repos)

Für öffentliche Repositories kannst du GitHub direkt referenzieren, ohne zu klonen:

{
  "extraKnownMarketplaces": {
    "acme": {
      "source": {
        "source": "github",
        "repo": "acme-corp/claude-plugins"
      }
    }
  }
}

Hinweis zu privaten Repositories: Die GitHub-Source-Option kann zwar mit privaten Repos funktionieren, erfordert aber möglicherweise Änderungen an der Konfiguration deines Git Credential Managers. Wenn du das gh CLI mit seinem Standard-Credential-Manager verwendest, könnten diese Änderungen Konflikte verursachen. Für private Repos ist der lokale Marktplatz-Ansatz einfacher und vermeidet Credential-Probleme.

Deinen ersten Skill erstellen

Erstellen wir ein praktisches Beispiel. Angenommen, dein Team braucht einen Skill für Aufgabenverwaltung. So baust du ihn auf.

1. Verzeichnisstruktur erstellen

mkdir -p plugins/planner/skills/tasks

2. SKILL.md schreiben

# Task Management Skill

Use this skill when the user needs to create, update, or manage project tasks.

## Capabilities

- Create new tasks with title, description, and due date
- List tasks filtered by status, assignee, or project
- Update task status (todo, in-progress, done)
- Assign tasks to team members

## Task Format

Tasks should include:
- **Title**: Brief description (required)
- **Description**: Detailed information (optional)
- **Status**: todo | in-progress | done
- **Assignee**: Team member name or email
- **Due Date**: ISO 8601 format (YYYY-MM-DD)

## Example Interactions

User: "Create a task to update the API documentation"
Action: Create task with title "Update API documentation", status "todo"

User: "Show me all tasks assigned to Sarah"
Action: List tasks filtered by assignee "Sarah"

User: "Mark the login bug task as done"
Action: Update task status to "done"

3. marketplace.json aktualisieren

{
  "plugins": [
    {
      "name": "planner",
      "description": "Task and project planning utilities. Use when managing tasks, tracking progress, or organizing work.",
      "source": "./plugins/planner",
      "skills": ["./skills/tasks"]
    }
  ]
}

4. Testen

Bei Verwendung eines lokalen Marktplatzes ist der Skill sofort verfügbar:

Du: Erstelle eine Aufgabe zum Review des PRs für das neue Authentifizierungs-Feature
Claude: [Nutzt den planner:tasks Skill, um die Aufgabe zu erstellen]

Best Practices

Skills fokussiert halten

Jeder Skill sollte eine Sache gut machen. Wenn ein Skill komplex wird, teile ihn auf:

plugins/planner/
└── skills/
    ├── tasks/        # Einzelne Aufgabenverwaltung
    ├── sprints/      # Sprint-Planung und -Tracking
    └── reports/      # Fortschrittsberichte und Analysen

Für Claude dokumentieren, nicht für Menschen

SKILL.md-Dateien sind Anweisungen für Claude. Schreibe sie so, als würdest du einem fähigen Assistenten etwas erklären:

  • Sei explizit bei Randfällen
  • Füge Beispiel-Ein- und -Ausgaben hinzu
  • Spezifiziere Erwartungen zur Fehlerbehandlung
  • Liste alle Abhängigkeiten oder Voraussetzungen auf

Deinen Marktplatz versionieren

Verwende Git-Tags zur Versionierung deines Marktplatzes:

git tag -a v1.2.0 -m "Added planner:sprints skill"
git push origin v1.2.0

So können Teams bei Bedarf bestimmte Versionen verwenden.

Referenzdokumentation einbinden

Für komplexe Domänen füge Referenzmaterial im reference/-Verzeichnis hinzu:

plugins/planner/skills/tasks/
├── SKILL.md
└── reference/
    ├── api-docs.md     # API-Dokumentation
    └── examples.md     # Nutzungsbeispiele

Claude kann diese Dateien beim Ausführen des Skills referenzieren.

Zusammenfassung

Ein privater Plugin-Marktplatz verwandelt Claude Code von einem universellen Assistenten in ein teamspezifisches Kraftpaket. Die Ersteinrichtung dauert etwa eine Stunde, aber die Produktivitätsgewinne summieren sich schnell.

Fang klein an:

  1. Erstelle ein Plugin für deine häufigste wiederkehrende Aufgabe
  2. Teste es lokal
  3. Teile es über GitHub mit deinem Team
  4. Iteriere basierend auf Feedback

Die Struktur ist bewusst einfach gehalten – nur Markdown-Dateien und JSON-Konfiguration. Kein Build-Prozess, keine Abhängigkeiten, keine Komplexität. Das ist der Punkt.

Das Wissen deines Teams, kodiert als Skills, für alle über natürliche Sprache verfügbar. Das ist das Versprechen, und es hält.

Ressourcen

Geschrieben von Dominic Böttger

← Zurück zum Blog

Aktuelle Blogbeiträge