Use when adding new error messages to React, or seeing "unknown error code" warnings.
npx skills add 30eggis/claude-frontend-skills --skill "init-spec-md"
Install specific skill from multi-skill repository
# Description
Generate SPEC-IT-{HASH}.md files for existing UI code. Enables progressive context loading for legacy codebases. Use when starting to track an existing project.
# SKILL.md
name: init-spec-md
description: "Generate SPEC-IT-{HASH}.md files for existing UI code. Enables progressive context loading for legacy codebases. Use when starting to track an existing project."
allowed-tools: Read, Write, Glob, Grep, Bash, Task
argument-hint: "[path] [--dry-run] [--force]"
permissionMode: bypassPermissions
init-spec-md: SPEC-IT File Generator for Existing Code
Generate SPEC-IT-{HASH}.md metadata files for existing UI code to enable progressive context loading.
CRITICAL: Context Management Rules
λ°λμ shared/context-rules.md κ·μΉμ μ€μνμΈμ.
ν΅μ¬ κ·μΉ
| κ·μΉ | μ ν | μλ° μ |
|---|---|---|
| λ°°μΉ μ²λ¦¬ | 10κ° νμΌμ© | λ©λͺ¨λ¦¬ μ΄κ³Ό λ°©μ§ |
| μμ΄μ νΈ λ°ν | μμ½λ§ | λ΄μ© ν¬ν¨ κΈμ§ |
| νμΌ μ½κΈ° | νμν κ²λ§ | μ 체 μ€μΊ κΈμ§ |
Purpose
- Progressive Context Loading: Agents load only required context
- Bidirectional Navigation: Parent β Child document links
- Registry Management: All HASHes managed in
.spec-it-registry.json
Usage
/frontend-skills:init-spec-md # Full project scan
/frontend-skills:init-spec-md src/components # Specific path only
/frontend-skills:init-spec-md --dry-run # Preview (no file creation)
/frontend-skills:init-spec-md --force # Overwrite existing files
Arguments
| Argument | Description |
|---|---|
[path] |
Target directory (default: project root) |
--dry-run |
Preview mode, show what would be created |
--force |
Overwrite existing SPEC-IT files |
Agents Used
spec-md-generator(haiku) - Create SPEC-IT filesspec-md-maintainer(haiku) - Update registry and links
Workflow
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β init-spec-md Workflow β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Step 1: Project Scan β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [Glob] **/*.tsx, **/*.ts β β
β β - Detect page.tsx, layout.tsx files β β
β β - Detect component files (export default function) β β
β β - Detect module files β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β Step 2: Check Existing SPEC-IT Files β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - Skip folders with existing SPEC-IT-*.md β β
β β - Load .spec-it-registry.json β β
β β - Check HASH collisions β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β Step 3: Analyze Files (Parallel) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [spec-md-generator agent] β β
β β - Read file β Extract features β β
β β - Parse Props interface β β
β β - Use JSDoc comments β β
β β - Generate ASCII wireframe (for components) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β Step 4: Generate SPEC-IT-{HASH}.md β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - Generate unique HASH β β
β β - Create file from template β β
β β - Set up bidirectional links β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β Step 5: Update Registry β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - Update .spec-it-registry.json β β
β β - Set parent-child relationships β β
β β - Update statistics β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β Step 6: Output Report β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Created: 45 files β β
β β - Components: 30 β β
β β - Pages: 10 β β
β β - Modules: 5 β β
β β Skipped: 12 (already exist) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
HASH Generation Rules
Format: 8-character alphanumeric (e.g., A1B2C3D4)
Rules:
- Guaranteed unique within project
- Generated from file path hash
- All HASHes managed in .spec-it-registry.json
Examples:
- SPEC-IT-A1B2C3D4.md (Button component)
- SPEC-IT-E5F6G7H8.md (LoginPage)
- SPEC-IT-I9J0K1L2.md (AuthModule)
Output Format
Component (component.tsx)
# SPEC-IT-A1B2C3D4
## Component: Button
### Description
Primary action button with loading state support.
- Click event handling
- Loading state display
- Disabled state support
### Props
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| variant | 'primary' \| 'secondary' | N | Button style |
| loading | boolean | N | Loading state |
| disabled | boolean | N | Disabled |
| onClick | () => void | Y | Click handler |
### Wireframe (ASCII)
βββββββββββββββββββββββββββ
β [Icon] Button Text β β Normal
βββββββββββββββββββββββββββ
βββββββββββββββββββββββββββ
β [Spinner] Loading... β β Loading
βββββββββββββββββββββββββββ
### Related Documents
- **Parent**: [SPEC-IT-E5F6G7H8](../SPEC-IT-E5F6G7H8.md)
- **Same Level**: [SPEC-IT-X1Y2Z3W4](./Input/SPEC-IT-X1Y2Z3W4.md)
Page/Module (page.tsx, module.tsx)
# SPEC-IT-E5F6G7H8
## Page: LoginPage
### Keywords
`auth` `login` `social-login` `password-reset` `signup-link`
### Features
- Email/password login
- Google/Kakao social login
- Password reset link
- Navigate to signup
### Folder IA
/login
βββ components/
β βββ LoginForm/ β [SPEC-IT-M1N2O3P4](./components/LoginForm/SPEC-IT-M1N2O3P4.md)
β βββ SocialLoginButtons/ β [SPEC-IT-Q1R2S3T4](./components/SocialLoginButtons/SPEC-IT-Q1R2S3T4.md)
β βββ PasswordResetLink/ β [SPEC-IT-U1V2W3X4](./components/PasswordResetLink/SPEC-IT-U1V2W3X4.md)
βββ hooks/
β βββ useLogin/ β [SPEC-IT-Y1Z2A3B4](./hooks/useLogin/SPEC-IT-Y1Z2A3B4.md)
βββ utils/
βββ validation/ β [SPEC-IT-C1D2E3F4](./utils/validation/SPEC-IT-C1D2E3F4.md)
### Related Documents
- **Parent**: [SPEC-IT-ROOT001](../../SPEC-IT-ROOT001.md)
- **Related Page**: [SPEC-IT-G1H2I3J4](../signup/SPEC-IT-G1H2I3J4.md)
Registry File Format
.spec-it-registry.json - Located at project root
{
"version": "1.0.0",
"lastUpdated": "2026-01-29T15:00:00.000Z",
"hashes": {
"ROOT001": {
"path": "src/SPEC-IT-ROOT001.md",
"type": "root",
"children": ["CMN00001", "E5F6G7H8"]
},
"A1B2C3D4": {
"path": "src/components/common/Button/SPEC-IT-A1B2C3D4.md",
"type": "component",
"parent": "CMN00001",
"file": "Button.tsx"
}
},
"stats": {
"totalFiles": 45,
"components": 30,
"pages": 10,
"modules": 5
}
}
Execution Instructions
Step 1: Parse Arguments
# μΈμ νμ±
targetPath = $1 || "."
dryRun = "--dry-run" in $ARGUMENTS
force = "--force" in $ARGUMENTS
Output: "λμ κ²½λ‘: {targetPath}, dry-run: {dryRun}, force: {force}"
Step 2: Scan Target Directory
# GlobμΌλ‘ νμΌ μ€μΊ
Glob("{targetPath}/**/page.tsx") β pages[]
Glob("{targetPath}/**/layout.tsx") β layouts[]
Glob("{targetPath}/**/*[A-Z]*.tsx") β components[] (export default ν¬ν¨)
Glob("{targetPath}/**/*Module.ts") β modules[]
Glob("{targetPath}/**/*Service.ts") β services[]
# μ μΈ ν¨ν΄
exclude = ["node_modules/**", ".next/**", "dist/**"]
# κΈ°μ‘΄ SPEC-IT νμΌ νμΈ (--force μλλ©΄ μ€ν΅)
IF NOT force:
existingSpecs = Glob("{targetPath}/**/SPEC-IT-*.md")
# ν΄λΉ ν΄λμ νμΌμ μ€ν΅
Step 3: λ°°μΉ μ²λ¦¬λ‘ SPEC-IT μμ±
# 10κ°μ© λ°°μΉλ‘ μ²λ¦¬ (컨ν
μ€νΈ κ΄λ¦¬)
allFiles = pages + layouts + components + modules + services
FOR batch in chunks(allFiles, 10):
Task(
subagent_type: "general-purpose",
model: "haiku",
prompt: "
μν : spec-md-generator
μ
λ ₯ νμΌ λͺ©λ‘:
{batch}
μμ
:
1. κ° νμΌ λΆμ (Props, JSDoc, export λ±)
2. SPEC-IT-{HASH}.md μμ±
3. HASH = MD5(νμΌκ²½λ‘).substring(0,8).toUpperCase()
μΆλ ₯: κ° νμΌκ³Ό κ°μ ν΄λμ SPEC-IT-{HASH}.md
OUTPUT RULES:
1. νμΌμλ§ μ μ₯
2. λ°ν μ 'μμ±λ¨: {κ²½λ‘}' νμλ§
3. νμΌ λ΄μ© λ°ν κΈμ§
"
)
Step 4: Registry μ λ°μ΄νΈ
Task(
subagent_type: "general-purpose",
model: "haiku",
prompt: "
μν : spec-md-maintainer
μμ
:
1. .spec-it-registry.json μ½κΈ° (μμΌλ©΄ μμ±)
2. μλ‘ μμ±λ SPEC-IT νμΌλ€ λ±λ‘
3. parent-child κ΄κ³ μ€μ
4. ν΅κ³ μ
λ°μ΄νΈ
OUTPUT RULES: (μμ½λ§ λ°ν)
"
)
Step 5: κ²°κ³Ό 보κ³
Output: "
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
init-spec-md μλ£
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
μμ±λ¨: {created}κ°
- Components: {components}κ°
- Pages: {pages}κ°
- Modules: {modules}κ°
μ€ν΅λ¨: {skipped}κ° (μ΄λ―Έ μ‘΄μ¬)
Registry: .spec-it-registry.json μ
λ°μ΄νΈλ¨
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
"
Dry-Run Mode
--dry-run μ¬μ© μ:
- νμΌ μμ± μμ΄ λ―Έλ¦¬λ³΄κΈ°λ§
- μ΄λ€ νμΌμ΄ μμ±λ μ§ λͺ©λ‘ μΆλ ₯
- Registry λ³κ²½ μμ
Templates
Uses templates from the main spec-it skill:
Related Skills
/frontend-skills:spec-it- Manual specification generation/frontend-skills:spec-it-complex- Hybrid mode/frontend-skills:spec-it-automation- Full auto mode
# 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.