Plugin Architecture 9 min read

Benutzerdefinierte Claude Code Skills erstellen

Leitfaden zur Entwicklung und Verteilung von Claude Code Skills für Ihr Team.

By Julian Pechler |

Was sind Skills?

Claude Code Skills sind verpackte Fähigkeiten, die erweitern, was Claude Code tun kann. Ein Skill nimmt einen komplexen, mehrstufigen Workflow und kodiert ihn in einen wiederverwendbaren Befehl, den jedes Teammitglied aufrufen kann.

Betrachten Sie dieses Szenario: Jedes Mal, wenn ein Entwickler einen neuen API-Endpunkt erstellt, muss er:

  1. Den Route-Handler mit korrekter Fehlerbehandlung generieren
  2. TypeScript-Typen für Request/Response erstellen
  3. Eingabevalidierung hinzufügen
  4. Unit-Tests schreiben
  5. API-Dokumentation generieren
  6. Die OpenAPI-Spezifikation aktualisieren

Ohne Skill geht jeder Entwickler dies anders an. Einige überspringen Schritte. Einige machen sie in unterschiedlicher Reihenfolge. Die Qualität variiert stark.

Mit einem Skill ruft er /create-api-endpoint auf und erhält jedes Mal konsistente, vollständige Outputs. Der Skill kodiert die Best Practices Ihres Teams und erzwingt sie automatisch.

Skills vs. Prompts vs. Workflows

Das Verständnis der Unterscheidung hilft Ihnen, das richtige Tool zu wählen:

Prompts sind einzelne Anweisungen. Sie sagen Claude, was in einer Interaktion zu tun ist.

Prüfe diesen Code auf Sicherheitslücken.

Templates sind strukturierte Prompts mit Platzhaltern. Sie standardisieren, wie Prompts geschrieben werden.

Prüfe [CODE] auf [KATEGORIE]-Probleme gemäß [STANDARDS].

Skills sind vollständige Workflows, die mehrere Interaktionen umfassen können, Tool-Aufrufe beinhalten, auf externe Systeme zugreifen und komplexe Outputs produzieren.

/security-audit
→ Liest Codebase-Struktur
→ Identifiziert sicherheitsrelevante Dateien
→ Analysiert jede auf Schwachstellen
→ Vergleicht gegen OWASP-Richtlinien
→ Generiert priorisierten Bericht mit Fixes

Workflows orchestrieren mehrere Skills zu größeren Prozessen.

/release-prep
→ Führt /changelog-generator aus
→ Führt /security-audit aus
→ Führt /dependency-check aus
→ Führt /documentation-update aus
→ Produziert Release-Bereitschaftsbericht

Der Skill-Entwicklungszyklus

Der Aufbau produktionsreifer Skills folgt einem strukturierten Prozess. Schritte zu überspringen führt zu Skills, die in Demos funktionieren, aber in der realen Nutzung scheitern.

Phase 1: Ideenfindung und Validierung

Nicht jeder Workflow sollte zu einem Skill werden. Gute Skill-Kandidaten haben diese Eigenschaften:

Hohe Frequenz: Workflows, die täglich oder wöchentlich im Team stattfinden

  • API-Endpunkt-Erstellung
  • Code-Review-Unterstützung
  • Dokumentationsgenerierung
  • Test-Scaffolding

Hoher Wert: Workflows, bei denen Konsistenz signifikant wichtig ist

  • Sicherheitsaudits
  • Compliance-Checks
  • Release-Vorbereitung
  • Incident Response

Hohe Komplexität: Workflows mit vielen Schritten, die leicht falsch gemacht werden können

  • Datenbank-Migrationen
  • Dependency-Upgrades
  • Refactoring-Kampagnen
  • System-Integrationen

Validierungsfragen:

  • Wie oft passiert dieser Workflow? (Täglich = hohe Priorität)
  • Was kostet es, ihn inkonsistent zu machen? (Sicherheit = hohe Kosten)
  • Wie viel Zeit braucht er aktuell? (>30 Min = guter Kandidat)
  • Kann er vernünftig automatisiert werden? (Manche Aufgaben brauchen menschliches Urteil)

Phase 2: Design und Prototyping

Vor dem Schreiben des Skills, designen Sie sein Interface und Verhalten.

Eingabe-Design: Welche Informationen braucht der Skill?

