KI Agent für 10 IDEs: So geht die Umwandlung

Ashley Innocent

Ashley Innocent

19 March 2026

KI Agent für 10 IDEs: So geht die Umwandlung

enterprise.banner.title

enterprise.banner.feature1

enterprise.banner.feature2

enterprise.banner.feature3

enterprise.banner.ctaB

Kurz gesagt

Eine KI-Agenten-Datei in 3 Schritten in 10 IDEs konvertieren: (1) YAML-Frontmatter mit den Bash-Funktionen get_field(), get_body() und to_kebab() parsen, (2) mit convert.sh in werkzeugspezifische Formate umwandeln (Claude Code .md, Cursor .mdc, Aider CONVENTIONS.md, Windsurf .windsurfrules), (3) mit install.sh in die richtigen Pfade installieren. Einmal schreiben, automatisch konvertieren, überall bereitstellen.

Eine Agenten-Datei. Zehn IDEs. Erfahren Sie, wie das Agency-Projekt eine einzelne Markdown-Datei so konvertiert, dass sie über Claude Code, Cursor, Aider, Windsurf, GitHub Copilot und 6+ weitere Tools hinweg funktioniert.

Sie schreiben einen KI-Agenten. Jetzt möchten Sie ihn verfügbar machen in:

Schreiben Sie 10 Versionen? Nein. Sie schreiben einmal, konvertieren automatisch.

Das Agency-Projekt löst dies mit zwei Bash-Skripten:

In diesem Tutorial werden Sie beide Skripte analysieren und nachvollziehen. Sie lernen, wie man YAML-Frontmatter parst, den Hauptinhalt extrahiert und Konvertierungs-Pipelines für jedes Tool erstellt.

💡
Ganz gleich, ob Sie Agenten für API-Entwicklungsworkflows mit Apidog-Integration bereitstellen oder spezialisierte Test-Agenten erstellen, das Konvertierungssystem stellt sicher, dass sie in allen bevorzugten IDEs Ihres Teams funktionieren.
button

Das Agentenformat

Jeder Agent in The Agency verwendet die gleiche Struktur:

---
name: API Tester
description: Specialized in API testing with Apidog, Postman, and automated validation
color: purple
emoji: 🧪
vibe: Breaks APIs before users do.
---

# API Tester Agent Personality

You are **API Tester**, an expert in API validation...

## Identity & Memory
- Role: API testing specialist
- Personality: Thorough, skeptical, evidence-focused
...

Die Datei hat zwei Teile:

  1. Frontmatter — YAML-Metadaten zwischen den ----Trennzeichen
  2. Hauptteil — Markdown-Inhalt nach dem zweiten ---

Konvertierung bedeutet: Frontmatter-Felder extrahieren, den Hauptteil in das Zielformat umwandeln, in den richtigen Pfad schreiben.

Schritt 1: YAML-Frontmatter parsen

Erstellen Sie parse-frontmatter.sh:

#!/usr/bin/env bash
#
# parse-frontmatter.sh — Extrahiert YAML-Frontmatter-Felder aus Agenten-Dateien
#

set -euo pipefail

# Extrahiert einen einzelnen Feldwert aus dem YAML-Frontmatter
# Verwendung: get_field <Feld> <Datei>
get_field() {
  local field="$1" file="$2"
  awk -v f="$field" '
    /^---$/ { fm++; next }
    fm == 1 && $0 ~ "^" f ": " {
      sub("^" f ": ", "");
      print;
      exit
    }
  ' "$file"
}

# Entfernt Frontmatter, gibt nur den Hauptteil zurück
# Verwendung: get_body <Datei>
get_body() {
  awk 'BEGIN{fm=0} /^---$/{fm++; next} fm>=2{print}' "$1"
}

# Konvertiert Namen in kebab-case-Slug
# Verwendung: to_kebab "API Tester" → api-tester
to_kebab() {
  echo "$1" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g'
}

