Skip to content
Back to skills

Extract Design

ASecurity

Extract a Google DESIGN.md file from an HTML prototype (claude.ai/design or any styled page) using Puppeteer, producing machine-readable tokens and AI-generated prose. Use when the user has an HTML prototype and wants a DESIGN.md to anchor their project's visual identity, or when seed-conventions has just scaffolded a new project.

  • 274 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added October 25, 2026
developmentgoswiftshellbashnode

Works with

  • terminal

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned October 25, 2026

npx -y skills add danielvm-git/bigpowers --skill extract-design --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Extract Design?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Extract Design
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/danielvm-git-extract-design-4f677073/badge)](https://www.skillsdirectory.com/skills/danielvm-git-extract-design-4f677073)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: extract-design
description: "Extract a Google DESIGN.md file from an HTML prototype (claude.ai/design or any styled page) using Puppeteer, producing machine-readable tokens and AI-generated prose. Use when the user has an HTML prototype and wants a DESIGN.md to anchor their project's visual identity, or when seed-conventions has just scaffolded a new project."
model: sonnet
effort: standard
---

# Extract DESIGN.md from HTML

> **HARD GATE** — Do NOT write DESIGN.md without Puppeteer dual-pass extraction. Tokens from static HTML (Cheerio, regex, string scanning) are invalid — they miss cascade, custom properties, and Tailwind resolution.
>
> **HARD GATE** — Do NOT claim certainty where evidence is thin. Low-confidence color roles, component classifications, and prose assertions MUST be flagged with `<!-- AGENT NOTE: uncertain — validate during grill-me. Evidence: [what was observed] -->`.
>
> **HARD GATE** — Do NOT ship DESIGN.md without running `npx @google/design.md lint`. Unvalidated output is unverified output. If lint is unavailable (offline), flag prominently in terminal and in DESIGN.md prose.

## Quick Start

```bash
# First run — extract from HTML prototype
node extract-design/scripts/extract.js --source ./prototype.html

# From a published URL
node extract-design/scripts/extract.js --source https://my-prototype.example.com

# With a custom name
node extract-design/scripts/extract.js --source ./proto.html --name "My Design System"

# Update — re-extract from new HTML, diff against existing
node extract-design/scripts/extract.js --source ./proto-v2.html

# Lint-only — validate existing DESIGN.md without re-extraction
node extract-design/scripts/extract.js --lint-only
```

## Flow

1. **Launch Puppeteer** — dual-pass (light + dark) with retry + timeout. CI flags: `--headless=new --no-sandbox --disable-gpu --disable-dbus --use-gl=angle --use-angle=swiftshader`.
2. **Collect styles** — `page.evaluate()` collects computed styles from every element. Returns raw JSON to Node.js. Browser = sensor; Node = brain.
3. **Classify tokens** — modular pipeline: colors (Material 3 roles), typography (scale detection), spacing (tolerance GCD), rounded (clustering), components (visual signature + pseudo-state variants).
4. **Generate prose** — AI heuristics produce all 8 DESIGN.md sections. Overview and Do's/Don'ts flagged with agent notes.
5. **Write + validate** — serialize to `specs/tech-architecture/DESIGN_LATEST.md`, run `npx @google/design.md lint`, report to terminal.
6. **Handoff** — writes `handoff.next_skill: grill-me` to `specs/state.yaml` with uncertain decisions context.

## Inputs

| Parameter | Required | Description |
|-----------|----------|-------------|
| `--source <file\|url>` | First run: yes. Update: optional | HTML prototype path or URL |
| `--name <string>` | No | Design system name (defaults to `<title>` or directory name) |
| `--lint-only` | No | Validate existing DESIGN.md without re-extraction |

## Output

- `specs/tech-architecture/DESIGN_LATEST.md` — replaces `DESIGN_PLAN_LATEST.md` as the canonical design artifact
- Terminal summary: token counts, component count, lint result, uncertain decisions
- Structured JSON log to stderr: extraction events, timing, counts
- `specs/state.yaml` → `handoff.next_skill: grill-me` with context

## Error Tiers

| Tier | Condition | Response |
|------|-----------|----------|
| Fatal | No Chrome, page load timeout after retries | Exit non-zero, suggest fixes |
| Degraded | Zero colors, zero typography, SPA shell | Write DESIGN.md with degradation warning |
| Warned | Lint errors, uncertain decisions | Write DESIGN.md, flag in terminal, hand off to grill-me |

## Dependencies

- **Puppeteer** (Chrome binary) — wrapped behind `BrowserExtractor` interface for testability
- **`@google/design.md`** (soft, via `npx`) — wrapped behind `DesignValidator` interface. Warns and skips if offline.

## verify

```bash
node extract-design/tests/test-extraction.js
```

See [REFERENCE.md](REFERENCE.md) for extraction algorithms and heuristics.

Files in this skill

  • REFERENCE.md2.6 KB
  • SKILL.md4 KB
  • extract-design.feature1.1 KB
  • scripts/classify-colors.js2.5 KB
  • scripts/classify-rounded.js909 B
  • scripts/classify-spacing.js1.5 KB
  • scripts/classify-typography.js1.6 KB
  • scripts/collect-styles.js5.3 KB
  • scripts/detect-components.js2.2 KB
  • scripts/extract.js11.1 KB
  • scripts/generate-prose.js3.4 KB
  • scripts/lib/browser.js6.8 KB
  • scripts/lib/constants.js1.4 KB
  • scripts/lib/logging.js343 B
  • scripts/lib/retry.js682 B
  • scripts/lib/state.js1.1 KB
  • scripts/lib/validator.js947 B
  • scripts/write-designd.js1.8 KB
  • tests/fixtures/glassmorphism-dark/expected-tokens.json189 B
  • tests/fixtures/glassmorphism-dark/prototype.html1.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.