skill: create-api-endpoint
inputs:
  required:
    - name: endpoint_path
      type: string
      description: "API-Pfad (z.B. /users/:id)"
    - name: method
      type: enum[GET, POST, PUT, DELETE, PATCH]
      description: "HTTP-Methode"
  optional:
    - name: auth_required
      type: boolean
      default: true
      description: "Ob Authentifizierung erforderlich ist"
    - name: rate_limit
      type: number
      default: 100
      description: "Anfragen pro Minute Limit"

Output-Design: Was produziert der Skill?

outputs:
  files:
    - path: "src/routes/{endpoint}.ts"
      type: "route_handler"
    - path: "src/types/{endpoint}.ts"
      type: "typescript_types"
    - path: "tests/{endpoint}.test.ts"
      type: "unit_tests"
    - path: "docs/api/{endpoint}.md"
      type: "documentation"
  updates:
    - path: "openapi.yaml"
      section: "paths"

Fehlerbehandlungs-Design: Was kann schiefgehen?

error_conditions:
  - condition: "endpoint_already_exists"
    message: "Endpunkt {path} existiert bereits. Nutze /update-endpoint stattdessen."
    recovery: "suggest_alternative"

  - condition: "invalid_path_format"
    message: "Pfad muss mit / beginnen und :param für Parameter verwenden"
    recovery: "prompt_for_correction"

  - condition: "missing_dependencies"
    message: "Erforderliches Paket {package} nicht in package.json gefunden"
    recovery: "offer_to_install"

Prototyp: Erstelle eine minimale Version zur Validierung des Ansatzes.

# create-api-endpoint (v0.1 Prototyp)

## Trigger
Benutzer ruft auf: /create-api-endpoint [pfad] [methode]

## Schritte
1. Eingaben parsen und Format validieren
2. Prüfen ob Endpunkt existiert
3. Route-Handler aus Template generieren
4. Typen aus Handler generieren
5. Grundlegende Test-Datei generieren
6. Zusammenfassung ausgeben

## Notizen für v1.0
- OpenAPI-Integration hinzufügen
- Vollständige Validierungslogik-Generierung hinzufügen
- Rate-Limiting-Setup hinzufügen

Phase 3: Implementierung

Mit validiertem Design, implementiere den vollständigen Skill.

Skill-Datei-Struktur:

---
name: create-api-endpoint
version: 1.0.0
description: Erstellt einen vollständigen API-Endpunkt mit Typen, Tests und Docs
author: platform-team
tags: [api, scaffolding, typescript]
---

# API-Endpunkt erstellen

## Trigger-Bedingungen
Dieser Skill aktiviert sich wenn:
- Benutzer `/create-api-endpoint` aufruft
- Benutzer fragt "erstelle einen neuen API-Endpunkt"
- Benutzer fragt "füge einen Endpunkt für [Ressource] hinzu"

## Eingabebehandlung

### Erforderliche Eingaben
Vom Benutzer erfragen, wenn nicht angegeben:
- **endpoint_path**: Der API-Pfad (z.B. `/users/:id`)
- **http_method**: GET, POST, PUT, DELETE oder PATCH

### Optionale Eingaben
Defaults verwenden, wenn nicht angegeben:
- **auth_required**: true
- **rate_limit**: 100 Anfragen/Minute
- **response_type**: json

### Validierungsregeln
- Pfad muss mit `/` beginnen
- Pfad-Parameter verwenden `:paramName` Format
- Methode muss gültige HTTP-Methode sein

## Ausführungsschritte

### Schritt 1: Kontext sammeln
<tool>read_file</tool>
- `src/routes/index.ts` lesen um Routing-Muster zu verstehen
- `src/middleware/auth.ts` lesen für Auth-Setup
- Bestehenden Endpunkt lesen für Muster-Matching

