كيفية تحويل وكيل ذكاء اصطناعي واحد للعمل في 10 بيئات تطوير متكاملة مختلفة

Ashley Innocent

Ashley Innocent

19 مارس 2026

كيفية تحويل وكيل ذكاء اصطناعي واحد للعمل في 10 بيئات تطوير متكاملة مختلفة

Apidog للمؤسسات

نشر محلي

SSO & RBAC

متوافق مع SOC 2

استكشاف Apidog Enterprise

ملخص سريع

حوّل ملف وكيل ذكاء اصطناعي واحدًا إلى 10 بيئات تطوير متكاملة (IDEs) في 3 خطوات: (1) حلل مقدمة YAML باستخدام دوال باش get_field() و get_body() و to_kebab()، (2) حوّل إلى تنسيقات خاصة بالأداة باستخدام convert.sh (كلود كود .md، كيرسور .mdc، آيدر CONVENTIONS.md، ويندسيرف .windsurfrules)، (3) ثبّت في المسارات الصحيحة باستخدام install.sh. اكتب مرة واحدة، وحوّل تلقائيًا، وانشر في كل مكان.

ملف وكيل واحد. عشر بيئات تطوير متكاملة (IDEs). تعلم كيف يحوّل مشروع "The Agency" ملف Markdown واحدًا ليعمل عبر كلود كود، كيرسور، آيدر، ويندسيرف، جيت هاب كوبايلوت، و6+ أدوات أخرى.

لقد كتبت وكيل ذكاء اصطناعي. الآن تريد أن يكون متاحًا في:

هل تكتب 10 إصدارات؟ لا. أنت تكتب مرة واحدة، وتحوّل تلقائيًا.

يحل مشروع "The Agency" هذه المشكلة باستخدام نصين برمجيين من باش:

في هذا البرنامج التعليمي، ستقوم بالهندسة العكسية لكل من النصين البرمجيين. ستتعلم كيفية تحليل مقدمة YAML، واستخراج محتوى النص الأساسي، وبناء مسارات تحويل لأي أداة.

💡
سواء كنت تقوم بنشر وكلاء لسير عمل تطوير API مع تكامل Apidog أو إنشاء وكلاء اختبار متخصصين، يضمن نظام التحويل عملهم عبر جميع بيئات التطوير المتكاملة (IDEs) المفضلة لفريقك.
button

تنسيق الوكيل

يستخدم كل وكيل في "The Agency" نفس الهيكل:

---
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
...

الملف له جزءان:

  1. المقدمة (Frontmatter) — بيانات YAML الوصفية بين محددات ---
  2. النص الأساسي (Body) — محتوى Markdown بعد علامة --- الثانية

التحويل يعني: استخراج حقول المقدمة، تحويل النص الأساسي إلى التنسيق المستهدف، الكتابة إلى المسار الصحيح.

الخطوة 1: تحليل مقدمة YAML

أنشئ الملف parse-frontmatter.sh:

#!/usr/bin/env bash
#
# parse-frontmatter.sh — Extract YAML frontmatter fields from agent files
#

set -euo pipefail

# Extract a single field value from YAML frontmatter
# Usage: 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"
}

# Strip frontmatter, return only body
# Usage: get_body <file>
get_body() {
  awk 'BEGIN{fm=0} /^---$/{fm++; next} fm>=2{print}' "$1"
}

# Convert name to kebab-case slug
# Usage: 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 "File: $AGENT_FILE"
  echo "Name: $(get_field 'name' "$AGENT_FILE")"
  echo "Description: $(get_field 'description' "$AGENT_FILE")"
  echo "Slug: $(to_kebab "$(get_field 'name' "$AGENT_FILE")")"
  echo "---"
  echo "Body preview:"
  get_body "$AGENT_FILE" | head -10
fi

اختبره:

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

الناتج:

File: engineering-backend-architect.md
Name: Backend Architect
Description: Senior backend architect specializing in scalable system design...
Slug: backend-architect
---
Body preview:
# Backend Architect Agent Personality

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

الخطوة 2: التحويل إلى تنسيق كلود كود

يستخدم كلود كود ملفات .md خام. لا حاجة للتحويل — فقط انسخ:

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

الخطوة 3: التحويل إلى تنسيق كيرسور

يستخدم كيرسور ملفات .mdc مع حقل 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: Agency agent: $description
---
$body
EOF

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

الإدخال:

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

# API Tester Agent...

الناتج (.mdc):

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

# API Tester Agent...

الخطوة 4: التحويل إلى تنسيق آيدر

يستخدم آيدر ملف CONVENTIONS.md واحدًا يحتوي على جميع الوكلاء:

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

  # Append with separator
  echo "" >> "$output"
  echo "---" >> "$output"
  echo "" >> "$output"
  cat "$agent_file" >> "$output"

  echo "  Aider: appended to $output"
}

قم ببناء الملف بالكامل:

