Yapay Zeka Aracını 10 Farklı IDE'de Çalıştırmaya Dönüştürme

Ashley Innocent

Ashley Innocent

19 March 2026

Yapay Zeka Aracını 10 Farklı IDE'de Çalıştırmaya Dönüştürme

Kurumsal Apidog

Şirket İçi Dağıtım

SSO & RBAC

SOC 2 Uyumlu

Apidog Enterprise'ı Keşfet

Özetle (TL;DR)

Bir yapay zeka ajan dosyasını 3 adımda 10 IDE'ye dönüştürün: (1) YAML ön kısmını `get_field()`, `get_body()` ve `to_kebab()` bash fonksiyonlarıyla ayrıştırın, (2) `convert.sh` kullanarak araca özel formatlara dönüştürün (Claude Code `.md`, Cursor `.mdc`, Aider `CONVENTIONS.md`, Windsurf `.windsurfrules`), (3) `install.sh` ile doğru yollara kurun. Bir kez yazın, otomatik dönüştürün, her yere dağıtın.

Tek bir ajan dosyası. On IDE. The Agency projesinin tek bir Markdown dosyasını Claude Code, Cursor, Aider, Windsurf, GitHub Copilot ve 6'dan fazla diğer araçta çalışacak şekilde nasıl dönüştürdüğünü öğrenin.

Bir yapay zeka ajanı yazıyorsunuz. Şimdi onu şunlarda kullanılabilir hale getirmek istiyorsunuz:

10 farklı sürüm mü yazarsınız? Hayır. Bir kez yazarsınız, otomatik olarak dönüştürürsünüz.

The Agency projesi bunu iki bash betiğiyle çözüyor:

Bu eğitimde, her iki betiği de tersine mühendislikle inceleyeceksiniz. YAML ön kısmını nasıl ayrıştıracağınızı, gövde içeriğini nasıl çıkaracağınızı ve herhangi bir araç için dönüştürme ardışık düzenleri (pipeline) nasıl oluşturacağınızı öğreneceksiniz.

💡
Apidog entegrasyonuyla API geliştirme iş akışları için ajanlar dağıtıyor veya özel test ajanları oluşturuyor olun, dönüştürme sistemi bunların ekibinizin tercih ettiği tüm IDE'lerde çalışmasını sağlar.
button

Ajan Formatı

The Agency'deki her ajan aynı yapıyı kullanır:

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

Dosyanın iki bölümü vardır:

  1. Ön Kısım (Frontmatter) — `---` ayırıcıları arasındaki YAML meta verileri
  2. Gövde — İkinci `---`'den sonraki Markdown içeriği

Dönüştürme şunları ifade eder: ön kısım alanlarını çıkar, gövdeyi hedef formata dönüştür, doğru yola yaz.

Adım 1: YAML Ön Kısmını Ayrıştırın

`parse-frontmatter.sh` dosyasını oluşturun:

#!/usr/bin/env bash
#
# parse-frontmatter.sh — Ajan dosyalarından YAML ön kısım alanlarını çıkarır
#

set -euo pipefail

# YAML ön kısmından tek bir alan değerini çıkarır
# Kullanım: get_field <alan> <dosya>
get_field() {
  local field="$1" file="$2"
  awk -v f="$field" '
    /^---$/ { fm++; next }
    fm == 1 && $0 ~ "^" f ": " {
      sub("^" f ": ", "");
      print;
      exit
    }
  ' "$file"
}

# Ön kısmı çıkarır, sadece gövdeyi döndürür
# Kullanım: get_body <dosya>
get_body() {
  awk 'BEGIN{fm=0} /^---$/{fm++; next} fm>=2{print}' "$1"
}

# İsmi kebab-case slug'a dönüştürür
# Kullanım: 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 "Dosya: $AGENT_FILE"
  echo "İsim: $(get_field 'name' "$AGENT_FILE")"
  echo "Açıklama: $(get_field 'description' "$AGENT_FILE")"
  echo "Slug: $(to_kebab "$(get_field 'name' "$AGENT_FILE")")"
  echo "---"
  echo "Gövde önizlemesi:"
  get_body "$AGENT_FILE" | head -10
fi

Test edin:

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

