@nerdev/skillset 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +351 -0
- package/bin/skillset.mjs +205 -0
- package/curations/README.md +53 -0
- package/curations/TEMPLATE/WHY.md +23 -0
- package/curations/TEMPLATE/overlay/SKILL.md +6 -0
- package/curations/impeccable/WHY.md +34 -0
- package/curations/impeccable/overlay/SKILL.md +116 -0
- package/package.json +43 -0
- package/scripts/ste-gate.mjs +39 -0
- package/scripts/ste-lint.py +201 -0
- package/scripts/sync.mjs +174 -0
- package/skills/ai-agent/agent-docs-writer/SKILL.md +105 -0
- package/skills/ai-agent/agent-docs-writer/references/principles.md +73 -0
- package/skills/ai-agent/agent-docs-writer/templates/AGENTS.template.md +44 -0
- package/skills/ai-agent/agent-docs-writer/templates/README.template.md +19 -0
- package/skills/ai-agent/ultra-context-engine/SKILL.md +941 -0
- package/skills/architecture/blueprint/SKILL.md +191 -0
- package/skills/architecture/code-tour/SKILL.md +204 -0
- package/skills/architecture/progress-guard/SKILL.md +148 -0
- package/skills/architecture/search-first/SKILL.md +97 -0
- package/skills/backend/api-design/SKILL.md +456 -0
- package/skills/backend/auth/SKILL.md +596 -0
- package/skills/backend/database/SKILL.md +431 -0
- package/skills/backend/realtime/SKILL.md +670 -0
- package/skills/backend/security/SKILL.md +590 -0
- package/skills/business/brag/SKILL.md +177 -0
- package/skills/business/brag/assets/music/README.md +20 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.json +3846 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.json +1826 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.json +2266 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.json +2806 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.json +2796 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-1-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-10-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-11-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-12-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-9-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/sfx/casino/card-fan-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-fan-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shuffle.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-5.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-6.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-7.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-8.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chip-lay-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chip-lay-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chip-lay-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-6.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-5.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-6.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-grab-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-grab-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-shake-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-shake-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-shake-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-throw-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-throw-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-throw-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMining_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/bong_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_005.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/drop_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/drop_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/drop_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/error_005.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/error_006.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/glitch_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/glitch_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/select_008.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_005.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_006.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_007.ogg +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-001.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-002.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-003.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-004.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-005.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-006.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-007.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-008.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-009.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-010.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-011.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-012.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-013.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-014.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-015.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-016.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-017.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-018.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-019.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-020.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-021.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-022.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-023.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-024.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-025.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-026.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-027.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-028.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-029.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-030.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-031.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-032.wav +0 -0
- package/skills/business/brag/assets/sfx/sfx-analysis.json +15584 -0
- package/skills/business/brag/assets/sfx/sfx-analysis.md +75 -0
- package/skills/business/brag/assets/sfx/ui/click1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click2.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click3.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click4.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click5.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/mouseclick1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover2.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover4.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover5.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch10.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch11.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch12.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch13.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch14.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch15.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch16.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch17.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch18.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch19.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch2.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch20.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch21.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch22.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch23.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch24.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch25.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch26.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch27.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch28.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch29.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch3.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch30.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch31.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch32.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch33.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch34.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch35.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch36.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch37.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch38.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch4.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch5.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch6.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch7.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch8.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch9.ogg +0 -0
- package/skills/business/brag/references/audio.md +307 -0
- package/skills/business/brag/references/step-1-inspect.md +133 -0
- package/skills/business/brag/references/step-2-plan.md +234 -0
- package/skills/business/brag/references/step-3-compose.md +210 -0
- package/skills/business/brag/references/step-4-deliver.md +168 -0
- package/skills/business/brag/references/tones.md +231 -0
- package/skills/business/brag/scripts/analyze_music_cues.py +309 -0
- package/skills/business/brag/scripts/pyproject.toml +14 -0
- package/skills/business/brag/scripts/uv.lock +819 -0
- package/skills/business/copywriting/SKILL.md +178 -0
- package/skills/business/customer-research/SKILL.md +259 -0
- package/skills/business/freelancing/SKILL.md +679 -0
- package/skills/business/launch/SKILL.md +273 -0
- package/skills/business/marketing-psychology/SKILL.md +364 -0
- package/skills/business/pricing/SKILL.md +233 -0
- package/skills/business/resume-revamp-jake-ats/SKILL.md +64 -0
- package/skills/business/startup-founder/SKILL.md +400 -0
- package/skills/business/startup-founder/references/funding.md +48 -0
- package/skills/business/startup-founder/references/further-reading.md +132 -0
- package/skills/business/startup-founder/references/gtm-tools.md +57 -0
- package/skills/business/startup-founder/references/legal-india.md +36 -0
- package/skills/business/startup-founder/references/marketing/README.md +16 -0
- package/skills/business/startup-founder/references/marketing/cold-email.md +172 -0
- package/skills/business/startup-founder/references/marketing/competitors.md +245 -0
- package/skills/business/startup-founder/references/marketing/customer-research.md +276 -0
- package/skills/business/startup-founder/references/marketing/free-tools.md +168 -0
- package/skills/business/startup-founder/references/marketing/launch.md +343 -0
- package/skills/business/startup-founder/references/marketing/marketing-plan.md +270 -0
- package/skills/business/startup-founder/references/marketing/pricing.md +237 -0
- package/skills/business/startup-founder/references/marketing/product-marketing.md +250 -0
- package/skills/business/startup-founder/references/validation.md +267 -0
- package/skills/devops/deployments/SKILL.md +339 -0
- package/skills/devops/git-ci/SKILL.md +372 -0
- package/skills/devops/performance/SKILL.md +523 -0
- package/skills/devops/testing/SKILL.md +558 -0
- package/skills/engineering/code-review/SKILL.md +149 -0
- package/skills/engineering/coding-standards/SKILL.md +229 -0
- package/skills/engineering/product-engineering/SKILL.md +219 -0
- package/skills/engineering/senior-engineer-prompts/SKILL.md +145 -0
- package/skills/engineering/tdd-workflow/SKILL.md +178 -0
- package/skills/engineering/verification-loop/SKILL.md +199 -0
- package/skills/nerdev/nerdev-abstraction/SKILL.md +412 -0
- package/skills/nerdev/nerdev-docs/SKILL.md +527 -0
- package/skills/nerdev/nerdev-docs/templates/adr-template.md +39 -0
- package/skills/nerdev/nerdev-docs/templates/contributing-template.md +140 -0
- package/skills/nerdev/nerdev-docs/templates/deploy-template.md +426 -0
- package/skills/nerdev/nerdev-docs/templates/design-template.md +105 -0
- package/skills/nerdev/nerdev-docs/templates/incident-template.md +66 -0
- package/skills/nerdev/nerdev-monorepo/SKILL.md +522 -0
- package/skills/quality/output-skill/SKILL.md +49 -0
- package/skills/quality/unslop/SKILL.md +67 -0
- package/skills/ui/animaxxing/SKILL.md +58 -0
- package/skills/ui/animaxxing/agents/openai.yaml +7 -0
- package/skills/ui/animaxxing/references/effect-restoration.md +26 -0
- package/skills/ui/animaxxing/references/motion-vocabulary.md +142 -0
- package/skills/ui/animaxxing/references/recipes/blast-off.md +119 -0
- package/skills/ui/animaxxing/references/recipes/particle-effects.md +718 -0
- package/skills/ui/animaxxing/references/recipes/particle-field.md +428 -0
- package/skills/ui/animaxxing/references/recipes/route-letters.md +205 -0
- package/skills/ui/animaxxing/references/recipes/speak-in.md +181 -0
- package/skills/ui/animaxxing/references/recipes/split-entrances.md +345 -0
- package/skills/ui/animaxxing/references/recipes/wave.md +144 -0
- package/skills/ui/animaxxing/references/text-stability.md +68 -0
- package/skills/ui/animaxxing/references/verification.md +44 -0
- package/skills/ui/ask-animation/SKILL.md +178 -0
- package/skills/ui/ask-base-ui/SKILL.md +400 -0
- package/skills/ui/ask-cmdk/SKILL.md +315 -0
- package/skills/ui/ask-command-menu/SKILL.md +262 -0
- package/skills/ui/ask-drawer/SKILL.md +235 -0
- package/skills/ui/ask-form/SKILL.md +229 -0
- package/skills/ui/ask-gsap/SKILL.md +435 -0
- package/skills/ui/ask-modal/SKILL.md +145 -0
- package/skills/ui/ask-motion/SKILL.md +339 -0
- package/skills/ui/ask-rhf/SKILL.md +388 -0
- package/skills/ui/ask-sonner/API.md +64 -0
- package/skills/ui/ask-sonner/SKILL.md +88 -0
- package/skills/ui/ask-table/SKILL.md +253 -0
- package/skills/ui/ask-tanstack-table/SKILL.md +490 -0
- package/skills/ui/ask-toast/SKILL.md +163 -0
- package/skills/ui/ask-vaul/SKILL.md +291 -0
- package/skills/ui/ask-virtual-list/SKILL.md +304 -0
- package/skills/ui/ask-virtuoso/SKILL.md +332 -0
- package/skills/ui/email-craft/SKILL.md +258 -0
- package/skills/ui/frontend-craftsmanship/SKILL.md +462 -0
- package/skills/ui/gsap-astro/SKILL.md +56 -0
- package/skills/ui/gsap-astro/agents/openai.yaml +7 -0
- package/skills/ui/gsap-astro/references/client-router-navigation.md +139 -0
- package/skills/ui/gsap-astro/references/initialization.md +87 -0
- package/skills/ui/gsap-astro/references/motion-system.md +152 -0
- package/skills/ui/gsap-astro/references/scripts-and-islands.md +65 -0
- package/skills/ui/gsap-astro/references/verification.md +44 -0
- package/skills/ui/gsap-core/SKILL.md +254 -0
- package/skills/ui/gsap-frameworks/SKILL.md +266 -0
- package/skills/ui/gsap-nextjs/SKILL.md +51 -0
- package/skills/ui/gsap-nextjs/agents/openai.yaml +7 -0
- package/skills/ui/gsap-nextjs/references/app-router-navigation.md +189 -0
- package/skills/ui/gsap-nextjs/references/initialization.md +87 -0
- package/skills/ui/gsap-nextjs/references/motion-system.md +158 -0
- package/skills/ui/gsap-nextjs/references/verification.md +40 -0
- package/skills/ui/gsap-nuxt/SKILL.md +56 -0
- package/skills/ui/gsap-nuxt/agents/openai.yaml +7 -0
- package/skills/ui/gsap-nuxt/references/initialization.md +87 -0
- package/skills/ui/gsap-nuxt/references/motion-system.md +161 -0
- package/skills/ui/gsap-nuxt/references/navigation.md +145 -0
- package/skills/ui/gsap-nuxt/references/page-transitions.md +107 -0
- package/skills/ui/gsap-nuxt/references/verification.md +42 -0
- package/skills/ui/gsap-performance/SKILL.md +79 -0
- package/skills/ui/gsap-plugins/SKILL.md +433 -0
- package/skills/ui/gsap-react/SKILL.md +136 -0
- package/skills/ui/gsap-react-router/SKILL.md +55 -0
- package/skills/ui/gsap-react-router/agents/openai.yaml +7 -0
- package/skills/ui/gsap-react-router/references/initialization.md +87 -0
- package/skills/ui/gsap-react-router/references/motion-system.md +158 -0
- package/skills/ui/gsap-react-router/references/react-router-navigation.md +165 -0
- package/skills/ui/gsap-react-router/references/route-lifetime.md +74 -0
- package/skills/ui/gsap-react-router/references/verification.md +42 -0
- package/skills/ui/gsap-scrolltrigger/SKILL.md +296 -0
- package/skills/ui/gsap-sveltekit/SKILL.md +54 -0
- package/skills/ui/gsap-sveltekit/agents/openai.yaml +7 -0
- package/skills/ui/gsap-sveltekit/references/initialization.md +87 -0
- package/skills/ui/gsap-sveltekit/references/motion-system.md +156 -0
- package/skills/ui/gsap-sveltekit/references/page-lifetime.md +63 -0
- package/skills/ui/gsap-sveltekit/references/sveltekit-navigation.md +160 -0
- package/skills/ui/gsap-sveltekit/references/verification.md +41 -0
- package/skills/ui/gsap-tanstack-router/SKILL.md +56 -0
- package/skills/ui/gsap-tanstack-router/agents/openai.yaml +7 -0
- package/skills/ui/gsap-tanstack-router/references/initialization.md +87 -0
- package/skills/ui/gsap-tanstack-router/references/motion-system.md +160 -0
- package/skills/ui/gsap-tanstack-router/references/route-lifetime.md +66 -0
- package/skills/ui/gsap-tanstack-router/references/tanstack-navigation.md +156 -0
- package/skills/ui/gsap-tanstack-router/references/verification.md +41 -0
- package/skills/ui/gsap-timeline/SKILL.md +107 -0
- package/skills/ui/gsap-utils/SKILL.md +284 -0
- package/skills/ui/gsap-vanilla/SKILL.md +63 -0
- package/skills/ui/gsap-vanilla/agents/openai.yaml +7 -0
- package/skills/ui/gsap-vanilla/references/cross-document-navigation.md +54 -0
- package/skills/ui/gsap-vanilla/references/initialization.md +87 -0
- package/skills/ui/gsap-vanilla/references/motion-system.md +150 -0
- package/skills/ui/gsap-vanilla/references/page-load.md +96 -0
- package/skills/ui/gsap-vanilla/references/spa-navigation.md +70 -0
- package/skills/ui/gsap-vanilla/references/verification.md +41 -0
- package/skills/ui/house-style/SKILL.md +366 -0
- package/skills/ui/imagegen/SKILL.md +49 -0
- package/skills/ui/imagegen/references/brandkit.md +48 -0
- package/skills/ui/imagegen/references/image-to-code.md +56 -0
- package/skills/ui/imagegen/references/mobile.md +58 -0
- package/skills/ui/imagegen/references/web.md +63 -0
- package/skills/ui/impeccable/SKILL.md +116 -0
- package/skills/ui/impeccable/reference/adapt.md +318 -0
- package/skills/ui/impeccable/reference/adapt.native.md +58 -0
- package/skills/ui/impeccable/reference/android.md +46 -0
- package/skills/ui/impeccable/reference/animate.md +89 -0
- package/skills/ui/impeccable/reference/audit.md +137 -0
- package/skills/ui/impeccable/reference/audit.native.md +139 -0
- package/skills/ui/impeccable/reference/bolder.md +33 -0
- package/skills/ui/impeccable/reference/clarify.md +94 -0
- package/skills/ui/impeccable/reference/colorize.md +86 -0
- package/skills/ui/impeccable/reference/craft-floor.md +44 -0
- package/skills/ui/impeccable/reference/craft.md +5 -0
- package/skills/ui/impeccable/reference/critique.md +806 -0
- package/skills/ui/impeccable/reference/degraded/asset-producer.md +37 -0
- package/skills/ui/impeccable/reference/degraded/documenter.md +24 -0
- package/skills/ui/impeccable/reference/degraded/finish-reviewer.md +38 -0
- package/skills/ui/impeccable/reference/degraded/manual-edit-applier.md +92 -0
- package/skills/ui/impeccable/reference/delight.md +70 -0
- package/skills/ui/impeccable/reference/distill.md +111 -0
- package/skills/ui/impeccable/reference/doctor.md +54 -0
- package/skills/ui/impeccable/reference/document.md +416 -0
- package/skills/ui/impeccable/reference/extract.md +69 -0
- package/skills/ui/impeccable/reference/generate.md +101 -0
- package/skills/ui/impeccable/reference/harden.md +345 -0
- package/skills/ui/impeccable/reference/hooks.md +111 -0
- package/skills/ui/impeccable/reference/init.md +131 -0
- package/skills/ui/impeccable/reference/ios.md +51 -0
- package/skills/ui/impeccable/reference/layout.md +84 -0
- package/skills/ui/impeccable/reference/live-setup.md +104 -0
- package/skills/ui/impeccable/reference/live.md +325 -0
- package/skills/ui/impeccable/reference/new-work.md +145 -0
- package/skills/ui/impeccable/reference/onboard.md +234 -0
- package/skills/ui/impeccable/reference/operate.md +61 -0
- package/skills/ui/impeccable/reference/optimize.md +258 -0
- package/skills/ui/impeccable/reference/overdrive.md +127 -0
- package/skills/ui/impeccable/reference/polish.md +105 -0
- package/skills/ui/impeccable/reference/quieter.md +99 -0
- package/skills/ui/impeccable/reference/routing.md +24 -0
- package/skills/ui/impeccable/reference/shape.md +59 -0
- package/skills/ui/impeccable/reference/typeset.md +80 -0
- package/skills/ui/impeccable/reference/visualize.md +46 -0
- package/skills/ui/impeccable/scripts/VERSION +1 -0
- package/skills/ui/impeccable/scripts/command-metadata.json +98 -0
- package/skills/ui/impeccable/scripts/data/font-index-failures.json +121 -0
- package/skills/ui/impeccable/scripts/data/font-index.json +1 -0
- package/skills/ui/impeccable/scripts/impeccable +206 -0
- package/skills/ui/impeccable/scripts/impeccable.cmd +214 -0
- package/skills/ui/impeccable/scripts/live-browser-dom.js +167 -0
- package/skills/ui/impeccable/scripts/live-browser-ignores.js +242 -0
- package/skills/ui/impeccable/scripts/live-browser-session.js +144 -0
- package/skills/ui/impeccable/scripts/live-browser.js +13510 -0
- package/skills/ui/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/skills/ui/motion/SKILL.md +207 -0
- package/skills/ui/pick-ui-library/SKILL.md +85 -0
- package/skills/ui/product-messaging/SKILL.md +163 -0
- package/skills/ui/product-site/SKILL.md +465 -0
- package/skills/ui/prototype/PICKER.md +197 -0
- package/skills/ui/prototype/SKILL.md +98 -0
- package/skills/ui/refero-design/SKILL.md +534 -0
- package/skills/ui/refero-design/agents/openai.yaml +4 -0
- package/skills/ui/refero-design/references/anti-ai-slop.md +292 -0
- package/skills/ui/refero-design/references/color.md +563 -0
- package/skills/ui/refero-design/references/copywriting.md +222 -0
- package/skills/ui/refero-design/references/craft-details.md +525 -0
- package/skills/ui/refero-design/references/example-workflow.md +264 -0
- package/skills/ui/refero-design/references/icons.md +166 -0
- package/skills/ui/refero-design/references/mcp-tools.md +258 -0
- package/skills/ui/refero-design/references/motion.md +504 -0
- package/skills/ui/refero-design/references/typography.md +737 -0
- package/skills/ui/refero-design/references/visual-workflow.md +105 -0
- package/skills/ui/style-animaxxing/SKILL.md +48 -0
- package/skills/ui/style-animaxxing/agents/openai.yaml +7 -0
- package/skills/ui/style-animaxxing/references/motion-vocabulary.md +51 -0
- package/skills/ui/style-animaxxing/references/tokens.md +288 -0
- package/skills/ui/style-animaxxing/references/typography-and-layout.md +149 -0
- package/skills/ui/style-animaxxing/references/verification.md +38 -0
- package/skills/ui/typography-picker/SKILL.md +305 -0
- package/skills/ui/ui-core/SKILL.md +345 -0
- package/skills/ui/ui-core/references/accessibility.md +85 -0
- package/skills/ui/ui-core/references/build.md +666 -0
- package/skills/ui/ui-core/references/copy.md +70 -0
- package/skills/ui/ui-core/references/dark-mode.md +76 -0
- package/skills/ui/ui-core/references/direction.md +99 -0
- package/skills/ui/ui-core/references/redesign.md +74 -0
- package/skills/ui/ui-core/references/responsive.md +77 -0
- package/skills/ui/ui-core/references/styles.md +42 -0
- package/skills/ui/ui-core/references/system.md +190 -0
- package/skills/ui/ui-core/references/verify.md +37 -0
- package/skills/ui/ui-engineering/SKILL.md +436 -0
- package/skills/ui/ui-engineering/references/avatars.md +74 -0
- package/skills/ui/ui-engineering/references/card-patterns.md +66 -0
- package/skills/ui/ui-engineering/references/floating-actions.md +65 -0
- package/skills/ui/ui-engineering/references/navigation.md +81 -0
- package/skills/ui/ui-engineering/references/overlays.md +74 -0
- package/skills/ui/ui-engineering/references/pagination.md +71 -0
- package/skills/ui/ui-engineering/references/progress-indicators.md +77 -0
- package/skills/ui/ui-engineering/references/quality-bar.md +293 -0
- package/skills/ui/ui-engineering/references/search.md +68 -0
- package/skills/ui/ui-engineering/references/tailwind-architecture.md +81 -0
- package/skills/ui/ui-theme-picker/SKILL.md +522 -0
- package/skills/ui/ui-theme-picker/references/component-sources.md +223 -0
- package/skills/ui/ui-theme-picker/references/styles.md +298 -0
- package/skills/ui/vitepress-docs/SKILL.md +439 -0
- package/skills/ui/vitepress-docs/references/components.md +333 -0
- package/skills/ui/vitepress-docs/references/layout.md +128 -0
- package/skills/ui/vitepress-docs/references/tokens.md +87 -0
- package/skills/ui/vitepress-docs/references/typography.md +76 -0
- package/skills/workflow/careful/SKILL.md +48 -0
- package/skills/workflow/context-restore/SKILL.md +69 -0
- package/skills/workflow/context-save/SKILL.md +96 -0
- package/skills/workflow/health/SKILL.md +99 -0
- package/skills/workflow/learn/SKILL.md +95 -0
- package/skills/workflow/office-hours/SKILL.md +136 -0
- package/skills/workflow/ship/SKILL.md +95 -0
- package/vendor.json +80 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Nalin Dalal
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
# skillset
|
|
2
|
+
|
|
3
|
+
69 agent skills in 10 categories (ui, backend, devops, architecture, engineering, quality, business, nerdev, ai-agent, workflow) with a CLI to install them into any harness (Claude Code, OpenCode, Cursor, Codex, Gemini) and a CI/CD pipeline that syncs a handful from upstream repos.
|
|
4
|
+
|
|
5
|
+
> **Owned, not copied.** Synced skills are a base, not the final word. Any skill
|
|
6
|
+
> you care about gets a `curations/<skill>/` layer that survives every upstream
|
|
7
|
+
> re-sync: your taste, your whys, never clobbered. See [Ownership model](#ownership-model).
|
|
8
|
+
|
|
9
|
+
## What's inside
|
|
10
|
+
|
|
11
|
+
### Categories
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
skills/
|
|
15
|
+
├── ui/ 28 skills Components, animations, design systems
|
|
16
|
+
├── backend/ 5 skills API, auth, database, realtime, security
|
|
17
|
+
├── devops/ 4 skills CI/CD, deployment, testing, performance
|
|
18
|
+
├── architecture/ 4 skills Planning, onboarding, research
|
|
19
|
+
├── engineering/ 4 skills TDD, code review, verification, standards
|
|
20
|
+
├── quality/ 2 skills Writing quality, anti-slop
|
|
21
|
+
├── business/ 8 skills Freelancing, startup, career, marketing
|
|
22
|
+
├── nerdev/ 3 skills Nerdev skill family
|
|
23
|
+
├── ai-agent/ 2 skills Agent docs, context management
|
|
24
|
+
└── workflow/ 7 skills Ship, context, health, learn
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Synced from upstream (5 skills, auto-updated nightly)
|
|
28
|
+
|
|
29
|
+
| Upstream | Skills |
|
|
30
|
+
| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
31
|
+
| [pbakaus/impeccable](https://github.com/pbakaus/impeccable) (59k★) | `ui/impeccable`: 23 design commands, 59 deterministic detector rules, live browser iteration |
|
|
32
|
+
| [Leonxlnx/taste-skill](https://github.com/Leonxlnx/taste-skill) (77k★) | `quality/output-skill` |
|
|
33
|
+
| [emilkowalski/skills](https://github.com/emilkowalski/skills) (30k★) | `ui/ask-sonner`, `ui/pick-ui-library`, `ui/prototype` |
|
|
34
|
+
| [cursor/plugins pstack](https://github.com/cursor/plugins/tree/main/pstack/skills/unslop) | `quality/unslop`: cuts AI tells from any writing |
|
|
35
|
+
|
|
36
|
+
These four repos are pinned in `vendor.json`. `.github/workflows/sync.yml` checks them nightly and opens a PR when they move. You never hand-copy a file from them.
|
|
37
|
+
|
|
38
|
+
### Everything else (64 skills, owned outright)
|
|
39
|
+
|
|
40
|
+
Not synced from anywhere. Written for this repo, live only here, edited directly in `skills/<category>/<name>/`.
|
|
41
|
+
|
|
42
|
+
**ui/**: `house-style` (the law: how UI, code, and docs should look and feel), `ui-engineering` (loads the rest of the UI family for a full build), `ui-core` (whole UI job: direction → system → build → verify), `typography-picker` (font pairing, type scale, text motion), `motion` (whole motion job: name → decide → build → review), `imagegen` (design-reference image generation), `frontend-craftsmanship` (product design thinking, visual systems, interaction design, reverse engineering, learning roadmap), `product-site` (product site architecture: which pages exist, what each page accomplishes, page relationships, legal/trust/support/operational pages), `product-messaging` (landing page content hierarchy, hero/value prop/section copy, what each section should actually communicate).
|
|
43
|
+
|
|
44
|
+
**Pattern → library pairs**: ask "how do I build X" and you get the pattern skill; it names the library and hands off to the library-specific guide:
|
|
45
|
+
|
|
46
|
+
| Pattern skill | Hands off to |
|
|
47
|
+
| ------------------ | --------------------------------------------------- |
|
|
48
|
+
| `ui/ask-modal` | `ui/ask-base-ui` |
|
|
49
|
+
| `ui/ask-toast` | `ui/ask-sonner` |
|
|
50
|
+
| `ui/ask-animation` | `ui/ask-motion` (or `ui/ask-gsap` for showcase-tier) |
|
|
51
|
+
| `ui/ask-form` | `ui/ask-rhf` |
|
|
52
|
+
| `ui/ask-table` | `ui/ask-tanstack-table` |
|
|
53
|
+
| `ui/ask-command-menu` | `ui/ask-cmdk` |
|
|
54
|
+
| `ui/ask-virtual-list` | `ui/ask-virtuoso` |
|
|
55
|
+
| `ui/ask-drawer` | `ui/ask-vaul` |
|
|
56
|
+
|
|
57
|
+
**backend/**: `api-design`, `auth`, `database`, `realtime`, `security`.
|
|
58
|
+
|
|
59
|
+
**devops/**: `deployments`, `git-ci`, `performance`, `testing`.
|
|
60
|
+
|
|
61
|
+
**architecture/**: `blueprint` (multi-PR construction plans), `code-tour` (guided codebase walkthroughs), `search-first` (research-before-coding), `progress-guard` (catches motion-not-progress on side work).
|
|
62
|
+
|
|
63
|
+
**engineering/**: `tdd-workflow` (RED/GREEN/REFACTOR cycle), `code-review` (confidence-weighted, noise-free review), `verification-loop` (6-phase pre-PR gate), `coding-standards` (cross-project conventions).
|
|
64
|
+
|
|
65
|
+
**quality/**: `unslop` (cuts AI tells), `output-skill` (elite writing quality).
|
|
66
|
+
|
|
67
|
+
**nerdev/**: `nerdev-monorepo` (Turborepo + Bun structure, CI/CD, deploy), `nerdev-docs` (ADRs, design docs, runbooks), `nerdev-abstraction` (interface-first, registry-based plug-and-play).
|
|
68
|
+
|
|
69
|
+
**ai-agent/**: `agent-docs-writer` (README/AGENTS.md), `ultra-context-engine` (token-efficiency layer).
|
|
70
|
+
|
|
71
|
+
**business/**: `freelancing`, `startup-founder`, `resume-revamp-jake-ats`, `pricing` (SaaS pricing strategy, value metrics, tiers), `customer-research` (interviews, surveys, persona generation, JTBD), `copywriting` (landing page copy, headlines, CTAs), `launch` (ORB framework, five-phase approach, Product Hunt), `marketing-psychology` (mental models, persuasion, buyer behavior), `brag` (turn any project into a launch video with Hyperframes).
|
|
72
|
+
|
|
73
|
+
**workflow/**: `office-hours` (YC-style product interrogation), `ship` (detect base, test, review, commit, push, PR), `careful` (destructive command guardrails), `context-save` (save working state to disk), `context-restore` (restore from saved context), `health` (code quality dashboard with composite scoring), `learn` (project learnings manager).
|
|
74
|
+
|
|
75
|
+
## Install
|
|
76
|
+
|
|
77
|
+
**Via GitHub (no npm account/token needed, always works):**
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npx github:NalinDalal/skillset install # install all skills, all harnesses (global)
|
|
81
|
+
bunx github:NalinDalal/skillset install # bun equivalent
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**From npm (if/when published as `@nalindalal/skillset`):**
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npx @nalindalal/skillset install
|
|
88
|
+
bunx @nalindalal/skillset install
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**From the repo directly:**
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
git clone https://github.com/NalinDalal/skillset.git
|
|
95
|
+
cd skillset
|
|
96
|
+
npm link # or bun link, then `skillset` is on your PATH
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Quick start (local project)
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# 1. Install skills into your project
|
|
103
|
+
cd my-project
|
|
104
|
+
skillset install --scope project --target opencode # or claude, cursor, etc.
|
|
105
|
+
|
|
106
|
+
# 2. Open your agent in that directory
|
|
107
|
+
opencode # or claude, cursor, etc.
|
|
108
|
+
|
|
109
|
+
# 3. Say what you want, the matching skill loads automatically
|
|
110
|
+
> add a toast notification to this page
|
|
111
|
+
# → ask-toast fires → hands off to ask-sonner → you get working code
|
|
112
|
+
|
|
113
|
+
# Or name a skill explicitly if it doesn't auto-load
|
|
114
|
+
> use the motion skill to review these animations
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
That's it. Skills are just markdown files your agent reads, no build step, no runtime. Install them, then talk to your agent naturally.
|
|
118
|
+
|
|
119
|
+
## Usage
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
skillset list # see all 66 skills + descriptions
|
|
123
|
+
skillset install # everything → ~/.claude, ~/.config/opencode, ~/.cursor, ~/.agents, ~/.gemini
|
|
124
|
+
skillset install --skill ui/motion # just one skill (category/name)
|
|
125
|
+
skillset install --target claude,opencode # only specific harnesses
|
|
126
|
+
skillset install --scope project # into ./project/.claude/skills etc. instead of global
|
|
127
|
+
skillset install --dry-run # preview without touching anything
|
|
128
|
+
skillset install --undo # remove everything this CLI installed
|
|
129
|
+
skillset sync # pull latest from the 4 upstream repos (local)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Restart or reload your agent after installing:
|
|
133
|
+
- **OpenCode**: just start a new session (`opencode`)
|
|
134
|
+
- **Claude Code**: `/clear` or start a new session
|
|
135
|
+
- **Cursor**: reload window (`Cmd+Shift+P` → "Reload Window")
|
|
136
|
+
- **Codex**: start a new session
|
|
137
|
+
|
|
138
|
+
## What to say for what you want
|
|
139
|
+
|
|
140
|
+
Skills fire from their description, not from a command you type. Say what you want in plain words; the closest-matching skill loads. If it doesn't auto-load, name it: _"use the motion skill to review these animations."_
|
|
141
|
+
|
|
142
|
+
**UI / frontend:**
|
|
143
|
+
|
|
144
|
+
| You say | Skill fires |
|
|
145
|
+
| -------------------------------------------------------- | ------------------------------------------------------------------ |
|
|
146
|
+
| "build the FE / build the frontend / design the UI" | `ui/ui-engineering` (loads the rest of the UI family) |
|
|
147
|
+
| "make this screen not look templated" | `ui/ui-core` |
|
|
148
|
+
| "what's it called when a popover bounces open" | `ui/motion` |
|
|
149
|
+
| "pick a design direction / theme" | `ui/ui-core`, `ui/house-style` |
|
|
150
|
+
| "pick a font / typeface / type scale / text motion" | `ui/typography-picker` |
|
|
151
|
+
| "generate a web/mobile design reference" | `ui/imagegen` |
|
|
152
|
+
| "add a modal / dialog / sheet / popover / menu / select" | `ui/ask-modal` → `ui/ask-base-ui` |
|
|
153
|
+
| "add a toast / notification / loading state" | `ui/ask-toast` → `ui/ask-sonner` |
|
|
154
|
+
| "add animations / transitions / motion" | `ui/ask-animation` → `ui/ask-motion` (or `ui/ask-gsap` for showcase) |
|
|
155
|
+
| "build a form with validation" | `ui/ask-form` → `ui/ask-rhf` |
|
|
156
|
+
| "build a data table / sorting / filtering" | `ui/ask-table` → `ui/ask-tanstack-table` |
|
|
157
|
+
| "add a command palette / ⌘K" | `ui/ask-command-menu` → `ui/ask-cmdk` |
|
|
158
|
+
| "build a virtual list / infinite scroll / feed / chat" | `ui/ask-virtual-list` → `ui/ask-virtuoso` |
|
|
159
|
+
| "add a mobile drawer / bottom sheet" | `ui/ask-drawer` → `ui/ask-vaul` |
|
|
160
|
+
| "what pages does my product site need" | `ui/product-site` (page architecture, funnel, legal/support/auth pages) |
|
|
161
|
+
| "write my landing page / hero copy / value prop" | `ui/product-messaging` (what to say, section hierarchy, actual copy) |
|
|
162
|
+
|
|
163
|
+
**Backend / dev workflow:**
|
|
164
|
+
|
|
165
|
+
| You say | Skill fires |
|
|
166
|
+
| --------------------------------------------------------------------- | ------------------------ |
|
|
167
|
+
| "design/review this REST or tRPC or GraphQL API" | `backend/api-design` |
|
|
168
|
+
| "add auth / OAuth / JWT / MFA / passwordless" | `backend/auth` |
|
|
169
|
+
| "design the Prisma schema / optimize this query" | `backend/database` |
|
|
170
|
+
| "set up CI / commit conventions / release automation" | `devops/git-ci` |
|
|
171
|
+
| "reduce bundle size / fix Core Web Vitals / find a memory leak" | `devops/performance` |
|
|
172
|
+
| "build live cursors / chat / multiplayer / presence" | `backend/realtime` |
|
|
173
|
+
| "harden security / add CSP / rate limiting / review security posture" | `backend/security` |
|
|
174
|
+
| "write tests / set up Vitest or Playwright / fix flaky tests" | `devops/testing` |
|
|
175
|
+
|
|
176
|
+
**Architecture / planning:**
|
|
177
|
+
|
|
178
|
+
| You say | Skill fires |
|
|
179
|
+
| --------------------------------------------------------------------- | -------------------------------- |
|
|
180
|
+
| "plan a complex feature / break work into PRs" | `architecture/blueprint` |
|
|
181
|
+
| "create a codebase walkthrough for onboarding" | `architecture/code-tour` |
|
|
182
|
+
| "research existing solutions before building" | `architecture/search-first` |
|
|
183
|
+
|
|
184
|
+
**Engineering / quality:**
|
|
185
|
+
|
|
186
|
+
| You say | Skill fires |
|
|
187
|
+
| --------------------------------------------------------------------- | -------------------------------- |
|
|
188
|
+
| "write tests first / use TDD" | `engineering/tdd-workflow` |
|
|
189
|
+
| "review this code / check for issues" | `engineering/code-review` |
|
|
190
|
+
| "verify before PR / run all checks" | `engineering/verification-loop` |
|
|
191
|
+
| "enforce coding standards / clean code" | `engineering/coding-standards` |
|
|
192
|
+
|
|
193
|
+
**Repo & process:**
|
|
194
|
+
|
|
195
|
+
| You say | Skill fires |
|
|
196
|
+
| ------------------------------------------------- | ------------------------------- |
|
|
197
|
+
| "help me deploy this repo to a VPS/EC2" | `devops/deployments` |
|
|
198
|
+
| "write an AGENTS.md / audit this README" | `ai-agent/agent-docs-writer` |
|
|
199
|
+
| "clean up this sloppy AI-sounding text" | `quality/unslop` |
|
|
200
|
+
| "scaffold a new Turborepo + Bun monorepo" | `nerdev/nerdev-monorepo` |
|
|
201
|
+
| "add a plug-and-play tool system with a registry" | `nerdev/nerdev-abstraction` |
|
|
202
|
+
| "create an ADR / design doc / incident template" | `nerdev/nerdev-docs` |
|
|
203
|
+
|
|
204
|
+
**Business:**
|
|
205
|
+
|
|
206
|
+
| You say | Skill fires |
|
|
207
|
+
| ---------------------------------- | ------------------------------- |
|
|
208
|
+
| "I want to start freelancing" | `business/freelancing` |
|
|
209
|
+
| "should I build this startup idea" | `business/startup-founder` |
|
|
210
|
+
| "revamp my resume for this JD" | `business/resume-revamp-jake-ats` |
|
|
211
|
+
| "help me price this SaaS" | `business/pricing` |
|
|
212
|
+
| "what are customers actually saying" | `business/customer-research` |
|
|
213
|
+
| "write copy for this landing page" | `business/copywriting` |
|
|
214
|
+
| "plan a Product Hunt launch" | `business/launch` |
|
|
215
|
+
| "why do people buy this stuff" | `business/marketing-psychology` |
|
|
216
|
+
| "make a launch video for this" | `business/brag` |
|
|
217
|
+
|
|
218
|
+
**Workflow:**
|
|
219
|
+
|
|
220
|
+
| You say | Skill fires |
|
|
221
|
+
| ---------------------------------- | ------------------------------- |
|
|
222
|
+
| "brainstorm this idea" | `workflow/office-hours` |
|
|
223
|
+
| "ship it / create a PR" | `workflow/ship` |
|
|
224
|
+
| "be careful with that command" | `workflow/careful` |
|
|
225
|
+
| "save my progress" | `workflow/context-save` |
|
|
226
|
+
| "where was I / resume" | `workflow/context-restore` |
|
|
227
|
+
| "code health check" | `workflow/health` |
|
|
228
|
+
| "what have we learned" | `workflow/learn` |
|
|
229
|
+
|
|
230
|
+
`architecture/progress-guard` and `ai-agent/ultra-context-engine` don't wait to be called by name. They run in the background whenever their trigger conditions show up in the conversation (side-work-instead-of-shipping, and token-budget pressure, respectively).
|
|
231
|
+
|
|
232
|
+
**See what's installed:** `skillset list`. **Remove one:** `skillset install --undo --skill ui/motion`.
|
|
233
|
+
|
|
234
|
+
### Using your local skills (nerdev/*)
|
|
235
|
+
|
|
236
|
+
The three `nerdev/*` skills live in `skills/nerdev/` but **aren't managed by the sync script**. They're owned directly in this repo, same as everything in "Everything else" above.
|
|
237
|
+
|
|
238
|
+
**Option A: Use from this repo (recommended)**
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# From skillset root
|
|
242
|
+
opencode # opencode.json points to ./skills
|
|
243
|
+
# skill nerdev/nerdev-monorepo → works
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Option B: Symlink globally (works everywhere)**
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
ln -sf /path/to/skillset/opencode.json ~/.config/opencode/opencode.json
|
|
250
|
+
# Now in ANY directory:
|
|
251
|
+
opencode
|
|
252
|
+
# skill nerdev/nerdev-monorepo → works
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Option C: Copy to a project**
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
cp -r /path/to/skillset/skills/nerdev/nerdev-monorepo /my-project/.opencode/skills/
|
|
259
|
+
# In /my-project:
|
|
260
|
+
opencode
|
|
261
|
+
# skill nerdev/nerdev-monorepo → works
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Compose them:**
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
skill nerdev/nerdev-monorepo # Repo skeleton + conventions
|
|
268
|
+
skill nerdev/nerdev-abstraction # Plug-and-play architecture
|
|
269
|
+
skill nerdev/nerdev-docs # Living docs + ADRs + runbooks
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
## CI/CD: how updates flow
|
|
273
|
+
|
|
274
|
+
The `.github/workflows/sync.yml` workflow runs **nightly at 03:00 UTC** (and on demand via _Actions → Sync upstream skills → Run workflow_):
|
|
275
|
+
|
|
276
|
+
1. `scripts/sync.mjs` shallow-clones each upstream repo from `vendor.json`, compares the pinned commit against `origin/HEAD`
|
|
277
|
+
2. If upstream moved, the skill folders are re-vendored into `skills/` and `vendor.json` is bumped
|
|
278
|
+
3. Every owned skill's `curations/<skill>/overlay/` is re-applied on top: upstream churn never overwrites your voice
|
|
279
|
+
4. A PR titled `chore: sync skills from upstreams` is auto-opened against `main`
|
|
280
|
+
5. Merge it, then publish:
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
npm version patch && npm publish
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
`.github/workflows/sync.yml` also runs `npm run lint:ste` on every push. Every owned `.md` file has to stay under 5.0 STE violations per 100 words (synced upstream files are exempt).
|
|
287
|
+
|
|
288
|
+
New versions flow: upstream repo → nightly sync → PR → merge → publish → `npx @nalindalal/skillset install` on any machine.
|
|
289
|
+
|
|
290
|
+
## Ownership model
|
|
291
|
+
|
|
292
|
+
Upstream SKILL.md files encode someone else's judgment about someone else's
|
|
293
|
+
codebase. The moment a skill matters to you, it should encode yours.
|
|
294
|
+
|
|
295
|
+
```text
|
|
296
|
+
curations/
|
|
297
|
+
<skill>/
|
|
298
|
+
overlay/ # your owned versions, copied over skills/<category>/<skill>/ after EVERY sync
|
|
299
|
+
WHY.md # why you own it this way; read by sync, never shipped
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
- **Pick what to own.** Upstream never ships a file you've overlaid. Your
|
|
303
|
+
version always wins. Everything else in that skill still tracks upstream.
|
|
304
|
+
- **Never edit `skills/<category>/<skill>/` directly** for the 5 synced skills. The next
|
|
305
|
+
sync deletes the folder. If you want it in your voice, put it in
|
|
306
|
+
`curations/<skill>/overlay` first. (This does not apply to the 61 owned
|
|
307
|
+
skills, those you edit directly, since nothing re-vendors them.)
|
|
308
|
+
- **Write the why.** `WHY.md` is the difference between curation and
|
|
309
|
+
copy-paste. Future-you and future agents read it.
|
|
310
|
+
|
|
311
|
+
Try it:
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
cp -R curations/TEMPLATE curations/impeccable # then fill in overlay/ + WHY.md
|
|
315
|
+
npm run sync # overlay survives, check git diff
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
## Manual sync
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
node scripts/sync.mjs # check + apply updates
|
|
322
|
+
node scripts/sync.mjs --dry-run # report only
|
|
323
|
+
node scripts/sync.mjs --repo taste-skill # one upstream only
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## Structure
|
|
327
|
+
|
|
328
|
+
```
|
|
329
|
+
skills/
|
|
330
|
+
├── ui/ # UI components, animations, design systems
|
|
331
|
+
├── backend/ # API, auth, database, realtime, security
|
|
332
|
+
├── devops/ # CI/CD, deployment, testing, performance
|
|
333
|
+
├── architecture/ # Planning, onboarding, research
|
|
334
|
+
├── engineering/ # TDD, code review, verification, standards
|
|
335
|
+
├── quality/ # Writing quality, anti-slop
|
|
336
|
+
├── business/ # Freelancing, startup, career, marketing
|
|
337
|
+
├── nerdev/ # Nerdev skill family
|
|
338
|
+
├── ai-agent/ # Agent docs, context management
|
|
339
|
+
└── workflow/ # Ship, context save/restore, health, learn
|
|
340
|
+
|
|
341
|
+
curations/<name>/ # your ownership layer: overlay/ + WHY.md (never touched by sync)
|
|
342
|
+
vendor.json # upstream repos + pinned commits + skill maps
|
|
343
|
+
scripts/sync.mjs # re-vendor logic (used by CI and manually)
|
|
344
|
+
scripts/ste-gate.mjs # STE prose-quality gate, runs on every push
|
|
345
|
+
bin/skillset.mjs # the CLI (npm bin target)
|
|
346
|
+
.github/workflows/sync.yml # nightly auto-sync + PR
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
## License
|
|
350
|
+
|
|
351
|
+
MIT: see [LICENSE](LICENSE).
|
package/bin/skillset.mjs
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* skillset: install, list, and sync agent skills from this repo.
|
|
4
|
+
*
|
|
5
|
+
* skillset list list available skills
|
|
6
|
+
* skillset install [--skill <name>]... install into agent harnesses
|
|
7
|
+
* --target claude,opencode,cursor,codex,gemini (default: all detected)
|
|
8
|
+
* --scope global|project (default: global)
|
|
9
|
+
* --dry-run
|
|
10
|
+
* skillset sync [--dry-run] re-vendor from upstream repos
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { execSync } from "node:child_process";
|
|
14
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync } from "node:fs";
|
|
15
|
+
import { homedir } from "node:os";
|
|
16
|
+
import { dirname, join, resolve } from "node:path";
|
|
17
|
+
import { fileURLToPath } from "node:url";
|
|
18
|
+
|
|
19
|
+
const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
20
|
+
const SKILLS_DIR = join(ROOT, "skills");
|
|
21
|
+
|
|
22
|
+
const HARNESSES = {
|
|
23
|
+
claude: { global: join(homedir(), ".claude", "skills"), project: ".claude/skills" },
|
|
24
|
+
opencode: { global: join(homedir(), ".config", "opencode", "skills"), project: ".opencode/skills" },
|
|
25
|
+
cursor: { global: join(homedir(), ".cursor", "skills"), project: ".cursor/skills" },
|
|
26
|
+
codex: { global: join(homedir(), ".agents", "skills"), project: ".agents/skills" },
|
|
27
|
+
gemini: { global: join(homedir(), ".gemini", "skills"), project: ".gemini/skills" },
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const args = process.argv.slice(2);
|
|
31
|
+
const command = args[0] ?? "help";
|
|
32
|
+
const rest = args.slice(1);
|
|
33
|
+
|
|
34
|
+
function flag(name) {
|
|
35
|
+
for (let i = 0; i < rest.length; i++) {
|
|
36
|
+
if (rest[i] === `--${name}`) {
|
|
37
|
+
const next = rest[i + 1];
|
|
38
|
+
if (next && !next.startsWith("--")) return next;
|
|
39
|
+
} else if (rest[i].startsWith(`--${name}=`)) {
|
|
40
|
+
return rest[i].split("=").slice(1).join("=");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
function hasFlag(name) {
|
|
46
|
+
return rest.includes(name);
|
|
47
|
+
}
|
|
48
|
+
function flagValues(name) {
|
|
49
|
+
const vals = [];
|
|
50
|
+
for (let i = 0; i < rest.length; i++) {
|
|
51
|
+
if (rest[i] === `--${name}`) {
|
|
52
|
+
const next = rest[i + 1];
|
|
53
|
+
if (next && !next.startsWith("--")) {
|
|
54
|
+
vals.push(next);
|
|
55
|
+
i++;
|
|
56
|
+
}
|
|
57
|
+
} else if (rest[i].startsWith(`--${name}=`)) {
|
|
58
|
+
vals.push(rest[i].split("=").slice(1).join("="));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return vals;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function walkSkills(dir, prefix) {
|
|
65
|
+
const results = [];
|
|
66
|
+
for (const e of readdirSync(dir, { withFileTypes: true })) {
|
|
67
|
+
if (!e.isDirectory()) continue;
|
|
68
|
+
const rel = prefix ? `${prefix}/${e.name}` : e.name;
|
|
69
|
+
const full = join(dir, e.name);
|
|
70
|
+
if (existsSync(join(full, "SKILL.md"))) {
|
|
71
|
+
results.push(rel);
|
|
72
|
+
}
|
|
73
|
+
results.push(...walkSkills(full, rel));
|
|
74
|
+
}
|
|
75
|
+
return results;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function listSkills() {
|
|
79
|
+
return walkSkills(SKILLS_DIR, "").sort();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function readDescription(relPath) {
|
|
83
|
+
try {
|
|
84
|
+
const md = readFileSync(join(SKILLS_DIR, relPath, "SKILL.md"), "utf8");
|
|
85
|
+
const m = md.match(/^description:\s*(.*)$/m);
|
|
86
|
+
if (!m) return "";
|
|
87
|
+
return m[1].replace(/^["']|["']$/g, "").slice(0, 120) + (m[1].length > 120 ? "…" : "");
|
|
88
|
+
} catch {
|
|
89
|
+
return "";
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function cmdList() {
|
|
94
|
+
const skills = listSkills();
|
|
95
|
+
console.log(`skillset: ${skills.length} skills\n`);
|
|
96
|
+
for (const name of skills) {
|
|
97
|
+
const desc = readDescription(name);
|
|
98
|
+
console.log(` ${name.padEnd(32)} ${desc}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function cmdInstall() {
|
|
103
|
+
const scope = flag("scope") ?? "global";
|
|
104
|
+
const targetFlag = flag("target");
|
|
105
|
+
const onlySkills = flagValues("skill");
|
|
106
|
+
const dry = hasFlag("--dry-run");
|
|
107
|
+
const undo = hasFlag("--undo");
|
|
108
|
+
|
|
109
|
+
const targets = targetFlag
|
|
110
|
+
? targetFlag.split(",").map((t) => t.trim()).filter(Boolean)
|
|
111
|
+
: Object.keys(HARNESSES);
|
|
112
|
+
|
|
113
|
+
const all = listSkills();
|
|
114
|
+
const allLeaf = all.map((p) => p.split("/").pop());
|
|
115
|
+
const skills = onlySkills.length
|
|
116
|
+
? onlySkills.filter((s) => all.includes(s) || allLeaf.includes(s)).map((s) => {
|
|
117
|
+
const idx = all.indexOf(s);
|
|
118
|
+
return idx >= 0 ? all[idx] : all[allLeaf.indexOf(s)];
|
|
119
|
+
})
|
|
120
|
+
: all;
|
|
121
|
+
const missing = onlySkills.filter((s) => !all.includes(s) && !allLeaf.includes(s));
|
|
122
|
+
if (missing.length) console.warn(` ! unknown skill(s): ${missing.join(", ")}. Skipped\n`);
|
|
123
|
+
|
|
124
|
+
let installed = 0;
|
|
125
|
+
for (const target of targets) {
|
|
126
|
+
const cfg = HARNESSES[target];
|
|
127
|
+
if (!cfg) {
|
|
128
|
+
console.warn(` ! unknown target "${target}" (valid: ${Object.keys(HARNESSES).join(", ")})`);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const destBase = scope === "project" ? join(process.cwd(), cfg.project) : cfg.global;
|
|
132
|
+
for (const skill of skills) {
|
|
133
|
+
const leafName = skill.split("/").pop();
|
|
134
|
+
const safeSkill = leafName.replace(/\.\./g, "").replace(/[/\\]/g, "");
|
|
135
|
+
if (safeSkill !== leafName) {
|
|
136
|
+
console.warn(` ! sanitized skill name: ${leafName} → ${safeSkill}`);
|
|
137
|
+
}
|
|
138
|
+
const dest = join(destBase, safeSkill);
|
|
139
|
+
if (dry) {
|
|
140
|
+
console.log(` ~ ${target}: would install ${skill} → ${dest}`);
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (undo) {
|
|
144
|
+
if (existsSync(dest)) {
|
|
145
|
+
rmSync(dest, { recursive: true, force: true });
|
|
146
|
+
installed++;
|
|
147
|
+
console.log(` ✗ ${target}: removed ${safeSkill}`);
|
|
148
|
+
}
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
mkdirSync(destBase, { recursive: true });
|
|
152
|
+
cpSync(join(SKILLS_DIR, skill), dest, { recursive: true });
|
|
153
|
+
installed++;
|
|
154
|
+
console.log(` ✓ ${target}: installed ${skill} → ${dest}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (dry) {
|
|
159
|
+
console.log(`\n[dry-run] would ${undo ? "remove" : "install"} ${skills.length} skill(s) ${undo ? "from" : "into"} ${targets.join(", ")} (${scope})`);
|
|
160
|
+
} else {
|
|
161
|
+
const verb = undo ? "removed" : "installed";
|
|
162
|
+
console.log(`\nDone. ${installed} skill(s) ${verb} (${scope}). Restart/reload your agent to pick them up.`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function cmdSync() {
|
|
167
|
+
const dry = hasFlag("--dry-run");
|
|
168
|
+
execSync(`${process.execPath} ${join(ROOT, "scripts", "sync.mjs")} ${dry ? "--dry-run" : ""}`, {
|
|
169
|
+
stdio: "inherit",
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function cmdHelp() {
|
|
174
|
+
console.log(`skillset: install, list, and sync agent skills.
|
|
175
|
+
|
|
176
|
+
Usage:
|
|
177
|
+
skillset list list available skills (category/name)
|
|
178
|
+
skillset install [--skill <name>] install skills into agent harnesses
|
|
179
|
+
--target <claude,opencode,cursor,codex,gemini> (default: all)
|
|
180
|
+
--scope <global|project> (default: global)
|
|
181
|
+
--dry-run
|
|
182
|
+
--undo remove installed skills
|
|
183
|
+
skillset sync [--dry-run] re-vendor skills from upstream repos
|
|
184
|
+
|
|
185
|
+
Examples:
|
|
186
|
+
skillset install # everything, global
|
|
187
|
+
skillset install --skill ui/motion --skill backend/auth
|
|
188
|
+
skillset install --target claude,opencode --scope project
|
|
189
|
+
skillset install --undo # remove everything installed
|
|
190
|
+
`);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
switch (command) {
|
|
194
|
+
case "list":
|
|
195
|
+
cmdList();
|
|
196
|
+
break;
|
|
197
|
+
case "install":
|
|
198
|
+
cmdInstall();
|
|
199
|
+
break;
|
|
200
|
+
case "sync":
|
|
201
|
+
cmdSync();
|
|
202
|
+
break;
|
|
203
|
+
default:
|
|
204
|
+
cmdHelp();
|
|
205
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Curation layer: skills are owned, not copied
|
|
2
|
+
|
|
3
|
+
Upstream SKILL.md files are a **base**, never the final word. A skill you run
|
|
4
|
+
every day should sound like *you*: it should encode how you like this codebase,
|
|
5
|
+
how you want things done, and why, not whatever the upstream author happened
|
|
6
|
+
to write.
|
|
7
|
+
|
|
8
|
+
This directory is where that ownership lives. It never gets deleted,
|
|
9
|
+
re-cloned, or overwritten by `scripts/sync.mjs`. Upstream can move, and your
|
|
10
|
+
voice survives verbatim.
|
|
11
|
+
|
|
12
|
+
## Layout
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
curations/
|
|
16
|
+
<skill>/
|
|
17
|
+
overlay/ # files copied ON TOP of skills/<skill>/ after every sync
|
|
18
|
+
WHY.md # your rationale, read by sync output, never shipped
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- `overlay/` files replace the same-named files in `skills/<skill>/` after each
|
|
22
|
+
re-vendor. Upstream updated the skill's scripts? They still land. Upstream
|
|
23
|
+
rewrote the SKILL.md with someone else's taste? Your `overlay/SKILL.md` wins.
|
|
24
|
+
- `WHY.md` is the record of intent: what you changed and why. The first line is
|
|
25
|
+
echoed in sync output so you can see the reason at a glance.
|
|
26
|
+
- Files you don't put in `overlay/` track upstream freely. Own what matters,
|
|
27
|
+
let the rest ride.
|
|
28
|
+
|
|
29
|
+
## How ownership works
|
|
30
|
+
|
|
31
|
+
1. Make a copy: `mkdir -p curations/<skill>/overlay`
|
|
32
|
+
2. Write your version of the files you own into `overlay/` (usually just
|
|
33
|
+
`SKILL.md`).
|
|
34
|
+
3. Write `WHY.md` with the real reasons: how you like things, why. This is
|
|
35
|
+
the part that makes it yours; future-you (and future agents) will ask.
|
|
36
|
+
4. Run `npm run sync` (or let CI) and the overlay is re-applied after every
|
|
37
|
+
upstream update. `git diff` shows upstream changes and your layer cleanly
|
|
38
|
+
separated.
|
|
39
|
+
|
|
40
|
+
## How to NOT use it
|
|
41
|
+
|
|
42
|
+
- Don't hand-edit `skills/<skill>/SKILL.md` directly. The next sync deletes
|
|
43
|
+
the folder and you lose it. That's the sloppiness this layer exists to kill.
|
|
44
|
+
- Don't copy a curation wholesale from someone else. The point is your
|
|
45
|
+
judgment about your codebase, not a secondhand opinion.
|
|
46
|
+
|
|
47
|
+
## Template
|
|
48
|
+
|
|
49
|
+
See `curations/TEMPLATE/` for a ready-to-fill skeleton:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
cp -R curations/TEMPLATE curations/<skill>
|
|
53
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# WHY.md: why this skill is owned, not synced
|
|
2
|
+
|
|
3
|
+
> First line is echoed by `npm run sync`. Write it like a note to future-you.
|
|
4
|
+
|
|
5
|
+
Replace this with a one-line reason (echoed in sync output).
|
|
6
|
+
|
|
7
|
+
## What I changed
|
|
8
|
+
|
|
9
|
+
- (which files in overlay/ exist and what they say)
|
|
10
|
+
|
|
11
|
+
## How I like things
|
|
12
|
+
|
|
13
|
+
- (your preferences: tone, structure, scope, when to use this skill)
|
|
14
|
+
|
|
15
|
+
## Why these changes matter to my codebase
|
|
16
|
+
|
|
17
|
+
- (what upstream gets wrong / misses about how you work, and the concrete
|
|
18
|
+
consequences of having it your way)
|
|
19
|
+
|
|
20
|
+
## Review cadence
|
|
21
|
+
|
|
22
|
+
- (when to revisit: after each upstream update? when a project hits a
|
|
23
|
+
milestone?)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
Copy this file into overlay/ as the file you want to own (usually SKILL.md),
|
|
2
|
+
then rewrite it in your voice.
|
|
3
|
+
|
|
4
|
+
The version here replaces the upstream file after every sync. Upstream
|
|
5
|
+
contributions to other files in the skill still land fresh. Only what you put
|
|
6
|
+
in overlay/ is frozen to your taste.
|