skills/design-language/SKILL.md
Capture and enforce a product's visual design language — principles and patterns that make it feel like itself. Use when the user wants to: distill design inspiration into a durable reference ("capture this design from figma", "distill this screenshot", "extract our design language", "capture design direction"), or check an implementation against the product's design language ("review design fidelity", "check against design direction", "does this match our design?", review a PR for design drift). Core signal: user points at a design source (Figma URL, screenshot, live URL) OR built UI and asks how it relates to the product's visual language. Operates on a consumer-repo `docs/design.md` — proposes diffs, never writes directly. Pairs with shaping-work, implementation-planning, implement-change, and qa-test. NOT for: generating new UI (→ frontend-design), translating a Figma design into code (→ figma-implement-design), accessibility audits (→ a11y-debugging), or token extraction.
npx skillsauth add teambrilliant/dev-skills design-languageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Capture and enforce a product's visual language — principles + patterns that make it feel like itself. Two modes, one skill.
docs/design.md.docs/design.md, check fidelity and produce a structured critique that cites specific principles and specific lines.Advisory by default. This skill never writes to docs/design.md directly. It produces a proposed diff; the user commits.
Context-efficient design: heavy source extraction (Figma frame parsing, DOM snapshots, screenshot vision) runs in a sub-agent so raw source data stays out of the main thread. Main thread only sees the distilled observations and the proposed diff.
Sub-agent rule: dispatch a sub-agent when extraction involves multiple Figma frames, a full DOM snapshot, or vision analysis of a dense screenshot. Handle directly when the source is a single component file or a short existing diff.
Detect from input shape, not a mode flag.
| Input shape | Mode |
|---|---|
| figma.com/design/... URL | Capture (Figma source) |
| http(s)://... URL of a live site | Capture (live URL source) |
| Image file path (.png, .jpg, .webp, etc.) | Capture (screenshot source) |
| Component file path (.tsx, .vue, .svelte, etc.) + existing docs/design.md | Review |
| Screenshot of the product's own built UI + existing docs/design.md | Review |
| External source + no docs/design.md yet | Capture (bootstrap) — propose the initial docs/design.md skeleton from references/design-md-template.md, seeded from this source. |
If the user's intent is ambiguous (e.g., a screenshot could be inspiration or the product's own UI), ask one clarifying question before routing.
Always load references/design-heuristics.md before running either mode — it is this skill's operational vocabulary. Every finding in output must cite a heuristic section or a principle from docs/design.md.
Distill a source into proposed additions/changes to docs/design.md.
Before extraction, stage a durable copy under thoughts/design-captures/ so the capture is auditable. Filename: YYYY-MM-DD-{short-description}.{ext}.
mcp__plugin_figma_figma__get_screenshot to save a PNG of the node, and mcp__plugin_figma_figma__get_metadata for structure. Save screenshot under thoughts/design-captures/.mcp__plugin_chrome-devtools-mcp_chrome-devtools__navigate_page + take_screenshot to capture; save under thoughts/design-captures/.thoughts/design-captures/, copy it in with a dated name. If already there, leave it.The staged artifact is cited in the proposed diff and logged in docs/design.md §Captures log. This is the audit trail for why a principle or pattern exists.
Launch a sub-agent to extract observations from the staged source. Keep raw source data (full Figma JSON, DOM tree, pixel analysis) out of the main thread.
Sub-agent prompt:
Extract design observations from this source. Return a structured summary, not raw tool output.
Source type: {figma | live-url | screenshot}
Source location: {URL or staged file path}
Use these tools as relevant:
- Figma: mcp__plugin_figma_figma__get_design_context, get_metadata, get_variable_defs
- Live URL: mcp__plugin_chrome-devtools-mcp_chrome-devtools__navigate_page, take_snapshot,
evaluate_script (for computed styles of key elements)
- Screenshot: read the image; extract what can be seen.
Reference file: `skills/design-language/references/design-heuristics.md` — use these
section names as your vocabulary.
For each observation:
1. Which heuristic section does it touch? (e.g., §Hierarchy, §Density & Rhythm, §Motion)
2. What specifically is happening? (e.g., "primary CTA uses size + weight + color — three
levers stacked"; "spacing rhythm tight and consistent between list rows")
3. Can you quantify it? Only if the source is code or Figma; **never** quantify from a
raw screenshot (vision cannot reliably distinguish 14px from 16px). For screenshots,
describe qualitatively ("dense", "calm", "airy").
4. Is this observation **novel** to this product, or is it a generic design truth? The
skill cares only about novel/product-shaping observations.
Return: a numbered list of observations, each with:
- Heuristic section touched
- Specific observation (qualitative or quantitative per rule 3)
- Whether it is novel or generic
Do NOT propose principles or patterns yet. Just observations. Keep under 30 items — if
there are more, return the most distinctive 30.
Before proposing any new principle or pattern, read the existing docs/design.md and try to consolidate. This is the most important discipline in Capture mode — every session tends to add, nothing compacts, and the doc rots into contradictory bullets.
For each observation returned by the sub-agent:
docs/design.md that this observation reinforces, refines, or contradicts?A new principle requires explicit justification that none of the existing N principles cover the observation. Reject the temptation to add when an existing entry could be strengthened.
Output the proposed diff inline. The diff must include:
[describes] / [prescribes]), statement, Why, Cite.docs/design.md? If nothing contradicts, say so explicitly: "No divergences from current principles." Never silently skip.thoughts/design-captures/.Close with: "Want me to apply this diff to docs/design.md?" Do not write the diff until the user confirms.
Check a component or built-UI screenshot against the product's docs/design.md and produce a structured critique.
Read docs/design.md's last-modified timestamp (via git log -1 --format=%cd docs/design.md or filesystem mtime). If older than 8 weeks, warn the user:
"
docs/design.mdwas last updated {date}. Principles may be stale — a review against stale principles can miss real drift. Continue, or capture fresh first?"
If continuing, note the staleness in the report header.
When both code and a screenshot of built UI are available, prefer the code. Claude's vision is unreliable for measurements (14px vs 16px, color stops, precise contrast). Code gives truth.
For complex components (multi-file, heavy composition), launch a sub-agent to gather the full surface in one pass:
Read {component path} and any components it composes. Return:
1. All style-bearing declarations (Tailwind classes, style props, CSS imports).
2. Any tokens or design constants referenced.
3. A compact summary of the visual structure (what renders at what level).
Do not interpret. Just gather.
Walk the source against, in this order:
docs/design.md §Principles — does the source honor each describes/prescribes entry? For each finding, cite the principle by number.docs/design.md §Anti-principles — does the source violate any "we deliberately don't" entries?docs/design.md §Functional patterns — if the source is a known functional pattern, does it match the canonical composition? If it's a new pattern, flag that.docs/design.md §Perceptual patterns — does the source carry the product's feel (rhythm, motion personality, chrome quietness)?references/design-heuristics.md — any heuristic violations not covered above. Cite by section and check ID.Specificity is required. Every finding must:
Vague findings ("feels off", "could be tighter", "not quite right") are forbidden. If an observation cannot be tied to a named principle, pattern, or heuristic, drop it — this skill's vocabulary is what it cites. Uncited criticism is slop.
Output a structured critique. See Output Style.
If there are no findings, say so plainly: "Review passed. No drift from principles or heuristics observed." — do not pad with generic praise.
These are the skill's guardrails. Cite them back to yourself when drafting output.
[describes] (current reality) or [prescribes] (target). Drift is visible only when the split is explicit.docs/design.md mtime; if > 8 weeks old, warn before critiquing.Every output should be auditable against these rules.
Always open with a Design View block — mirrors strategic-thinker / product-thinker signature:
`★ Design View ───────────────────────────────────`
- [Mode: Capture / Review / Capture (bootstrap)]
- [Lead observation or finding count]
- [Primary risk: e.g., "2 divergences" / "1 stale principle cited" / "screenshot-only review"]
`─────────────────────────────────────────────────`
Rules:
`★ Design View ───────────────────────────────────`
- Mode: Capture ({source type})
- {N} observations distilled, {M} consolidations, {K} new entries, {J} divergences
- {Headline finding}
`─────────────────────────────────────────────────`
## Source
{staged artifact path, date, one-line description}
## Proposed diff to `docs/design.md`
### Edits to existing entries
(…each edit with old → new…)
### New entries
(…each with tag, statement, why, cite — or "None (consolidated into existing)"…)
### Divergences
(…each: this source contradicts principle {N} because … — or "No divergences."…)
### Captures log entry
- `thoughts/design-captures/{filename}` → informed {which entries}
---
Want me to apply this diff to `docs/design.md`?
`★ Design View ───────────────────────────────────`
- Mode: Review ({code / screenshot / code+screenshot})
- {N} findings across {M} principles / heuristics
- {Headline finding or "Review passed"}
`─────────────────────────────────────────────────`
## Scope
- Source: {component path or screenshot}
- `docs/design.md` last updated: {date} {(+ stale warning if applicable)}
## Findings
1. **fails principle {N}: {name}** — {file:line or element}
- Observation: {one line}
- Fix: {concrete change}
2. **§{Heuristic section} > {Check ID}** — {file:line or element}
- Observation: {one line}
- Fix: {concrete change}
(…or "No findings. Review passed."…)
## Summary
{one-line verdict}
docs/design.md directly. Advisory only; user commits the diff.frontend-design.figma-implement-design.a11y-debugging. Contrast and focus-ring issues are flagged as design issues (via §Contrast heuristics); WCAG-level audit is out of scope.When the review or capture reveals a clear next step, offer it.
[prescribes] principle that code doesn't match yet) → "Want me to shape this drift into a work item?" → /dev-skills:shaping-work./dev-skills:implementation-planning.qa-test, if design fidelity is in scope → run Review mode alongside functional QA; pass findings forward in the QA report.implement-change, if a mid-build check is wanted → run Review mode against the in-progress component and feed findings back.Pass forward: the Design View conclusions, the cited principles/heuristics, and the staged captures — so the next skill doesn't re-read source material.
tools
Harvest course-corrections from the current conversation and convert them into durable fixes so the agent doesn't need the same steer next time. Use when someone says "tighten the loop", "tighten loop", "debrief this session", "session debrief", "what should I update so next time you don't…", "how can I make your life easier", "what tripped you up", "what slowed you down", or at the end of a session when the user reflects on agent friction. The scope marker is THIS SESSION / THIS CONVERSATION — that's the discriminator from sibling skills. Reads the transcript only, classifies each steer, routes to the right fix tool. NOT for: assessing repo readiness before work (use loop-check), retros on past PRs/incidents/releases (use tap-skills:retrospective), coding, or applying edits inline.
development
Use for cross-domain strategic reasoning, approach selection, and systems-level analysis. Trigger when the user wants to: think through how to approach a problem, evaluate tradeoffs between architectural or technical approaches, sanity-check a plan or direction, understand second-order effects of a decision, get a holistic view across code/org/time dimensions, or pressure-test assumptions. The core signal is the user asking "what's the right approach?", "think about this", "what am I not seeing?", "sanity check", "tradeoffs", "how should we tackle this?", or any request for multi-level reasoning that spans product, architecture, and organization. Also use when the user needs help deciding which workflow skill to invoke next. NOT for: product/user/business decisions (→ product-thinker), work definition (→ shaping-work), file-level technical planning (→ implementation-planning), writing code, test authoring, or PR review.
development
Shape rough ideas into clear, actionable work definitions. Use this skill whenever someone has an unstructured idea that needs to become a concrete work definition — feature requests, bug reports, PRDs, customer feedback, Slack threads, stakeholder asks, or vague "we should do X" statements. Trigger phrases include "shape this", "scope this", "write a PRD", "define this work", "turn this into a ticket", "flesh this out", "spec this out", "what should we build for X", "I have an idea for...", or any rough input that needs structure before implementation can begin.
tools
Browser-based QA verification after any implementation. Use when someone says "QA this", "test this in browser", "verify the feature", "qa test", "browser test", or after completing an /implement-change to verify acceptance criteria in a real browser. Opens Chrome via MCP, exercises each acceptance criterion, verifies via DOM snapshots, and reports pass/fail. The "closer" for every implementation — proof it works, not just that tests pass.