Skip to content

Claude Code 스킬 호환성

이 수업을 마치면 할 수 있는 것

  • 플러그인이 Claude Code 스킬 형식을 자동으로 호환하는 방식 이해
  • 도구 매핑 메커니즘을 마스터하여 Claude 스킬이 OpenCode에서 올바르게 작동하도록 함
  • 스킬 발견의 전체 우선순위 규칙 이해
  • Claude 플러그인 마켓플레이스의 기존 스킬을 다시 작성하지 않고 재사용

현재의 어려움

Claude Code 스킬이 이미 있거나 Claude 플러그인 마켓플레이스의 스킬을 사용하려고 하지만, 이러한 스킬은 Claude Code용으로 작성되었습니다. OpenCode에서 직접 사용하면 문제가 발생합니다:

  • Claude 스킬의 도구 호출(예: TodoWrite, Task)이 OpenCode에 존재하지 않음
  • OpenCode가 설치된 Claude 플러그인 스킬을 어떻게 찾는지 불분명
  • 스킬 형식이 호환되지 않을까 걱정하여 모든 내용을 다시 작성해야 함

핵심 아이디어

OpenCode Agent Skills 플러그인은 3단계 호환 메커니즘을 통해 수정 없이 Claude Code 스킬을 사용할 수 있게 해줍니다:

  1. 자동 발견 - Claude Code의 표준 디렉터리(.claude/skills/, ~/.claude/plugins/)에서 스킬 스캔
  2. 도구 매핑 - 스킬 로드 시 자동으로 도구 매핑 가이드를 주입하여 Claude 도구명을 OpenCode 도구명으로 변환
  3. 형식 지원 - Claude 플러그인의 v1 및 v2 두 가지 설치 형식 모두 지원

핵심 개념

Claude Code 스킬 형식 - Anthropic이 정의한 스킬 사양으로, SKILL.md 파일을 사용하여 스킬을 설명하며, YAML frontmatter(메타데이터)와 Markdown 콘텐츠(지침)를 포함합니다.

도구 매핑 원리

플러그인이 Claude Code로 작성된 스킬을 감지하면 자동으로 도구 매핑 가이드를 주입합니다:

Claude Code 도구OpenCode 도구매핑 규칙
TodoWrite/TodoReadtodowrite/todoread소문자
Task (하위 에이전트)task (subagent_type 파라미터 사용)파라미터 변경
Skilluse_skill도구명 교체
Read/Write/Edit/Bash/Glob/Grep/WebFetchread/write/edit/bash/glob/grep/webfetch소문자

매핑 방식: 플러그인은 스킬을 로드할 때 매핑 가이드를 XML 형식으로 세션 컨텍스트에 주입하고, AI는 이에 따라 올바른 도구를 호출합니다.

매핑이 필요한 이유는?

Claude Code와 OpenCode의 도구 명명 규칙이 다릅니다. Claude는 PascalCase(예: TodoWrite)를 사용하고, OpenCode는 소문자(예: todowrite)를 사용합니다. 도구 매핑을 통해 AI가 호출을 변환하는 방법을 알 수 있게 해줍니다.

스킬 발견 우선순위

플러그인은 다음 순서로 스킬을 발견하며, 첫 번째로 매칭된 스킬이 적용됩니다(동일 이름의 스킬은 중복되지 않음):

mermaid
graph TD
    A[스킬 발견 흐름] --> B[프로젝트 수준 OpenCode]
    B --> |.opencode/skills/| C[1. project]
    C --> D[프로젝트 수준 Claude Code]
    D --> |.claude/skills/| E[2. claude-project]
    E --> F[사용자 수준 OpenCode]
    F --> |~/.config/opencode/skills/| G[3. user]
    G --> H[사용자 수준 Claude Code]
    H --> |~/.claude/skills/| I[4. claude-user]
    I --> J[Claude 플러그인 캐시]
    J --> |~/.claude/plugins/cache/| K[5. claude-plugins]
    K --> L[Claude 플러그인 마켓플레이스]
    L --> |~/.claude/plugins/marketplaces/| M[6. claude-plugins]

    style C fill:#e1f5e1
    style E fill:#fff4e1
    style G fill:#e1f5e1
    style I fill:#fff4e1
    style K fill:#fff4e1
    style M fill:#fff4e1

우선순위 규칙:

  • 프로젝트 수준 스킬이 사용자 수준 스킬을 덮어씀(프로젝트 맞춤화 용이)
  • OpenCode 스킬이 Claude 스킬보다 우선(혼란 방지)
  • 동일 이름의 스킬은 처음 발견된 버전만 유지
예시: 동일 이름 스킬 덮어쓰기

두 위치에 모두 git-helper라는 이름의 스킬이 있다고 가정:

  • .claude/skills/git-helper/SKILL.md (Claude 버전)
  • .opencode/skills/git-helper/SKILL.md (OpenCode 버전)

결과: OpenCode 버전이 적용됨(우선순위가 더 높음)

🎒 시작 전 준비 사항

  • OpenCode Agent Skills 플러그인이 설치 및 설정됨
  • 기본 스킬 개념 이해(권장: OpenCode Agent Skills란? 먼저 읽기)
  • (선택사항) Claude Code에 설치된 플러그인이나 스킬 있음

따라 하기

1단계: Claude 스킬이 발견되는지 확인

이유 플러그인이 Claude Code 스킬 디렉터리를 올바르게 스캔할 수 있는지 확인합니다.

OpenCode에서 도구 호출:

get_available_skills()

볼 수 있는 내용: 반환된 스킬 목록에 .claude/skills/, ~/.claude/skills/, ~/.claude/plugins/의 스킬이 포함되어 있으며, 각 스킬의 source 필드에 소스가 표시됨(예: claude-project, claude-user, claude-plugins).

체크포인트 ✅: 목록에 예상된 Claude 스킬이 포함되어 있는지 확인.

2단계: Claude 스킬 로드

이유 도구 매핑 메커니즘이 정상적으로 작동하는지 검증합니다.

Claude 스킬을 로드하려면 도구 호출:

use_skill(skill="your-skill-name")

볼 수 있는 내용: Skill "xxx" loaded.와 같은 성공 메시지가 반환됨.

체크포인트 ✅: 이제 AI가 해당 스킬의 지침을 사용할 수 있음.

3단계: 도구 매핑이 적용되는지 확인

이유 AI가 OpenCode의 도구를 Claude의 도구 대신 올바르게 호출하는지 확인합니다.

AI에 해당 스킬 도구가 필요한 작업을 요청합니다. 예:

스킬의 todo 기능을 사용하여 작업 목록을 만들어주세요.

볼 수 있는 내용: AI가 Claude의 TodoWrite 도구 대신 OpenCode의 todowrite 도구를 올바르게 호출함.

매핑이 적용되는지 어떻게 확인하나요?

디버그 모드가 활성화된 경우 AI의 도구 호출 로그를 확인하면, todowrite를 호출하는 것을 볼 수 있고 TodoWrite는 호출하지 않습니다.

체크포인트 ✅: 도구 호출이 성공하고 작업이 완료됨.

문제 해결 팁

1. 플러그인 형식 불일치

문제: 이전 버전의 Claude 플러그인이 v1 형식을 사용하고 최신 버전이 v2 형식을 사용하여 일부 스킬을 발견할 수 없음.

원인: v1과 v2의 installed_plugins.json 구조가 다름.

해결: 플러그인은 두 형식을 모두 지원하며 수동 변환이 필요하지 않음. 그럼에도 스킬을 발견할 수 없는 경우, ~/.claude/plugins/installed_plugins.json이 존재하고 형식이 올바른지 확인.

2. 도구 매핑이 적용되지 않음

문제: AI가 여전히 Claude 도구명을 호출하여 오류가 발생함.

원인: 스킬 콘텐츠가 도구 매핑 가이드를 우회하거나 하드코딩된 도구 호출을 사용했을 수 있음.

해결:

  • 스킬이 로드된 후에 사용하는지, 도구를 직접 호출하는 것이 아닌지 확인
  • 스킬에 코드 예시가 있는 경우, 도구명을 OpenCode 형식으로 수동으로 변경

3. 스킬 이름 충돌

문제: 같은 이름의 스킬이 서로 다른 위치에 있을 때 잘못된 버전이 로드됨.

원인: 스킬 발견 우선순위로 인한 덮어쓰기.

해결:

  • 스킬의 source 필드를 확인하여 출처 확인
  • 네임스페이스 형식을 사용하여 출처를 명확히 지정: use_skill(skill="user:skill-name") 또는 use_skill(skill="claude-plugins:skill-name")
네임스페이스 구문

플러그인은 namespace:skill-name 형식을 지원합니다:

  • project:skill-name - 프로젝트 수준 OpenCode 스킬
  • claude-project:skill-name - 프로젝트 수준 Claude 스킬
  • user:skill-name - 사용자 수준 OpenCode 스킬
  • claude-user:skill-name - 사용자 수준 Claude 스킬
  • claude-plugins:skill-name - Claude 플러그인 마켓플레이스 스킬

수업 요약

OpenCode Agent Skills 플러그인은 3단계 호환 메커니즘을 통해 Claude Code 스킬을 원활하게 재사용할 수 있게 해줍니다:

  • 자동 발견 - 6개 위치에서 스킬을 스캔하여 프로젝트 수준, 사용자 수준, 플러그인 수준을 모두 커버
  • 도구 매핑 - Claude 도구명을 자동으로 OpenCode 도구명으로 변환
  • 형식 지원 - v1과 v2 두 가지 Claude 플러그인 형식을 모두 지원

스킬을 다시 작성할 필요 없이 바로 설치하여 사용하면 플러그인이 자동으로 호환성 문제를 처리합니다.

다음 수업 예고

다음 수업에서는 **Superpowers 워크플로 통합**을 배웁니다.

배울 내용:

  • Superpowers 모드를 활성화하는 방법
  • Superpowers 스킬의 자동 감지 및 로드
  • 엄격한 워크플로가 개발 효율성을 높이는 방법

부록: 소스 코드 참조

클릭하여 소스 코드 위치 보기

업데이트 시간: 2026-01-24

기능파일 경로행 번호
도구 매핑 정의src/claude.ts19-25
v1/v2 형식 타입 정의src/claude.ts35-61
플러그인 설치 경로 추출src/claude.ts68-77
플러그인 스킬 발견src/claude.ts82-105
마켓플레이스 스킬 발견src/claude.ts115-180
캐시 스킬 발견src/claude.ts193-253
스킬 발견 우선순위 목록src/skills.ts241-254
동일 이름 스킬 중복 제거 로직src/skills.ts256-260
toolTranslation 가져오기src/tools.ts15
도구 매핑 주입src/tools.ts238-249

주요 상수:

  • toolTranslation: 스킬 로드 시 세션 컨텍스트에 주입되는 도구 매핑 가이드 XML 문자열. src/claude.ts:19-25에서 정의되고 src/tools.ts:15에서 가져옴

주요 함수:

  • getPluginInstallPaths(): v1/v2 형식에서 플러그인 설치 경로 추출
  • discoverSkillsFromPluginDir(): 플러그인 디렉터리의 skills/ 하위 디렉터리 스캔
  • discoverMarketplaceSkills(): ~/.claude/plugins/marketplaces/에서 스킬 발견(우선)
  • discoverPluginCacheSkills(): ~/.claude/plugins/cache/에서 스킬 발견(폴백)
  • findFile(): 지정된 파일명을 재귀적으로 검색(유틸리티 함수)

중요한 흐름:

  1. 플러그인 초기화 시 discoverAllSkills() 호출 → 6개 발견 경로 순회
  2. Claude 플러그인 스킬 발견 시 discoverMarketplaceSkills() 또는 discoverPluginCacheSkills() 호출
  3. 스킬 로드 시 use_skill 도구가 XML 콘텐츠에 toolTranslation 삽입(244행)