[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JM2TQR09SH4X4F4REPPWZ7":3,"skill-same:01M6JM2TQR09SH4X4F4REPPWZ7":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":13,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":6,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M6JM2TQR09SH4X4F4REPPWZ7","triforce-sync-check",null,"Verify 3-Mirror skill sync consistency across .public\u002Fskills, .codex\u002Fskills, and .claude\u002Fskills. Use after skill changes, before commits, or for CI validation.","superhealth\u002Fskills-hub","superhealth","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6292112?v=4","01M6JA6E7F21BYK5W3E4P270TT","01M6JA6EC0W8MPHKDJVBZDSEZ0",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fdoyajin174\u002Ftriforce-sync-check\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"sync","triforce sync check","check","changes","codex","for","mirror","consistency","across","community","skill sync","use","read","public","grep","Bash","commits","verify","ci","validation","2026-11-10 10:12:30",false,"---\nname: triforce-sync-check\ndescription: Verify 3-Mirror skill sync consistency across .public\u002Fskills, .codex\u002Fskills, and .claude\u002Fskills. Use after skill changes, before commits, or for CI validation.\nallowed-tools: Read, Glob, Grep, Bash\nlicense: MIT\nmetadata:\n  author: community\n  version: \"1.0\"\n---\n\n# Triforce Sync Check\n\n3-Mirror 스킬 동기화 일관성을 검증하는 스킬입니다.\n\n## Architecture\n\n```\n.public\u002Fskills\u002F     (SSOT - Single Source of Truth)\n       │\n       ├──► .codex\u002Fskills\u002F   (Mirror - Antigravity\u002FCodex)\n       │\n       └──► .claude\u002Fskills\u002F  (Mirror - Claude Code)\n```\n\n## When to Use\n\n- 스킬 추가\u002F수정\u002F삭제 후\n- 커밋 전 검증\n- CI\u002FCD 파이프라인\n- 배포 전 확인\n\n## Quick Check\n\n```bash\n# 1. 스킬 수 확인\nls -1d .public\u002Fskills\u002F*\u002F | wc -l\nls -1d .codex\u002Fskills\u002F*\u002F | wc -l\nls -1d .claude\u002Fskills\u002F*\u002F | wc -l\n\n# 2. 콘텐츠 해시 비교\nfind .public\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5\nfind .codex\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5\nfind .claude\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5\n```\n\n## Full Verification Checklist\n\n### 1. Count Verification\n\n```bash\npublic_count=$(ls -1d .public\u002Fskills\u002F*\u002F | wc -l)\ncodex_count=$(ls -1d .codex\u002Fskills\u002F*\u002F | wc -l)\nclaude_count=$(ls -1d .claude\u002Fskills\u002F*\u002F | wc -l)\n\necho \"SSOT:   $public_count\"\necho \"Codex:  $codex_count\"\necho \"Claude: $claude_count\"\n```\n\n**Pass Criteria**: 3개 값이 모두 동일\n\n### 2. Structure Verification\n\n```bash\n# 디렉토리 목록 비교\ndiff \u003C(ls -1 .public\u002Fskills | sort) \u003C(ls -1 .codex\u002Fskills | sort)\ndiff \u003C(ls -1 .public\u002Fskills | sort) \u003C(ls -1 .claude\u002Fskills | sort)\n```\n\n**Pass Criteria**: diff 출력 없음 (빈 결과)\n\n### 3. Content Verification\n\n```bash\n# SKILL.md 파일 해시 비교\npublic_hash=$(find .public\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\ncodex_hash=$(find .codex\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\nclaude_hash=$(find .claude\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\n\n[ \"$public_hash\" = \"$codex_hash\" ] && [ \"$public_hash\" = \"$claude_hash\" ]\n```\n\n**Pass Criteria**: 3개 해시가 모두 동일\n\n### 4. YAML Validation\n\n```bash\n# 각 SKILL.md의 frontmatter 유효성\nfor skill in .public\u002Fskills\u002F*\u002FSKILL.md; do\n  name=$(grep \"^name:\" \"$skill\" | head -1)\n  desc=$(grep \"^description:\" \"$skill\" | head -1)\n  if [ -z \"$name\" ] || [ -z \"$desc\" ]; then\n    echo \"INVALID: $skill\"\n  fi\ndone\n```\n\n**Pass Criteria**: INVALID 출력 없음\n\n### 5. Duplicate Check\n\n```bash\n# name 필드 중복 확인\ngrep -h \"^name:\" .public\u002Fskills\u002F*\u002FSKILL.md | sort | uniq -c | grep -v \"^ *1 \"\n```\n\n**Pass Criteria**: 출력 없음 (중복 없음)\n\n## Sync Command\n\n불일치 발견 시 재동기화:\n\n```bash\nnode scripts\u002Fsync-skills.js\n```\n\n## CI Integration\n\n```yaml\n# .github\u002Fworkflows\u002Fskills-check.yml\n- name: Triforce Sync Check\n  run: |\n    public=$(ls -1d .public\u002Fskills\u002F*\u002F | wc -l)\n    codex=$(ls -1d .codex\u002Fskills\u002F*\u002F | wc -l)\n    claude=$(ls -1d .claude\u002Fskills\u002F*\u002F | wc -l)\n\n    if [ \"$public\" != \"$codex\" ] || [ \"$public\" != \"$claude\" ]; then\n      echo \"❌ Mirror count mismatch\"\n      exit 1\n    fi\n\n    pub=$(find .public\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\n    cx=$(find .codex\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\n    cl=$(find .claude\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\n\n    if [ \"$pub\" != \"$cx\" ] || [ \"$pub\" != \"$cl\" ]; then\n      echo \"❌ Content hash mismatch\"\n      exit 1\n    fi\n\n    echo \"✅ Triforce sync verified\"\n```\n\n## Troubleshooting\n\n| 증상 | 원인 | 해결 |\n|------|------|------|\n| 수 불일치 | sync 미실행 | `node scripts\u002Fsync-skills.js` |\n| 해시 불일치 | 직접 미러 수정 | SSOT 수정 후 sync |\n| YAML 오류 | frontmatter 형식 | name\u002Fdescription 확인 |\n| 중복 name | 복사 붙여넣기 실수 | 고유한 name으로 수정 |\n\n## Pass\u002FFail Summary\n\n```\n✅ PASS 조건:\n- Count: github = codex = claude\n- Structure: 동일한 디렉토리 목록\n- Content: 동일한 해시값\n- YAML: 모든 스킬에 name + description\n- Unique: 중복 name 없음\n\n❌ FAIL 시:\n1. 오류 유형 식별\n2. SSOT (.public\u002Fskills) 수정\n3. sync-skills.js 실행\n4. 재검증\n```\n","# Triforce Sync Check\n\n3-Mirror 스킬 동기화 일관성을 검증하는 스킬입니다.\n\n## Architecture\n\n```\n.public\u002Fskills\u002F     (SSOT - Single Source of Truth)\n       │\n       ├──► .codex\u002Fskills\u002F   (Mirror - Antigravity\u002FCodex)\n       │\n       └──► .claude\u002Fskills\u002F  (Mirror - Claude Code)\n```\n\n## When to Use\n\n- 스킬 추가\u002F수정\u002F삭제 후\n- 커밋 전 검증\n- CI\u002FCD 파이프라인\n- 배포 전 확인\n\n## Quick Check\n\n```bash\n# 1. 스킬 수 확인\nls -1d .public\u002Fskills\u002F*\u002F | wc -l\nls -1d .codex\u002Fskills\u002F*\u002F | wc -l\nls -1d .claude\u002Fskills\u002F*\u002F | wc -l\n\n# 2. 콘텐츠 해시 비교\nfind .public\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5\nfind .codex\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5\nfind .claude\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5\n```\n\n## Full Verification Checklist\n\n### 1. Count Verification\n\n```bash\npublic_count=$(ls -1d .public\u002Fskills\u002F*\u002F | wc -l)\ncodex_count=$(ls -1d .codex\u002Fskills\u002F*\u002F | wc -l)\nclaude_count=$(ls -1d .claude\u002Fskills\u002F*\u002F | wc -l)\n\necho \"SSOT:   $public_count\"\necho \"Codex:  $codex_count\"\necho \"Claude: $claude_count\"\n```\n\n**Pass Criteria**: 3개 값이 모두 동일\n\n### 2. Structure Verification\n\n```bash\n# 디렉토리 목록 비교\ndiff \u003C(ls -1 .public\u002Fskills | sort) \u003C(ls -1 .codex\u002Fskills | sort)\ndiff \u003C(ls -1 .public\u002Fskills | sort) \u003C(ls -1 .claude\u002Fskills | sort)\n```\n\n**Pass Criteria**: diff 출력 없음 (빈 결과)\n\n### 3. Content Verification\n\n```bash\n# SKILL.md 파일 해시 비교\npublic_hash=$(find .public\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\ncodex_hash=$(find .codex\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\nclaude_hash=$(find .claude\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\n\n[ \"$public_hash\" = \"$codex_hash\" ] && [ \"$public_hash\" = \"$claude_hash\" ]\n```\n\n**Pass Criteria**: 3개 해시가 모두 동일\n\n### 4. YAML Validation\n\n```bash\n# 각 SKILL.md의 frontmatter 유효성\nfor skill in .public\u002Fskills\u002F*\u002FSKILL.md; do\n  name=$(grep \"^name:\" \"$skill\" | head -1)\n  desc=$(grep \"^description:\" \"$skill\" | head -1)\n  if [ -z \"$name\" ] || [ -z \"$desc\" ]; then\n    echo \"INVALID: $skill\"\n  fi\ndone\n```\n\n**Pass Criteria**: INVALID 출력 없음\n\n### 5. Duplicate Check\n\n```bash\n# name 필드 중복 확인\ngrep -h \"^name:\" .public\u002Fskills\u002F*\u002FSKILL.md | sort | uniq -c | grep -v \"^ *1 \"\n```\n\n**Pass Criteria**: 출력 없음 (중복 없음)\n\n## Sync Command\n\n불일치 발견 시 재동기화:\n\n```bash\nnode scripts\u002Fsync-skills.js\n```\n\n## CI Integration\n\n```yaml\n# .github\u002Fworkflows\u002Fskills-check.yml\n- name: Triforce Sync Check\n  run: |\n    public=$(ls -1d .public\u002Fskills\u002F*\u002F | wc -l)\n    codex=$(ls -1d .codex\u002Fskills\u002F*\u002F | wc -l)\n    claude=$(ls -1d .claude\u002Fskills\u002F*\u002F | wc -l)\n\n    if [ \"$public\" != \"$codex\" ] || [ \"$public\" != \"$claude\" ]; then\n      echo \"❌ Mirror count mismatch\"\n      exit 1\n    fi\n\n    pub=$(find .public\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\n    cx=$(find .codex\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\n    cl=$(find .claude\u002Fskills -name \"SKILL.md\" -exec md5 -q {} \\; | sort | md5)\n\n    if [ \"$pub\" != \"$cx\" ] || [ \"$pub\" != \"$cl\" ]; then\n      echo \"❌ Content hash mismatch\"\n      exit 1\n    fi\n\n    echo \"✅ Triforce sync verified\"\n```\n\n## Troubleshooting\n\n| 증상 | 원인 | 해결 |\n|------|------|------|\n| 수 불일치 | sync 미실행 | `node scripts\u002Fsync-skills.js` |\n| 해시 불일치 | 직접 미러 수정 | SSOT 수정 후 sync |\n| YAML 오류 | frontmatter 형식 | name\u002Fdescription 확인 |\n| 중복 name | 복사 붙여넣기 실수 | 고유한 name으로 수정 |\n\n## Pass\u002FFail Summary\n\n```\n✅ PASS 조건:\n- Count: github = codex = claude\n- Structure: 동일한 디렉토리 목록\n- Content: 동일한 해시값\n- YAML: 모든 스킬에 name + description\n- Unique: 중복 name 없음\n\n❌ FAIL 시:\n1. 오류 유형 식별\n2. SSOT (.public\u002Fskills) 수정\n3. sync-skills.js 실행\n4. 재검증\n```\n",{"name":5,"license":14,"metadata":43,"description":7,"allowed-tools":45},{"author":27,"version":44},"1.0","Read, Glob, Grep, Bash","master","08cc2532077058aa50e6e18f54695bc256c88152","skills\u002Fdoyajin174\u002Ftriforce-sync-check","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub","https:\u002F\u002Fgithub.com\u002Fsuperhealth","java engineer","2026-04-06 22:07:23",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add superhealth\u002Fskills-hub --skill triforce-sync-check",{"tool":59,"command":60},"bunx","bunx skills add superhealth\u002Fskills-hub --skill triforce-sync-check",{"tool":62,"command":63},"pnpm","pnpm dlx skills add superhealth\u002Fskills-hub --skill triforce-sync-check","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fdoyajin174\u002Ftriforce-sync-check\u002FSKILL.md",true,[67],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"skill-report.json","REFERENCE","参考文档",12833,"https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fdoyajin174\u002Ftriforce-sync-check\u002Fskill-report.json",[74,106,132,145,161,185],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":85,"publishedAt":38},"01M6MC9F3WHV8S8FZ2W4TRB0FE","vercel-react-best-practices","React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React\u002FNext.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fzhanlincui\u002Fvercel-react-best-practices\u002FSKILL.md",[80],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105],"react","vercel react best practices","best practices","vercel","react best practices","data fetching","code","triggers","pages","next","patterns","refactoring","data","Optimization","tasks","guidelines","react components","components","performance","writing",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":116,"publishedAt":38},"01M6MB8KWE1Q5A5KERR7RFTQWP","vue-testing-best-practices","Use for Vue.js testing. Covers Vitest, Vue Test Utils, component testing, mocking, testing patterns, and Playwright for E2E testing.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fvuejs-ai\u002Fvue-testing-best-practices\u002FSKILL.md",[112,115],{"categoryNo":113,"categoryName":114,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[117,118,119,88,120,121,122,123,124,29,125,96,126,127,23,128,129,130,131],"vue testing best practices","testing best practices","vue","testing","testing patterns","js","e2e","vitest","component","test","mocking","utils","e2e testing","github","playwright",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":139,"publishedAt":38},"01M6MB8GK06M6GA4KVYNDV1BZP","vue-router-best-practices","Vue Router 4 patterns, navigation guards, route params, and route-component lifecycle interactions.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fvuejs-ai\u002Fvue-router-best-practices\u002FSKILL.md",[138],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[88,119,140,141,142,96,143,144,125,130],"router","vue router best practices","route","navigation","lifecycle",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":152,"publishedAt":38},"01M6MB8DQF21TZMQ9XC3745ERW","vue-pinia-best-practices","Pinia stores, state management patterns, store setup, and reactivity with stores.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fvuejs-ai\u002Fvue-pinia-best-practices\u002FSKILL.md",[151],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[153,154,119,88,155,156,96,157,158,159,160,130],"vue pinia best practices","pinia","with","store","management","state","state management","setup",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":176,"publishedAt":38},"01M6MB8A7MC08747J9TV4GWQ9A","vue-options-api-best-practices","Vue 3 Options API style (data(), methods, this context). Each reference shows Options API solution only.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fvuejs-ai\u002Fvue-options-api-best-practices\u002FSKILL.md",[167,168,171],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},{"categoryNo":169,"categoryName":170,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":172,"categoryName":173,"taxonomyType":174,"taxonomyTypeDesc":175},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[119,177,178,179,88,180,181,182,183,98,130,184],"options","vue options api best practices","api","methods","reference","only","context","style",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":192,"publishedAt":38},"01M6MB85ZTQC24Q04X49MM4YXN","vue-development-guides","A collection of best practices and tips for developing applications using Vue.js. This skill MUST be apply when developing, refactoring or reviewing Vue.js or Nuxt projects.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fvuejs-ai\u002Fvue-development-guides\u002FSKILL.md",[191],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[193,119,194,195,130,196,197,23,198,199,200,122,97,201,202,88],"development","guides","vue development guides","tips","apply","project","nuxt","projects","collection","applications"]