### Schritt 2: Route-Handler generieren
Erstelle `src/routes/{resource}.ts`:
```typescript
// Template mit Team-Mustern:
// - Fehlerbehandlung mit custom ApiError
// - Request-Validierung mit zod
// - Response-Typisierung
// - Logging-Integration

Schritt 3: Typen generieren

Erstelle src/types/{resource}.ts:

// Request- und Response-Typen
// Zod-Schemas für Validierung
// Export für Nutzung in Tests

Schritt 4: Tests generieren

Erstelle tests/routes/{resource}.test.ts:

// Test-Struktur passend zu Team-Mustern
// Happy-Path-Tests
// Fehlerfall-Tests
// Auth-Tests wenn auth_required

Schritt 5: OpenAPI aktualisieren

Modifiziere openapi.yaml:

  • Pfad-Definition hinzufügen
  • Request/Response-Schemas hinzufügen
  • Authentifizierungsanforderungen hinzufügen

Schritt 6: Zusammenfassungs-Output

Bereitstellen:

  • Liste erstellter/modifizierter Dateien
  • Nächste Schritte für den Entwickler
  • Etwaige manuelle Schritte erforderlich

Fehlerwiederherstellung

Endpunkt existiert

Wenn Endpunkt bereits existiert:

  1. Bestehende Implementierung zeigen
  2. Update stattdessen anbieten
  3. Erstellung mit anderem Pfad anbieten

Validierung fehlgeschlagen

Wenn Eingaben nicht validieren:

  1. Erklären was falsch ist
  2. Korrektes Format zeigen
  3. Um korrigierte Eingabe bitten

Fehlende Abhängigkeiten

Wenn erforderliche Pakete fehlen:

  1. Fehlende Pakete auflisten
  2. Hinzufügen zu package.json anbieten
  3. Installationsbefehl bereitstellen

Output-Format

Erfolgs-Output

✅ API-Endpunkt erstellt: POST /users

Erstellte Dateien:
  📄 src/routes/users.ts
  📄 src/types/users.ts
  📄 tests/routes/users.test.ts

Modifizierte Dateien:
  📝 openapi.yaml (Pfad-Definition hinzugefügt)

Nächste Schritte:
  1. Generierten Code reviewen
  2. Tests ausführen: npm test -- users
  3. Server starten: npm run dev

Fehler-Output

❌ Endpunkt konnte nicht erstellt werden

Problem: Endpunkt POST /users existiert bereits
Ort: src/routes/users.ts:45

Optionen:
  1. Bestehenden Endpunkt aktualisieren: /update-endpoint /users POST
  2. Mit anderem Pfad erstellen: /create-api-endpoint /users/new POST
  3. Abbrechen

### Phase 4: Testen

Skills brauchen Tests wie Code.

**Unit-Testing**: Individuelle Skill-Komponenten testen
```typescript
describe('create-api-endpoint skill', () => {
  describe('input validation', () => {
    it('akzeptiert gültiges Pfadformat', () => {
      expect(validatePath('/users/:id')).toBe(true);
    });

    it('lehnt Pfad ohne führenden Slash ab', () => {
      expect(validatePath('users/:id')).toBe(false);
    });

    it('lehnt ungültige HTTP-Methoden ab', () => {
      expect(validateMethod('INVALID')).toBe(false);
    });
  });

  describe('endpoint generation', () => {
    it('generiert korrekte Dateistruktur', async () => {
      const result = await generateEndpoint({
        path: '/users/:id',
        method: 'GET'
      });

      expect(result.files).toContain('src/routes/users.ts');
      expect(result.files).toContain('src/types/users.ts');
      expect(result.files).toContain('tests/routes/users.test.ts');
    });
  });
});

Integrations-Testing: Skill in realistischen Szenarien testen

describe('create-api-endpoint integration', () => {
  beforeEach(async () => {
    // Test-Projektstruktur aufsetzen
    await createTestProject();
  });

  it('erstellt vollständigen Endpunkt in bestehendem Projekt', async () => {
    const result = await invokeSkill('create-api-endpoint', {
      path: '/products/:id',
      method: 'GET'
    });

    // Dateien existieren verifizieren
    expect(await fileExists('src/routes/products.ts')).toBe(true);

    // Code kompiliert verifizieren
    expect(await runTypeCheck()).toPass();

    // Tests bestehen verifizieren
    expect(await runTests('products')).toPass();
  });
});

Phase 5: Dokumentation

Skills brauchen Dokumentation für Benutzer und Maintainer.

Benutzer-Dokumentation:

# API-Endpunkt erstellen

Erstellt einen vollständigen API-Endpunkt mit TypeScript-Typen, Tests und Dokumentation.

## Nutzung

/create-api-endpoint /pfad METHODE [optionen]


## Beispiele

Einfacher GET-Endpunkt:

/create-api-endpoint /users GET


POST-Endpunkt ohne Auth:

