GitHub CopilotVS CodeAIProductivityMCP

GitHub Copilot in VS Code anpassen

Sloth255
Sloth255
·4 min read·733 words

Einführung

Beim Vibe-Coding mit GitHub Copilot können oft Unannehmlichkeiten auftreten. Zum Beispiel können folgende Situationen eintreten:

  • Coding-Konventions-Diskrepanzen
// Von Copilot generierter Code
function getUserData(id) {  // ❌ Keine Typen, obwohl TypeScript erforderlich ist
  return fetch('/api/users/' + id)  // ❌ Template-Literals sollten verwendet werden
}

// Korrekter Code gemäß Team-Konventionen
async function getUserData(id: string): Promise<UserData> {
  return await fetch(`/api/users/${id}`)
}
  • Dieselben Erklärungen immer wieder wiederholen
Entwickler: "Erstelle eine React-Komponente"
GitHub Copilot: "Eine Klassen-Komponente wurde generiert"
Entwickler: "Nein, verwende eine funktionale Komponente, mit TypeScript und Typdefinitionen für Props..."

# Auch für die nächste Komponente...
Entwickler: "Erstelle eine weitere Komponente..."
GitHub Copilot: "Hier ist eine Klassen-Komponente..."
Entwickler: "Ich sagte funktionale Komponente!"
  • Fehlende projektspezifische Kenntnisse
Entwickler: "Hilf mir, Benutzerauthentifizierung zu implementieren"
Copilot: "Ich werde eine allgemeine Implementierung mit JWT vorschlagen"
Entwickler: "Wir verwenden Auth0..."
Copilot: "Verstanden. Lass mich Auth0 implementieren..."
Entwickler: "Und wir haben einen internen Authentifizierungsfluss..."

GitHub Copilot ist ein hervorragender Coding-Assistent, aber mit Standardeinstellungen passt er sich nicht vollständig dem Entwicklungsstil Ihres Teams oder projektspezifischen Anforderungen an.

In diesem Artikel stelle ich GitHub Copilot-Anpassungsfunktionen in VS Code vor, einschließlich Custom Instructions, Prompt Files, Custom Agents, Agent Skills und MCP Server-Integration, mit praktischen Beispiel-Codes.

Die bereitgestellten Beispiele sind referenziert von: https://code.visualstudio.com/docs/copilot/customization/overview


Übersicht der Anpassungsmöglichkeiten

GitHub Copilot in VS Code bietet sechs wichtige Anpassungsmethoden:

Anpassungsmethode Hauptanwendung Merkmale & Umfang
Custom Instructions Coding-Standards und Entwicklungsleitlinien definieren Alle Chat-Anfragen oder spezifische Dateitypen
Agent Skills Spezialisierte Workflows und Fähigkeiten beibringen Wiederverwendbare Expertise definieren (über Agents teilbar)
Prompt Files Wiederverwendbare aufgabenspezifische Prompts On-Demand-Ausführung
Custom Agents Rollenspezifische Assistenten Angewendet, wenn Chat-Modus ausgewählt wird
Language Models Aufgabenoptimierte KI-Modellauswahl Über Modell-Picker wechseln
MCP Server Integration mit externen Diensten und Tools Im Agent-Modus verfügbar

1. Custom Instructions — Coding-Konventionen vereinheitlichen

Grundlegende Einrichtung

Custom Instructions ist eine Funktion, die Copilots Verhaltensrichtlinien für das gesamte Projekt oder bestimmte Dateitypen definiert.

Einstellungen für den gesamten Workspace

.github/copilot-instructions.md

# Projektweite Coding-Leitlinien

## Code-Stil
- Semantische HTML5-Elemente verwenden (header, main, section, article)
- Moderne JavaScript-Funktionen priorisieren (const/let, Arrow-Funktionen, Template-Literals)
- TypeScript-Typdefinitionen immer einschließen

## Namenskonventionen
- Komponentennamen, Interfaces, Typ-Aliase: PascalCase
- Variablen, Funktionen, Methoden: camelCase
- Private Klassenmitglieder: Unterstrich-Präfix (_)
- Konstanten: GROSSBUCHSTABEN

