Cara Menggunakan Satu Agen AI di 10 IDE Berbeda

Ashley Innocent

Ashley Innocent

19 March 2026

Cara Menggunakan Satu Agen AI di 10 IDE Berbeda

Apidog untuk Perusahaan

Penerapan On-Premises

SSO & RBAC

Sesuai SOC 2

Jelajahi Apidog Enterprise

TL;DR

Konversi satu file agen AI ke 10 IDE dalam 3 langkah: (1) Uraikan YAML frontmatter dengan fungsi bash get_field(), get_body(), dan to_kebab(), (2) Transformasi ke format spesifik alat menggunakan convert.sh (Claude Code .md, Cursor .mdc, Aider CONVENTIONS.md, Windsurf .windsurfrules), (3) Instal ke jalur yang benar dengan install.sh. Tulis sekali, konversi otomatis, sebarkan di mana saja.

Satu file agen. Sepuluh IDE. Pelajari bagaimana proyek The Agency mengonversi satu file Markdown agar berfungsi di Claude Code, Cursor, Aider, Windsurf, GitHub Copilot, dan 6+ alat lainnya.

Anda menulis sebuah agen AI. Sekarang Anda ingin agen itu tersedia di:

Apakah Anda menulis 10 versi? Tidak. Anda menulis sekali, konversi otomatis.

Proyek The Agency menyelesaikan ini dengan dua skrip bash:

Dalam tutorial ini, Anda akan melakukan reverse-engineer pada kedua skrip. Anda akan belajar cara menguraikan YAML frontmatter, mengekstrak konten body, dan membangun pipeline konversi untuk alat apa pun.

💡
Baik Anda menyebarkan agen untuk alur kerja pengembangan API dengan integrasi Apidog atau membuat agen pengujian khusus, sistem konversi memastikan agen tersebut berfungsi di semua IDE pilihan tim Anda.
button

Format Agen

Setiap agen di The Agency menggunakan struktur yang sama:

---
name: API Tester
description: Khusus dalam pengujian API dengan Apidog, Postman, dan validasi otomatis
color: purple
emoji: 🧪
vibe: Merusak API sebelum pengguna melakukannya.
---

# Kepribadian Agen Penguji API

Anda adalah **Penguji API**, seorang ahli dalam validasi API...

## Identitas & Memori
- Peran: Spesialis pengujian API
- Kepribadian: Teliti, skeptis, berfokus pada bukti
...

File ini memiliki dua bagian:

  1. Frontmatter — Metadata YAML antara pembatas ---
  2. Body — Konten Markdown setelah --- kedua

Konversi berarti: mengekstrak bidang frontmatter, mengubah body ke format target, menulis ke jalur yang benar.

Langkah 1: Uraikan YAML Frontmatter

Buat parse-frontmatter.sh:

#!/usr/bin/env bash
#
# parse-frontmatter.sh — Mengekstrak bidang YAML frontmatter dari file agen
#

set -euo pipefail

# Mengekstrak nilai bidang tunggal dari YAML frontmatter
# Penggunaan: get_field <field> <file>
get_field() {
  local field="$1" file="$2"
  awk -v f="$field" '
    /^---$/ { fm++; next }
    fm == 1 && $0 ~ "^" f ": " {
      sub("^" f ": ", "");
      print;
      exit
    }
  ' "$file"
}

# Hapus frontmatter, kembalikan hanya body
# Penggunaan: get_body <file>
get_body() {
  awk 'BEGIN{fm=0} /^---$/{fm++; next} fm>=2{print}' "$1"
}

# Konversi nama ke slug kebab-case
# Penggunaan: to_kebab "Penguji API" → penguji-api
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 "File: $AGENT_FILE"
  echo "Nama: $(get_field 'name' "$AGENT_FILE")"
  echo "Deskripsi: $(get_field 'description' "$AGENT_FILE")"
  echo "Slug: $(to_kebab "$(get_field 'name' "$AGENT_FILE")")"
  echo "---"
  echo "Pratinjau Body:"
  get_body "$AGENT_FILE" | head -10