Çıktı:

Dosya: engineering-backend-architect.md
İsim: Backend Architect
Açıklama: Senior backend architect specializing in scalable system design...
Slug: backend-architect
---
Gövde önizlemesi:
# Backend Architect Agent Personality

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

Adım 2: Claude Code Formatına Dönüştürün

Claude Code ham `.md` dosyalarını kullanır. Dönüştürmeye gerek yok — sadece kopyalayın:

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

Adım 3: Cursor Formatına Dönüştürün

Cursor, ön kısmında bir `description` alanı bulunan `.mdc` dosyalarını kullanır:

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

Giriş:

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

# API Tester Agent...

Çıktı (`.mdc`):

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

# API Tester Agent...

Adım 4: Aider Formatına Dönüştürün

Aider, tüm ajanları içeren tek bir `CONVENTIONS.md` dosyası kullanır:

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

  # Ayırıcı ile ekle
  echo "" >> "$output"
  echo "---" >> "$output"
  echo "" >> "$output"
  cat "$agent_file" >> "$output"

  echo "  Aider: $output dosyasına eklendi"
}

Tüm dosyayı oluşturun:

build_aider() {
  local output="CONVENTIONS.md"
  echo "# Aider için Agency Ajanları" > "$output"
  echo "" >> "$output"
  echo "Bu dosya, Aider entegrasyonu için tüm Agency ajanlarını içerir." >> "$output"
  echo "" >> "$output"

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

Adım 5: Windsurf Formatına Dönüştürün

Windsurf (Aider'a benzer şekilde) tek bir `.windsurfrules` dosyası kullanır:

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

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

  echo "  Windsurf: $output dosyasına eklendi"
}

Adım 6: Antigravity Formatına Dönüştürün

Antigravity (Gemini), alt dizinlerde `SKILL.md` dosyalarını kullanır:

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 Ajanı: $name

$(get_body "$agent_file")
EOF

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

Adım 7: OpenClaw Formatına Dönüştürün

OpenClaw, ajan başına üç dosya kullanır (`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 - Ana ajan tanımı
  cat > "$output_dir/SOUL.md" << EOF
# $name

$description

---

$body
EOF

  # AGENTS.md - Ajan yetenekleri
  cat > "$output_dir/AGENTS.md" << EOF
# Ajan Yetenekleri: $name

- Alanda uzmanlaşmış uzmanlık
- Teslimat odaklı çıktı
- Tanımlanmış başarı metrikleri

Tam tanım için SOUL.md'ye bakın.
EOF

  # IDENTITY.md - Ajan kimliği
  cat > "$output_dir/IDENTITY.md" << EOF
# Kimlik: $name

- İsim: $name
- Açıklama: $description
- Kaynak: The Agency (agency-agents deposu)
EOF

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

Adım 8: Tam convert.sh Betiği

İşte tam dönüştürme betiği (basitleştirilmiş):

#!/usr/bin/env bash
#
# convert.sh — Tüm Agency ajanlarını araca özel formatlara dönüştürür
#

set -euo pipefail

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

# Ön kısım yardımcıları
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'
}

# Dönüştürme fonksiyonları
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"
}

# Ana dönüştürme döngüsü
echo "Agency ajanları dönüştürülüyor..."

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 "İşleniyor: $name"

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

# Birleştirilmiş dosyaları oluştur
echo "# Aider için Agency Ajanları" > "$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 "# Windsurf için Agency Ajanları" > "$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 "Dönüştürme tamamlandı!"
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"

Çalıştırın:

chmod +x convert.sh
./convert.sh

Adım 9: Her Araca Kurun

Dönüştürmeden sonra, dosyaları araca özel yollara kopyalayın:

#!/usr/bin/env bash
#
# install.sh — Dönüştürülmüş ajanları yerel araçlarınıza kurar
#

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

# 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) kural kuruldu"
}

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

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

# Algılanan tüm araçları kur
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

Format Karşılaştırması

Araç Format Kapsam Dönüştürme
Claude Code .md Kullanıcı genelinde (~/.claude/agents/) Olduğu gibi kopyala
Cursor .mdc Proje (.cursor/rules/) Açıklama ön kısmı ekle
Aider CONVENTIONS.md Proje kökü Tüm ajanları birleştir
Windsurf .windsurfrules Proje kökü Tüm ajanları birleştir
GitHub Copilot .md Kullanıcı genelinde (~/.github/agents/) Olduğu gibi kopyala
Antigravity SKILL.md Kullanıcı genelinde (~/.gemini/antigravity/) Beceri dizinine sar
OpenClaw SOUL.md + diğerleri Kullanıcı genelinde (~/.openclaw/) 3 dosyaya ayır
Gemini CLI Uzantı Kullanıcı genelinde (~/.gemini/extensions/) Manifest + beceriler oluştur
OpenCode .md Proje (.opencode/agents/) Olduğu gibi kopyala
Qwen Code .md Proje (.qwen/agents/) Alt Ajan olarak kopyala

Kendi Dönüştürme Betiğinizi Oluşturun

Yeni bir araç eklemek için şablon:

#!/usr/bin/env bash

# 1. Dönüştürme fonksiyonunu tanımla
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. Çıktı yolunu oluştur
  local output="path/to/your/tool/agency-${slug}.ext"
  mkdir -p "$(dirname "$output")"

  # 3. Dönüştürülen içeriği yaz
  cat > "$output" << EOF
# Aracınıza özel format
# Kullanın: $name, $description, $body
EOF

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

# 4. Ana döngüye ekle
for agent_file in engineering/*.md; do
  convert_your_tool "$agent_file"
done

Neler Yaptınız

Bileşen Amaç
get_field() YAML ön kısım değerlerini çıkarır
get_body() Ön kısmı çıkarır, markdown gövdesini döndürür
to_kebab() İsimleri URL dostu slug'lara dönüştürür
convert_cursor() .mdc formatına dönüştürür
convert_aider() Tek bir dosyada birleştirir
convert_windsurf() Tek bir dosyada birleştirir
convert_antigravity() Beceri dizinleri oluşturur
convert_openclaw() Ajan başına 3 dosyaya böler
install.sh Araca özel yollara kopyalar

Sonraki Adımlar

Betiikleri genişletin:

Daha fazla araç ekleyin:

Büyük depolar için optimize edin:

Sık Karşılaşılan Sorun Giderme

Dönüştürme betiği "hatalı ikame" ile başarısız oluyor:

Ön kısım alanları çıkarılamıyor:

Slug oluşturma bozuk isimler yaratıyor:

Cursor kuralları yüklenmiyor:

Aider CONVENTIONS.md çok büyük hale geliyor:

Büyük Dönüştürmeler İçin Performans Optimizasyonu

Paralel İşleme:

100'den fazla ajanı olan depolar için GNU parallel kullanın:

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

export OUT_DIR="$REPO_ROOT/integrations"

# Paralel kullanım için fonksiyonları dışa aktar
export -f get_field get_body to_kebab convert_cursor convert_claude_code

# Tüm ajan dosyalarını bul ve paralel olarak işle
find "$REPO_ROOT" -name "*.md" -type f | \
  parallel -j 8 --progress '
    name=$(get_field "name" {})
    slug=$(to_kebab "$name")
    echo "Dönüştürülüyor: $name"
    convert_cursor "{}"
    convert_claude_code "{}"
  '

echo "Paralel dönüştürme tamamlandı!"

Artımlı Dönüştürme:

Sadece değişen dosyaları dönüştürün:

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

CACHE_FILE="$REPO_ROOT/.conversion-cache"

# Önceki durumu yükle
declare -A PREV_HASHES
if [[ -f "$CACHE_FILE" ]]; then
  while IFS='=' read -r file hash; do
    PREV_HASHES["$file"]="$hash"
  done < "$CACHE_FILE"
fi

# Her ajanı işle
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 "Değişti: $agent_file"
    convert_cursor "$agent_file"
    convert_claude_code "$agent_file"
    NEW_HASHES["$agent_file"]="$CURRENT_HASH"
  else
    echo "Değişmedi: $agent_file"
  fi
done

# Önbelleği kaydet
for file in "${!NEW_HASHES[@]}"; do
  echo "$file=${NEW_HASHES[$file]}"
done > "$CACHE_FILE"

İlerleme Takibi:

Uzun dönüştürmeler için görsel ilerleme ekleyin:

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

  # İlerleme çubuğu
  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"

Paylaşılan Ajanlar İçin Güvenlik Hususları

Ajan Kaynaklarını Doğrulama:

Dış kaynaklardan ajan indirirken:

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

validate_agent() {
  local file="$1"

  # Gerekli ön kısım alanlarını kontrol et
  local name=$(get_field 'name' "$file")
  local description=$(get_field 'description' "$file")

  if [[ -z "$name" ]]; then
    echo "HATA: '$file' dosyasında 'name' alanı eksik"
    return 1
  fi

  if [[ -z "$description" ]]; then
    echo "UYARI: '$file' dosyasında 'description' alanı eksik"
  fi

  # Gövdede kötü niyetli desenleri kontrol et
  local body=$(get_body "$file")

  if echo "$body" | grep -q 'rm -rf\|curl.*\|wget.*\|eval\|exec'; then
    echo "UYARI: '$file' dosyasında potansiyel olarak tehlikeli desenler var"
    return 1
  fi

  echo "GEÇERLİ: $name"
  return 0
}

Ajan Yürütme Korumalı Alanı (Sandboxing):

Güvenilmeyen ajanlar için, izole ortamlarda çalıştırın:

Tek bir ajan dosyası. On IDE. İki bash betiği.

İşte dönüştürme otomasyonunun gücü bu. Bir kez yazın, otomatik dönüştürün, her yere kurun.

Sıra sizde: favori yapay zeka aracınız için dönüştürme desteği ekleyin. Betiği paylaşın. Ajanları taşınabilir hale getirin.

Ana Çıkarımlar

button

Sıkça Sorulan Sorular

convert.sh nedir ve nasıl çalışır? convert.sh, ajan Markdown dosyalarından YAML ön kısmını ayrıştıran, gövde içeriğini çıkaran ve her ajanı araca özel formatlara dönüştüren bir bash betiğidir. Ayrıştırma için awk, slug dönüştürme için sed ve çıktı üretimi için heredoc'ları kullanır.

Bash'te ön kısım ayrıştırması nasıl çalışır? `get_field()` fonksiyonu, ön kısım ayırıcılarını (`---`) takip etmek için awk kullanır, alan adıyla eşleşen satırı bulur ve değeri çıkarır. `get_body()` ise ikinci `---` ayırıcısından sonraki tüm satırları yazdırır.

Hangi IDE'ler ve araçlar destekleniyor? Claude Code (`.md`), Cursor (`.mdc`), Aider (`CONVENTIONS.md`), Windsurf (`.windsurfrules`), GitHub Copilot (`.md`), Antigravity (`SKILL.md`), OpenClaw (`SOUL.md` + 2 dosya), Gemini CLI uzantıları, OpenCode ve Qwen Code.

Yeni bir araç için dönüştürme desteğini nasıl eklerim? Ön kısım alanlarını çıkaran, gövdeyi aracınızın formatına dönüştüren ve doğru yola yazan bir `convert_yourtool()` fonksiyonu oluşturun. Fonksiyon çağrısını ana dönüştürme döngüsüne ekleyin.

Daha hızlı işleme için dönüştürmeleri paralel olarak çalıştırabilir miyim? Evet. Birden fazla ajan dosyasını aynı anda işlemek için `xargs -P` veya GNU parallel kullanın. 100'den fazla ajan için, paralel dönüştürme çalışma süresini dakikalardan saniyelere düşürebilir.

Ön kısım alanlarının var olduğunu nasıl doğrularım? Dönüştürme fonksiyonunuza doğrulama kontrolleri ekleyin: `[[ -z "$name" ]] && echo "İsim alanı eksik" && exit 1`. Çıktı dosyalarını yazmadan önce doğrulamayı çalıştırın.

Bazı ajanlar için dönüştürme başarısız olursa ne olur? Hatalarda hızlı bir şekilde başarısız olmak için `set -euo pipefail` kullanın. Bozuk dosyaları atlamak için `|| continue` ile hata işleme ekleyin. Hata ayıklama için başarısızlıkları ayrı bir dosyaya kaydedin.

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin