요약
AI 에이전트 파일 하나를 3단계로 10개 IDE에 변환: (1) `get_field()`, `get_body()`, `to_kebab()` bash 함수를 사용하여 YAML 프런트매터 구문 분석, (2) `convert.sh`를 사용하여 도구별 형식으로 변환 (Claude Code `.md`, Cursor `.mdc`, Aider `CONVENTIONS.md`, Windsurf `.windsurfrules`), (3) `install.sh`를 사용하여 올바른 경로에 설치. 한 번 작성하고, 자동으로 변환하며, 어디든 배포하세요.
에이전트 파일 하나로 10개 IDE를 지원합니다. The Agency 프로젝트가 단일 마크다운 파일을 Claude Code, Cursor, Aider, Windsurf, GitHub Copilot 및 6개 이상의 다른 도구에서 작동하도록 변환하는 방법을 알아보세요.
AI 에이전트를 작성했습니다. 이제 다음에서 사용 가능하게 만들고 싶습니다:
- Claude Code (`~/.claude/agents/` 내 `.md` 파일)
- Cursor (`.cursor/rules/` 내 `.mdc` 파일)
- Aider (프로젝트 루트의 단일 `CONVENTIONS.md` 파일)
- Windsurf (단일 `.windsurfrules` 파일)
- GitHub Copilot (`~/.github/agents/` 내 `.md` 파일)
- 그리고 5개 이상의 도구
10가지 버전을 작성하시겠습니까? 아닙니다. 한 번 작성하고 자동으로 변환하세요.
The Agency 프로젝트는 두 개의 bash 스크립트로 이 문제를 해결합니다:
convert.sh— 에이전트 파일을 도구별 형식으로 변환합니다install.sh— 변환된 파일을 올바른 경로로 복사합니다
이 튜토리얼에서는 두 스크립트를 리버스 엔지니어링합니다. YAML 프런트매터를 구문 분석하고, 본문 내용을 추출하며, 모든 도구에 대한 변환 파이프라인을 구축하는 방법을 배웁니다.
에이전트 형식
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
...
파일은 두 부분으로 구성됩니다:
- 프런트매터 — `---` 구분 기호 사이의 YAML 메타데이터
- 본문 — 두 번째 `---` 뒤의 마크다운 콘텐츠
변환은 다음을 의미합니다: 프런트매터 필드 추출, 본문을 대상 형식으로 변환, 올바른 경로에 작성.
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단계: Claude Code 형식으로 변환
Claude Code는 원본 `.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단계: Cursor 형식으로 변환
Cursor는 프런트매터 `description` 필드를 가진 `.mdc` 파일을 사용합니다:
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단계: Aider 형식으로 변환
Aider는 모든 에이전트를 포함하는 단일 `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단계: Windsurf 형식으로 변환
Windsurf는 단일 `.windsurfrules` 파일을 사용합니다 (Aider와 유사):
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단계: Antigravity 형식으로 변환
Antigravity (Gemini)는 하위 디렉토리에 `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단계: OpenClaw 형식으로 변환
OpenClaw는 에이전트당 세 개의 파일 (`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
형식 비교
| 도구 | 형식 | 범위 | 변환 |
|---|---|---|---|
| Claude Code | .md |
사용자 전체 (~/.claude/agents/) |
있는 그대로 복사 |
| Cursor | .mdc |
프로젝트 (.cursor/rules/) |
설명 프런트매터 추가 |
| Aider | CONVENTIONS.md |
프로젝트 루트 | 모든 에이전트 연결 |
| Windsurf | .windsurfrules |
프로젝트 루트 | 모든 에이전트 연결 |
| GitHub Copilot | .md |
사용자 전체 (~/.github/agents/) |
있는 그대로 복사 |
| Antigravity | SKILL.md |
사용자 전체 (~/.gemini/antigravity/) |
스킬 디렉토리로 묶기 |
| OpenClaw | SOUL.md + 기타 |
사용자 전체 (~/.openclaw/) |
3개 파일로 분할 |
| Gemini CLI | 확장 | 사용자 전체 (~/.gemini/extensions/) |
매니페스트 + 스킬 생성 |
| OpenCode | .md |
프로젝트 (.opencode/agents/) |
있는 그대로 복사 |
| Qwen Code | .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() |
프런트매터 제거, 마크다운 본문 반환 |
to_kebab() |
이름을 URL-safe 슬러그로 변환 |
convert_cursor() |
.mdc 형식으로 변환 |
convert_aider() |
단일 파일로 연결 |
convert_windsurf() |
단일 파일로 연결 |
convert_antigravity() |
스킬 디렉토리 생성 |
convert_openclaw() |
에이전트당 3개 파일로 분할 |
install.sh |
도구별 경로로 복사 |
다음 단계
스크립트 확장:
- `xargs -P` 또는 GNU parallel을 이용한 병렬 변환 추가
- 유효성 검사 추가 (필수 프런트매터 필드 확인)
- 드라이런 모드 추가 (`--dry-run` 플래그)
더 많은 도구 추가:
- VS Code 확장
- JetBrains IDE
- 사용자 지정 내부 도구
대규모 저장소에 대한 최적화:
- 구문 분석된 프런트매터 캐시
- 안전한 파일 처리를 위해 `-print0`와 함께 `find` 사용
- 100개 이상의 에이전트에 대한 진행률 표시줄 추가
일반적인 문제 해결
변환 스크립트가 “bad substitution” 오류로 실패:
- bash를 실행하고 있는지 확인하세요. sh가 아닙니다: `#!/usr/bin/env bash`
- bash 버전 확인: `bash --version` (4.0 이상이어야 함)
- bash로 명시적으로 실행: `bash convert.sh`
- Windows 줄 끝 문자 확인: `sed -i 's/\r$//' convert.sh`
프런트매터 필드가 추출되지 않음:
- YAML 형식이 `: ` (콜론 공백)을 사용하고 `:`만 사용하지 않는지 확인하세요
- 필드 이름 앞에 추가 공백이 있는지 확인하세요
- 프런트매터 구분 기호가 정확히 `---` (대시 3개)인지 확인하세요
- 수동으로 구문 분석 테스트: `./parse-frontmatter.sh --demo agent.md`
슬러그 생성 시 깨진 이름이 생성됨:
- `to_kebab()` 함수를 예외 상황으로 테스트
- 특수 문자 처리: `to_kebab() { echo "$1" | iconv -f utf8 -t ascii//translit | ... }`
- 빈 슬러그에 대한 대체 추가: `[[ -z "$slug" ]] && slug="unknown-agent"`
- 디버깅을 위해 원래 이름 로깅
Cursor 규칙이 로드되지 않음:
- `.mdc` 파일에 `description`이 있는 유효한 프런트매터가 있는지 확인하세요
- Cursor의 MCP 구성 확인: `.cursor/mcp.json`
- 파일이 `.cursor/rules/`에 있고 `.cursor/agents/`에 없는지 확인하세요
- 새 규칙 추가 후 Cursor 다시 시작
Aider CONVENTIONS.md 파일이 너무 커짐:
- 카테고리별로 분할: `CONVENTIONS-engineering.md`, `CONVENTIONS-design.md`
- 사용되지 않는 에이전트에 대한 자동 정리 구현
- 상단에 목차 추가
- include 지시문이 있는 에이전트별 파일 고려
대규모 변환을 위한 성능 최적화
병렬 처리:
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"
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
}
에이전트 실행 샌드박싱:
신뢰할 수 없는 에이전트의 경우, 격리된 환경에서 실행:
- 에이전트 실행을 위해 Docker 컨테이너 사용
- 읽기 전용 마운트로 파일 시스템 접근 제한
- 특정 도메인으로 네트워크 접근 제한
- 감사 추적을 위해 모든 에이전트 작업 로깅
에이전트 파일 하나. 10개 IDE. 두 개의 bash 스크립트.
이것이 변환 자동화의 힘입니다. 한 번 작성하고, 자동으로 변환하며, 어디든 설치하세요.
이제 당신의 차례입니다: 좋아하는 AI 도구에 변환 지원을 추가하세요. 스크립트를 공유하세요. 에이전트를 휴대 가능하게 만드세요.
핵심 요약
- 한 번 작성하고, 10개 이상의 형식으로 변환 — YAML 프런트매터가 있는 단일 마크다운 파일은 Claude Code, Cursor, Aider, Windsurf 및 6개 이상의 다른 도구로 변환됩니다.
- Bash 구문 분석으로 프런트매터 추출 처리 — `get_field()`는 YAML 값을 추출하고, `get_body()`는 프런트매터를 제거하며, `to_kebab()`는 URL-safe 슬러그를 생성합니다.
- 도구별 형식은 다른 변환이 필요합니다 — Claude Code는 있는 그대로 복사하고, Cursor는 설명 프런트매터를 추가하며, Aider/Windsurf는 모든 에이전트를 연결합니다.
- 설치 스크립트는 올바른 경로로 복사합니다 — 사용자 전체 도구는 `~/.claude/agents/`를 사용하고, 프로젝트 도구는 `.cursor/rules/` 또는 프로젝트 루트 파일을 사용합니다.
- 새 도구를 위한 템플릿으로 확장 — `convert_your_tool()` 함수를 정의하고, 메인 루프에 추가하며, 형식 요구 사항을 문서화합니다.
자주 묻는 질문
`convert.sh`는 무엇이며 어떻게 작동합니까? `convert.sh`는 에이전트 마크다운 파일에서 YAML 프런트매터를 구문 분석하고, 본문 내용을 추출하며, 각 에이전트를 도구별 형식으로 변환하는 bash 스크립트입니다. 구문 분석에는 `awk`를, 슬러그 변환에는 `sed`를, 출력 생성에는 heredoc을 사용합니다.
bash에서 프런트매터 구문 분석은 어떻게 작동합니까? `get_field()` 함수는 `awk`를 사용하여 프런트매터 구분 기호(`---`)를 추적하고, 필드 이름과 일치하는 줄을 찾아 값을 추출합니다. `get_body()`는 두 번째 `---` 구분 기호 뒤의 모든 줄을 출력합니다.
어떤 IDE 및 도구가 지원됩니까? Claude Code (`.md`), Cursor (`.mdc`), Aider (`CONVENTIONS.md`), Windsurf (`.windsurfrules`), GitHub Copilot (`.md`), Antigravity (`SKILL.md`), OpenClaw (`SOUL.md` + 2 files), Gemini CLI 확장, OpenCode, Qwen Code.
새 도구에 대한 변환 지원을 어떻게 추가합니까? `convert_yourtool()` 함수를 생성하여 프런트매터 필드를 추출하고, 본문을 도구의 형식으로 변환하며, 올바른 경로에 작성합니다. 이 함수 호출을 메인 변환 루프에 추가합니다.
더 빠른 처리를 위해 변환을 병렬로 실행할 수 있습니까? 예. `xargs -P` 또는 GNU parallel을 사용하여 여러 에이전트 파일을 동시에 처리할 수 있습니다. 100개 이상의 에이전트의 경우 병렬 변환은 실행 시간을 몇 분에서 몇 초로 단축할 수 있습니다.
프런트매터 필드가 존재하는지 어떻게 확인할 수 있습니까? `[[ -z "$name" ]] && echo "Missing name field" && exit 1`와 같은 유효성 검사 확인을 변환 함수에 추가합니다. 출력 파일을 작성하기 전에 유효성 검사를 실행합니다.
일부 에이전트에서 변환이 실패하면 어떻게 해야 합니까? 오류 발생 시 `set -euo pipefail`을 사용하여 빠르게 실패하도록 합니다. `|| continue`로 오류 처리를 추가하여 손상된 파일을 건너뛸 수 있습니다. 디버깅을 위해 실패를 별도의 파일에 기록합니다.