# Demo
if [[ "${1:-}" == "--demo" ]]; then
  AGENT_FILE="${2:-test-agent.md}"
  echo "Datei: $AGENT_FILE"
  echo "Name: $(get_field 'name' "$AGENT_FILE")"
  echo "Beschreibung: $(get_field 'description' "$AGENT_FILE")"
  echo "Slug: $(to_kebab "$(get_field 'name' "$AGENT_FILE")")"
  echo "---"
  echo "Vorschau Hauptteil:"
  get_body "$AGENT_FILE" | head -10
fi

Testen Sie es:

chmod +x parse-frontmatter.sh
./parse-frontmatter.sh --demo engineering-backend-architect.md

Ausgabe:

Datei: engineering-backend-architect.md
Name: Backend Architect
Beschreibung: Senior backend architect specializing in scalable system design...
Slug: backend-architect
---
Vorschau Hauptteil:
# Backend Architect Agent Personality

You are **Backend Architect**, a senior backend architect...

Schritt 2: In Claude Code-Format konvertieren

Claude Code verwendet reine .md-Dateien. Keine Konvertierung nötig – einfach kopieren:

convert_claude_code() {
  local agent_file="$1"
  local dest="$HOME/.claude/agents/"
  mkdir -p "$dest"
  cp "$agent_file" "$dest/"
  echo "  Claude Code: $(basename "$agent_file")"
}

Schritt 3: In Cursor-Format konvertieren

Cursor verwendet .mdc-Dateien mit einem Frontmatter-Feld für die Beschreibung:

convert_cursor() {
  local agent_file="$1"
  local name=$(get_field 'name' "$agent_file")
  local description=$(get_field 'description' "$agent_file")
  local slug=$(to_kebab "$name")
  local body=$(get_body "$agent_file")

  local output=".cursor/rules/agency-${slug}.mdc"
  mkdir -p "$(dirname "$output")"

  cat > "$output" << EOF
---
description: Agency agent: $description
---
$body
EOF

  echo "  Cursor: agency-${slug}.mdc"
}

Eingabe:

---
name: API Tester
description: Specialized in API testing...
---

# API Tester Agent...

Ausgabe (.mdc):

---
description: Agency agent: Specialized in API testing...
---

# API Tester Agent...

Schritt 4: In Aider-Format konvertieren

Aider verwendet eine einzelne CONVENTIONS.md-Datei, die alle Agenten enthält:

convert_aider() {
  local agent_file="$1"
  local output="CONVENTIONS.md"

  # Mit Trennzeichen anhängen
  echo "" >> "$output"
  echo "---" >> "$output"
  echo "" >> "$output"
  cat "$agent_file" >> "$output"

  echo "  Aider: angehängt an $output"
}

Die vollständige Datei erstellen:

