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.