Claude Code Plugins

Community-maintained marketplace

Feedback

SEMO 패키지 소스와 .claude/ 동기화 자동화. Use when (1) Agent/Skill/Command 변경 후 동기화, (2) 서브모듈 업데이트 후 심볼릭 링크 동기화, (3) 버저닝 완료 후 배포 준비.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name package-sync
description SEMO 패키지 소스와 .claude/ 동기화 자동화. Use when (1) Agent/Skill/Command 변경 후 동기화, (2) 서브모듈 업데이트 후 심볼릭 링크 동기화, (3) 버저닝 완료 후 배포 준비.
tools Bash, Read, Grep

🔔 시스템 메시지: 이 Skill이 호출되면 [SEMO] Skill: package-sync 호출 - {대상 패키지} 시스템 메시지를 첫 줄에 출력하세요.

package-sync Skill

SEMO 패키지 소스 → .claude/ 디렉토리 동기화 자동화

SoT 참조: 패키징 규칙은 semo-core/PACKAGING.md에서 관리됩니다.

Purpose

  1. docs 레포: sax/packages/{package}/ 소스를 .claude/{package}/로 동기화
  2. 로컬 환경: 서브모듈 업데이트 후 .claude/ 심볼릭 링크 동기화
  3. 무결성 검증: 동기화 상태만 검증 (수정 없이)

호출 모드

모드 동작 사용 상황
(기본) 동기화 실행 수동 동기화 요청 시
--check-only 검증만 수행, 불일치 리포트 version-updater에서 호출 시

--check-only 모드

동기화 실행 없이 현재 상태만 검증합니다:

# 심볼릭 링크 상태 검증
for type in skills agents; do
  for link in .claude/$type/*/; do
    [ -L "${link%/}" ] || continue
    target=$(readlink "${link%/}")
    [ -e "${link%/}" ] && echo "✅ $type/$(basename $link)" || echo "❌ $type/$(basename $link) → 깨진 링크"
  done
done

출력 포맷 (version-updater 파싱용):

[SEMO] Skill: package-sync --check-only 실행

## 동기화 상태 검증

| 유형 | 정상 | 깨진 링크 | 누락 |
|------|------|----------|------|
| Skills | 8 | 0 | 0 |
| Agents | 5 | 1 | 2 |
| Commands | 4 | 0 | 0 |

**결과**: ⚠️ 불일치 발견 (자동 수정 필요)

결과 상태:

  • ✅ 동기화 정상 - 모든 링크 정상
  • ⚠️ 불일치 발견 - 수정 필요 (version-updater가 동기화 실행 결정)

Quick Start

docs 레포 동기화

# SEMO-PO 동기화
rsync -av --delete --exclude='.git' \
  sax/packages/semo-po/ \
  .claude/semo-po/

# SEMO-Meta 동기화
rsync -av --delete --exclude='.git' \
  sax/packages/semo-meta/ \
  .claude/semo-meta/

로컬 심볼릭 링크 동기화

# 서브모듈 업데이트 후 실행
package-sync --symlinks

심볼릭 링크 동기화 (--symlinks)

서브모듈 업데이트 후 .claude/ 심볼릭 링크를 동기화합니다.

동기화 대상

유형 소스 대상
Skills .claude/semo-meta/skills/* .claude/skills/{name}
Skills .claude/semo-core/skills/* .claude/skills/{name}
Agents .claude/semo-meta/agents/* .claude/agents/{name}
Agents .claude/semo-core/agents/* .claude/agents/{name}
Commands .claude/semo-meta/commands/* .claude/commands/{name}

동기화 워크플로우

1. 서브모듈 업데이트
   git submodule update --remote --merge

2. 기존 끊어진 링크 정리
   find .claude/skills -type l ! -exec test -e {} \; -delete
   find .claude/agents -type l ! -exec test -e {} \; -delete
   find .claude/commands -type l ! -exec test -e {} \; -delete

3. semo-core 컴포넌트 링크 (우선순위 낮음)
   for skill in .claude/semo-core/skills/*/; do
     name=$(basename "$skill")
     ln -sf "../semo-core/skills/$name" ".claude/skills/$name"
   done