build_aider() {
  local output="CONVENTIONS.md"
  echo "# Agency-Agenten für Aider" > "$output"
  echo "" >> "$output"
  echo "Diese Datei enthält alle Agency-Agenten für die Aider-Integration." >> "$output"
  echo "" >> "$output"

  for agent_file in engineering/*.md design/*.md testing/*.md; do
    convert_aider "$agent_file"
  done
}

Schritt 5: In Windsurf-Format konvertieren

Windsurf verwendet eine einzelne .windsurfrules-Datei (ähnlich wie Aider):

convert_windsurf() {
  local agent_file="$1"
  local output=".windsurfrules"

  echo "" >> "$output"
  echo "---" >> "$output"
  echo "" >> "$output"
  cat "$agent_file" >> "$output"

  echo "  Windsurf: angehängt an $output"
}

Schritt 6: In Antigravity-Format konvertieren

Antigravity (Gemini) verwendet SKILL.md-Dateien in Unterverzeichnissen:

convert_antigravity() {
  local agent_file="$1"
  local name=$(get_field 'name' "$agent_file")
  local slug=$(to_kebab "$name")
  local output="integrations/antigravity/skills/agency-${slug}/SKILL.md"

  mkdir -p "$(dirname "$output")"

  cat > "$output" << EOF
# Agency Agent: $name

$(get_body "$agent_file")
EOF

  echo "  Antigravity: agency-${slug}/SKILL.md"
}

Schritt 7: In OpenClaw-Format konvertieren

OpenClaw verwendet drei Dateien pro Agent (SOUL.md, AGENTS.md, IDENTITY.md):

convert_openclaw() {
  local agent_file="$1"
  local name=$(get_field 'name' "$agent_file")
  local description=$(get_field 'description' "$agent_file")
  local slug=$(to_kebab "$name")
  local body=$(get_body "$agent_file")

  local output_dir="integrations/openclaw/agency-${slug}"
  mkdir -p "$output_dir"

  # SOUL.md - Hauptdefinition des Agenten
  cat > "$output_dir/SOUL.md" << EOF
# $name

$description

---

$body
EOF

  # AGENTS.md - Agentenfähigkeiten
  cat > "$output_dir/AGENTS.md" << EOF
# Agentenfähigkeiten: $name

- Spezialisiertes Fachwissen im Bereich
- Ergebnisorientierte Ausgabe
- Erfolgsmetriken definiert

Siehe SOUL.md für die vollständige Definition.
EOF

  # IDENTITY.md - Agentenidentität
  cat > "$output_dir/IDENTITY.md" << EOF
# Identität: $name

- Name: $name
- Beschreibung: $description
- Quelle: The Agency (agency-agents Repo)
EOF

  echo "  OpenClaw: agency-${slug}/"
}

Schritt 8: Das vollständige convert.sh-Skript

Hier ist das vollständige Konvertierungsskript (vereinfacht):

#!/usr/bin/env bash
#
# convert.sh — Alle Agency-Agenten in werkzeugspezifische Formate konvertieren
#

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
OUT_DIR="$REPO_ROOT/integrations"

# Frontmatter-Helfer
get_field() {
  local field="$1" file="$2"
  awk -v f="$field" '
    /^---$/ { fm++; next }
    fm == 1 && $0 ~ "^" f ": " { sub("^" f ": ", ""); print; exit }
  ' "$file"
}

get_body() {
  awk 'BEGIN{fm=0} /^---$/{fm++; next} fm>=2{print}' "$1"
}

to_kebab() {
  echo "$1" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g'
}

# Konvertierungsfunktionen
convert_claude_code() {
  local agent_file="$1"
  local dest="$OUT_DIR/claude-code/"
  mkdir -p "$dest"
  cp "$agent_file" "$dest/"
}

convert_cursor() {
  local agent_file="$1"
  local name=$(get_field 'name' "$agent_file")
  local slug=$(to_kebab "$name")
  local body=$(get_body "$agent_file")

  mkdir -p "$OUT_DIR/cursor/.cursor/rules/"
  cat > "$OUT_DIR/cursor/.cursor/rules/agency-${slug}.mdc" << EOF
---
description: Agency agent: $(get_field 'description' "$agent_file")
---
$body
EOF
}

convert_aider() {
  local output="$OUT_DIR/aider/CONVENTIONS.md"
  echo "" >> "$output"
  echo "---" >> "$output"
  cat "$agent_file" >> "$output"
}

convert_windsurf() {
  local output="$OUT_DIR/windsurf/.windsurfrules"
  echo "" >> "$output"
  echo "---" >> "$output"
  cat "$agent_file" >> "$output"
}

# Hauptkonvertierungsschleife
echo "Agency-Agenten werden konvertiert..."

AGENT_DIRS=(engineering design testing marketing sales)

for dir in "${AGENT_DIRS[@]}"; do
  for agent_file in "$REPO_ROOT/$dir"/*.md; do
    [[ -f "$agent_file" ]] || continue

    name=$(get_field 'name' "$agent_file")
    echo "Verarbeite: $name"

    convert_claude_code "$agent_file"
    convert_cursor "$agent_file"
  done
done

# Kombinierte Dateien erstellen
echo "# Agency-Agenten für Aider" > "$OUT_DIR/aider/CONVENTIONS.md"
for dir in "${AGENT_DIRS[@]}"; do
  for agent_file in "$REPO_ROOT/$dir"/*.md; do
    [[ -f "$agent_file" ]] || continue
    convert_aider "$agent_file"
  done
done

echo "# Agency-Agenten für Windsurf" > "$OUT_DIR/windsurf/.windsurfrules"
for dir in "${AGENT_DIRS[@]}"; do
  for agent_file in "$REPO_ROOT/$dir"/*.md; do
    [[ -f "$agent_file" ]] || continue
    convert_windsurf "$agent_file"
  done
done

echo "Konvertierung abgeschlossen!"
echo "  Claude Code: $OUT_DIR/claude-code/"
echo "  Cursor: $OUT_DIR/cursor/.cursor/rules/"
echo "  Aider: $OUT_DIR/aider/CONVENTIONS.md"
echo "  Windsurf: $OUT_DIR/windsurf/.windsurfrules"

Ausführen:

chmod +x convert.sh
./convert.sh

Schritt 9: In jedem Tool installieren

Nach der Konvertierung die Dateien in werkzeugspezifische Pfade kopieren:

#!/usr/bin/env bash
#
# install.sh — Installiert konvertierte Agenten in Ihren lokalen Tools
#

set -euo pipefail

# Claude Code
install_claude_code() {
  local src="$REPO_ROOT/integrations/claude-code/"
  local dest="$HOME/.claude/agents/"
  mkdir -p "$dest"
  cp "$src"/*.md "$dest/"
  echo "Claude Code: $(find "$dest" -name '*.md' | wc -l) Agenten installiert"
}

# Cursor
install_cursor() {
  local src="$REPO_ROOT/integrations/cursor/.cursor/rules/"
  local dest="./.cursor/rules/"
  mkdir -p "$dest"
  cp "$src"/*.mdc "$dest/"
  echo "Cursor: $(find "$dest" -name '*.mdc' | wc -l) Regeln installiert"
}

# Aider
install_aider() {
  local src="$REPO_ROOT/integrations/aider/CONVENTIONS.md"
  local dest="./CONVENTIONS.md"
  cp "$src" "$dest"
  echo "Aider: CONVENTIONS.md installiert"
}

# Windsurf
install_windsurf() {
  local src="$REPO_ROOT/integrations/windsurf/.windsurfrules"
  local dest="./.windsurfrules"
  cp "$src" "$dest"
  echo "Windsurf: .windsurfrules installiert"
}

# Alle erkannten Tools installieren
install_all() {
  if [[ -d "$HOME/.claude/agents/" ]]; then
    install_claude_code
  fi
  if command -v cursor &>/dev/null || [[ -d "./.cursor/" ]]; then
    install_cursor
  fi
  if command -v aider &>/dev/null; then
    install_aider
  fi
}

install_all

Formatvergleich

Tool Format Umfang Konvertierung
Claude Code .md Benutzerweit (~/.claude/agents/) Unverändert kopieren
Cursor .mdc Projekt (.cursor/rules/) Beschreibung als Frontmatter hinzufügen
Aider CONVENTIONS.md Projekt-Stammverzeichnis Alle Agenten verketten
Windsurf .windsurfrules Projekt-Stammverzeichnis Alle Agenten verketten
GitHub Copilot .md Benutzerweit (~/.github/agents/) Unverändert kopieren
Antigravity SKILL.md Benutzerweit (~/.gemini/antigravity/) In Skill-Verzeichnis verpacken
OpenClaw SOUL.md + andere Benutzerweit (~/.openclaw/) In 3 Dateien aufteilen
Gemini CLI Erweiterung Benutzerweit (~/.gemini/extensions/) Manifest + Skills generieren
OpenCode .md Projekt (.opencode/agents/) Unverändert kopieren
Qwen Code .md Projekt (.qwen/agents/) Als SubAgent kopieren

Erstellen Sie Ihr eigenes Konvertierungsskript

Vorlage zum Hinzufügen eines neuen Tools:

#!/usr/bin/env bash

# 1. Konvertierungsfunktion definieren
convert_your_tool() {
  local agent_file="$1"
  local name=$(get_field 'name' "$agent_file")
  local description=$(get_field 'description' "$agent_file")
  local slug=$(to_kebab "$name")
  local body=$(get_body "$agent_file")

  # 2. Ausgabepfad erstellen
  local output="path/to/your/tool/agency-${slug}.ext"
  mkdir -p "$(dirname "$output")"

  # 3. Konvertierten Inhalt schreiben
  cat > "$output" << EOF
# Ihr werkzeugspezifisches Format
# Verwenden Sie: $name, $description, $body
EOF

  echo "  IhrTool: agency-${slug}.ext"
}

# 4. Zur Hauptschleife hinzufügen
for agent_file in engineering/*.md; do
  convert_your_tool "$agent_file"
done

Was Sie erstellt haben

Komponente Zweck
get_field() YAML-Frontmatter-Werte extrahieren
get_body() Frontmatter entfernen, Markdown-Hauptteil zurückgeben
to_kebab() Namen in URL-sichere Slugs konvertieren
convert_cursor() In .mdc-Format umwandeln
convert_aider() In einer einzigen Datei verketten
convert_windsurf() In einer einzigen Datei verketten
convert_antigravity() Skill-Verzeichnisse erstellen
convert_openclaw() In 3 Dateien pro Agent aufteilen
install.sh An werkzeugspezifische Pfade kopieren

Nächste Schritte

Die Skripte erweitern:

Weitere Tools hinzufügen:

Für große Repos optimieren:

Fehlerbehebung bei häufigen Problemen

Konvertierungsskript schlägt fehl mit „bad substitution“:

Frontmatter-Felder werden nicht extrahiert:

Slug-Generierung erzeugt fehlerhafte Namen:

Cursor-Regeln werden nicht geladen:

Aider CONVENTIONS.md wird zu groß:

Leistungsoptimierung für große Konvertierungen

Parallele Verarbeitung:

Für Repositories mit über 100 Agenten GNU parallel verwenden:

#!/usr/bin/env bash
# convert-parallel.sh

export OUT_DIR="$REPO_ROOT/integrations"

# Funktionen für die parallele Nutzung exportieren
export -f get_field get_body to_kebab convert_cursor convert_claude_code

# Alle Agenten-Dateien finden und parallel verarbeiten
find "$REPO_ROOT" -name "*.md" -type f | \
  parallel -j 8 --progress '
    name=$(get_field "name" {})
    slug=$(to_kebab "$name")
    echo "Konvertiere: $name"
    convert_cursor "{}"
    convert_claude_code "{}"
  '

echo "Parallele Konvertierung abgeschlossen!"

Inkrementelle Konvertierung:

Nur geänderte Dateien konvertieren:

#!/usr/bin/env bash
# convert-incremental.sh

CACHE_FILE="$REPO_ROOT/.conversion-cache"

# Vorherigen Zustand laden
declare -A PREV_HASHES
if [[ -f "$CACHE_FILE" ]]; then
  while IFS='=' read -r file hash; do
    PREV_HASHES["$file"]="$hash"
  done < "$CACHE_FILE"
fi

# Jeden Agenten verarbeiten
for agent_file in engineering/*.md; do
  CURRENT_HASH=$(md5sum "$agent_file" | cut -d' ' -f1)
  PREV_HASH="${PREV_HASHES[$agent_file]:-}"

  if [[ "$CURRENT_HASH" != "$PREV_HASH" ]]; then
    echo "Geändert: $agent_file"
    convert_cursor "$agent_file"
    convert_claude_code "$agent_file"
    NEW_HASHES["$agent_file"]="$CURRENT_HASH"
  else
    echo "Unverändert: $agent_file"
  fi
done

# Cache speichern
for file in "${!NEW_HASHES[@]}"; do
  echo "$file=${NEW_HASHES[$file]}"
done > "$CACHE_FILE"

Fortschrittsverfolgung:

Visuellen Fortschritt für lange Konvertierungen hinzufügen:

#!/usr/bin/env bash

total_files=$(find "$REPO_ROOT" -name "*.md" -type f | wc -l)
current=0

for agent_file in "$REPO_ROOT"/**/*.md; do
  ((current++))
  percent=$((current * 100 / total_files))

  # Fortschrittsbalken
  filled=$((percent / 5))
  empty=$((20 - filled))
  bar=$(printf '%*s' "$filled" | tr ' ' '#')
  spaces=$(printf '%*s' "$empty" | tr ' ' ' ')

  name=$(get_field 'name' "$agent_file")
  echo -ne "\r[${bar}${spaces}] ${percent}% - $name"

  convert_cursor "$agent_file"
done

echo -ne "\n"

Sicherheitsaspekte für geteilte Agenten

Validierung von Agentenquellen:

Beim Herunterladen von Agenten aus externen Quellen:

#!/usr/bin/env bash
# validate-agent.sh

validate_agent() {
  local file="$1"

  # Erforderliche Frontmatter-Felder prüfen
  local name=$(get_field 'name' "$file")
  local description=$(get_field 'description' "$file")

  if [[ -z "$name" ]]; then
    echo "FEHLER: 'name'-Feld fehlt in $file"
    return 1
  fi

  if [[ -z "$description" ]]; then
    echo "WARNUNG: 'description'-Feld fehlt in $file"
  fi

  # Auf bösartige Muster im Hauptteil prüfen
  local body=$(get_body "$file")

  if echo "$body" | grep -q 'rm -rf\|curl.*\|wget.*\|eval\|exec'; then
    echo "WARNUNG: Potenziell gefährliche Muster in $file"
    return 1
  fi

  echo "GÜLTIG: $name"
  return 0
}

Sandboxing der Agenten-Ausführung:

Für nicht vertrauenswürdige Agenten in isolierten Umgebungen ausführen:

Eine Agenten-Datei. Zehn IDEs. Zwei Bash-Skripte.

Das ist die Stärke der Konvertierungsautomatisierung. Einmal schreiben, automatisch konvertieren, überall installieren.

Sie sind dran: Fügen Sie Konvertierungsunterstützung für Ihr bevorzugtes KI-Tool hinzu. Teilen Sie das Skript. Machen Sie Agenten portabel.

Wichtigste Erkenntnisse

button

Häufig gestellte Fragen (FAQ)

Was ist convert.sh und wie funktioniert es? convert.sh ist ein Bash-Skript, das YAML-Frontmatter aus Markdown-Dateien von Agenten parst, den Hauptinhalt extrahiert und jeden Agenten in werkzeugspezifische Formate umwandelt. Es verwendet awk zum Parsen, sed zur Slug-Konvertierung und Heredocs zur Ausgabegenerierung.

Wie funktioniert das Parsen von Frontmatter in Bash? Die Funktion get_field() verwendet awk, um Frontmatter-Trennzeichen (---) zu verfolgen, die Zeile zu finden, die dem Feldnamen entspricht, und den Wert zu extrahieren. get_body() gibt alle Zeilen nach dem zweiten ----Trennzeichen aus.

Welche IDEs und Tools werden unterstützt? Claude Code (.md), Cursor (.mdc), Aider (CONVENTIONS.md), Windsurf (.windsurfrules), GitHub Copilot (.md), Antigravity (SKILL.md), OpenClaw (SOUL.md + 2 Dateien), Gemini CLI-Erweiterungen, OpenCode und Qwen Code.

Wie füge ich Konvertierungsunterstützung für ein neues Tool hinzu? Erstellen Sie eine Funktion convert_yourtool(), die Frontmatter-Felder extrahiert, den Hauptteil in das Format Ihres Tools umwandelt und in den richtigen Pfad schreibt. Fügen Sie den Funktionsaufruf zur Hauptkonvertierungsschleife hinzu.

Kann ich Konvertierungen parallel ausführen, um die Verarbeitung zu beschleunigen? Ja. Verwenden Sie xargs -P oder GNU parallel, um mehrere Agenten-Dateien gleichzeitig zu verarbeiten. Bei über 100 Agenten kann die parallele Konvertierung die Laufzeit von Minuten auf Sekunden reduzieren.

Wie überprüfe ich, ob Frontmatter-Felder existieren? Fügen Sie Validierungsprüfungen in Ihrer Konvertierungsfunktion hinzu: [[ -z "$name" ]] && echo "Missing name field" && exit 1. Führen Sie die Validierung durch, bevor Sie Ausgabedateien schreiben.

Was passiert, wenn die Konvertierung für einige Agenten fehlschlägt? Verwenden Sie set -euo pipefail, um bei Fehlern schnell abzubrechen. Fügen Sie Fehlerbehandlung mit || continue hinzu, um fehlerhafte Dateien zu überspringen. Protokollieren Sie Fehler zur Fehlerbehebung in einer separaten Datei.

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen

KI Agent für 10 IDEs: So geht die Umwandlung