Marketplace triforce-sync-check
Verify 3-Mirror skill sync consistency across .public/skills, .codex/skills, and .claude/skills. Use after skill changes, before commits, or for CI validation.
install
source · Clone the upstream repo
git clone https://github.com/aiskillstore/marketplace
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/aiskillstore/marketplace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/doyajin174/triforce-sync-check" ~/.claude/skills/aiskillstore-marketplace-triforce-sync-check && rm -rf "$T"
manifest:
skills/doyajin174/triforce-sync-check/SKILL.mdsource content
Triforce Sync Check
3-Mirror 스킬 동기화 일관성을 검증하는 스킬입니다.
Architecture
.public/skills/ (SSOT - Single Source of Truth) │ ├──► .codex/skills/ (Mirror - Antigravity/Codex) │ └──► .claude/skills/ (Mirror - Claude Code)
When to Use
- 스킬 추가/수정/삭제 후
- 커밋 전 검증
- CI/CD 파이프라인
- 배포 전 확인
Quick Check
# 1. 스킬 수 확인 ls -1d .public/skills/*/ | wc -l ls -1d .codex/skills/*/ | wc -l ls -1d .claude/skills/*/ | wc -l # 2. 콘텐츠 해시 비교 find .public/skills -name "SKILL.md" -exec md5 -q {} \; | sort | md5 find .codex/skills -name "SKILL.md" -exec md5 -q {} \; | sort | md5 find .claude/skills -name "SKILL.md" -exec md5 -q {} \; | sort | md5
Full Verification Checklist
1. Count Verification
public_count=$(ls -1d .public/skills/*/ | wc -l) codex_count=$(ls -1d .codex/skills/*/ | wc -l) claude_count=$(ls -1d .claude/skills/*/ | wc -l) echo "SSOT: $public_count" echo "Codex: $codex_count" echo "Claude: $claude_count"
Pass Criteria: 3개 값이 모두 동일
2. Structure Verification
# 디렉토리 목록 비교 diff <(ls -1 .public/skills | sort) <(ls -1 .codex/skills | sort) diff <(ls -1 .public/skills | sort) <(ls -1 .claude/skills | sort)
Pass Criteria: diff 출력 없음 (빈 결과)
3. Content Verification
# SKILL.md 파일 해시 비교 public_hash=$(find .public/skills -name "SKILL.md" -exec md5 -q {} \; | sort | md5) codex_hash=$(find .codex/skills -name "SKILL.md" -exec md5 -q {} \; | sort | md5) claude_hash=$(find .claude/skills -name "SKILL.md" -exec md5 -q {} \; | sort | md5) [ "$public_hash" = "$codex_hash" ] && [ "$public_hash" = "$claude_hash" ]
Pass Criteria: 3개 해시가 모두 동일
4. YAML Validation
# 각 SKILL.md의 frontmatter 유효성 for skill in .public/skills/*/SKILL.md; do name=$(grep "^name:" "$skill" | head -1) desc=$(grep "^description:" "$skill" | head -1) if [ -z "$name" ] || [ -z "$desc" ]; then echo "INVALID: $skill" fi done
Pass Criteria: INVALID 출력 없음
5. Duplicate Check
# name 필드 중복 확인 grep -h "^name:" .public/skills/*/SKILL.md | sort | uniq -c | grep -v "^ *1 "
Pass Criteria: 출력 없음 (중복 없음)
Sync Command
불일치 발견 시 재동기화:
node scripts/sync-skills.js
CI Integration
# .github/workflows/skills-check.yml - name: Triforce Sync Check run: | public=$(ls -1d .public/skills/*/ | wc -l) codex=$(ls -1d .codex/skills/*/ | wc -l) claude=$(ls -1d .claude/skills/*/ | wc -l) if [ "$public" != "$codex" ] || [ "$public" != "$claude" ]; then echo "❌ Mirror count mismatch" exit 1 fi pub=$(find .public/skills -name "SKILL.md" -exec md5 -q {} \; | sort | md5) cx=$(find .codex/skills -name "SKILL.md" -exec md5 -q {} \; | sort | md5) cl=$(find .claude/skills -name "SKILL.md" -exec md5 -q {} \; | sort | md5) if [ "$pub" != "$cx" ] || [ "$pub" != "$cl" ]; then echo "❌ Content hash mismatch" exit 1 fi echo "✅ Triforce sync verified"
Troubleshooting
| 증상 | 원인 | 해결 |
|---|---|---|
| 수 불일치 | sync 미실행 | |
| 해시 불일치 | 직접 미러 수정 | SSOT 수정 후 sync |
| YAML 오류 | frontmatter 형식 | name/description 확인 |
| 중복 name | 복사 붙여넣기 실수 | 고유한 name으로 수정 |
Pass/Fail Summary
✅ PASS 조건: - Count: github = codex = claude - Structure: 동일한 디렉토리 목록 - Content: 동일한 해시값 - YAML: 모든 스킬에 name + description - Unique: 중복 name 없음 ❌ FAIL 시: 1. 오류 유형 식별 2. SSOT (.public/skills) 수정 3. sync-skills.js 실행 4. 재검증