Use when you have a written implementation plan to execute in a separate session with review checkpoints
npx skills add 30eggis/claude-frontend-skills --skill "spec-component-loader"
Install specific skill from multi-skill repository
# Description
|
# SKILL.md
name: spec-component-loader
description: |
์ ์ง์ ์ผ๋ก ์ปดํฌ๋ํธ ์คํ์ ๋ก๋ฉํฉ๋๋ค.
์นดํ
๊ณ ๋ฆฌ๋ณ, ์ฐ์ ์์๋ณ, ์์กด์ฑ ๊ธฐ๋ฐ ๋ก๋ฉ ์ง์.
Agent์ ์ปจํ
์คํธ ํจ์จ์ฑ์ ์ํด ํ์ํ ๋ถ๋ถ๋ง ์ ํ์ ์ผ๋ก ๋ก๋ฉํฉ๋๋ค.
allowed-tools: Read, Glob, Grep
argument-hint: "
permissionMode: bypassPermissions
spec-component-loader
์ปดํฌ๋ํธ ์คํ์ ์ ์ง์ ์ผ๋ก ๋ก๋ฉํ์ฌ Agent์ ์ปจํ ์คํธ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
์ฌ์ฉ ๋ชฉ์
- ์ปดํฌ๋ํธ ์คํ์ด ๋ง์ผ๋ฉด Agent ํธ์ถ ์ ์ปจํ ์คํธ ์ด๊ณผ ์ํ
- ํ์ํ ์ปดํฌ๋ํธ๋ง ์ ์ง์ ์ผ๋ก ๋ก๋ฉ
- ์์กด์ฑ ๊ทธ๋ํ๋ฅผ ๊ณ ๋ คํ ํจ์จ์ ์ธ ๊ตฌํ ์์ ์ ๊ณต
์ฌ์ฉ๋ฒ
์ ์ฒด ์ปดํฌ๋ํธ ๋ชฉ๋ก
/spec-component-loader {spec-folder} --list
์ถ๋ ฅ:
# ์ปดํฌ๋ํธ ๋ชฉ๋ก
## ์นดํ
๊ณ ๋ฆฌ๋ณ ๋ถ๋ฅ
### Layout (4๊ฐ)
- Header
- Sidebar
- Footer
- MainLayout
### Cards (6๊ฐ)
- StockCard
- PortfolioCard
- NewsCard
- AlertCard
- WatchlistCard
- SummaryCard
### Display (8๊ฐ)
- PriceDisplay
- ChangeIndicator
- Sparkline
- ChartWidget
- DataTable
- Badge
- Tooltip
- Avatar
### Forms (5๊ฐ)
- SearchInput
- OrderForm
- AlertForm
- SettingsForm
- LoginForm
### Feedback (3๊ฐ)
- Toast
- LoadingSpinner
- ErrorBoundary
## ์์กด์ฑ ์์ฝ
| ์ปดํฌ๋ํธ | ์์กด | ํผ์์กด | ๋ณต์ก๋ |
|----------|------|--------|--------|
| StockCard | 3 | 5 | HIGH |
| PriceDisplay | 1 | 8 | MEDIUM |
| Header | 2 | 1 | LOW |
์นดํ ๊ณ ๋ฆฌ๋ณ ๋ก๋ฉ
/spec-component-loader {spec-folder} --category layout
/spec-component-loader {spec-folder} --category cards
/spec-component-loader {spec-folder} --category display
/spec-component-loader {spec-folder} --category forms
์ถ๋ ฅ: ํด๋น ์นดํ ๊ณ ๋ฆฌ์ ๋ชจ๋ ์ปดํฌ๋ํธ ์คํ ์ ์ฒด ๋ด์ฉ
ํน์ ์ปดํฌ๋ํธ ๋ก๋ฉ
/spec-component-loader {spec-folder} --name StockCard
/spec-component-loader {spec-folder} --name PriceDisplay
์ถ๋ ฅ: ํด๋น ์ปดํฌ๋ํธ์ ์คํ ์ ์ฒด ๋ด์ฉ
์์กด์ฑ ํฌํจ ๋ก๋ฉ
/spec-component-loader {spec-folder} --name StockCard --with-deps
์ถ๋ ฅ:
# StockCard + ์์กด์ฑ
## ์์กด์ฑ ํธ๋ฆฌ
StockCard
โโโ PriceDisplay (display)
โโโ ChangeIndicator (display)
โโโ Sparkline (display)
## 1. PriceDisplay (์์กด์ฑ)
{PriceDisplay spec content}
## 2. ChangeIndicator (์์กด์ฑ)
{ChangeIndicator spec content}
## 3. Sparkline (์์กด์ฑ)
{Sparkline spec content}
## 4. StockCard (๋์)
{StockCard spec content}
Gap Analysis (๋ฏธ๊ตฌํ ์ปดํฌ๋ํธ)
/spec-component-loader {spec-folder} --gap
์ถ๋ ฅ:
# ์ปดํฌ๋ํธ Gap Analysis
## ๋ฏธ๊ตฌํ ์ปดํฌ๋ํธ (12๊ฐ)
### ์ฐ์ ์์๋ณ
| ์ฐ์ ์์ | ์ปดํฌ๋ํธ | ์นดํ
๊ณ ๋ฆฌ | ๋ณต์ก๋ |
|----------|----------|----------|--------|
| P0 | StockCard | cards | HIGH |
| P0 | PriceDisplay | display | MEDIUM |
| P1 | Header | layout | LOW |
| ... |
## ๊ถ์ฅ ๊ตฌํ ์์
1. PriceDisplay (display) - ์์กด์ฑ ์์, 8๊ฐ ์ปดํฌ๋ํธ๊ฐ ์์กด
2. ChangeIndicator (display) - ์์กด์ฑ ์์, 5๊ฐ ์ปดํฌ๋ํธ๊ฐ ์์กด
3. Sparkline (display) - ์์กด์ฑ ์์, 3๊ฐ ์ปดํฌ๋ํธ๊ฐ ์์กด
4. StockCard (cards) - ์ 3๊ฐ ์์กด, P0 ์ฐ์ ์์
...
## ๊ตฌํ ๋ฐฐ์น (๋ณ๋ ฌํ ๊ฐ๋ฅ)
### Batch 1 (์์กด์ฑ ์์)
- PriceDisplay
- ChangeIndicator
- Sparkline
- Badge
### Batch 2 (Batch 1 ์๋ฃ ํ)
- StockCard
- PortfolioCard
- AlertCard
### Batch 3
...
Spec ํด๋ ๊ตฌ์กฐ
{spec-folder}/03-components/
โโโ component-inventory.md โ ์ ์ฒด ์ปดํฌ๋ํธ ๋ชฉ๋ก
โโโ gap-analysis.md โ Gap ๋ถ์ ๊ฒฐ๊ณผ
โโโ specs/
โโโ layout/
โ โโโ Header.md โ Markdown (legacy)
โ โโโ Header.yaml โ YAML (preferred)
โ โโโ Sidebar.md
โ โโโ Footer.md
โโโ cards/
โ โโโ StockCard.md
โ โโโ StockCard.yaml โ YAML format
โ โโโ PortfolioCard.md
โโโ display/
โ โโโ PriceDisplay.md
โ โโโ ChangeIndicator.md
โโโ forms/
โ โโโ SearchInput.md
โโโ feedback/
โโโ Toast.md
Format Detection
The loader auto-detects spec format by file extension:
| Extension | Format | Priority |
|---|---|---|
.yaml |
YAML (structured) | Preferred |
.md |
Markdown (legacy) | Fallback |
When both formats exist for a component, YAML takes precedence.
๋ก๋ฉ ๋ก์ง
--list ๋ชจ๋
1. Read: {spec-folder}/03-components/component-inventory.md
2. Glob: {spec-folder}/03-components/specs/**/*.{yaml,md}
3. ๊ฐ ํ์ผ์์ ๋ฉํ๋ฐ์ดํฐ ์ถ์ถ (YAML: direct parse, MD: regex)
4. ์นดํ
๊ณ ๋ฆฌ๋ณ, ์์กด์ฑ ์์ฝ ์์ฑ
--category ๋ชจ๋
1. Glob: {spec-folder}/03-components/specs/{category}/*.{yaml,md}
2. YAML ํ์ผ ์ฐ์ , MD fallback
3. ๋ชจ๋ ํ์ผ ๋ด์ฉ Read
4. ํตํฉ ์ถ๋ ฅ
--name ๋ชจ๋
1. Glob: {spec-folder}/03-components/specs/**/{name}.yaml (preferred)
2. Fallback: Glob: {spec-folder}/03-components/specs/**/{name}.md
3. Read ํด๋น ํ์ผ
4. ์ถ๋ ฅ
--with-deps ๋ชจ๋
1. --name์ผ๋ก ๋์ ์ปดํฌ๋ํธ ๋ก๋ฉ
2. ์คํ์์ ์์กด์ฑ ํ์ฑ:
- YAML: dependencies.internal[].name
- MD: "Dependencies:" ์น์
3. ๊ฐ ์์กด์ฑ ์ฌ๊ท์ ์ผ๋ก ๋ก๋ฉ (์ํ ์ฐธ์กฐ ๋ฐฉ์ง)
4. ํ ํด๋ก์ง ์ ๋ ฌํ์ฌ ์ถ๋ ฅ (์์กด์ฑ ๋จผ์ )
--gap ๋ชจ๋
1. Read: {spec-folder}/03-components/gap-analysis.md
2. ๋๋ ๋์ ๋ถ์:
- ์คํ์ ์ ์๋ ์ปดํฌ๋ํธ ๋ชฉ๋ก (*.yaml + *.md)
- ์ค์ ๊ตฌํ๋ ์ปดํฌ๋ํธ (src/components/**/*.tsx)
- ์ฐจ์งํฉ ๊ณ์ฐ
3. ๊ตฌํ ์์ ๊ถ์ฅ (์์กด์ฑ ๊ณ ๋ ค)
YAML Parsing Guide
YAML ํฌ๋งท ์ปดํฌ๋ํธ ์คํ์์ ๋ฐ์ดํฐ ์ถ์ถ:
# ๋ฉํ๋ฐ์ดํฐ
id: "CMP-001" โ ์ปดํฌ๋ํธ ID
name: "StockCard" โ ์ปดํฌ๋ํธ ์ด๋ฆ
category: "cards" โ ์นดํ
๊ณ ๋ฆฌ
priority: "P0" โ ์ฐ์ ์์
# ์์กด์ฑ
dependencies:
internal:
- name: "PriceDisplay"
- name: "ChangeIndicator"
# Props
props:
- name: "symbol"
type: "string"
required: true
# Design tokens reference
styles:
_ref: "../../shared/design-tokens.yaml"
์ปดํฌ๋ํธ ์คํ ํฌ๋งท
๊ฐ ์ปดํฌ๋ํธ ์คํ์ ๋ค์ ํ์์ ๋ฐ๋ฆ ๋๋ค:
# StockCard
**์นดํ
๊ณ ๋ฆฌ:** cards
**์ฐ์ ์์:** P0
**๋ณต์ก๋:** HIGH
## ์์กด์ฑ (Dependencies)
- PriceDisplay
- ChangeIndicator
- Sparkline
## ํผ์์กด์ฑ (Used By)
- Dashboard
- WatchlistPage
- SearchResults
## Props
| Prop | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| symbol | string | Yes | - | ์ข
๋ชฉ ์ฝ๋ |
| onSelect | () => void | No | - | ์ ํ ์ ์ฝ๋ฐฑ |
| variant | 'compact' \| 'full' | No | 'full' | ํ์ ๋ชจ๋ |
## States
| State | Description | Visual |
|-------|-------------|--------|
| default | ๊ธฐ๋ณธ ์ํ | ํฐ์ ๋ฐฐ๊ฒฝ |
| hover | ๋ง์ฐ์ค ์ค๋ฒ | ๋ฐ์ ๊ทธ๋ฆผ์ |
| selected | ์ ํ๋จ | ํ๋ ํ
๋๋ฆฌ |
| loading | ๋ก๋ฉ ์ค | ์ค์ผ๋ ํค |
| error | ์๋ฌ | ๋นจ๊ฐ ํ
๋๋ฆฌ |
## Interactions
| Trigger | Action | Result |
|---------|--------|--------|
| Click | onSelect ํธ์ถ | ์์ธ ํ์ด์ง ์ด๋ |
| Long Press | ์ปจํ
์คํธ ๋ฉ๋ด | ๋น ๋ฅธ ์ก์
ํ์ |
## ์ ๊ทผ์ฑ (a11y)
- role: article
- aria-label: "{symbol} ์ฃผ์ ์นด๋"
- ํค๋ณด๋: Enter/Space๋ก ์ ํ
## ํ
์คํธ ํํธ
- ์ค์๊ฐ ๊ฐ๊ฒฉ ์
๋ฐ์ดํธ ํ
์คํธ
- ๋ก๋ฉ ์ํ ๋ ๋๋ง
- ์๋ฌ ์ํ ๋ ๋๋ง
Agent ์ฐ๋ ์์
Phase 3: EXECUTE์์ ์ฌ์ฉ
Task(spec-executor, opus):
prompt: "
# Step 1: ๊ตฌํํ ์ปดํฌ๋ํธ ์คํ ๋ก๋ฉ
Skill(spec-component-loader {spec-folder} --name PriceDisplay --with-deps)
# Step 2: ๊ตฌํ
- ์์กด์ฑ๋ถํฐ ๊ตฌํ
- ๋์ ์ปดํฌ๋ํธ ๊ตฌํ
- ํ
์คํธ ์์ฑ
# Step 3: ๋ค์ ์ปดํฌ๋ํธ
Skill(spec-component-loader {spec-folder} --name StockCard --with-deps)
"
์ ์ง์ ๋ก๋ฉ ํจํด
# 1๋จ๊ณ: ์ ์ฒด ๊ตฌ์กฐ ํ์
Skill(spec-component-loader specs --list)
# 2๋จ๊ณ: Gap ๋ถ์์ผ๋ก ๊ตฌํ ์์ ๊ฒฐ์
Skill(spec-component-loader specs --gap)
# 3๋จ๊ณ: Batch 1 ์ปดํฌ๋ํธ (์์กด์ฑ ์์) ๋ณ๋ ฌ ๊ตฌํ
Skill(spec-component-loader specs --category display)
# 4๋จ๊ณ: Batch 2 ์ปดํฌ๋ํธ (์์กด์ฑ ์์)
Skill(spec-component-loader specs --name StockCard --with-deps)
์ถ๋ ฅ ํฌ๋งท
๋ชจ๋ ์ถ๋ ฅ์ Markdown ํ์์ผ๋ก ์ ๊ณต๋ฉ๋๋ค:
# {๋ก๋ฉ ํ์
} ๊ฒฐ๊ณผ
## ๋ฉํ๋ฐ์ดํฐ
- ๋ก๋ฉ ์ผ์: {timestamp}
- ์์ค: {spec-folder}
- ํํฐ: {filter-type}
- ์ปดํฌ๋ํธ ์: {count}
## ๋ด์ฉ
{actual content}
---
*Loaded by spec-component-loader*
๊ด๋ จ Skill
spec-test-loader: ํ ์คํธ ๊ณํ์ ๋ก๋ฉspec-scenario-loader: ์๋๋ฆฌ์ค ๊ณํ์ ๋ก๋ฉspec-it-execute: Phase 3, 5์์ ์ด skill ์ฌ์ฉ
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.