30eggis

init-spec-md

0
0
# Install this skill:
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 files
  • spec-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:

  • /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.