Start or continue a design project. Manages the full workflow from brief to visual direction — analyzes requirements, gathers inspiration, creates wireframes, and applies styling. Entry point for the design pipeline. Triggers on "start design project", "new design", "continue design", "design status", "/design".
Manage the end-to-end design workflow: Analyze → Inspire → Wireframe → Style. This skill is the single entry point for all design projects. It maintains project state, displays progress, and delegates work to phase-specific sub-skills.
See skills/design/references/workspace-schema.md for the full state.json schema and directory structure.
Look for .design-workspace/*/state.json in the current working directory using Glob.
state.json → go to Resume Flow.Ask the designer: "What are we designing? Give me a name for this project."
Convert the project name to a kebab-case slug. Create this directory structure:
.design-workspace/{slug}/
analyze/
inspire/
wireframe/screens/
style/
Check these locations in order for design-system.css:
~/.claude/plugins/design-workflow/design-system/design-system.css (bundled with plugin)./design-system.css (current working directory)../HTML Template/design-system.css~/Documents/GitHub/HTML Template/design-system.cssIf none found, ask the designer to provide the path. Also verify manifest.json exists alongside design-system.css. Store the resolved absolute path.
Write .design-workspace/{slug}/state.json with this structure:
{
"project": "{Project Name}",
"slug": "{slug}",
"created": "{ISO 8601 timestamp}",
"designSystemPath": "{resolved absolute path to HTML Template directory}",
"currentPhase": "analyze",
"phases": {
"analyze": { "status": "not-started", "output": null, "completedAt": null },
"inspire": { "status": "not-started", "output": null, "completedAt": null },
"wireframe": { "status": "not-started", "output": null, "completedAt": null, "screens": [], "locked": [] },
"style": { "status": "not-started", "output": null, "completedAt": null, "directions": [], "selectedDirection": null }
},
"decisions": []
}
Invoke the Analyze skill: Skill("design-analyze").
Read state.json and display a text dashboard:
┌─────────────────────────────────────────┐
│ {Project Name} │
│ Created: {date} │
├─────────────────────────────────────────┤
│ {icon} Analyze {summary} │
│ {icon} Inspire {summary} │
│ {icon} Wireframe {summary} │
│ {icon} Style {summary} │
├─────────────────────────────────────────┤
│ → {recommended next action} │
└─────────────────────────────────────────┘
Icons:
✅ — complete◑ — in-progress○ — not-startedGenerate a short summary for each phase based on its status:
analyze/decomposition.json. Show the number of flows and pages (e.g., "3 flows, 7 pages").inspire/references.json. Show the reference count (e.g., "12 references collected").Determine the recommended next action:
in-progress → "Continue {phase name}"complete → "Ready for {next phase name}?"Present options:
Then invoke the appropriate sub-skill:
Skill("design-analyze")Skill("design-inspire")Skill("design-wireframe")Skill("design-style")List all projects found in .design-workspace/ with their names and last-modified dates (from state.json). Ask the designer which project to continue, or whether to start a new one.
If continuing an existing project, read its state.json and proceed to the Resume Flow.
When a sub-skill returns (indicating phase completion), perform these updates:
state.json.status to "complete".completedAt to the current ISO 8601 timestamp.currentPhase to the next phase in order: analyze → inspire → wireframe → style.status to "not-started" (it remains not-started until the sub-skill begins work).state.json.Phase order is fixed: analyze → inspire → wireframe → style.
On every invocation (both new and resume), verify the designSystemPath from state.json:
{designSystemPath}/design-system.css exists.{designSystemPath}/manifest.json exists.If either file is missing, warn the designer: "The design system at {path} is no longer accessible. Please provide the updated path." Update state.json with the corrected path once provided.
Use these patterns when modifying project state throughout the workflow.
Append to the decisions array in state.json:
{
"phase": "{current phase}",
"key": "{decision identifier}",
"value": "{decision value}",
"timestamp": "{ISO 8601}"
}
Decisions capture important choices made during the workflow (e.g., selected app type, chosen style direction, screen prioritization).
Read state.json, modify the target phase's status field to one of "not-started", "in-progress", or "complete", and write back. Always preserve all other fields.
Always read state.json immediately before writing to avoid stale data. Use the Read tool to get current contents, modify in memory, then Write the complete updated object. Never partially update the file.