## Code-Qualität
- Aussagekräftige Variablen- und Funktionsnamen verwenden
- Kommentare für komplexe Logik hinzufügen
- Fehlerbehandlung für Benutzereingaben und API-Aufrufe implementieren
- async/await gegenüber Callbacks bevorzugen

## Sicherheit
- Sensible Informationen nie hardcoden
- Eingabewerte immer validieren
- Platzhalter verwenden, um SQL-Injection zu verhindern

Sprach- und Framework-spezifische Einstellungen

Für bestimmte Dateimuster applyTo im Frontmatter angeben.

.github/instructions/react.instructions.md

---
applyTo: "**/*.tsx"
---

# React-Entwicklungsleitlinien

- Funktionale Komponenten gegenüber Klassen-Komponenten priorisieren
- Custom Hooks nutzen, um State-Management-Logik zu trennen
- Props immer mit TypeScript-Interfaces definieren
- Tailwind CSS Utility-Klassen für Styling verwenden
- Bei Bedarf mit React.memo memoizieren

.github/instructions/backend.instructions.md

---
applyTo: "src/server/**/*.ts"
---

# Backend-Entwicklungsleitlinien

- Controller in `src/controllers/` platzieren
- Service-Logik in `src/services/` platzieren
- Datenzugriff mit dem Repository-Pattern implementieren
- Umgebungsvariablen aus `.env` laden
- Fehlerbehandlung mit Middleware zentralisieren
- Winston für Logging verwenden

Einstellungen aktivieren

  1. Chat > Use Instruction Files in den VS Code-Einstellungen aktivieren
  2. Oder zu settings.json hinzufügen:
{
  "github.copilot.chat.codeGeneration.useInstructionFiles": true
}

Auto-Generierungsfunktion

VS Code kann Ihren Workspace analysieren und geeignete Instruction-Dateien automatisch generieren:

  1. Zahnrad-Symbol in der Chat-Ansicht klicken
  2. „Generate Chat Instructions" auswählen
  3. Generierte Datei überprüfen und bearbeiten

2. Prompt Files — Wiederverwendbare Aufgaben-Templates

Prompt Files ermöglichen es Ihnen, häufig ausgeführte Entwicklungsaufgaben zu templieren und im Team zu teilen.

Beispiel 1: React-Komponenten-Generierung

.github/prompts/create-react-component.prompt.md

---
agent: 'agent'
model: 'GPT-4o'
tools: ['search/codebase']
description: 'Eine React-Komponente generieren'
---

Generiere eine React-Komponente mit folgenden Anforderungen:

Komponentenname: ${input:componentName:Komponentenname eingeben}
Props: ${input:props:Props kommagetrennt eingeben (z.B. title, onClick, isDisabled)}

## Generierungsregeln
- In TypeScript implementieren
- Funktionale Komponenten verwenden
- Props mit einem Interface definieren
- Styling mit Tailwind CSS
- State mit React Hooks bei Bedarf verwalten
- Props mit JSDoc-Kommentaren dokumentieren

Beispiel 2: API-Route-Generierung

.github/prompts/create-api-route.prompt.md

---
agent: 'agent'
description: 'Eine RESTful API-Route generieren'
---

Generiere eine CRUD-API für die folgende Entität:

Entitätsname: ${input:entity:Entitätsname}
Felder: ${input:fields:Felder kommagetrennt angeben}

## Implementierungsanforderungen
- Express.js verwenden
- In TypeScript implementieren
- Router in `src/routes/` platzieren
- Controller in `src/controllers/` platzieren
- express-validator für Validierung verwenden
- Ordentliche Fehlerbehandlung implementieren
- Standard-JSON-Antwortformat verwenden

Beispiel 3: Test-Case-Generierung

.github/prompts/generate-tests.prompt.md

---
agent: 'agent'
tools: ['search/codebase']
description: 'Unit-Tests automatisch generieren'
---

Ausgewählter Code: ${selection}

Generiere umfassende Unit-Tests für den obigen Code.

