design-md
Skill1 starsChanged 6 months agoApache-2.0View on GitHub
Use when authoring, auditing, or exporting a DESIGN.md design system — design tokens, tailwind config, deslopify a generic look, дизайн-система, фирменные цвета, единый стиль, извлеки палитру по скриншоту, derive one from a brief, or extract one from a codebase or its CSS.
65 other projects use a version of this.
Adopted by
Most recently taken up by
- rakaarwaky/agents-arwakytheir own version, first seen Nov 8, 2026
- informaticolorenzo/skill-maestra-publictheir own version, first seen Nov 8, 2026
- ashleysbrain/skillstheir own version, first seen Nov 8, 2026
- pietz/skillstheir own version, first seen Nov 8, 2026
- alunadev/ald-skillstheir own version, first seen Nov 8, 2026
- figueroaignacio/ignaciofigueroa.devtheir own version, first seen Nov 8, 2026
Used with
Projects with it also use touchdesigner-mcp, teams-meeting-pipeline and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
john-data-chenSkilltouchdesigner-mcp
Control a running TouchDesigner instance via twozero MCP — create operators, set parameters, wire connections, execute Python, build real-time visuals. 36 native tools.
Also in 7 projects that use this
john-data-chenSkillteams-meeting-pipeline
Operate the Teams meeting summary pipeline via Hermes CLI — summarize meetings, inspect pipeline status, replay jobs, manage Microsoft Graph subscriptions.
Also in 9 projects that use this
aivrarSkillcompetitor-news-monitor
Watch named companies for material news; cited digests.
Also in 6 projects that use this
mae616Skillp5js
p5.js(クリエイティブコーディング)のProcessing由来「コードでスケッチ」思想を軸に、setup/drawループ・座標系・インタラクション・パフォーマンス最適化を整理する。p5.js、Processing、クリエイティブコーディング、ジェネラティブアート、インタラクティブ表現、ビジュアルプログラミング、Canvas描画、パーティクル、フラクタル、ノイズ表現に関する相談で必ず使うこと。ユーザーが「コードでアート」「動くビジュアル」「インタラクティブな描画」と言った場合にも適用する。
Also in 12 projects that use this
jh941213Skilldocs-ci
문서 CI(링크·OpenAPI lint·breaking 게이트·mermaid 검증)나 문서 드리프트 감지(docs.yaml 신선도 검사)를 설치하거나 돌릴 때 사용. 문서 내용 작성은 docs-architecture·docs-interfaces·docs-manuals.
Also in 3 projects that use this
jh941213Skilldocs-interfaces
API·이벤트 인터페이스 문서(OpenAPI·swagger·AsyncAPI 명세, 엔드포인트 레퍼런스, API 구성도·시퀀스, API CHANGELOG)를 만들거나 코드와 맞출 때 사용. 시스템 구성도는 docs-architecture, API 설계 원칙은 api-design-principles.
Also in 3 projects that use this
- +4 more from jh941213
Other versions65 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 65
- loongclaw-ai/loongclaw★ 640same name
- aivrar/portable-hermes-agent★ 239same name
- bifrost-proxy/bifrost★ 168same name
- diodeme/Gold-Band★ 164same name
- jh941213/ADLC-harness★ 125same name
- jh941213/my-cc-harness★ 125same name
- jh941213/my-claude-code-asset★ 125same name
- CaesiumY/ko-design-md★ 75same name
- vobase/vobase★ 60same name
- tdimino/claude-code-minoan★ 41same name
55 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository23 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- brainstormingSkill
- docxSkill
- hooks-creatorSkill
- htmlSkill
- marp-slideSkill
- mcp-builderSkill
- obsidian-cliSkill
- pdfSkill
- post-writingSkill
- pptxSkill
- skill-auto-improveSkill
- skill-creatorSkill
- skill-enhancerSkill
- skill-validatorSkill
- summarizing-meetingsSkill
- text-humanizerSkill
- transcript-fetcherSkill
- vdd-adversarialSkill
- vdd-sarcasticSkill
- wiki-ingestSkill
- xlsxSkill
The file
We split this skill into the rules it gives an agent
12 rules. 0 are common, 4 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 56 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 26
Use this skill when the user:
- Distinctive: line 119
Writable scope: only the DESIGN.md the user asked for, at a path they named or in their working directory — nothing else in their tree.
- Very specific: line 138
Every assets/template-*.md and examples/example-saas-dashboard.md lints at 0 errors, 0 warnings.
- Very specific: line 146
Never let a clean run stand in for a review.
- Distinctive: line 168
This is the single most important idea in the format: No source contains everything: a screenshot has no font names, a brief has tone and …
- Very specific: line 195
Put everything the description did not decide into omitted, with a reason.
- Very specific: line 196
Run Route 4. Detail: references/extraction.md §1.
- Distinctive: line 200
Read the image. Record its character in one sentence: light or dark, dense or airy, how many surface levels, borders or shadow.
- Very specific: line 214
Run Route 4, then hand back a hypothesis with MEASURED, INFERRED, NEEDS CONFIRMATION and OMITTED separated.
- Very specific: line 227
Verify the round trip with export --format json-tailwind from /tmp against the project config: a value present only in the codebase is a …
- Very specific: line 230
Run Route 4, and hand back in the Route 2 buckets — MEASURED, INFERRED, NEEDS CONFIRMATION, OMITTED: a codebase settles values and leaves …
- Very specific: line 242
Read the token-summary counts back against what you wrote: a bad reference in colors/spacing/rounded, or a unitless number, drops the token …
“Common” is measured: kept by at least 6 in 10 of the 56 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
DESIGN.md Design Systems
Purpose
DESIGN.md records a design system as machine-readable YAML tokens plus a prose rationale, so an implementing agent stops using its own defaults. Three gaps stand between an agent and a usable file:
- Syntactic — schema, references, the eight body sections. Closed by
references/spec-anatomy.md. - Procedural — verifiable output handed back unverified. Closed by
scripts/lintand Route 4. - Substantive — a valid file is not a useful one. Closed by
references/anti-slop.md, and by nothing else.
The third bites hardest because nothing reports it: a file of framework defaults,
system-ui, one radius and four truisms lints at zero errors. Toolchain:
@google/design.md@0.4.0 (Apache-2.0, Google LLC), run via npx.
When to Use This Skill
Use this skill when the user:
- asks for a DESIGN.md, a design system, a token file, or design tokens;
- asks to extract a palette from a screenshot, a mockup, or an image, or to derive a system from a brand brief, a codebase, or a tailwind config;
- asks to audit, repair or lint an existing DESIGN.md, export its tokens to Tailwind v3/v4, DTCG or CSS custom properties, or compare two revisions;
- says the output looks generic and asks to deslopify it, or writes any of дизайн-система, фирменные цвета, единый стиль, извлеки палитру, по скриншоту.
Out of scope: images, logos, component implementation, palettes derived from one seed colour. This skill produces the specification, not the interface.
Red Flags
STOP and READ if you are thinking:
- "The linter found no errors, so the file is finished." → WRONG. Only an
unresolvable reference and an unparseable token value move the exit code.
examples/fixture-clean.mdlints0 errors, 0 warnings, 1 info, yetscripts/check-contrastexits 1 on it:outlinemeasures 1.72:1 onsurface, under the 3.0:1 non-text floor. Exit 0 is the entry requirement, not a verdict. - "I recognise the typeface in this screenshot." → WRONG. Grotesques are
indistinguishable at UI sizes, and a family name in
fontFamilyreads as a measured fact forever after. Offer candidates, label yours a placeholder, ask. - "The brief said nothing about spacing, so a 4/8/16/24 ladder is safe." →
WRONG. An invented value and a measured value are indistinguishable in
YAML. Declare the section in
omitted— that field exists for exactly this. - "
inkandpaperdescribe this palette better thanprimaryandsurface." → WRONG.orphaned-tokensemits one warning per colour whose family sits outside the MD3 baseline and which no component references. Deletingcomponentssilences them — the rule returns early on an empty map — and leaves a token dump.
Rationalization Table
| Agent Excuse | Reality |
| "Exit code 0 means the file passed." | Exactly one rule produces errors. A file with no primary, no typography, an out-of-order body and a misspelled key that export drops still exits 0. Report the summary triple, never the exit code alone. |
| "The linter said nothing about my palette, so the palette is fine." | No rule reads a hue ramp, a type scale, a radius set, or one word of prose. references/anti-slop.md is the only check that does. |
| "I will read the hex values off the screenshot myself." | Compression, antialiasing, gradients and the colour profile each move the value. A hex written from perception is a fabrication shaped like a measurement. scripts/extract-palette measures; you assign roles. |
"#3b82f6 is a safe accent to start from." | That is Tailwind blue-500. It measures 3.68:1 on white, below AA. Six of the nine most-copied framework accents fail 4.5:1 on white, and readers recognise them on sight. |
"token-summary is noise; I skip the info lines." | It is the only trace of a silently dropped token: a spacing value written 16 with no unit vanishes and raises no finding at all. Read the counts back against what you wrote. |
"I will add elevation to the component." | The sub-token set is closed at eight names. An invented key is a broken-ref warning and every exporter drops it. Depth belongs in ## Elevation & Depth prose. |
| "One lint pass is enough." | section-order reports at most one inversion per run, and orphaned-tokens stays silent until the first component exists. Re-lint after every fix round. |
"The template in assets/ is close enough to ship." | template-skeleton.md lints clean carrying a conspicuous magenta accent and fifteen PROVISIONAL markers; a clean lint on an unedited copy proves only that the structure survived. |
Execution Mode
- Mode:
hybrid - Why this mode: measurement is script work, judgement is not. Colour values,
contrast ratios and lint findings come from
scripts/and the upstream CLI, because each is a number an agent gets wrong by eye. Template choice, role assignment, naming and the prose body are the agent's alone, and every route below ends in a script run.
Script Contract
Three executables in scripts/, all Python 3, all read-only: each writes a
report to stdout and modifies no file. Pass absolute paths.
| Script | Command and flags | Output |
lint | scripts/lint FILE… · --strict --json --list-rules --version PIN --timeout SECONDS | a severity/rule/path/message table per file, a REMEDY line per rule id that fired, and a PASS/FAIL verdict carrying the upstream summary triple |
check-contrast | scripts/check-contrast FILE · --level aa|aaa|both --min RATIO --pair FG,BG --matrix summary|plausible|full --strict-decorative --self-test --timeout SECONDS --json | WCAG 2.x ratios for every intended text-on-surface pair, a typography table and an advisory matrix, at AA 4.5, AA-large 3.0, AAA 7.0 and the 3.0 non-text threshold; --pair answers one pair the matrix never prints, UNCHECKED FILLS every component fill with no textColor |
extract-palette | scripts/extract-palette IMAGE · --colors N --ignore-edges PCT --region X,Y,W,H --min-share PCT --merge-distance D --json | dominant colours as HEX, SHARE, BUCKETS, HUE, L*, C* and a heuristic HINT |
--strict fails lint on warnings, which is what makes a gate meaningful, and
--list-rules prints all fourteen rule rows offline. Exit codes differ per script:
| Code | lint | check-contrast | extract-palette |
| 0 | no errors (and no warnings under --strict) | every gated intended pair meets the gate — under --pair, every queried pair | success |
| 1 | errors, or warnings under --strict | a gated intended pair fails — under --pair, a queried pair does — or --self-test mismatched | an out-of-range option value, or a --region malformed, outside the image, or combined with --ignore-edges |
| 2 | input problem, or a usage error | input problem, a usage error, or a --pair token name that is unknown or has no ratio | image missing, unreadable, or corrupt |
| 3 | npx or the CLI unavailable, the call timed out, or non-JSON output | the export call failed, or no colors defined | no available decoder handles the format |
With several files lint returns the worst code, ordered 3 > 2 > 1 > 0.
Artifacts: none — no script writes a file. Exit 3 means "the tool did not
run", never "the file is fine": report no verdict from such a run. The raw form,
for diff, spec and anything the wrappers omit:
cd /tmp && npx --yes @google/design.md@0.4.0 lint|diff|export|spec <ABSOLUTE-PATH>cd /tmp is load-bearing: a workspace declaring the same bin name shadows it.
export requires --format (css-tailwind, json-tailwind, tailwind,
dtcg, css-vars); lint --format text silently returns JSON. Full flags: each
--help and scripts/README.md §2 (--version PIN takes an argument).
Safety Boundaries
- Writable scope: only the DESIGN.md the user asked for, at a path they named or in their working directory — nothing else in their tree.
- Never overwrite the skill's own material:
assets/,examples/andreferences/are read-only, every template and fixture lint-verified as it stands. Copy a template out and edit the copy. - Network:
lintandcheck-contrastshell out tonpx --yes @google/design.md@0.4.0, which reachesregistry.npmjs.orgon the first call — roughly 30 seconds, then the npx cache, and the skill's only network access.lintannounces that wait on stderr;check-contrastprints nothing until its report, so a cold run of it looks hung. Offline with a cold cache both exit 3, never a clean verdict. - User-supplied images:
extract-palettedecodes an image the user supplied, reading pixels and writing nothing; it spawns no process and makes no network call. Confirm the path, do not fetch an image from a URL unless asked. - Installs:
bash scripts/install.shis optional and puts Pillow intoscripts/.venv/only — nothing global. Never vendor upstreamdesign.mdsource or itsexamples/here.
Validation Evidence
- Every
assets/template-*.mdandexamples/example-saas-dashboard.mdlints at 0 errors, 0 warnings. examples/fixture-clean.md→ exit 0,{"errors": 0, "warnings": 0, "infos": 1};examples/fixture-broken.md→ exit 1,{"errors": 1, "warnings": 6, "infos": 1}.scripts/check-contrast --self-testreproduces all five WCAG known answers, exit 0; the same script exits 1 onexamples/fixture-clean.mdatoutline on surface1.72:1 — proof that a clean lint is not a clean file.scripts/extract-paletteon the 200x100 three-band PNGscripts/install.shbuilds:3 of 3 clusters … covering 100.0% of counted pixels, exit 0. Detail:references/linter-rules.md§20–§22;scripts/README.md§3 and §8.bash scripts/tests/test_e2e.shre-checks every claim above, 36 assertions, each anchored to a defect this skill has shipped once. It includesscripts/tests/check-fabrication, which fails a file asserting values its source cannot support — an unsourced hex, ortypographydeclared over a capture whose text is redacted.scripts/tests/trigger-eval.shasks the separate question of whether the description routes at all; it is manual and billed, never CI. Detail:scripts/README.md§8.
The Linter Checks Form, Never Quality
Never let a clean run stand in for a review. What it checks: eleven rule
descriptors emitting fourteen (rule, severity) rows — an unresolvable reference,
an unrecognized component sub-token, a missing primary, intra-component contrast
at AA 4.5:1, orphaned colour names, empty spacing/rounded/typography, H2
order, misspelled and token-shaped keys, the three omitted outcomes.
What no rule checks: whether the type sizes form a modular scale, the
neutrals share a hue, every element uses one radius, fontFamily is system-ui,
the values were copied from Tailwind or Bootstrap, the accent carries more than
one role, Do's and Don'ts names this product, or all eight body sections are
present. Zero findings on a file with every one of those defects is the normal
case. Two gates close the opening, both part of the procedure. Quality —
references/anti-slop.md: sixteen prohibitions, each with a detection command
and a pass condition, plus a sixteen-step self-audit; the fixture opening that
file lints at zero errors and fails twelve of them. Accessibility —
scripts/check-contrast: upstream's contrast-ratio rule inspects only
components declaring both backgroundColor and textColor, only at AA 4.5:1,
never the palette, while this script walks every intended text-on-surface pair at
AAA and the 3.0:1 non-text threshold too.
omitted Exists So an Unknown Never Becomes a Fabrication
This is the single most important idea in the format. No source contains everything: a screenshot has no font names, a brief has tone and no numbers, a codebase has values and no rationale. Plausible filler lints clean and hides which values were observed.
omitted:
- section: components
reason: "The screenshot showed one screen; no component inventory was visible."
- spacingThe valid names are exactly five — colors, typography, spacing, rounded,
components — and they name token maps, not body sections. elevation,
layout, states, dark-theme raise unknown-omission and belong in body
prose; naming a populated section raises redundant-omission.
Route 1 — from a text description
- Classify the product: surface class (application UI or reading surface), UI language, density, named constraints (brand colour, required font, a11y target). With fewer than two of {palette, typography, density} given, ask.
- Pick the base template below; copy it to the user's path and edit the copy.
- Substitute values while preserving the relationships: neutral step count, scale ratio, spacing base unit, radius progression, one accent in one role, every contrast pair the template had cleared. Keep the MD3 token names.
- Rewrite
## Overviewand## Do's and Don'tsfor this brand. Delete any sentence that would still be true of a different product. - Put everything the description did not decide into
omitted, with a reason. - Run Route 4. Detail:
references/extraction.md§1.
Route 2 — from a screenshot
- Read the image. Record its character in one sentence: light or dark, dense or airy, how many surface levels, borders or shadow. Start from the template that Template Selection names below: take its section order and token vocabulary from there, and author every frontmatter value from the measurements rather than from the template.
- Measure the colours with the script, never by eye:
scripts/extract-palette <ABSOLUTE-IMAGE-PATH> --min-share 0.1. The default floor of 0.5 sits right on top of a one-control accent: on a 1440x900 dashboard capture#e25a3cmeasures 0.52%, and--ignore-edges 4— 57 px off each side, a quarter of the 233 px rail — pushes it to 0.40% and out of the report. Add that flag for a browser screenshot with chrome to crop, never for a full-app capture. - Assign roles yourself: largest share is
background, the neutral inset from it issurface, the high-chroma small-share colour on one control type isprimary. Name everything in the MD3 vocabulary; a boundary namedoutline-variantis exempt from the 3:1 non-text gate incheck-contrast, so that suffix asserts the element is decorative — a divider that is the only thing separating two regions is structural and takesoutline, which stays gated. Recovery: with noaccent candidaterow, lower--min-shareagain; with the light planes collapsed into one row, lower--merge-distance— at 3.0 the 71.70%#ffffffsplits into#ffffff58.51% and#f7f4ef16.56%. - Count what the image supports (surface levels, radius steps, type sizes), not absolute pixels — a retina capture scales all of them by an unknown ratio.
- Do not name a font. Where a letterform is legible, offer two or three candidates, write one as a labelled placeholder, and ask. With no legible letterform — small text, heavy compression, a logo-only capture — offer no candidates and declare
typographyinomittedwith that reason (references/linter-rules.md§12): a placeholder with no letterform behind it reads as a measured fact forever after. - Write only the components actually visible: two visible controls means two components, not a plausible library of eight. Give every component that renders a label a
textColor: with abackgroundColoralone no contrast rule fires anywhere andcheck-contrastnames it underUNCHECKED FILLS, a silence that reads exactly like a pass.--pair FG,BGmeasures a declared pair the matrix never prints, such astertiaryonsurface. - Everything absent goes to
omittedwith a reason, or — where no section name fits (states, dark theme, motion, breakpoints) — to prose. - Run Route 4, then hand back a hypothesis with
MEASURED,INFERRED,NEEDS CONFIRMATIONandOMITTEDseparated. Hand-back template and reliability table:references/extraction.md§2 (B.5); a worked output of this route:examples/example-saas-dashboard.md.
Route 3 — from a codebase
- Harvest what is used, not what is declared: hex literals,
var(--…)references,@themeblocks, tailwind config entries, utility classes, dimensions — each with a count. Commands:references/extraction.md§3 (C.1). - Rank by frequency and state the threshold applied: a value used once is
probably an accident, not a token. Check each value against the AS-10 table in
references/anti-slop.mdbefore it enters the token map: a framework default is often the top-count hex in a tree, and frequency makes it measured, never chosen — name it in the hand-back and get a brand value decided. - Collapse near values into steps and report every collapse: silent rounding destroys deliberate optical adjustments. Rename
bg/accentinto MD3 families. - Verify the round trip with
export --format json-tailwindfrom/tmpagainst the project config: a value present only in the codebase is a token the extraction missed (references/export-formats.md§5). - Run Route 4, and hand back in the Route 2 buckets —
MEASURED,INFERRED,NEEDS CONFIRMATION,OMITTED: a codebase settles values and leaves intent undetermined, and an inferred value written flat is indistinguishable from a harvested one. Note thatexportnever lints: it exits 0 on a file with errors.
Route 4 — lint, fix, re-run (mandatory)
A procedure that ends without a clean lint run has not completed; handing an unlinted draft back is the failure this skill exists to prevent.
scripts/lint <ABSOLUTE-PATH>— add--strictfor anything gate-shaped, since warnings carry the substantive complaints.references/linter-rules.md§1 resolves any finding in one table.- Fix every finding, not only the errors, and re-run after each fix round.
scripts/lint --list-rulesprints all fourteen rows with a remedy, offline. - Read the
token-summarycounts back against what you wrote: a bad reference incolors/spacing/rounded, or a unitless number, drops the token in silence, and that count is the only trace of it. - Quote the final
summarytriple verbatim in the hand-back.
Template Selection
Copy one file out of assets/ and edit the copy. First match wins.
| # | Condition | Template |
| R0 | The product ships a Russian-language UI (override — beats every rule below) | assets/template-cyrillic.md |
| R1 | Application UI: dashboard, admin, console, CRM, IDE, analytics, SaaS | assets/template-product-saas.md |
| R2 | Reading surface: magazine, blog, docs, newsletter, essay, portfolio | assets/template-editorial.md |
| R3 | Outside R1 and R2 — game, print, hardware panel, embedded display | assets/template-skeleton.md |
| R4 | Too thin to classify, or authoring from zero | assets/template-skeleton.md |
R0 is correctness, not taste. Google Fonts serves Instrument Serif and Bodoni
Moda with latin and latin-ext subsets only, so Russian text in those families
falls back silently to a system serif. Families verified to carry Cyrillic: Golos
Text, Onest, Inter, IBM Plex Sans, JetBrains Mono, Manrope. Where R0 and R2 both
apply, base on template-cyrillic.md and import only the relationships from
template-editorial.md. Every template lints at 0 errors, holds the eight body
sections in canonical order, and names colours in MD3 families.
Traps to Know Before Writing a Line
Quote every hex — unquoted, #RRGGBB is a YAML comment and the value becomes an
error reading 'null' is not a valid color. Quote every {reference} —
unquoted, { opens a flow mapping and no rule fires at all. Write units: a bare
16 in a Dimension slot drops the token with no finding. Only ## headings reach
section-order, Do's and Don'ts MUST use the ASCII apostrophe, and a fenced
yaml block anywhere in a DESIGN.md body is merged into the token set — a
top-level key colliding with the frontmatter then halts every rule at exit 0.
Tables: references/spec-anatomy.md §11, references/export-formats.md §9.
References Map
| File | Load it when |
references/spec-anatomy.md | Writing or repairing frontmatter: the nine keys, value types, references, the closed eight component sub-tokens, omitted, the eight body sections, a verified-traps table. |
references/linter-rules.md | A finding needs resolving: fourteen rule rows with verbatim messages and remedies, the exit-code contract, the rule-less parser and model findings, both fixtures quoted in full. |
references/extraction.md | Executing Route 1, 2 or 3: full procedures, the screenshot reliability table, the hand-back template, the codebase harvest commands. |
references/anti-slop.md | Before handing any file back: sixteen prohibitions, each with a detection command and a pass condition, plus the self-audit checklist. |
references/export-formats.md | Exporting or comparing revisions: the five export formats and their coverage matrix, round-trip recipes, diff semantics, corrections to the upstream help text. |
examples/example-saas-dashboard.md | A finished screenshot extraction with its reliability ledger, to read against your own draft. |
examples/fixture-clean.md, examples/fixture-broken.md | The known-good and known-bad controls the documented lint output was measured on. |
scripts/README.md | A script misbehaves, an exit code needs explaining, or the version pin needs bumping. |
Quality Checklist
scripts/lint --strict FILEexits 0 — or every remaining finding is acontrast-ratioshortfall between two colours measured from the source, each named with its ratio and justified; no other rule is exempt, and no measured value is edited to clear a finding. Thesummarytriple is quoted in the hand-back rather than summarised as "clean".scripts/check-contrast FILEexits 0, or every failing pair is named and justified, and thetoken-summarycounts equal the keys actually written in each map.- All eight body sections are present in canonical order at
##level, with the ASCII apostrophe inDo's and Don'ts(a house rule; no linter rule enforces it). - Colour tokens use MD3 family names,
primaryexists, and every non-baseline name is referenced by a component. - Every section the source did not settle is in
omittedwith areason, no populated section appears there, and nothing anywhere is invented. - The
references/anti-slop.mdself-audit passes, or each miss is explained: no copied framework hexes, nosystem-uifirst family, more than one radius referenced. ## Overviewand## Do's and Don'tsname this product and its own tokens; delete any rule that would read identically in another product's file, and confirm nothing underassets/,examples/orreferences/was modified.- For an extraction: measured, inferred and unknown are separated in the hand-back, and no font family is asserted as observed.
Dependencies
| Dependency | Required for | Install |
| Python 3 (stdlib only) | all three scripts | present on the host |
| Node.js 18+ | npx, used by lint and check-contrast | https://nodejs.org/ |
@google/design.md@0.4.0 | the linter, export, diff, spec | fetched by npx --yes on first use, then cached; never vendored |
| Pillow (optional) | extract-palette on JPEG, WebP, HEIF, interlaced PNG | bash skills/design-md/scripts/install.sh → scripts/.venv/ |
extract-palette reads non-interlaced PNG at bit depth 8/16 with its own stdlib
decoder — the shape of every macOS and Linux screenshot — so the screenshot route
runs with no install at all. bun is required nowhere and MUST not be added.
The version pin is deliberate: the format declares version: alpha and this
skill quotes upstream messages verbatim. Bumping it is a change to the skill —
follow references/export-formats.md §8.1 and scripts/README.md §5, moving the
pin in lint, check-contrast and install.sh together. This skill is
Apache-2.0 and carries no upstream source or examples.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