/create-api-endpoint /public/webhook POST —no-auth


Endpunkt mit benutzerdefiniertem Rate-Limit:

/create-api-endpoint /search GET —rate-limit 10


## Optionen

| Option | Standard | Beschreibung |
|--------|----------|--------------|
| --no-auth | false | Authentifizierungsanforderung überspringen |
| --rate-limit N | 100 | Anfragen pro Minute |
| --no-tests | false | Test-Generierung überspringen |

## Generierte Dateien

- `src/routes/{resource}.ts` - Route-Handler
- `src/types/{resource}.ts` - TypeScript-Typen
- `tests/routes/{resource}.test.ts` - Unit-Tests
- Aktualisiert `openapi.yaml` mit Endpunkt-Definition

## Fehlerbehebung

**"Endpunkt existiert bereits"**
Nutze `/update-endpoint` um bestehende Endpunkte zu modifizieren.

**"Ungültiges Pfadformat"**
Pfade müssen mit `/` beginnen und `:param` für Variablen verwenden.

Phase 6: Verteilung

Skills zu Entwicklern zu bringen erfordert eine Verteilungsstrategie.

Repository-Verteilung:

skills-library/
├── official/
│   ├── create-api-endpoint/
│   │   ├── skill.md
│   │   ├── README.md
│   │   └── CHANGELOG.md
│   └── ...
├── community/
│   └── ...
└── experimental/
    └── ...

Best Practices

Fehlerbehandlung

Skills müssen Fehler graceful behandeln. Benutzer sollten nie kryptische Fehlermeldungen sehen.

Prinzip: Jeder Fehler sollte erklären, was schiefgegangen ist, warum, und wie es behoben werden kann.

## Fehler: Projektkonfiguration konnte nicht gelesen werden

Was passiert ist:
  Konnte package.json im aktuellen Verzeichnis nicht finden.

Warum das wichtig ist:
  Dieser Skill muss Ihre Projektstruktur verstehen, um Code zu generieren,
  der zu Ihren Mustern passt.

Wie zu beheben:
  1. Stellen Sie sicher, dass Sie im Projekt-Root-Verzeichnis sind
  2. Führen Sie aus: cd /pfad/zu/ihrem/projekt
  3. Versuchen Sie den Befehl erneut

Alternative:
  Projektpfad angeben: /create-api-endpoint /users GET --project /pfad/zum/projekt

Versionierung

Verwende semantische Versionierung für Skills:

  • Major (2.0.0): Breaking Changes an Eingaben, Ausgaben oder Verhalten
  • Minor (1.1.0): Neue Features, abwärtskompatibel
  • Patch (1.0.1): Bugfixes, Dokumentations-Updates

Abwärtskompatibilität

Bei Skill-Updates, Abwärtskompatibilität aufrechterhalten:

  1. Eingaben nicht entfernen - Stattdessen deprecaten
  2. Output-Orte nicht ändern - Neue Outputs neben alte hinzufügen
  3. Standard-Verhalten nicht ändern - Feature-Flags für neues Verhalten verwenden
  4. Migrationspfade bereitstellen - Dokumentieren wie Nutzung zu aktualisieren

Erste Schritte

Bereit, Ihren ersten Skill zu erstellen?

  1. Kandidaten identifizieren: Einen Workflow wählen, den Sie häufig machen und der von Standardisierung profitieren würde
  2. Zuerst designen: Eingaben, Ausgaben und Fehlerfälle skizzieren bevor implementiert wird
  3. Einfach beginnen: Minimale Version bauen, dann iterieren
  4. Gründlich testen: Skills brauchen Tests wie Produktionscode
  5. Gut dokumentieren: Benutzer und Maintainer brauchen klare Dokumentation

Für Teams, die strukturierte Anleitung zum Aufbau von Skill-Bibliotheken wünschen, erfahren Sie mehr über unsere Beratungsleistungen oder erkunden Sie unseren Leitfaden zur Claude Code Plugin-Architektur.


Dieser Artikel ist Teil unserer Plugin-Architektur-Serie. Für Integration mit externen Systemen siehe MCP-Server-Integrations-Leitfaden. Für Prompt-Standardisierung lesen Sie Prompt-Templates für Entwicklungsteams.

Tags

Claude Code Skills Plugin-Entwicklung MCP Automatisierung Entwickler-Tools