## Testanforderungen
- Jest verwenden
- Testabdeckung maximieren
- Normale und Fehlerfälle abdecken
- Edge Cases berücksichtigen
- Mocks und Stubs angemessen verwenden
- Beschreibende describe/it-Anweisungen für jeden Testfall schreiben

Beispiel 4: Code Review

.github/prompts/code-review.prompt.md

---
agent: 'agent'
description: 'Ein Code-Review durchführen'
---

Ausgewählter Code: ${selection}

Führe ein Code-Review aus folgenden Perspektiven durch:

## Review-Perspektiven
1. **Sicherheit**: Vorhandensein von Schwachstellen
2. **Performance**: Optimierungsmöglichkeiten
3. **Code-Qualität**: Lesbarkeit, Wartbarkeit
4. **Fehlerbehandlung**: Ordentliche Exception-Behandlung
5. **Testbarkeit**: Einfachheit des Testens
6. **Coding-Standards**: Einhaltung der Projektkonventionen

Verbesserungsvorschläge mit spezifischen Code-Beispielen liefern.

Verwendung von Prompt Files

  1. Über Befehlspalette: Chat: Run Prompt → Prompt auswählen
  2. In Chat-Eingabe: Mit Slash-Befehlen wie /create-react-component ausführen
  3. Aus Editor: Eine .prompt.md-Datei öffnen und auf die Play-Schaltfläche in der Titelleiste klicken

3. Agent Skills — Portable KI-Funktionserweiterungen

Agent Skills sind ein offener Standard, der gemeinsam in VS Code, GitHub Copilot CLI und dem Copilot-Coding-Agent verwendet werden kann.

Agent Skills-Struktur

.github/skills/
├── webapp-testing/
│   ├── SKILL.md
│   └── example-test.spec.ts
└── github-actions-debugging/
    ├── SKILL.md
    └── troubleshooting-guide.md

Beispiel 1: Playwright-Test-Generierung

.github/skills/webapp-testing/SKILL.md

---
name: webapp-testing
description: E2E-Tests mit Playwright generieren. Verwenden, wenn Benutzerinteraktionen getestet werden müssen.
---

# Web-Anwendungstests mit Playwright

Diese Skill unterstützt die Generierung von End-to-End (E2E)-Tests mit Playwright.

## Test-Generierungsregeln

1. **Selektor-Priorität**: 
   - `getByRole` priorisieren
   - Als nächstes `getByLabel`
   - Als letzten Ausweg `getByTestId`

2. **Test-Struktur**:
   - Jeder Test sollte unabhängig ausführbar sein
   - Ordentliches Setup/Teardown implementieren
   - Klare Assertions schreiben

3. **Best Practices**:
   - Page Object Model-Pattern verwenden
   - Waits werden implizit ausgeführt
   - Screenshots nur bei Fehlern aufnehmen

## Template-Beispiel

Tests basierend auf der folgenden example-test.spec.ts generieren.

```typescript
import { test, expect } from '@playwright/test';

test('user can log in successfully', async ({ page }) => {
  await page.goto('/login');
  
  await page.getByRole('textbox', { name: 'Email' }).fill('user@test.com');
  await page.getByRole('textbox', { name: 'Password' }).fill('password123');
  await page.getByRole('button', { name: 'Sign in' }).click();
  
  await expect(page).toHaveURL('/dashboard');
  await expect(page.getByRole('heading', { name: 'Welcome' })).toBeVisible();
});

### Agent Skills-Vorteile

- **Portabilität**: Gemeinsame Verwendung in VS Code, CLI und Coding-Agent
- **Kontextverständnis**: Copilot lädt automatisch relevante Skills
- **Team-Sharing**: Wissen durch Einschluss im Repository teilen
- **Offener Standard**: Konform mit [agentskills.io](https://agentskills.io)

---

## 4. Custom Agents — Rollenspezifische Assistenten

Custom Agents definieren Chat-Modi, die für spezifische Rollen oder Aufgaben spezialisiert sind.

### Beispiel 1: Planungs-Agent

`.github/agents/planner.md`

```markdown
---
name: 'planner'
description: 'Agent spezialisiert auf Planung vor der Implementierung'
tools:
  - 'search/codebase'
  - 'githubRepo'