fi

Uji:

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

Output:

File: engineering-backend-architect.md
Nama: Backend Architect
Deskripsi: Arsitek backend senior yang berspesialisasi dalam desain sistem yang skalabel...
Slug: backend-architect
---
Pratinjau Body:
# Kepribadian Agen Arsitek Backend

Anda adalah **Arsitek Backend**, seorang arsitek backend senior...

Langkah 2: Konversi ke Format Claude Code

Claude Code menggunakan file .md mentah. Tidak perlu konversi — cukup salin:

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")"
}

Langkah 3: Konversi ke Format Cursor

Cursor menggunakan file .mdc dengan bidang frontmatter description:

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: Agen agensi: $description
---
$body
EOF

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

Input:

---
name: API Tester
description: Khusus dalam pengujian API...
---

# Agen Penguji API...

Output (.mdc):

---
description: Agen agensi: Khusus dalam pengujian API...
---

# Agen Penguji API...

Langkah 4: Konversi ke Format Aider

Aider menggunakan satu file CONVENTIONS.md yang berisi semua agen:

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

  # Tambahkan dengan pemisah
  echo "" >> "$output"
  echo "---" >> "$output"
  echo "" >> "$output"
  cat "$agent_file" >> "$output"

  echo "  Aider: ditambahkan ke $output"
}

Buat file lengkapnya:

build_aider() {
  local output="CONVENTIONS.md"
  echo "# Agen Agensi untuk Aider" > "$output"
  echo "" >> "$output"
  echo "File ini berisi semua agen Agensi untuk integrasi Aider." >> "$output"
  echo "" >> "$output"

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

Langkah 5: Konversi ke Format Windsurf

Windsurf menggunakan satu file .windsurfrules (mirip dengan Aider):

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

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

  echo "  Windsurf: ditambahkan ke $output"
}

Langkah 6: Konversi ke Format Antigravity

Antigravity (Gemini) menggunakan file SKILL.md di subdirektori:

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
# Agen Agensi: $name

$(get_body "$agent_file")
EOF

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

Langkah 7: Konversi ke Format OpenClaw

OpenClaw menggunakan tiga file per agen (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 - Definisi agen utama
  cat > "$output_dir/SOUL.md" << EOF
# $name

$description

---

$body
EOF

  # AGENTS.md - Kemampuan agen
  cat > "$output_dir/AGENTS.md" << EOF
# Kemampuan Agen: $name

- Keahlian khusus di domain
- Output berfokus pada hasil
- Metrik keberhasilan yang ditentukan

Lihat SOUL.md untuk definisi lengkap.
EOF

  # IDENTITY.md - Identitas agen
  cat > "$output_dir/IDENTITY.md" << EOF
# Identitas: $name

- Nama: $name
- Deskripsi: $description
- Sumber: The Agency (repo agen agensi)
EOF

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

Langkah 8: Skrip convert.sh Lengkap

Berikut adalah skrip konversi lengkap (disederhanakan):

#!/usr/bin/env bash
#
# convert.sh — Mengonversi semua agen Agensi ke format spesifik alat
#

set -euo pipefail

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

# Pembantu frontmatter
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'
}

# Fungsi konversi
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: Agen agensi: $(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"
}

# Loop konversi utama
echo "Mengonversi agen Agensi..."

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 "Memproses: $name"

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

# Membangun file gabungan
echo "# Agen Agensi untuk 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 "# Agen Agensi untuk 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 "Konversi selesai!"
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"

Jalankan:

chmod +x convert.sh
./convert.sh

Langkah 9: Instal ke Setiap Alat

Setelah konversi, salin file ke jalur spesifik alat:

#!/usr/bin/env bash
#
# install.sh — Menginstal agen yang dikonversi ke alat lokal Anda
#

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) agen terinstal"
}