4. semo-meta 컴포넌트 링크 (우선순위 높음, 덮어쓰기)
   for skill in .claude/semo-meta/skills/*/; do
     name=$(basename "$skill")
     ln -sf "../semo-meta/skills/$name" ".claude/skills/$name"
   done

5. 결과 검증
   ls -la .claude/skills/

우선순위 규칙

semo-meta > semo-core: 동일 이름 컴포넌트가 있으면 semo-meta가 우선

컴포넌트 semo-core semo-meta 결과
version-updater semo-core
notify-slack semo-core
version-manager semo-meta
package-sync semo-meta

동기화 스크립트

#!/bin/bash
# sync-symlinks.sh

CLAUDE_DIR=".claude"

# 끊어진 심볼릭 링크 제거
echo "🧹 Cleaning broken symlinks..."
find "$CLAUDE_DIR/skills" -type l ! -exec test -e {} \; -delete 2>/dev/null
find "$CLAUDE_DIR/agents" -type l ! -exec test -e {} \; -delete 2>/dev/null
find "$CLAUDE_DIR/commands" -type l ! -exec test -e {} \; -delete 2>/dev/null

# semo-core 링크 (우선순위 낮음)
echo "🔗 Linking semo-core components..."
if [ -d "$CLAUDE_DIR/semo-core/skills" ]; then
  for skill in "$CLAUDE_DIR/semo-core/skills"/*/; do
    [ -d "$skill" ] || continue
    name=$(basename "$skill")
    ln -sf "../semo-core/skills/$name" "$CLAUDE_DIR/skills/$name"
  done
fi

if [ -d "$CLAUDE_DIR/semo-core/agents" ]; then
  for agent in "$CLAUDE_DIR/semo-core/agents"/*/; do
    [ -d "$agent" ] || continue
    name=$(basename "$agent")
    ln -sf "../semo-core/agents/$name" "$CLAUDE_DIR/agents/$name"
  done
fi

# semo-meta 링크 (우선순위 높음, 덮어쓰기)
echo "🔗 Linking semo-meta components..."
if [ -d "$CLAUDE_DIR/semo-meta/skills" ]; then
  for skill in "$CLAUDE_DIR/semo-meta/skills"/*/; do
    [ -d "$skill" ] || continue
    name=$(basename "$skill")
    ln -sf "../semo-meta/skills/$name" "$CLAUDE_DIR/skills/$name"
  done
fi

if [ -d "$CLAUDE_DIR/semo-meta/agents" ]; then
  for agent in "$CLAUDE_DIR/semo-meta/agents"/*/; do
    [ -d "$agent" ] || continue
    name=$(basename "$agent")
    ln -sf "../semo-meta/agents/$name" "$CLAUDE_DIR/agents/$name"
  done
fi

if [ -d "$CLAUDE_DIR/semo-meta/commands" ]; then
  for cmd in "$CLAUDE_DIR/semo-meta/commands"/*/; do
    [ -d "$cmd" ] || continue
    name=$(basename "$cmd")
    ln -sf "../../semo-meta/commands/$name" "$CLAUDE_DIR/commands/$name"
  done
fi

echo "✅ Symlink sync complete!"
ls -la "$CLAUDE_DIR/skills/"

Supported Packages

패키지 소스 경로 대상 경로 비고
semo-po sax/packages/semo-po/ .claude/semo-po/ PO/기획자용
semo-meta sax/packages/semo-meta/ .claude/semo-meta/ SEMO 개발용
semo-core .claude/semo-core/ 심볼릭 링크 공통 컴포넌트

SEMO Message

[SEMO] Skill: package-sync 실행

[SEMO] Sync: {package} 동기화 완료 ({file_count}개 파일)

[SEMO] Sync: 심볼릭 링크 동기화 완료
- Skills: {skill_count}개
- Agents: {agent_count}개
- Commands: {command_count}개

Related

References

For detailed documentation, see: