Figma Design System Builder
warpdotdev/warp
Builds or updates a design system in Figma from a codebase in ordered phases: discovery, variables and tokens, components, theming and documentation, with checkpoints.
Writes or updates a DESIGN.md for one product from its repository or a public URL, recording the design language and tokens that the evidence supports.
$ npx skills add ibelick/ui-skills --skill create-design-md -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ibelick/ui-skills create-design-md --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ibelick/ui-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/create-design-md .claude/skills/create-design-md && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "create-design-md" agent skill from https://github.com/ibelick/ui-skills/tree/main/skills/create-design-md into .claude/skills/create-design-md/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-design-md", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ibelick/ui-skills/tree/main/skills/create-design-mdType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ibelick/ui-skills --skill create-design-md -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ibelick/ui-skills create-design-md --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ibelick/ui-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/create-design-md .agents/skills/create-design-md && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "create-design-md" agent skill from https://github.com/ibelick/ui-skills/tree/main/skills/create-design-md into .agents/skills/create-design-md/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-design-md", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ibelick/ui-skills --skill create-design-md -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ibelick/ui-skills create-design-md --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ibelick/ui-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/create-design-md .cursor/skills/create-design-md && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "create-design-md" agent skill from https://github.com/ibelick/ui-skills/tree/main/skills/create-design-md into .cursor/skills/create-design-md/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-design-md", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ibelick/ui-skills.git --path skills/create-design-md--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ibelick/ui-skills --skill create-design-md -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ibelick/ui-skills create-design-md --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ibelick/ui-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/create-design-md .gemini/skills/create-design-md && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "create-design-md" agent skill from https://github.com/ibelick/ui-skills/tree/main/skills/create-design-md into .gemini/skills/create-design-md/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-design-md", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ibelick/ui-skills create-design-mdInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ibelick/ui-skills --skill create-design-md -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ibelick/ui-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/create-design-md .github/skills/create-design-md && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "create-design-md" agent skill from https://github.com/ibelick/ui-skills/tree/main/skills/create-design-md into .github/skills/create-design-md/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-design-md", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ibelick/ui-skills --skill create-design-md -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ibelick/ui-skills create-design-md --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ibelick/ui-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/create-design-md .opencode/skills/create-design-md && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "create-design-md" agent skill from https://github.com/ibelick/ui-skills/tree/main/skills/create-design-md into .opencode/skills/create-design-md/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-design-md", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
create-design-mdWrites or updates a DESIGN.md for one product from its repository or a public URL, recording the design language and tokens that the evidence supports.
The skill modifies only DESIGN.md. In repository mode it works from a local product repo and writes the file at the product's root, asking first if several deployable products exist and the target is unclear. In URL mode it works from a public site without source, which needs a rendered browser to inspect the DOM, computed styles and loaded stylesheets at desktop and mobile widths, sampling up to three same-origin pages with distinct templates.
Both modes feed the same evidence pipeline: role, value, source, scope, recurrence and confidence, normalized into the DESIGN.md schema. Uncertain, purely local or implementation-irrelevant candidates are left out, and repetition or visual preference is never promoted to intent. URL evidence can show observable patterns and computed values but not internal token names, component ownership or rationale, so repository mode wins whenever source is available.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 587ea30. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
DESIGN.md Creator loads about 4k tokens when it runs. Until then it costs about 98 tokens; SKILL.md has 2,154 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from ibelick/ui-skills at commit 587ea30, republished under its MIT licence (© ibelick). 2,154 words, ~4,044 tokens.
.claude/skills/create-design-md/SKILL.md (or your agent's skills folder).Create a DESIGN.md for one product or coherent website. Record the design language that governs it, not every value that happens to exist.
DESIGN.md. Do not change product source, dependencies, configuration, or generated files.Use when a local product repository is available. Create or update DESIGN.md at the root of the selected product.
If the repository contains multiple deployable products, select the one named by the user. If the request does not identify one and ownership is ambiguous, ask before writing.
Repository evidence may establish normative values, token names, component ownership, and documented rationale.
Use when the user provides a public URL without its source repository. Create a reconstructed DESIGN.md draft in the current workspace.
URL mode requires rendered browser access. Inspect the DOM, computed styles, and publicly loaded stylesheets at desktop and mobile widths. Screenshots may support interpretation but cannot establish exact values by themselves.
Inspect the supplied page and shared chrome. For a site-wide request, sample up to three same-origin pages that represent distinct templates.
URL evidence may establish only observable visual patterns and computed values. It cannot establish internal token names, component ownership, undocumented rationale, or whether a pattern is intentionally canonical.
If rendered inspection is unavailable, ask for screenshots or source files. Do not create a DESIGN.md from copy, metadata, or HTML structure alone.
Choose repository mode whenever source is available. A supplied URL may verify rendered presentation but does not replace repository evidence.
The modes differ only in how they collect evidence. They must use the same record and output pipeline:
role → value → source → scope → recurrence → confidenceNever let repository or URL evidence introduce a second token schema. The same flat token names, mapping-shaped typography, omission rules, and export gates apply to both modes.
The generated document is private until validation passes. Never return, display, or summarize a DESIGN.md draft before lint and export succeed. If validation reports an invalid shape or missing export category, rewrite the frontmatter and rerun; if the category cannot be repaired, remove it and report it as omitted.
In repository mode, inspect in this order:
DESIGN.md and explicit repository guidanceA source participates only when the selected product imports, references, inherits, or renders it. Exclude proposals, migrations, examples, generated outputs, legacy implementations, and similarly named packages unless the selected product uses them.
In URL mode, sample representative elements for:
Prefer computed values and loaded CSS declarations over visual estimation.
Before drafting URL-mode prose or YAML, build a private evidence ledger for each sampled page and viewport. For each candidate, record: page, viewport, element role, computed property/value, and the matching loaded-CSS declaration or custom property when available. Inspect the public stylesheets loaded by the page, including custom properties and media-query rules; a stylesheet value is usable only when it is connected to a rendered element or recurs across the sampled pages.
Promote a URL value into DESIGN.md when either (a) the rendered computed value and a loaded declaration/custom property agree, or (b) the same computed value recurs for the same role across the required samples. If neither condition holds, omit the value. You may preserve an exposed custom-property name only when its declaration and rendered use are directly observable; do not invent semantic aliases from a raw value.
For every URL-mode claim, require all three proofs before writing it:
If any proof is missing, omit the claim. Do not turn a visual impression into a token, a single occurrence into a site-wide rule, or a guessed value into YAML. Exact values require computed styles or loaded CSS; otherwise describe the role without a value or omit it.
In repository mode, find explicit product intent or a design reference before describing product character. In URL mode, do not invent product character; the Overview may state only the site's observable purpose and presentation, and must identify the document as reconstructed.
Write YAML only from named shared tokens and roles in governing sources. Do not turn utility classes, repeated literals, or component values into token scales.
Treat frontmatter shape as a hard gate, not a stylistic choice: a value that is a token group must be a mapping whose children are the schema's fields. Never emit scalar typography entries (sans: Geist), arbitrary nested source objects (font-family: { mono: ... }), or rounded keys copied from CSS variable names (radius-sm, radius-md, etc.).
Use mappings, never sequences, for token groups. When a governing source defines one group-level token such as --radius, normalize it to base; otherwise preserve the source token names.
Map source values into DESIGN.md schema fields. Preserve semantic token names, not source object nesting. For example, write typography.mono.fontFamily: Geist Mono, never typography.mono: Geist Mono; write rounded.base: 0.625rem when the source has only --radius, never rounded.radius or derived radius steps.
Resolve framework utilities through the active theme or configuration before writing exact values.
Identify the repository's export target before writing frontmatter: css-tailwind for Tailwind v4, json-tailwind for Tailwind v3, and dtcg otherwise. Token names must be valid for that target.
Check the installed DESIGN.md specification before encoding theme modes:
npx @google/design.md specIf the specification supports themes and default-theme, use its theme-aware token syntax. Otherwise, put the default-theme value under each canonical semantic token and preserve exact alternate-theme values in a ## Themes table. Do not create parallel -light and -dark token names, discard alternate-theme values, or use unreleased syntax. A fallback Themes table is documentation only; do not pretend it makes the frontmatter theme-aware.
In repository mode, every prose rule must be supported by explicit guidance, a named shared token or variant, or a shared owner used by at least two audited surfaces. Otherwise omit it.
In URL mode, every prose rule must be directly observable. A site-wide rule must recur across at least two sampled templates; otherwise scope it to the inspected page. Use reconstructed role-based names and label the document as a draft.
URL-mode YAML is intentionally sparse, but not empty when measured evidence exists. Add a category when at least one supported value or role survives the three-proof gate. Colors may use computed values or verified public custom properties, but must remain flat and export-safe; typography must use canonical fields such as fontFamily, fontSize, lineHeight, and fontWeight; rounded and spacing values must come from computed styles or loaded declarations. Do not create aliases such as primary, elevated, or display merely to organize observations. A component section requires the same interaction or surface treatment to recur across at least two sampled pages and to change a concrete implementation choice.
URL reconstruction does not change the frontmatter schema. Use only these typography property names: fontFamily, fontSize, lineHeight, fontWeight, and letterSpacing. For example:
typography:
sans:
fontFamily: Inter Variable
display:
fontFamily: Inter Variable
fontSize: 64px
lineHeight: 64px
fontWeight: 510Never emit URL-specific aliases such as family, size, weight, mobile-display, or nested sans/mono values inside a typography scale. Reconstructed role names may vary; schema field names may not.
For URL output, use css-tailwind as the compatibility export target unless the user specifies another target. Flatten reconstructed color roles into valid token names. Use background-primary, foreground-secondary, or border-muted, not nested keys such as background.primary or foreground.secondary. Every emitted token name must match ^[a-zA-Z0-9][a-zA-Z0-9-]*$; reject and rewrite any key that would fail this test.
Normalize URL frontmatter before writing any Markdown. The order is: collect evidence, choose the export target, map evidence into the canonical schema, reject invalid shapes, then write the document. Never draft prose first and retrofit the YAML afterward.
URL frontmatter must satisfy these shape rules:
colors is a flat mapping of valid token names to values.typography is a mapping of named scales; each scale is a mapping using only canonical fields.rounded and spacing are flat mappings of valid token names to values.components may reference canonical token paths but may not introduce a second token schema.If normalization would require inventing a token name, field, scale, or semantic relationship, omit the candidate.
Outside the Overview, every Markdown sentence must change an implementation choice. Delete component inventories, generic design advice, and prose that only restates YAML.
Preserve the scope and direction of every rule. When implementation conflicts with explicit guidance, document the guidance and report the conflict outside DESIGN.md.
Start with the smallest valid frontmatter:
---
version: alpha
name: <string>
description: <string>
---Only name is required. Add colors, typography, rounded, spacing, or components only when a governing source already defines that named system or contract. Do not create token names to organize implementation values. Token references use {path.to.token}.
Use schema-shaped mappings, not copied source nesting. A typography scale is always named and maps its properties beneath it:
typography:
sans:
fontFamily: Geist
mono:
fontFamily: Geist MonoIf the source defines only --radius, write rounded.base, not rounded.radius; do not derive sm, md, lg, or xl from utility classes or repeated values. Before saving, inspect the parsed frontmatter and reject it yourself if any typography child is scalar or if rounded contains keys not present in the governing source.
Start with ## Overview. State only the product's purpose and evidenced design direction. Do not summarize pages, components, tokens, or implementation. Add only supported sections from this order:
Do not create a section merely because it exists in the format. Do not reorder or duplicate included sections. Add an unknown section only when supported guidance cannot fit a standard section.
Markdown records design intent and application guidance. Except for the fallback ## Themes table, do not put token inventories, component configuration, source syntax, or documentation methodology in Markdown.
Include a Don't only when a governing source states an explicit prohibition.
DESIGN.md unless the user or current governing evidence replaces them.DESIGN.md.Before saving, delete:
## Themes tableRun one final no-op pass: remove vague advice such as “be thorough,” “keep it polished,” or “use good judgment.” Keep only evidence gates, schema constraints, or application rules that change the document.
Run structural linting:
npx @google/design.md lint DESIGN.mdThen run one compatibility export using the target selected above:
npx @google/design.md export --format <format> DESIGN.mdInspect the output. Every populated frontmatter category supported by the target must emit its corresponding token category; an empty or missing category is a schema failure even when the command exits successfully. Rewrite the frontmatter and rerun validation until the category is emitted, unless the target genuinely cannot represent it. Do not report success while any populated category is missing from the export. Do not return the document while lint or export fails. Do not remove supported design information solely to satisfy an exporter limitation; report that limitation instead. Do not create or retain exported files.
For css-tailwind, verify these output families: colors → --color-*, typography.<name>.fontFamily → --font-*, typography.<name>.fontSize → --text-*, rounded → --radius-*, and spacing → --spacing-*. Typography entries are named scales; put fontFamily, fontSize, and lineHeight inside each scale, never under arbitrary source nesting such as font-family. If typography is populated but the export contains neither --font-* nor --text-*, the document is invalid and must be rewritten before reporting.
When updating an existing document, preserve its original contents temporarily and run:
npx @google/design.md diff <previous-file> DESIGN.mdRestore any removed accepted decision unless current governing evidence or the user explicitly replaces it.
Return:
DESIGN.mdIn URL mode, label the output as a reconstructed draft.
© ibelick, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/create-design-md of ibelick/ui-skills.
Open the folder on GitHubat commit 587ea30
DESIGN.md Creator next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| DESIGN.md Creator this skillibelick/ui-skills | 9.5k | — | ~4k | Automated safety check: Pass | MIT | |
| Figma Design System Builderwarpdotdev/warp | 65k | 2 repos | ~4.4k | Automated safety check: Pass | AGPL-3.0 | |
| Figma use_figma Plugin API Ruleswarpdotdev/warp | 65k | 4 repos | ~4.4k | Automated safety check: Pass | AGPL-3.0 | |
| Design SystemOhh-889/skyroc | 795 | 11 repos | ~1.7k | Automated safety check: Pass | MIT | |
| Design Dnazanwei/design-dna | 1.9k | 1 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Stitch Taste Design Systemgoogle-labs-code/stitch-skills | 8.4k | 15 repos | ~3.1k | Automated safety check: Pass | Apache-2.0 |
warpdotdev/warp
Builds or updates a design system in Figma from a codebase in ordered phases: discovery, variables and tokens, components, theming and documentation, with checkpoints.
warpdotdev/warp
Required groundwork before any use_figma call: the rules and reference files for running JavaScript in a Figma file through the Plugin API without common failures.
Ohh-889/skyroc
Token architecture, component specifications, and slide generation.
zanwei/design-dna
Extract, define, and apply design DNA across three dimensions: design system (tokens), design style (qualitative feel), and visual effects (Canvas, WebGL, 3D, particles, shaders, scroll effects…
google-labs-code/stitch-skills
Generates a DESIGN.md design-language file for Google Stitch that encodes color, typography, layout, component behavior and motion rules to avoid generic AI-looking UI.
scalar/scalar
Scalar's design system — design tokens, theming (@scalar/themes), CSS variables, and the @scalar/components library.
ibelick/ui-skills
Audits and fixes web animation performance: layout thrashing, work that belongs on the compositor, scroll-linked motion and costly blur effects.
ibelick/ui-skills
Audits and fixes HTML accessibility problems such as ARIA labels, keyboard navigation, focus management, contrast and form errors with minimal changes.
ibelick/ui-skills
Applies a fixed set of UI rules for stack, components, interaction, animation, typography and layout, or reviews a file against them with concrete fixes.
ibelick/ui-skills
Audits one product surface against its own design evidence and writes self-contained implementation plans for another agent, without touching product source.
ibelick/ui-skills
Audits and fixes page titles, meta descriptions, canonical URLs, Open Graph and Twitter cards, favicons, JSON-LD and robots directives.
ibelick/ui-skills
Routes UI tasks to the smallest useful set of UI Skills through the ui-skills CLI, picking a category and loading at most three skills before implementing.
Categories
Writes or updates a DESIGN.md for one product from its repository or a public URL, recording the design language and tokens that the evidence supports. md. In repository mode it works from a local product repo and writes the file at the product's root, asking first if several deployable products exist and the target is unclear.
DESIGN.md Creator fits situations like: documenting the design language of an existing product repository; reconstructing a DESIGN.md from a public website's rendered styles; giving coding agents persistent UI context to follow; updating a DESIGN.md after the interface has changed.
Run `npx skills add ibelick/ui-skills --skill create-design-md -a claude-code`. Or copy the skill folder (skills/create-design-md in ibelick/ui-skills) into .claude/skills/create-design-md in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ibelick/ui-skills --skill create-design-md -a codex`. Or copy the skill folder (skills/create-design-md in ibelick/ui-skills) into .agents/skills/create-design-md in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ibelick/ui-skills --skill create-design-md -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-design-md, .gemini/skills/create-design-md, .github/skills/create-design-md and .opencode/skills/create-design-md in your project.
Going by SKILL.md and its folder, DESIGN.md Creator needs the command-line tools its instructions call (npx). Our summary lists: Rendered browser access when working from a URL.
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
DESIGN.md Creator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with DESIGN.md Creator: Figma Design System Builder (warpdotdev/warp, 65k stars), Figma use_figma Plugin API Rules (warpdotdev/warp, 65k stars), Design System (Ohh-889/skyroc, 795 stars) and Design Dna (zanwei/design-dna, 1.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ibelick (a GitHub user) maintains it in ibelick/ui-skills, which has 9,476 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 7, 2026.
Source: ibelick/ui-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.