build_aider() {
  local output="CONVENTIONS.md"
  echo "# Agency Agents for Aider" > "$output"
  echo "" >> "$output"
  echo "This file contains all Agency agents for Aider integration." >> "$output"
  echo "" >> "$output"

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

الخطوة 5: التحويل إلى تنسيق ويندسيرف

يستخدم ويندسيرف ملف .windsurfrules واحدًا (مشابه لـ آيدر):

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

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

  echo "  Windsurf: appended to $output"
}

الخطوة 6: التحويل إلى تنسيق أنتيجرافيتي

يستخدم أنتيجرافيتي (جيميني) ملفات SKILL.md في مجلدات فرعية:

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

الخطوة 7: التحويل إلى تنسيق أوبن كلو

يستخدم أوبن كلو ثلاثة ملفات لكل وكيل (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 - Main agent definition
  cat > "$output_dir/SOUL.md" << EOF
# $name

$description

---

$body
EOF

  # AGENTS.md - Agent capabilities
  cat > "$output_dir/AGENTS.md" << EOF
# Agent Capabilities: $name

- Specialized expertise in domain
- Deliverable-focused output
- Success metrics defined

See SOUL.md for full definition.
EOF

  # IDENTITY.md - Agent identity
  cat > "$output_dir/IDENTITY.md" << EOF
# Identity: $name

- Name: $name
- Description: $description
- Source: The Agency (agency-agents repo)
EOF

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

الخطوة 8: النص البرمجي convert.sh الكامل

إليك النص البرمجي الكامل للتحويل (مبسط):

#!/usr/bin/env bash
#
# convert.sh — Convert all Agency agents to tool-specific formats
#

set -euo pipefail

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

# Frontmatter helpers
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'
}

# Conversion functions
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"
}

# Main conversion loop
echo "Converting Agency agents..."

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

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

# Build combined files
echo "# Agency Agents for 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 Agents for 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 "Conversion complete!"
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"

شغّله:

chmod +x convert.sh
./convert.sh

الخطوة 9: التثبيت لكل أداة

بعد التحويل، انسخ الملفات إلى المسارات الخاصة بالأداة:

#!/usr/bin/env bash
#
# install.sh — Install converted agents to your local 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) agents installed"
}

# 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) rules installed"
}

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

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

# Install all detected tools
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

مقارنة التنسيقات

الأداة التنسيق النطاق التحويل
كلود كود .md على مستوى المستخدم (~/.claude/agents/) نسخ كما هو
كيرسور .mdc على مستوى المشروع (.cursor/rules/) إضافة حقل وصف في المقدمة
آيدر CONVENTIONS.md جذر المشروع تجميع جميع الوكلاء
ويندسيرف .windsurfrules جذر المشروع تجميع جميع الوكلاء
جيت هاب كوبايلوت .md على مستوى المستخدم (~/.github/agents/) نسخ كما هو
أنتيجرافيتي SKILL.md على مستوى المستخدم (~/.gemini/antigravity/) تغليف في مجلد المهارة
أوبن كلو SOUL.md + أخرى على مستوى المستخدم (~/.openclaw/) تقسيم إلى 3 ملفات
جيميني CLI امتداد على مستوى المستخدم (~/.gemini/extensions/) إنشاء بيان + مهارات
أوبن كود .md على مستوى المشروع (.opencode/agents/) نسخ كما هو
كوين كود .md على مستوى المشروع (.qwen/agents/) النسخ كوكيل فرعي (SubAgent)

ابنِ نصك البرمجي الخاص بالتحويل

قالب لإضافة أداة جديدة:

#!/usr/bin/env bash

# 1. Define conversion function
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. Create output path
  local output="path/to/your/tool/agency-${slug}.ext"
  mkdir -p "$(dirname "$output")"

  # 3. Write converted content
  cat > "$output" << EOF
# Your tool-specific format
# Use: $name, $description, $body
EOF

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