toolsets:
  - 'read-only'
model: 'GPT-4o'
---

# Implementierungsplanungs-Agent

Sie sind ein Agent spezialisiert auf die Erstellung von Implementierungsplänen. Sie schreiben keinen Code, sondern erstellen nur Implementierungspläne.

## Verantwortlichkeiten

1. **Anforderungsanalyse**: Benutzeranforderungen detailliert analysieren
2. **Auswirkungsuntersuchung**: Dateien und Komponenten identifizieren, die geändert werden müssen
3. **Aufgabenzerlegung**: Implementierung in kleine Aufgaben aufteilen
4. **Risikoidentifizierung**: Potenzielle Probleme identifizieren

## Planformat

### 1. Übersicht
[Zweck der Implementierung und erwartete Ergebnisse]

### 2. Auswirkungsbereich
- Liste der Dateien, die Änderungen erfordern
- Betroffene Komponenten

### 3. Implementierungsschritte
1. [Details von Schritt 1]
   - Erforderliche Änderungen
   - Hinweise
2. [Details von Schritt 2]
   ...

### 4. Teststrategie
- Unit-Test-Ziele
- E2E-Test-Szenarien

### 5. Risiken und Gegenmaßnahmen
| Risiko | Gegenmaßnahme |
|--------|---------------|
| ...    | ...           |

Nach Planfreigabe an den Implementierungs-Agent übergeben.

Beispiel 2: Sicherheits-Review-Agent

.github/agents/security-reviewer.md

---
name: 'security-reviewer'
description: 'Agent, der Code aus Sicherheitsperspektive überprüft'
tools:
  - 'search/codebase'
model: 'Claude Sonnet 3.5'
---

# Sicherheits-Review-Agent

Sie sind ein Agent, der Code-Schwachstellen als Sicherheitsexperte erkennt.

## Review-Punkte

### 1. Authentifizierung & Autorisierung
- [ ] Ordentliche Authentifizierungsmechanismus-Implementierung
- [ ] Keine Autorisierungsprüfungs-Lecks
- [ ] Sitzungsverwaltungssicherheit

### 2. Eingabevalidierung
- [ ] Alle Benutzereingaben bereinigen
- [ ] SQL-Injection-Gegenmaßnahmen
- [ ] XSS-Gegenmaßnahmen
- [ ] CSRF-Gegenmaßnahmen

### 3. Datenschutz
- [ ] Keine hardcodierten sensiblen Informationen
- [ ] Ordentliche Verwendung von Verschlüsselung
- [ ] Keine sensiblen Informationen in Logs ausgegeben

### 4. Abhängigkeiten
- [ ] Verwendung von Paketen mit bekannten Schwachstellen
- [ ] Update auf neueste Versionen empfehlen

### 5. API-Sicherheit
- [ ] Rate-Limiting-Implementierung
- [ ] Ordentliche CORS-Konfiguration
- [ ] Sichere API-Schlüsselverwaltung

## Berichtsformat

Für jedes erkannte Problem berichten:
- **Schweregrad**: Kritisch / Hoch / Mittel / Niedrig
- **Beschreibung**: Was ist das Problem
- **Auswirkung**: Auswirkung bei Ausnutzung
- **Behebungsmethode**: Spezifische Code-Beispiele

Kritische/Hohe Schwachstellen erfordern sofortige Korrekturen.

5. MCP (Model Context Protocol) — Integration externer Dienste

MCP ist ein offener Standard für Copilot zur Integration mit externen Diensten wie Datenbanken und APIs.

MCP-Server-Konfiguration

Workspace-Konfiguration

.vscode/mcp.json

{
  "inputs": [
    {
      "type": "promptString",
      "id": "github-token",
      "description": "GitHub Personal Access Token",
      "password": true
    },
    {
      "type": "promptString",
      "id": "db-connection",
      "description": "Datenbankverbindungszeichenkette",
      "password": true
    }
  ],
  "servers": {
    "github-server": {
      "type": "http",
      "url": "https://github-mcp.com",
      "headers": {
        "Authorization": "Bearer ${input:github-token}"
      }
    },
    "database-server": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${input:db-connection}"
      }
    },
    "filesystem-server": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"]
    }
  }
}

Benutzer-Konfiguration

Global verwendete MCP-Server in settings.json definieren:

{
  "chat.mcp.servers": {
    "perplexity-search": {
      "type": "http",
      "url": "https://perplexity-mcp.com/api",
      "env": {
        "PERPLEXITY_API_KEY": "${env:PERPLEXITY_API_KEY}"
      }
    },
    "slack-integration": {
      "command": "docker",
      "args": ["run", "-i", "slack-mcp-server"],
      "env": {
        "SLACK_TOKEN": "${env:SLACK_BOT_TOKEN}"
      }
    }
  }
}

6. Praktisches Integrationsbeispiel

Anwendungsfall: Microservice-Entwicklungsprojekt

Verzeichnisstruktur

my-microservice/
├── .github/
│   ├── copilot-instructions.md          # Gesamte Entwicklungsstandards
│   ├── instructions/
│   │   ├── backend.instructions.md     # Backend-spezifisch
│   │   ├── frontend.instructions.md    # Frontend-spezifisch
│   │   └── infra.instructions.md       # Infrastruktur-spezifisch
│   ├── agents/
│   │   ├── planner.md                   # Planungs-Agent
│   │   ├── implementer.md              # Implementierungs-Agent
│   │   ├── reviewer.md                  # Review-Agent
│   │   └── deployer.md                  # Deployment-Agent
│   ├── skills/
│   │   ├── api-testing/
│   │   │   ├── SKILL.md
│   │   │   └── sample-api-test.ts
│   │   └── k8s-deployment/
│   │       ├── SKILL.md
│   │       └── deployment-template.yaml
│   └── prompts/
│       ├── create-service.prompt.md
│       ├── add-endpoint.prompt.md
│       └── generate-migration.prompt.md
└── .vscode/
    └── mcp.json                         # MCP-Konfiguration

Workflow-Beispiel

1. Neue Funktion planen

# Anfrage an @planner-Agent
Ich möchte Benutzerauthentifizierungsfunktionalität hinzufügen.
OAuth und JWT-Token-basierte Authentifizierung implementieren.

2. Implementierung delegieren

Nach Planfreigabe an Implementierungs-Agent übergeben:

# Mit @implementer-Agent implementieren
Basierend auf dem obigen Plan die Authentifizierungs-Middleware implementieren.

3. Tests automatisch generieren

# Prompt File verwenden
/generate-tests

4. Sicherheits-Review

# Mit @security-reviewer-Agent überprüfen
Führe ein Sicherheits-Review der implementierten Authentifizierungs-Middleware durch.

5. Deployment-Vorbereitung

# MCP + K8s Skill nutzen
@agent Deployment-Konfiguration für den Authentifizierungsservice mit kubernetes-skill generieren.

7. Language Models — Aufgabenspezifische Modellauswahl

Modellauswahlstrategie

In VS Code können Sie das optimale KI-Modell für jede Aufgabe auswählen. Hier sind Beispiele (beachten Sie, dass täglich neue Modelle veröffentlicht werden, sodass die folgenden Informationen veraltet sein können):

  • Für komplexe Architekturplanung und Code-Review: Leistungsstarke Reasoning-Modelle
  • Für schnelle Code-Generierung und einfache Aufgaben: Schnelle Budget-Modelle
  • Für Sicherheitsüberprüfungen: Modelle mit starker Folgeanweisungstreue

Zusammenfassung

GitHub Copilot-Anpassungsfunktionen in VS Code ermöglichen:

  1. Custom Instructions: Projektweite Coding-Standards definieren
  2. Prompt Files: Häufige Aufgaben templieren und teilen
  3. Agent Skills: Spezialisierte Workflows als wiederverwendbare Skills verpacken
  4. Custom Agents: Rollenspezifische KI-Assistenten erstellen
  5. MCP Server: Externe Dienste und Tools integrieren

Durch die Kombination dieser Funktionen können Sie eine Copilot-Umgebung schaffen, die perfekt auf Ihren Entwicklungsstil und Ihr Projekt zugeschnitten ist.