# 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) aturan terinstal"
}

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

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

# Instal semua alat yang terdeteksi
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

Perbandingan Format

Alat Format Cakupan Konversi
Claude Code .md Seluruh pengguna (~/.claude/agents/) Salin apa adanya
Cursor .mdc Proyek (.cursor/rules/) Tambahkan frontmatter deskripsi
Aider CONVENTIONS.md Root proyek Gabungkan semua agen
Windsurf .windsurfrules Root proyek Gabungkan semua agen
GitHub Copilot .md Seluruh pengguna (~/.github/agents/) Salin apa adanya
Antigravity SKILL.md Seluruh pengguna (~/.gemini/antigravity/) Bungkus dalam direktori skill
OpenClaw SOUL.md + lainnya Seluruh pengguna (~/.openclaw/) Bagi menjadi 3 file
Gemini CLI Ekstensi Seluruh pengguna (~/.gemini/extensions/) Hasilkan manifes + skill
OpenCode .md Proyek (.opencode/agents/) Salin apa adanya
Qwen Code .md Proyek (.qwen/agents/) Salin sebagai SubAgen

Buat Skrip Konversi Anda Sendiri

Templat untuk menambahkan alat baru:

#!/usr/bin/env bash

# 1. Definisikan fungsi konversi
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. Buat jalur output
  local output="path/to/your/tool/agency-${slug}.ext"
  mkdir -p "$(dirname "$output")"

  # 3. Tulis konten yang dikonversi
  cat > "$output" << EOF
# Format spesifik alat Anda
# Gunakan: $name, $description, $body
EOF

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

