mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-10 02:24:35 +08:00
397 lines
15 KiB
Markdown
397 lines
15 KiB
Markdown
---
|
|
name: style-skill-memory
|
|
description: Generate SKILL memory package from style reference for easy loading and consistent design system usage
|
|
argument-hint: "[package-name] [--regenerate]"
|
|
allowed-tools: Bash,Read,Write,TodoWrite
|
|
auto-continue: true
|
|
---
|
|
|
|
# Memory: Style SKILL Memory Generator
|
|
|
|
## Overview
|
|
|
|
**Purpose**: Convert style reference package into SKILL memory for easy loading and context management.
|
|
|
|
**Input**: Style reference package at `.workflow/reference_style/{package-name}/`
|
|
|
|
**Output**: SKILL memory index at `.claude/skills/style-{package-name}/SKILL.md`
|
|
|
|
**Use Case**: Load design system context when working with UI components, analyzing design patterns, or implementing style guidelines.
|
|
|
|
**Key Features**:
|
|
- Extracts primary design references (colors, typography, spacing, etc.)
|
|
- Provides dynamic adjustment guidelines for design tokens
|
|
- Includes prerequisites and tooling requirements (browsers, PostCSS, dark mode)
|
|
- Progressive loading structure for efficient token usage
|
|
- Complete implementation examples with React components
|
|
- Interactive preview showcase
|
|
|
|
---
|
|
|
|
## Quick Reference
|
|
|
|
### Command Syntax
|
|
|
|
```bash
|
|
/memory:style-skill-memory [package-name] [--regenerate]
|
|
|
|
# Arguments
|
|
package-name Style reference package name (required)
|
|
--regenerate Force regenerate SKILL.md even if it exists (optional)
|
|
```
|
|
|
|
### Usage Examples
|
|
|
|
```bash
|
|
# Generate SKILL memory for package
|
|
/memory:style-skill-memory main-app-style-v1
|
|
|
|
# Regenerate SKILL memory
|
|
/memory:style-skill-memory main-app-style-v1 --regenerate
|
|
|
|
# Package name from current directory or default
|
|
/memory:style-skill-memory
|
|
```
|
|
|
|
### Key Variables
|
|
|
|
**Input Variables**:
|
|
- `PACKAGE_NAME`: Style reference package name
|
|
- `PACKAGE_DIR`: `.workflow/reference_style/${package_name}`
|
|
- `SKILL_DIR`: `.claude/skills/style-${package_name}`
|
|
- `REGENERATE`: `true` if --regenerate flag, `false` otherwise
|
|
|
|
**Data Sources** (Phase 2):
|
|
- `DESIGN_TOKENS_DATA`: Complete design-tokens.json content (from Read)
|
|
- `LAYOUT_TEMPLATES_DATA`: Complete layout-templates.json content (from Read)
|
|
- `ANIMATION_TOKENS_DATA`: Complete animation-tokens.json content (from Read, if exists)
|
|
|
|
**Metadata** (Phase 2):
|
|
- `COMPONENT_COUNT`: Total components
|
|
- `UNIVERSAL_COUNT`: Universal components count
|
|
- `SPECIALIZED_COUNT`: Specialized components count
|
|
- `UNIVERSAL_COMPONENTS`: Universal component names (first 5)
|
|
- `HAS_ANIMATIONS`: Whether animation-tokens.json exists
|
|
|
|
**Analysis Output** (`DESIGN_ANALYSIS` - Phase 2):
|
|
- `has_colors`: Colors exist
|
|
- `color_semantic`: Has semantic naming (primary/secondary/accent)
|
|
- `uses_oklch`: Uses modern color spaces (oklch, lab, etc.)
|
|
- `has_dark_mode`: Has separate light/dark mode color tokens
|
|
- `spacing_pattern`: Pattern type ("linear", "geometric", "custom")
|
|
- `spacing_scale`: Actual scale values (e.g., [4, 8, 16, 32, 64])
|
|
- `has_typography`: Typography system exists
|
|
- `typography_hierarchy`: Has size scale for hierarchy
|
|
- `uses_calc`: Uses calc() expressions in token values
|
|
- `has_radius`: Border radius exists
|
|
- `radius_style`: Style characteristic ("sharp" <4px, "moderate" 4-8px, "rounded" >8px)
|
|
- `has_shadows`: Shadow system exists
|
|
- `shadow_pattern`: Elevation naming pattern
|
|
- `has_animations`: Animation tokens exist
|
|
- `animation_range`: Duration range (fast to slow)
|
|
- `easing_variety`: Types of easing functions
|
|
|
|
### Common Errors
|
|
|
|
| Error | Cause | Resolution |
|
|
|-------|-------|------------|
|
|
| Package not found | Invalid package name or doesn't exist | Run `/workflow:ui-design:codify-style` first |
|
|
| SKILL already exists | SKILL.md already generated | Use `--regenerate` flag |
|
|
| Missing layout-templates.json | Incomplete package | Verify package integrity, re-run codify-style |
|
|
| Invalid JSON format | Corrupted package files | Regenerate package with codify-style |
|
|
|
|
---
|
|
|
|
## Execution Process
|
|
|
|
### Phase 1: Validate Package
|
|
|
|
**TodoWrite** (First Action):
|
|
```json
|
|
[
|
|
{
|
|
"content": "Validate package exists and check SKILL status",
|
|
"activeForm": "Validating package and SKILL status",
|
|
"status": "in_progress"
|
|
},
|
|
{
|
|
"content": "Read package data and analyze design system",
|
|
"activeForm": "Reading package data and analyzing design system",
|
|
"status": "pending"
|
|
},
|
|
{
|
|
"content": "Generate SKILL.md with design principles and token values",
|
|
"activeForm": "Generating SKILL.md with design principles and token values",
|
|
"status": "pending"
|
|
}
|
|
]
|
|
```
|
|
|
|
**Step 1: Parse Package Name**
|
|
|
|
```bash
|
|
# Get package name from argument or auto-detect
|
|
bash(echo "${package_name}" || basename "$(pwd)" | sed 's/^style-//')
|
|
```
|
|
|
|
**Step 2: Validate Package Exists**
|
|
|
|
```bash
|
|
bash(test -d .workflow/reference_style/${package_name} && echo "exists" || echo "missing")
|
|
```
|
|
|
|
**Error Handling**:
|
|
```javascript
|
|
if (package_not_exists) {
|
|
error("ERROR: Style reference package not found: ${package_name}")
|
|
error("HINT: Run '/workflow:ui-design:codify-style' first to create package")
|
|
error("Available packages:")
|
|
bash(ls -1 .workflow/reference_style/ 2>/dev/null || echo " (none)")
|
|
exit(1)
|
|
}
|
|
```
|
|
|
|
**Step 3: Check SKILL Already Exists**
|
|
|
|
```bash
|
|
bash(test -f .claude/skills/style-${package_name}/SKILL.md && echo "exists" || echo "missing")
|
|
```
|
|
|
|
**Decision Logic**:
|
|
```javascript
|
|
if (skill_exists && !regenerate_flag) {
|
|
echo("SKILL memory already exists for: ${package_name}")
|
|
echo("Use --regenerate to force regeneration")
|
|
exit(0)
|
|
}
|
|
|
|
if (regenerate_flag && skill_exists) {
|
|
echo("Regenerating SKILL memory for: ${package_name}")
|
|
}
|
|
```
|
|
|
|
**TodoWrite Update**: Mark "Validate" as completed, "Read package data" as in_progress
|
|
|
|
---
|
|
|
|
### Phase 2: Read Package Data & Analyze Design System
|
|
|
|
**Step 1: Read All JSON Files**
|
|
|
|
```bash
|
|
# Read layout templates
|
|
Read(file_path=".workflow/reference_style/${package_name}/layout-templates.json")
|
|
|
|
# Read design tokens
|
|
Read(file_path=".workflow/reference_style/${package_name}/design-tokens.json")
|
|
|
|
# Read animation tokens (if exists)
|
|
bash(test -f .workflow/reference_style/${package_name}/animation-tokens.json && echo "exists" || echo "missing")
|
|
Read(file_path=".workflow/reference_style/${package_name}/animation-tokens.json") # if exists
|
|
```
|
|
|
|
**Step 2: Extract Metadata for Description**
|
|
|
|
```bash
|
|
# Count components and classify by type
|
|
bash(jq '.layout_templates | length' layout-templates.json)
|
|
bash(jq '[.layout_templates[] | select(.component_type == "universal")] | length' layout-templates.json)
|
|
bash(jq '[.layout_templates[] | select(.component_type == "specialized")] | length' layout-templates.json)
|
|
bash(jq -r '.layout_templates | to_entries[] | select(.value.component_type == "universal") | .key' layout-templates.json | head -5)
|
|
```
|
|
|
|
Store results in metadata variables (see [Key Variables](#key-variables))
|
|
|
|
**Step 3: Analyze Design System for Dynamic Principles**
|
|
|
|
Analyze design-tokens.json to extract characteristics and patterns:
|
|
|
|
```bash
|
|
# Color system characteristics
|
|
bash(jq '.colors | keys' design-tokens.json)
|
|
bash(jq '.colors | to_entries[0:2] | map(.value)' design-tokens.json)
|
|
# Check for modern color spaces
|
|
bash(jq '.colors | to_entries[] | .value | test("oklch|lab|lch")' design-tokens.json)
|
|
# Check for dark mode variants
|
|
bash(jq '.colors | keys | map(select(contains("dark") or contains("light")))' design-tokens.json)
|
|
# → Store: has_colors, color_semantic, uses_oklch, has_dark_mode
|
|
|
|
# Spacing pattern detection
|
|
bash(jq '.spacing | to_entries | map(.value) | map(gsub("[^0-9.]"; "") | tonumber)' design-tokens.json)
|
|
# Analyze pattern: linear (4-8-12-16) vs geometric (4-8-16-32) vs custom
|
|
# → Store: spacing_pattern, spacing_scale
|
|
|
|
# Typography characteristics
|
|
bash(jq '.typography | keys | map(select(contains("family") or contains("weight")))' design-tokens.json)
|
|
bash(jq '.typography | to_entries | map(select(.key | contains("size"))) | .[].value' design-tokens.json)
|
|
# Check for calc() usage
|
|
bash(jq '. | tostring | test("calc\\(")' design-tokens.json)
|
|
# → Store: has_typography, typography_hierarchy, uses_calc
|
|
|
|
# Border radius style
|
|
bash(jq '.border_radius | to_entries | map(.value)' design-tokens.json)
|
|
# Check range: small (sharp <4px) vs moderate (4-8px) vs large (rounded >8px)
|
|
# → Store: has_radius, radius_style
|
|
|
|
# Shadow characteristics
|
|
bash(jq '.shadows | keys' design-tokens.json)
|
|
bash(jq '.shadows | to_entries[0].value' design-tokens.json)
|
|
# → Store: has_shadows, shadow_pattern
|
|
|
|
# Animations (if available)
|
|
bash(jq '.duration | to_entries | map(.value)' animation-tokens.json)
|
|
bash(jq '.easing | keys' animation-tokens.json)
|
|
# → Store: has_animations, animation_range, easing_variety
|
|
```
|
|
|
|
Store analysis results in `DESIGN_ANALYSIS` (see [Key Variables](#key-variables))
|
|
|
|
**Note**: Analysis focuses on characteristics and patterns, not counts. Include technical feature detection (oklch, calc, dark mode) for Prerequisites section.
|
|
|
|
**TodoWrite Update**: Mark "Read package data" as completed, "Generate SKILL.md" as in_progress
|
|
|
|
---
|
|
|
|
### Phase 3: Generate SKILL.md
|
|
|
|
**Step 1: Create SKILL Directory**
|
|
|
|
```bash
|
|
bash(mkdir -p .claude/skills/style-${package_name})
|
|
```
|
|
|
|
**Step 2: Generate Intelligent Description**
|
|
|
|
**Format**:
|
|
```
|
|
{package_name} project-independent design system with {universal_count} universal layout templates and interactive preview (located at .workflow/reference_style/{package_name}). Load when working with reusable UI components, design tokens, layout patterns, or implementing visual consistency. Excludes {specialized_count} project-specific components.
|
|
```
|
|
|
|
**Step 3: Load and Process SKILL.md Template**
|
|
|
|
**⚠️ CRITICAL - Execute First**:
|
|
```bash
|
|
bash(cat ~/.claude/workflows/cli-templates/memory/style-skill-memory/skill-md-template.md)
|
|
```
|
|
|
|
**Template Processing**:
|
|
1. **Replace variables**: Substitute all `{variable}` placeholders with actual values from Phase 2
|
|
2. **Generate dynamic sections**:
|
|
- **Prerequisites & Tooling**: Generate based on `DESIGN_ANALYSIS` technical features (oklch, calc, dark mode)
|
|
- **Design Principles**: Generate based on `DESIGN_ANALYSIS` characteristics
|
|
- **Complete Implementation Example**: Include React component example with token adaptation
|
|
- **Design Token Values**: Iterate `DESIGN_TOKENS_DATA`, `ANIMATION_TOKENS_DATA` and display all key-value pairs with DEFAULT annotations
|
|
3. **Write to file**: Use Write tool to save to `.claude/skills/style-{package_name}/SKILL.md`
|
|
|
|
**Variable Replacement Map**:
|
|
- `{package_name}` → PACKAGE_NAME
|
|
- `{intelligent_description}` → Generated description from Step 2
|
|
- `{component_count}` → COMPONENT_COUNT
|
|
- `{universal_count}` → UNIVERSAL_COUNT
|
|
- `{specialized_count}` → SPECIALIZED_COUNT
|
|
- `{universal_components_list}` → UNIVERSAL_COMPONENTS (comma-separated)
|
|
- `{has_animations}` → HAS_ANIMATIONS
|
|
|
|
**Dynamic Content Generation**:
|
|
|
|
See template file for complete structure. Key dynamic sections:
|
|
|
|
1. **Prerequisites & Tooling** (based on DESIGN_ANALYSIS technical features):
|
|
- IF uses_oklch → Include PostCSS plugin requirement (`postcss-oklab-function`)
|
|
- IF uses_calc → Include preprocessor requirement for calc() expressions
|
|
- IF has_dark_mode → Include dark mode implementation mechanism (class or media query)
|
|
- ALWAYS include browser support, jq installation, and local server setup
|
|
|
|
2. **Design Principles** (based on DESIGN_ANALYSIS):
|
|
- IF has_colors → Include "Color System" principle with semantic pattern
|
|
- IF spacing_pattern detected → Include "Spatial Rhythm" with unified scale description (actual token values)
|
|
- IF has_typography_hierarchy → Include "Typographic System" with scale examples
|
|
- IF has_radius → Include "Shape Language" with style characteristic
|
|
- IF has_shadows → Include "Depth & Elevation" with elevation pattern
|
|
- IF has_animations → Include "Motion & Timing" with duration range
|
|
- ALWAYS include "Accessibility First" principle
|
|
|
|
3. **Design Token Values** (iterate from read data):
|
|
- Colors: Iterate `DESIGN_TOKENS_DATA.colors`
|
|
- Typography: Iterate `DESIGN_TOKENS_DATA.typography`
|
|
- Spacing: Iterate `DESIGN_TOKENS_DATA.spacing`
|
|
- Border Radius: Iterate `DESIGN_TOKENS_DATA.border_radius` with calc() explanations
|
|
- Shadows: Iterate `DESIGN_TOKENS_DATA.shadows` with DEFAULT token annotations
|
|
- Animations (if available): Iterate `ANIMATION_TOKENS_DATA.duration` and `ANIMATION_TOKENS_DATA.easing`
|
|
|
|
**Step 4: Verify SKILL.md Created**
|
|
|
|
```bash
|
|
bash(test -f .claude/skills/style-${package_name}/SKILL.md && echo "success" || echo "failed")
|
|
```
|
|
|
|
**TodoWrite Update**: Mark all todos as completed
|
|
|
|
---
|
|
|
|
### Completion Message
|
|
|
|
Display a simple completion message with key information:
|
|
|
|
```
|
|
✅ SKILL memory generated for style package: {package_name}
|
|
|
|
📁 Location: .claude/skills/style-{package_name}/SKILL.md
|
|
|
|
📊 Package Summary:
|
|
- {component_count} components ({universal_count} universal, {specialized_count} specialized)
|
|
- Design tokens: colors, typography, spacing, shadows{animations_note}
|
|
|
|
💡 Usage: /memory:load-skill-memory style-{package_name} "your task description"
|
|
```
|
|
|
|
Variables: `{package_name}`, `{component_count}`, `{universal_count}`, `{specialized_count}`, `{animations_note}` (", animations" if exists)
|
|
|
|
---
|
|
|
|
## Implementation Details
|
|
|
|
### Critical Rules
|
|
|
|
1. **Check Before Generate**: Verify package exists before attempting SKILL generation
|
|
2. **Respect Existing SKILL**: Don't overwrite unless --regenerate flag provided
|
|
3. **Load Templates via cat**: Use `cat ~/.claude/workflows/cli-templates/memory/style-skill-memory/{template}` to load templates
|
|
4. **Variable Substitution**: Replace all `{variable}` placeholders with actual values
|
|
5. **Technical Feature Detection**: Analyze tokens for modern features (oklch, calc, dark mode) and generate appropriate Prerequisites section
|
|
6. **Dynamic Content Generation**: Generate sections based on DESIGN_ANALYSIS characteristics
|
|
7. **Unified Spacing Scale**: Use actual token values as primary scale reference, avoid contradictory pattern descriptions
|
|
8. **Direct Iteration**: Iterate data structures (DESIGN_TOKENS_DATA, etc.) for token values
|
|
9. **Annotate Special Tokens**: Add comments for DEFAULT tokens and calc() expressions
|
|
10. **Embed jq Commands**: Include bash/jq commands in SKILL.md for dynamic loading
|
|
11. **Progressive Loading**: Include all 3 levels (0-2) with specific jq commands
|
|
12. **Complete Examples**: Include end-to-end implementation examples (React components)
|
|
13. **Intelligent Description**: Extract component count and key features from metadata
|
|
14. **Emphasize Flexibility**: Strongly warn against rigid copying - values are references for creative adaptation
|
|
|
|
### Template Files Location
|
|
|
|
|
|
```
|
|
Phase 1: Validate
|
|
├─ Parse package_name
|
|
├─ Check PACKAGE_DIR exists
|
|
└─ Check SKILL_DIR exists (skip if exists and no --regenerate)
|
|
|
|
Phase 2: Read & Analyze
|
|
├─ Read design-tokens.json → DESIGN_TOKENS_DATA
|
|
├─ Read layout-templates.json → LAYOUT_TEMPLATES_DATA
|
|
├─ Read animation-tokens.json → ANIMATION_TOKENS_DATA (if exists)
|
|
├─ Extract Metadata → COMPONENT_COUNT, UNIVERSAL_COUNT, etc.
|
|
└─ Analyze Design System → DESIGN_ANALYSIS (characteristics)
|
|
|
|
Phase 3: Generate
|
|
├─ Create SKILL directory
|
|
├─ Generate intelligent description
|
|
├─ Load SKILL.md template (cat command)
|
|
├─ Replace variables and generate dynamic content
|
|
├─ Write SKILL.md
|
|
├─ Verify creation
|
|
├─ Load completion message template (cat command)
|
|
└─ Display completion message
|
|
```
|