Skill Design & Multi-Agent Patterns
스킬 설계 & 멀티에이전트 패턴
스킬은 재사용 가능한 행동 캡슐화다 — 반복적으로 Claude에게 설명하는 워크플로우가 있다면 그것은 스킬이 되어야 한다.
Overview
스킬은 Claude Code의 '인지 도구' 레이어다. 도구(MCP)가 에이전트가 할 수 있는 것을 확장한다면, 스킬은 에이전트가 어떻게 생각하고 행동해야 하는지를 확장한다.
Claude Code 스킬 시스템의 기술적 특이점: 스킬은 시스템 프롬프트에 항상 들어가는 것이 아니라, 필요할 때만 로드된다. Tier 1 메타데이터(~100 토큰/스킬)는 항상 로드되고, 실제 SKILL.md 내용은 Claude가 관련 있다고 판단할 때만 Tier 2로 로드된다. 이것이 컨텍스트를 아끼면서도 풍부한 행동을 가능하게 하는 구조다.
멀티에이전트 패턴은 복잡한 태스크를 분산 처리할 수 있게 해주지만, GitHub의 경고가 있다(2026년 2월): '멀티에이전트는 분산 시스템처럼 실패한다. 하나가 먼저 완성되면 시작하라.' 단일 에이전트를 먼저 최적화하고, 그 다음 멀티에이전트로 확장하라.
- SKILL.md의 3-tier Progressive Disclosure 아키텍처를 설명할 수 있다
- 스킬 description 필드가 왜 '트리거 신호'인지 설명하고 잘 작성할 수 있다
- Supervisor, Pipeline, Blackboard, Swarm 4가지 멀티에이전트 패턴을 구분할 수 있다
- Plan-Execute-Verify(PEV) 루프를 자신의 프로젝트에 구현할 수 있다
Sections
SKILL.md 형식 — 3-tier Architecture
스킬은 3계층으로 구성된다:
Tier 1 (시작 시 항상 로드, ~100 토큰):
---
name: my-skill
description: |
Use when X. Handles Y and Z.
Key capabilities: A, B, C.
allowed-tools: Read, Bash
version: 1.0.0
---
Tier 2 (관련 있을 때 로드, SKILL.md 본문):
## Purpose
스킬의 목적 (1-2문장)
## Instructions
구체적인 단계별 지침
## Output Format
예상 출력 구조
## Examples
구체적 예시들
Tier 3 (명시적 요청 시):
scripts/폴더: Claude가 실행하는 Python/Bash 스크립트references/폴더: 대용량 참조 문서 (100줄+)assets/폴더: 템플릿, 바이너리
선택 메커니즘: 순수 LLM 추론 — 임베딩도 키워드 매칭도 아니다. description을 명확하게 써야 올바로 트리거된다.
description 필드 — 트리거 신호의 모든 것
description은 스킬의 '전부'다. 스킬 메타데이터 로딩 시 Claude가 이것만 보고 관련 여부를 결정한다.
description 작성 공식:
Use when [언제 사용하는가]
[핵심 기능 1], [핵심 기능 2], [핵심 기능 3]
[부정적 예시: 이것은 하지 않는다]
OpenAI 연구 발견: 부정적 예시(이 스킬이 처리하지 않는 것)를 추가하면 라우팅 정확도가 73% → 85%로 향상됨.
좋은 예시:
description: |
Use when creating a full multi-chapter learning course on any technical topic.
Generates course_data.json, cheatsheet images (via Gemini), and HTML output.
NOT for: single article summaries, quick Q&A, code review.
Trigger phrases: 강의 만들어줘, 코스 만들어줘, 커리큘럼, 실전 학습.
AIP (Agent Instruction Protocol): 2026년 등장한 차세대 형식. 자유형 prose 대신 방향성 실행 그래프와 스키마 검증 YAML 사용. 라우팅 53% → 67% 향상.
4가지 멀티에이전트 오케스트레이션 패턴
| 패턴 | 구조 | 최적 상황 | 피해야 할 때 |
|---|---|---|---|
| Supervisor | 1 코디네이터 → N 워커 | 깔끔한 분해, 다양한 도구 | 고도로 동적인 태스크 |
| Pipeline | A → B → C → D 선형 | 고정 순서, 배치 처리 | 비선형 의존관계 |
| Blackboard | 공유 상태, 에이전트들이 구독 | 반응형, 불완전 정보 | 단순 태스크, 엄격한 지연 요구 |
| Swarm | P2P 자율 라우팅 | 예측 불가 태스크 분배 | 미숙한 팀, 경험 부족 |
가장 흔한 프로덕션 하이브리드: Supervisor + Pipeline 서브워크플로우
PEV (Plan-Execute-Verify) 루프:
Plan: 태스크를 수락 기준과 함께 분해
↓ [사람 검토 게이트]
Execute: 도구 유효성, 권한, 작업 공간 경계 사전 검증
↓ [게이트 체크]
Verify: 아키텍처 정렬 + 스펙 준수 검증
↓ [실패 시: 오류 컨텍스트 주입 → 재시도 루프]
왜 PEV가 중요한가: 단계 정확도 85%라면 10단계 태스크에서 성공률. 각 전환점에서 Verify를 추가하면 누적 오류가 극적으로 줄어든다.
Superpowers 프레임워크 — 150,000 스타의 이유
Superpowers는 Claude Code 스킬 생태계에서 가장 영향력 있는 프레임워크. 2025년 10월 Anthropic 플러그인 시스템 공개와 같은 날 런칭, 2026년 1월 공식 마켓플레이스 입성.
4단계 필수 워크플로우 (게이트로 강제됨): 1.
Brainstorm — 설계 문서 승인 없이 코딩 불가 2.
Git Worktree — 격리된 브랜치 자동 생성 3.
Plan Creation — 정확한 파일 경로, 명령어, 실패 테스트, 구현 코드, 예상 출력, git 커밋 메시지를 포함한 태스크 분해 4.
Execute — 서브에이전트 구현 + 스펙 준수 검토 → 코드 품질 검토 이중 검토 게이트
핵심 인사이트: 스킬이 '제안'이 아니라 '필수 워크플로우'로 동작한다. 에이전트를 '조급한 인턴'이 아니라 '훈련된 소프트웨어 엔지니어'처럼 만드는 것.
설치: claude settings plugins add superpowers@superpowers-marketplace
핵심 스킬들: writing-plans, test-driven-development, systematic-debugging, verification-before-completion, dispatching-parallel-agents, finishing-a-development-branch
스킬과 에이전트 자율성의 관계를 음악으로 생각해보자.
스킬은 악보(score) — 연주자(에이전트)에게 무엇을 연주해야 하는지 알려준다. 하지만 악보가 없다고 음악이 불가능한 건 아니다. 다만 재현이 불가능해진다.
MCP 도구는 악기 — 피아노, 바이올린, 드럼. 도구가 많을수록 표현 범위가 넓어지지만, 악기가 100개라도 악보 없이는 소음이 된다.
Superpowers의 '필수 워크플로우'는 클래식 오케스트라 규율 — 지휘자(Supervisor) 없이는 연주하지 않고, 리허설(Plan) 없이는 공연하지 않고, 검토(Verify) 없이는 완료하지 않는다. 이 규율이 재즈 즉흥연주(자유로운 에이전트)보다 더 일관된 결과를 낸다.
멀티에이전트는 실내악 앙상블 — 각자 다른 악기를 연주하지만 서로 듣고 맞춘다. 하지만 멤버가 너무 많으면 (분산 시스템처럼) 조율이 힘들어진다.
새 스킬을 생성하는 스크립트. SKILL.md 템플릿을 생성하고 .agents/skills/에 올바른 구조로 배치한다.
#!/usr/bin/env python3
"""create-skill.py — 새 스킬 생성 도우미"""
import os
from pathlib import Path
def create_skill(name: str, description: str, trigger_phrases: list = None):
"""새 스킬 디렉토리와 SKILL.md 생성"""
skills_dir = Path.home() / '.agents' / 'skills' / name
skills_dir.mkdir(parents=True, exist_ok=True)
# 서브디렉토리 생성
(skills_dir / 'scripts').mkdir(exist_ok=True)
(skills_dir / 'references').mkdir(exist_ok=True)
trigger_text = ''
if trigger_phrases:
trigger_text = '\nTrigger phrases: ' + ', '.join(trigger_phrases)
skill_md = f"""---
name: {name}
description: |
{description}{trigger_text}
allowed-tools: Read, Bash, Edit, Write
version: 1.0.0
---
# {name.replace('-', ' ').title()}
## Purpose
<!-- 이 스킬이 무엇을 하는지 1-2문장으로 -->
## When to Use
<!-- 트리거 조건: 어떤 사용자 요청에 반응하는가 -->
## Instructions
<!-- 구체적인 단계별 지침 -->
1. 첫 번째 단계
2. 두 번째 단계
## Output Format
<!-- 예상 출력 형식 -->
## Examples
<!-- 입력/출력 예시 -->
## Notes
<!-- 에지 케이스, 제한사항, 주의사항 -->
"""
skill_file = skills_dir / 'SKILL.md'
skill_file.write_text(skill_md)
# Claude skills 심볼릭 링크
claude_skills_dir = Path.home() / '.claude' / 'skills' / name
if not claude_skills_dir.exists():
os.symlink(str(skills_dir), str(claude_skills_dir))
print(f"✅ 스킬 생성: {skills_dir}")
print(f"✅ 심볼릭 링크: {claude_skills_dir}")
print(f"")
print(f"다음 단계:")
print(f"1. {skill_file} 수정")
print(f"2. description 필드를 정밀하게 작성 (트리거 신호!)")
print(f"3. 부정적 예시 추가 (OpenAI: 73%→85% 향상)")
print(f"4. Claude Code 재시작 후 테스트")
return str(skill_file)
def list_skills():
"""현재 설치된 스킬 목록 출력"""
skills_dir = Path.home() / '.agents' / 'skills'
if not skills_dir.exists():
print("스킬 없음")
return
print("=== 설치된 스킬 ===")
for skill_dir in sorted(skills_dir.iterdir()):
if skill_dir.is_dir():
skill_md = skill_dir / 'SKILL.md'
if skill_md.exists():
lines = skill_md.read_text().split('\n')
desc_lines = []
in_desc = False
for line in lines:
if 'description:' in line:
in_desc = True
continue
if in_desc and line.startswith(' '):
desc_lines.append(line.strip())
elif in_desc:
break
desc = ' '.join(desc_lines[:1])[:80] if desc_lines else '설명 없음'
print(f" 📦 {skill_dir.name}: {desc}...")
if __name__ == '__main__':
import sys
if len(sys.argv) < 2:
list_skills()
else:
name = sys.argv[1]
desc = sys.argv[2] if len(sys.argv) > 2 else f'Use when working with {name}'
create_skill(name, desc) create_skill()로 올바른 디렉토리 구조(scripts/, references/)를 가진 새 스킬을 생성하고 ~/.claude/skills/에 심볼릭 링크를 만든다. list_skills()로 현재 설치된 모든 스킬과 description 요약을 확인할 수 있다.
✅ 시니어가 보는 것
- 반복적인 워크플로우가 스킬로 캡슐화되어 있는가
- description 필드에 트리거 조건과 부정적 예시가 있는가
- 스킬이 선택사항이 아닌 필수 워크플로우로 동작하는가
- 멀티에이전트 사용 전 단일 에이전트가 충분히 최적화되어 있는가
⚠️ 레드 플래그
- 모든 세션에서 같은 워크플로우를 Claude에게 반복 설명
- Superpowers 없이 테스트 없이 바로 구현
- 스킬 없이 멀티에이전트 구현 (복잡성만 늘어남)
🎤 예상 인터뷰 질문
- SKILL.md의 Tier 1/2/3 구조에서 컨텍스트 절약이 어떻게 이루어지는가?
- PEV 루프에서 각 단계 정확도 85%일 때 10단계 태스크의 전체 성공률은? 왜 Verify가 필수인가?
- 멀티에이전트를 도입하기 전에 먼저 단일 에이전트를 최적화해야 하는 이유는?
Key Takeaways
스킬 = 재사용 가능한 인지 도구
반복적으로 Claude에게 설명하는 것은 스킬이 되어야 한다. 두 번 설명했으면 스킬을 만들 때다.
Tier 1/2/3 Progressive Disclosure
항상 로드(~100 토큰) → 관련 시 로드(SKILL.md) → 요청 시 로드(scripts/references/). 컨텍스트 효율적.
description = 트리거 신호
선택 메커니즘은 순수 LLM 추론. description이 명확해야 올바로 트리거된다.
부정적 예시 +12%
OpenAI: 부정적 예시 추가로 라우팅 73%→85%. 이 스킬이 처리하지 않는 것을 명시하라.
4가지 오케스트레이션 패턴
Supervisor(코디네이터), Pipeline(선형), Blackboard(공유 상태), Swarm(P2P). 대부분은 Supervisor+Pipeline 하이브리드.
PEV 루프
Plan(수락 기준 포함) → Execute(사전 검증) → Verify(스펙 준수). 85% 단계 정확도의 10단계 = 20% 전체 성공률.
멀티에이전트는 마지막
GitHub 2026: 먼저 단일 에이전트 완성, 그다음 확장. 분산 시스템처럼 실패한다.
Superpowers = 필수 워크플로우
제안이 아닌 게이트. Brainstorm → Worktree → Plan → Execute 순서 강제.