# 4. Tambahkan ke loop utama
for agent_file in engineering/*.md; do
  convert_your_tool "$agent_file"
done

Apa yang Anda Bangun

Komponen Tujuan
get_field() Mengekstrak nilai-nilai YAML frontmatter
get_body() Menghilangkan frontmatter, mengembalikan body markdown
to_kebab() Mengonversi nama ke slug yang aman untuk URL
convert_cursor() Transformasi ke format .mdc
convert_aider() Menggabungkan ke satu file
convert_windsurf() Menggabungkan ke satu file
convert_antigravity() Membuat direktori skill
convert_openclaw() Memisahkan menjadi 3 file per agen
install.sh Menyalin ke jalur spesifik alat

Langkah Selanjutnya

Perluas skrip:

Tambahkan lebih banyak alat:

Optimalkan untuk repositori besar:

Memecahkan Masalah Umum

Skrip konversi gagal dengan "bad substitution":

Bidang frontmatter tidak diekstrak:

Pembuatan slug membuat nama yang rusak:

Aturan Cursor tidak dimuat:

Aider CONVENTIONS.md menjadi terlalu besar:

Optimasi Kinerja untuk Konversi Besar

Pemrosesan Paralel:

Untuk repositori dengan 100+ agen, gunakan GNU parallel:

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

export OUT_DIR="$REPO_ROOT/integrations"

# Ekspor fungsi untuk penggunaan paralel
export -f get_field get_body to_kebab convert_cursor convert_claude_code

# Temukan semua file agen dan proses secara paralel
find "$REPO_ROOT" -name "*.md" -type f | \
  parallel -j 8 --progress '
    name=$(get_field "name" {})
    slug=$(to_kebab "$name")
    echo "Mengonversi: $name"
    convert_cursor "{}"
    convert_claude_code "{}"
  '

echo "Konversi paralel selesai!"

Konversi Inkremental:

Hanya konversi file yang berubah:

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

CACHE_FILE="$REPO_ROOT/.conversion-cache"

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

# Proses setiap agen
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 "Berubah: $agent_file"
    convert_cursor "$agent_file"
    convert_claude_code "$agent_file"
    NEW_HASHES["$agent_file"]="$CURRENT_HASH"
  else
    echo "Tidak berubah: $agent_file"
  fi
done

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

Pelacakan Kemajuan:

Tambahkan kemajuan visual untuk konversi yang panjang:

#!/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))

  # Bilah kemajuan
  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"

Pertimbangan Keamanan untuk Agen Bersama

Memvalidasi Sumber Agen:

Saat mengunduh agen dari sumber eksternal:

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

validate_agent() {
  local file="$1"

  # Periksa bidang frontmatter yang diperlukan
  local name=$(get_field 'name' "$file")
  local description=$(get_field 'description' "$file")

  if [[ -z "$name" ]]; then
    echo "ERROR: Bidang 'name' tidak ada di $file"
    return 1
  fi

  if [[ -z "$description" ]]; then
    echo "PERINGATAN: Bidang 'description' tidak ada di $file"
  fi

  # Periksa pola berbahaya di body
  local body=$(get_body "$file")

  if echo "$body" | grep -q 'rm -rf\|curl.*\|wget.*\|eval\|exec'; then
    echo "PERINGATAN: Pola yang berpotensi berbahaya di $file"
    return 1
  fi

  echo "VALID: $name"
  return 0
}

Melakukan Sandboxing Eksekusi Agen:

Untuk agen yang tidak terpercaya, jalankan di lingkungan terisolasi:

Satu file agen. Sepuluh IDE. Dua skrip bash.

Itulah kekuatan otomatisasi konversi. Tulis sekali, konversi otomatis, instal di mana saja.

Giliran Anda: tambahkan dukungan konversi untuk alat AI favorit Anda. Bagikan skripnya. Buat agen mudah dibawa.

Poin-Poin Penting

button

FAQ

Apa itu convert.sh dan bagaimana cara kerjanya? convert.sh adalah skrip bash yang menguraikan YAML frontmatter dari file Markdown agen, mengekstrak konten body, dan mengubah setiap agen ke format spesifik alat. Ia menggunakan awk untuk penguraian, sed untuk konversi slug, dan heredoc untuk pembuatan output.

Bagaimana cara kerja penguraian frontmatter di bash? Fungsi get_field() menggunakan awk untuk melacak pembatas frontmatter (---), menemukan baris yang cocok dengan nama bidang, dan mengekstrak nilainya. get_body() mencetak semua baris setelah pembatas --- kedua.

IDE dan alat apa saja yang didukung? Claude Code (.md), Cursor (.mdc), Aider (CONVENTIONS.md), Windsurf (.windsurfrules), GitHub Copilot (.md), Antigravity (SKILL.md), OpenClaw (SOUL.md + 2 file), ekstensi Gemini CLI, OpenCode, dan Qwen Code.

Bagaimana cara menambahkan dukungan konversi untuk alat baru? Buat fungsi convert_yourtool() yang mengekstrak bidang frontmatter, mengubah body ke format alat Anda, dan menulis ke jalur yang benar. Tambahkan panggilan fungsi ke loop konversi utama.

Bisakah saya menjalankan konversi secara paralel untuk pemrosesan yang lebih cepat? Ya. Gunakan xargs -P atau GNU parallel untuk memproses beberapa file agen secara bersamaan. Untuk 100+ agen, konversi paralel dapat mengurangi waktu eksekusi dari menit menjadi detik.

Bagaimana cara memvalidasi bahwa bidang frontmatter ada? Tambahkan pemeriksaan validasi dalam fungsi konversi Anda: [[ -z "$name" ]] && echo "Bidang nama tidak ada" && exit 1. Jalankan validasi sebelum menulis file output.

Bagaimana jika konversi gagal untuk beberapa agen? Gunakan set -euo pipefail untuk gagal cepat pada kesalahan. Tambahkan penanganan kesalahan dengan || continue untuk melewati file yang rusak. Catat kegagalan ke file terpisah untuk debugging.

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.

Cara Menggunakan Satu Agen AI di 10 IDE Berbeda