# 4. Add to main loop
for agent_file in engineering/*.md; do
  convert_your_tool "$agent_file"
done

ما قمت ببنائه

المكون الغرض
get_field() استخراج قيم مقدمة YAML
get_body() تجريد المقدمة، وإرجاع نص Markdown الأساسي
to_kebab() تحويل الأسماء إلى معرفات URL-safe slugs
convert_cursor() التحويل إلى تنسيق .mdc
convert_aider() تجميع في ملف واحد
convert_windsurf() تجميع في ملف واحد
convert_antigravity() إنشاء أدلة المهارات
convert_openclaw() التقسيم إلى 3 ملفات لكل وكيل
install.sh النسخ إلى المسارات الخاصة بالأداة

الخطوات التالية

توسيع النصوص البرمجية:

إضافة المزيد من الأدوات:

التحسين للمستودعات الكبيرة:

استكشاف المشكلات الشائعة وإصلاحها

فشل نص التحويل البرمجي مع "بديل خاطئ" (bad substitution):

عدم استخراج حقول المقدمة:

إنشاء المعرفات الفريدة (Slug) يؤدي إلى أسماء معطوبة:

عدم تحميل قواعد كيرسور:

ملف آيدر CONVENTIONS.md يصبح كبيرًا جدًا:

تحسين الأداء للتحويلات الكبيرة

المعالجة المتوازية:

بالنسبة للمستودعات التي تحتوي على 100+ وكيل، استخدم GNU parallel:

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

export OUT_DIR="$REPO_ROOT/integrations"

# Export functions for parallel use
export -f get_field get_body to_kebab convert_cursor convert_claude_code

# Find all agent files and process in parallel
find "$REPO_ROOT" -name "*.md" -type f | \
  parallel -j 8 --progress '
    name=$(get_field "name" {})
    slug=$(to_kebab "$name")
    echo "Converting: $name"
    convert_cursor "{}"
    convert_claude_code "{}"
  '

echo "Parallel conversion complete!"

التحويل التزايدي:

تحويل الملفات التي تم تغييرها فقط:

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

CACHE_FILE="$REPO_ROOT/.conversion-cache"

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

# Process each agent
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 "Changed: $agent_file"
    convert_cursor "$agent_file"
    convert_claude_code "$agent_file"
    NEW_HASHES["$agent_file"]="$CURRENT_HASH"
  else
    echo "Unchanged: $agent_file"
  fi
done

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

تتبع التقدم:

أضف تقدمًا مرئيًا للتحويلات الطويلة:

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

  # Progress bar
  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"

اعتبارات الأمان للوكلاء المشتركين

التحقق من مصادر الوكيل:

عند تنزيل الوكلاء من مصادر خارجية:

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

validate_agent() {
  local file="$1"

  # Check required frontmatter fields
  local name=$(get_field 'name' "$file")
  local description=$(get_field 'description' "$file")

  if [[ -z "$name" ]]; then
    echo "ERROR: Missing 'name' field in $file"
    return 1
  fi

  if [[ -z "$description" ]]; then
    echo "WARNING: Missing 'description' field in $file"
    return 1 # Consider this a critical warning
  fi

  # Check for malicious patterns in body
  local body=$(get_body "$file")

  if echo "$body" | grep -q 'rm -rf\|curl.*\|wget.*\|eval\|exec'; then
    echo "WARNING: Potentially dangerous patterns in $file"
    return 1
  fi

  echo "VALID: $name"
  return 0
}

عزل تنفيذ الوكيل (Sandboxing):

بالنسبة للوكلاء غير الموثوق بهم، قم بتشغيلهم في بيئات معزولة:

ملف وكيل واحد. عشر بيئات تطوير متكاملة (IDEs). نصان برمجيان من باش.

هذه هي قوة أتمتة التحويل. اكتب مرة واحدة، وحوّل تلقائيًا، وثبّت في كل مكان.

دورك الآن: أضف دعم التحويل لأداة الذكاء الاصطناعي المفضلة لديك. شارك النص البرمجي. اجعل الوكلاء قابلين للنقل.

النقاط الرئيسية

button

الأسئلة الشائعة

ما هو convert.sh وكيف يعمل؟ convert.sh هو نص برمجي باش يحلل مقدمة YAML من ملفات وكلاء Markdown، ويستخرج محتوى النص الأساسي، ويحول كل وكيل إلى تنسيقات خاصة بالأداة. يستخدم awk للتحليل، sed لتحويل المعرفات الفريدة (slugs)، وheredocs لتوليد المخرجات.

كيف يعمل تحليل المقدمة في باش؟ تستخدم الدالة get_field() awk لتتبع محددات المقدمة (---)، وتجد السطر المطابق لاسم الحقل، وتستخرج القيمة. الدالة get_body() تطبع جميع الأسطر بعد محدد --- الثاني.

ما هي بيئات التطوير المتكاملة (IDEs) والأدوات المدعومة؟ كلود كود (.md)، كيرسور (.mdc)، آيدر (CONVENTIONS.md)، ويندسيرف (.windsurfrules)، جيت هاب كوبايلوت (.md)، أنتيجرافيتي (SKILL.md)، أوبن كلو (SOUL.md + ملفين)، امتدادات جيميني CLI، أوبن كود، وكوين كود.

كيف أضيف دعم التحويل لأداة جديدة؟ أنشئ دالة convert_yourtool() تستخرج حقول المقدمة، وتحول النص الأساسي إلى تنسيق أداتك، وتكتب إلى المسار الصحيح. أضف استدعاء الدالة إلى حلقة التحويل الرئيسية.

هل يمكنني تشغيل التحويلات بشكل متوازي لمعالجة أسرع؟ نعم. استخدم xargs -P أو GNU parallel لمعالجة ملفات وكلاء متعددة في وقت واحد. بالنسبة لأكثر من 100 وكيل، يمكن أن يقلل التحويل المتوازي وقت التشغيل من دقائق إلى ثوانٍ.

كيف أتحقق من وجود حقول المقدمة؟ أضف فحوصات التحقق في دالة التحويل الخاصة بك: [[ -z "$name" ]] && echo "Missing name field" && exit 1. قم بتشغيل التحقق قبل كتابة ملفات الإخراج.

ماذا لو فشل التحويل لبعض الوكلاء؟ استخدم set -euo pipefail للفشل السريع عند الأخطاء. أضف معالجة الأخطاء باستخدام || continue لتخطي الملفات المعطلة. سجل الفشل في ملف منفصل لتصحيح الأخطاء.

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات