What is design-system-capture?
Write and maintain DESIGN. md + PRODUCT.
event4u-app/agent-config
Write and maintain DESIGN.md + PRODUCT.md — captures visual decisions and interaction patterns so design tasks stay consistent across sessions without re-scanning past work.
npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/design-system-capture"Quick start
Install it or open the source, trigger it with a clear task, then follow the source workflow.
npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/design-system-capture"Use design-system-capture to help me with: [describe your task]. Before you begin, tell me what input you need, the steps you will follow, and the expected output.
No structured workflow was detected; follow the original SKILL.md below.
Continue to the workflowDirect answers
Write and maintain DESIGN. md + PRODUCT.
It is relevant to workflows involving Design.
SkillSignal detected this source-specific command: npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/design-system-capture". Inspect the repository and command before running it.
The upstream source does not declare a dedicated Agent platform.
No obvious permission action was detected by the static rules. This is not proof that the Skill is safe.
This page combines upstream documentation with deterministic repository, quality, and static-risk signals. It is not described as a manual test or security review.
SkillSignal brief
Write and maintain DESIGN. md + PRODUCT.
Useful in these contexts
Core capabilities
Distilled from the source
About 7 min · 12 sections
Starting a new consumer project (initial capture, run once early)
After 2+ design tasks in the same project (update to capture what was decided)
When a subsequent design task produces inconsistent results (audit and reconcile)
Explicitly asked: "capture the design system", "write a DESIGN.md", "document our patterns"
Write DESIGN.md to the project root with the extracted visual decisions.
Write PRODUCT.md to the project root with the extracted interaction patterns.
Surface a one-paragraph summary of what was captured and what is TBD.
Quality breakdown
Based on traceable docs and repository signals; stars are not treated as quality.
Compare before choosing
These links are selected from shared tasks, functions, stacks, platforms, and same-name variants. Compare the source owner, documentation, permissions, and maintenance signals.
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers o
Grounded design brief from the adopted corpus — style, WCAG-checked color tokens, typography, layout pattern, anti-patterns. Use on ui-design-brief or any which-style/palette/font/chart decision.
Use BEFORE writing or editing any non-trivial UI — inventories components, design tokens, shadcn primitives, and reusable patterns into state.ui_audit. Hard gate for the ui directive set.
This skill encodes Emil Kowalski's philosophy on UI polish, component design, animation decisions, and the invisible details that make software feel great.
Solves "design amnesia" — the failure mode where every AI design task re-invents visual patterns (radius, shadows, motion, spacing) and interaction patterns (destructive-action handling, optimistic UI, filter persistence) because the agent has no cross-task memory of decisions already made.
Boundary:
brand-to-tokensextracts primitives (colors, font families → DTCG tokens).existing-ui-auditinventories what exists. This skill captures usage decisions: "we use 8px radius for elevated surfaces", "all destructive actions require typed confirmation". They are complementary, not redundant.Gated by
tokens.rich_skillsin.agent-settings.yml(defaulton). Ifoff, skip rich context loading and work from brief alone.
DESIGN.md and PRODUCT.md serve as the project's design memory. To write useful capture documents and to read/apply them effectively, the agent needs full templates with worked examples showing what a well-structured DESIGN.md and PRODUCT.md look like in practice. A condensed version that says "write down your design decisions" produces documents too vague to be useful. The worked examples teach agents both the vocabulary (elevation, motion strategy, destructive-action policy) and the specificity level that makes these documents actionable across tasks.
DESIGN.md — visual-system decisionsCaptures the visual usage decisions (not token primitives) that agents
should apply consistently across all UI tasks in this project. Unlike
.tokens.json (which records what a color value IS), DESIGN.md records
how and when to use it.
Format:
# DESIGN.md — [Project name] visual system
> AI-readable project design memory. Update after each design decision.
> Last updated: [date]
## Design philosophy
One sentence: [density/formality/complexity philosophy]
Example: "Information-dense dashboard; optimize for power users, not casual exploration."
## Visual system
### Elevation and radius
- Elevated surfaces (modals, sheets, dropdowns): [X]px radius, [shadow-spec]
- Inline elements (cards, chips): [X]px radius
- Buttons: [X]px radius
### Shadows
- Elevated: [box-shadow value]
- Floating (tooltips, popovers): [box-shadow value]
- None (flat cards): [confirm]
### Motion
- Overlays and modals: [spring / easing spec + duration]
- Micro-interactions (button feedback, toggles): [duration + easing]
- Page transitions: [strategy or "none"]
### Spacing
- Base unit: [X]px
- Card padding: [spec]
- Section gap: [spec]
- Tight grouping: [spec]
### Color usage
- Primary action: [token name]
- Destructive: [token name]
- Surface hierarchy: [primary bg → secondary bg → elevated bg]
## Taste Dials
Three 1–10 dials that tune generation. Absent = unset (design-intelligence
infers from the brief via its Dial Inference Table). One-line rationale each.
- Variance: [1–10] — [why; 1 = perfectly symmetric, 10 = expressive/asymmetric]
- Motion: [1–10] — [why; 1 = static, 10 = cinematic]
- Density: [1–10] — [why; 1 = airy, 10 = packed/data-dense]
## Consistency Locks
Within-project invariants (derived from the confirmed system). A value outside
a declared Lock is off-system; the anti-slop detector flags it (rebuttable).
- Theme Lock: [single | light+dark via prefers-color-scheme] — no mid-surface inversion
- Colour Lock: [one accent family] — [the accent hue]
- Shape Lock: [one corner-radius scale] — [the radius set, e.g. 6/12/16px]
## Stack and conventions
- CSS approach: [Tailwind / CSS modules / styled-components / etc.]
- Component primitives: [shadcn / Radix / Headless UI / custom]
- Icon system: [Phosphor / Heroicons / Lucide / etc.]
PRODUCT.md — cross-feature interaction patternsCaptures interaction decisions that should be consistent across features. Unlike a feature spec (which describes one feature), PRODUCT.md captures patterns that apply everywhere.
Format:
# PRODUCT.md — [Project name] interaction patterns
> AI-readable cross-feature pattern memory. Update when a new pattern is established.
> Last updated: [date]
## Destructive actions
Policy: [typed confirmation ("DELETE") / dialog with verb button / undo toast / etc.]
Example: "All destructive actions require the user to type 'DELETE' or the resource name."
## Mutation feedback
Policy: [optimistic UI + inline undo / loading spinner / success toast / etc.]
Undo window: [N seconds, or "not applicable"]
Example: "Optimistic UI for all mutations; inline undo toast for 5 seconds, then commit."
## Filter and sort persistence
Policy: [URL params / localStorage / session / not persisted]
Restore on load: [yes / no]
## Empty states
Approach: [illustration + CTA / text only / skeleton / etc.]
Example: "Illustration + primary CTA for empty lists; text-only for zero-search-results."
## Error handling
Approach: [inline field errors / toast / error boundary / etc.]
Network errors: [retry + message / fail fast / etc.]
## Navigation and routing
Pattern: [SPA / MPA / hybrid / etc.]
Active state: [how active nav items are marked]
## Mental model
One sentence: [how the product conceptualizes itself to the user]
Example: "Dashboard = control panel for power users, not an exploration space."
DESIGN.md and PRODUCT.md already exist in the project root.existing-ui-audit (if not already done for this session) to inventory existing components, tokens, and conventions → proceed to Step 2.state.ui_audit): dominant
radius values, shadow patterns, spacing conventions, motion patterns.
Fill the DESIGN.md template above with the observed values. Mark
un-observed sections as TBD.TBD.DESIGN.md and PRODUCT.md to the project root.DESIGN.md and PRODUCT.md.A consumer can reverse-engineer an existing site/repo's look-and-feel with any
external static-extraction tool and hand the result to this skill as a
design-system.json artifact. We own the import contract, not the crawler:
the package never ships the Playwright runtime, a font-bundler, or a .skill
auto-installer (out of scope). Full schema is lazy-loaded from
reference/design-system-json.md — read it
only when an import is requested.
Import procedure:
design-system.json; reject it if source (kind + ref + captured_at)
is missing — no provenance, no import.DESIGN.md.source-discovery). Never write silently..tokens.json /
brand token) → flag, never auto-apply (brand-source-of-truth:
consumer brand wins). Precedence: brand tokens > confirmed DESIGN.md >
imported observation.DESIGN.md. Where the
consumer wants a token source of truth, hand the mapped DTCG fields to
brand-to-tokens / design-tokens to
materialise .tokens.json — do not invent a parallel token format.Two sources, one shape:
existing-ui-audit;
it already inventories the codebase and can emit the same design-system.json
shape, so the import path is identical either way.When DESIGN.md or PRODUCT.md is present in the project root:
design-intelligence and fe-design: read DESIGN.md at the
start of any design task — use the captured decisions as project
constraints that override corpus suggestions.ui-component-architect: read DESIGN.md for radius/shadow/motion
conventions before proposing any new component.existing-ui-audit: when a full audit is impractical (large project),
read DESIGN.md as a proxy for "what this project's conventions are".The boundary from brand-to-tokens:
.tokens.json carries primitive values (gray-700 = #374151)When handing a design to implementation, emit a README a developer can build
from without the mockup open. Template only — no vendored values (tokens
come from the consumer's .tokens.json / DESIGN.md):
# <Feature> — implementation handoff
Fidelity: <hi-fi = pixel-recreate the mockup | lo-fi = apply the codebase's
existing design system, mockup is directional only>
## Screens
- <screen>: components used + each component's states (default/hover/active/
disabled/empty/error/loading)
## Interactions
- <interaction>: trigger → result, duration + easing (name the token, not a ms
literal)
## Tokens
- Color / type / spacing / radius: reference DESIGN.md / .tokens.json — do not
inline hex or px
## Done means
- Implementable from this README alone; every state and interaction named.
Fidelity declaration is load-bearing: hi-fi vs lo-fi tells the dev whether to recreate the mockup pixel-for-pixel or apply the existing system — the single most common handoff ambiguity.
When the goal is to extract this repo's design system as a reusable package
artifact (not just DESIGN.md prose), the extraction meets this floor — the
handoff shape emitted alongside design-system.json
(import contract).
DESIGN.md/PRODUCT.md before writing; carry
all existing decisions forward and only add/correct. Losing prior
captured history is worse than capturing nothing..tokens.json. It captures usage decisions ("8px radius on elevated
surfaces"), not primitive values ("gray-700 = #374151"). The
distinction is what makes DESIGN.md actionable..tokens.json — it captures decisions,
not token definitions.On create:
DESIGN.md to the project root with the extracted visual decisions.PRODUCT.md to the project root with the extracted interaction patterns.On update: