GitHub ↗
CHAPTER 09 OF 10
🤝

Skill Design & Multi-Agent Patterns

스킬 설계 & 멀티에이전트 패턴

스킬은 재사용 가능한 행동 캡슐화다 — 반복적으로 Claude에게 설명하는 워크플로우가 있다면 그것은 스킬이 되어야 한다.

Skill Design & Multi-Agent Patterns cheatsheet
🍌 NANO BANANA CHEATSHEET · CH 09

Overview

개관

스킬은 Claude Code의 '인지 도구' 레이어다. 도구(MCP)가 에이전트가 할 수 있는 것을 확장한다면, 스킬은 에이전트가 어떻게 생각하고 행동해야 하는지를 확장한다.

Claude Code 스킬 시스템의 기술적 특이점: 스킬은 시스템 프롬프트에 항상 들어가는 것이 아니라, 필요할 때만 로드된다. Tier 1 메타데이터(~100 토큰/스킬)는 항상 로드되고, 실제 SKILL.md 내용은 Claude가 관련 있다고 판단할 때만 Tier 2로 로드된다. 이것이 컨텍스트를 아끼면서도 풍부한 행동을 가능하게 하는 구조다.

멀티에이전트 패턴은 복잡한 태스크를 분산 처리할 수 있게 해주지만, GitHub의 경고가 있다(2026년 2월): '멀티에이전트는 분산 시스템처럼 실패한다. 하나가 먼저 완성되면 시작하라.' 단일 에이전트를 먼저 최적화하고, 그 다음 멀티에이전트로 확장하라.

🎯 Learning Goals
  • 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단계 태스크에서 0.8510200.85^{10} ≈ 20% 성공률. 각 전환점에서 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

💡 Analogy · 비유
악보와 재즈 즉흥연주

스킬과 에이전트 자율성의 관계를 음악으로 생각해보자.

스킬은 악보(score) — 연주자(에이전트)에게 무엇을 연주해야 하는지 알려준다. 하지만 악보가 없다고 음악이 불가능한 건 아니다. 다만 재현이 불가능해진다.

MCP 도구는 악기 — 피아노, 바이올린, 드럼. 도구가 많을수록 표현 범위가 넓어지지만, 악기가 100개라도 악보 없이는 소음이 된다.

Superpowers의 '필수 워크플로우'는 클래식 오케스트라 규율 — 지휘자(Supervisor) 없이는 연주하지 않고, 리허설(Plan) 없이는 공연하지 않고, 검토(Verify) 없이는 완료하지 않는다. 이 규율이 재즈 즉흥연주(자유로운 에이전트)보다 더 일관된 결과를 낸다.

멀티에이전트는 실내악 앙상블 — 각자 다른 악기를 연주하지만 서로 듣고 맞춘다. 하지만 멤버가 너무 많으면 (분산 시스템처럼) 조율이 힘들어진다.

새 스킬을 생성하는 스크립트. SKILL.md 템플릿을 생성하고 .agents/skills/에 올바른 구조로 배치한다.

python
#!/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 없이 테스트 없이 바로 구현
  • 스킬 없이 멀티에이전트 구현 (복잡성만 늘어남)

🎤 예상 인터뷰 질문

  1. SKILL.md의 Tier 1/2/3 구조에서 컨텍스트 절약이 어떻게 이루어지는가?
  2. PEV 루프에서 각 단계 정확도 85%일 때 10단계 태스크의 전체 성공률은? 왜 Verify가 필수인가?
  3. 멀티에이전트를 도입하기 전에 먼저 단일 에이전트를 최적화해야 하는 이유는?
숙달 vs 익숙함: 단순히 아는 사람은 스킬을 만든다. 마스터한 사람은 스킬을 게이트로 만들어서 에이전트가 반드시 따르도록 강제하고, AIP 형식으로 실행 그래프를 정의하고, 각 스킬의 트리거 정확도를 측정해서 개선한다.

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 순서 강제.