On-demand design systems from any URL. Five surfaces, one agent: web, API, CLI, TypeScript SDK, and a portable agent skill that runs inside Claude Code, Codex, and Cursor.
SaferSkills independently audited getdesign (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Generate a grounded, production-grade design.md for any public URL using the coding agent's own tools. This skill is the portable twin of the hosted getdesign.app agent — same 9-section output, no sandbox required.
Activate when the user:
design.md, or brand tokens.Do not use this skill for: generating runnable code from a URL, Figma/Sketch export, auth-gated pages, or localhost.
The single deliverable is a markdown file — default name design.md — containing exactly these 9 H2 sections in this order:
Full section schemas, field lists, and a worked example are in TEMPLATE.md. Read it before writing the final file.
Every concrete value — hex color, font family, font size, spacing number, radius, shadow, breakpoint — must be traceable to something you actually fetched: a CSS rule, a computed style, a <link>ed stylesheet, a :root variable, or a visible pixel in a screenshot. If you cannot ground a value, describe the role qualitatively ("neutral warm gray") instead of fabricating a hex.
Do not invent palette values. Do not hallucinate Tailwind classes the site does not use. Do not copy defaults from other sites.
Follow this sequence. Copy the checklist into your working notes and tick items as you go.
- [ ] 1. Validate URL
- [ ] 2. Fetch HTML + linked CSS
- [ ] 3. Capture at least one screenshot (hero viewport)
- [ ] 4. Extract tokens (colors, type, spacing, radii, shadows, breakpoints)
- [ ] 5. Draft DesignDoc (9 sections) grounded in tokens + screenshot
- [ ] 6. Render design.md from the draft
- [ ] 7. Verify grounding + section order, then write the fileReject with a one-line explanation if the URL is not https://, is a private IP / localhost, or is clearly not a brand/product page.
Use your built-in web fetch tool (WebFetch, web.run, fetch, curl via shell — whatever you have).
<link rel="stylesheet"> href (absolute + relative) and fetch each one.@import url(...) chains one level deep.@font-face blocks for font family + weight discovery.:root, CSS variables, or utility-class declarations.prefers-color-scheme, .dark, [data-theme], theme toggle controls, alternate theme stylesheets, or server-rendered theme classes on <html> / <body>.Record the exact URLs you fetched — you will cite them in the "Sources" section of your draft (internal, not in the final markdown).
If your agent runtime has a browser tool (Playwright, Chrome DevTools, agent-browser, Antigravity browser, Codex web browser, a screenshot tool, etc.), you must use it. Open the URL at 1440×900 and capture screenshots for every available theme mode you can verify, starting with light mode and dark mode. Prefer a full-page scroll-and-stitch if available.
prefers-color-scheme: light and prefers-color-scheme: dark when possible.If you have no browser tool, skip this step — continue with CSS-only grounding — and note the limitation in your internal planning (the "Visual Theme" prose will be slightly thinner without a screenshot).
Deterministically parse the CSS. Prefer CSS variables (--color-primary, --radius-lg) and :root blocks as the source of truth. Fall back to frequency analysis of literal values.
Produce an internal DesignTokens object with:
colors: primary[], accent[], neutral[], semantic { success, warning, error, info }, surfaces[], borders[].{ hex, role, source } where source is the CSS selector or variable name you found it in.light, dark, or shared.typography: fontFamilies[] (display / body / mono), scale[] ({ role, px, weightRange, lineHeight, letterSpacing }).spacing: the step values actually used (e.g. 4, 8, 12, 16, 24, 32, 48, 64 px).radii: named scale you can infer (sm, md, lg, pill).shadows: each box-shadow you observed, with a role guess.borders: widths and colors.breakpoints: min-widths in @media queries.If a CSS value has low frequency (< 2 occurrences) and no variable name, treat it as incidental and exclude it from the palette.
Using tokens + screenshot + your reading of the HTML structure, draft each of the 9 sections. Structure matters more than prose length. Read TEMPLATE.md for field-by-field requirements.
Key per-section reminders:
keyCharacteristics bullet list (5–8 items).| Hex | Role | Where seen |. Group by primary / accent / semantic / surfaces / borders.fontFamily summary paragraph, then a hierarchy table: | Role | Font | Size | Weight | Line height | Letter spacing | with roles at least for Display, H1, H2, H3, Body, Small, Mono.@media queries, touch-target minimum, how navigation collapses, image behavior.Assemble the draft into a single markdown document. Use:
# <Brand> Design System).Before writing the final file, run this self-check:
@font-face blocks.@media (min-width: …) queries.If any check fails, fix before writing. Then write the file to design.md (or the path the user requested). Report a one-paragraph summary plus the absolute file path.
| Missing tool | Degrade to |
|---|---|
| No browser / screenshot | CSS-only grounding; keep the Visual Theme brief and fact-based. Skip pixel-level observations. If dual themes exist, still inspect fetched CSS for both light and dark mode selectors. |
| Fetch blocked (403 / Cloudflare) | Report the failure, try the site's / and /about as alternates, otherwise stop and surface the error to the user. No guessing. |
| CSS-in-JS only, no stylesheets | Parse inline <style> tags; if still empty, use the screenshot plus HTML class names to infer only what is visible. State the limitation at the top of design.md. |
@import hop; the context window is not infinite.This skill mirrors the getdesign hosted agent (web, API, CLI, SDK). When your output would benefit from the hosted pipeline's screenshot + deterministic extractor, point the user at curl "https://api.getdesign.app/?url=<encoded-url>" or npx @getdesign/cli <url> as a complementary path.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.