
design-doctrine
The house rules for ANY design or UI work - the verification protocol (run the gate, never claim a number), the absolute no-emoji rule, token by intent, one shared theme, the eight states, one thing leads, and output completeness. Load this FIRST whenever building, reviewing, or theming a screen, component, or token set. Installed as a plugin, this skill carries what CLAUDE.md carries in the repo.
- Installs
- 272
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/plugin87/ux-ui-agent-skills --skill design-doctrine- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads design-doctrine automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Skill: Design Doctrine
Step 0: is the kit here? This skill reads files from the kit. Check once:
ls ${CLAUDE_SKILL_DIR}/../../../tokens >/dev/null 2>&1 && echo KIT_OK || echo KIT_MISSINGOnKIT_MISSINGonly the skill folders were installed, which is whatnpx skills adddoes. Say so plainly, point the user atnpx ux-ui-agent-skills initor the plugin install, and stop. Do not guess the contents of a file you could not open.
A plugin's root CLAUDE.md is not loaded as project context, so the always-on
brief travels here instead. Read this before the first line of any design work,
then load the rule file for the territory you are actually in.
Verification protocol - run gates, never claim
- Never state a number you did not measure. Any contrast ratio, "WCAG pass", or "100%" must come from running a gate and reporting its real output. If you have not run it, say "not verified yet."
- Verify every state, not just resting.
node ${CLAUDE_SKILL_DIR}/../../../scripts/gate.mjs verify_states.mjs <file> [--dark]measures default, hover and focus - a button that passes at rest can fail on hover. - One command before reporting done:
node ${CLAUDE_SKILL_DIR}/../../../scripts/accuracy_report.mjs. Report the realN/Nline. It is all-or-nothing. - Build with the gates, not after them. Fix and re-run until green; never announce success between failures.
- Render and LOOK. Gates pass while a UI is still visibly broken. Screenshot the harness in both themes, click every control, and confirm the state changed.
- Responsive is gated too:
node ${CLAUDE_SKILL_DIR}/../../../scripts/gate.mjs verify_responsive.mjs <file|dir>: no horizontal overflow from 280 to 951px, iPhone Duo included, and a hinge kept clear by any page that answers the fold. - Honest scope. The gates prove objective correctness. They never prove taste.
For that, run
/critique, look at the work yourself, and start from the taste preflight below rather than from default components. - SKIPPED is not a pass. With no browser installed a render gate prints
SKIPPEDand exits 0, reporting nothing. Run single render gates behindDS_REQUIRE_BROWSER=1so that becomesREQUIRED, FAILING, and fix it withnpx playwright install chromerather than by removing the flag.
Mobile is the base
Base styles ARE the phone layout. Wider screens are layered on with min-width.
max-width is not banned - it is right for a genuine narrow refinement, or for a
range between two breakpoints - but a desktop-first stylesheet, where the base
assumes a wide screen and mobile is patched in afterwards, is a bug.
Measured by ${CLAUDE_SKILL_DIR}/../../../scripts/verify_mobile_first.mjs, which
removes every @media and @container rule and renders what is left at 320px. A
mobile-first page passes because its base already is the phone layout. A
desktop-first page cannot fit.
Two house rules on what never ships
Never ship a native <select>. It draws its own chevron, pressed against the
control's edge with no breathing room, and appearance: none plus a custom
chevron fights the platform instead of matching the system. Use the Listbox or
Combobox pattern in
${CLAUDE_SKILL_DIR}/../../../components/forms-advanced.md: a button trigger
that announces the current value, the chevron placed with inner padding from
tokens, and full keyboard parity (typeahead, arrows, Home/End, Escape,
aria-expanded that really toggles something visible). Losing native select
means accessibility stops being free, so the replacement has to pass every state,
keyboard and axe gate before it counts. Measured by
${CLAUDE_SKILL_DIR}/../../../scripts/lint_native_select.py.
Never a colored border on one side only of a card, alert, toast or callout -
border-left, border-right, border-top, border-bottom, or the logical
border-inline-* and border-block-* forms. The tinted 3-4px bar is a
generated-UI cliche in every direction, not only on the left: it is decoration
standing in for hierarchy the layout never established. Use a full hairline
border on all sides, or surface and elevation separation, and carry status with a
real icon plus text, never colour alone. Measured on the render by the one-sided
accent-border tell in
${CLAUDE_SKILL_DIR}/../../../scripts/slop_tells.mjs.
Taste preflight - before any markup
The gates cannot see this half, so it has to be decided rather than discovered. Write the block into your reply, then build to it. Generating first is where generated-looking work comes from.
Domain: fintech | editorial | dev-tool | healthcare | consumer | ...
Audience & tone: expert vs first-time, calm vs energetic, premium vs utilitarian
Mood: the one adjective the result must earn - "expensive", "precise", "warm"
Motion depth: none | subtle feedback | expressive choreography
Layout family: the section sequence you will use, named, varied per section
Reference anchor: an archetype or named system to aim at
Break each of these deliberately; they are defects, not starting points.
- Three or four identical equal-weight cards. One thing leads.
- Everything centered. Use asymmetry on a real grid.
- The same left-text / right-image row repeated.
- A heading that is only bold body text. Display type is at least 2.5x body, short, on an 18-24ch measure.
- A drop shadow on every box. Most things are flat.
#000on#fff. Off-black on warm-white, from the theme.- More than one accent. Neutrals carry the weight.
- A colored border on one side only of a card, alert, toast or callout. Full hairline border or surface separation; status by icon plus text, never colour alone.
- Em-dashes in UI copy, marketing filler ("elevate", "seamless", "unlock"), hollow triads, fake labels ("SECTION 01", lorem ipsum).
Depth, and the full Variance Mandate:
${CLAUDE_SKILL_DIR}/../../../taste/design-taste.md. For a whole page or app,
use design-screen, which runs this preflight as step 1 of the pipeline.
ABSOLUTE: zero emoji in any output - UI, code, JSON, copy, comments, commit messages. Not as an icon, a bullet, a status dot, or "polish". Emoji are the number-one tell of machine-generated work. Use a lucide icon (inline SVG,
currentColor) or plain words. No em dash or en dash either: a colon, a comma or parentheses. Enforced by${CLAUDE_SKILL_DIR}/../../../scripts/check_no_emoji.py.
The five non-negotiables
- Token by intent. Pick the token whose meaning matches the action.
Destructive actions (Delete, Remove, Revoke) wear
action.destructivein every place they appear - the trigger and the confirm dialog both. A blue Delete is a bug. Measured by${CLAUDE_SKILL_DIR}/../../../scripts/lint_intent.mjs. - One theme, one source of truth. Every page renders from the same
${CLAUDE_SKILL_DIR}/../../../tokens/*.jsonthrough one CSS-variable layer imported once at the app root. No per-page palette, no hardcoded hex, px, or timing. - Every interactive element ships eight states: default, hover, focus, active, disabled, loading (if async), error (if input), and selected (if selectable). The eighth is not optional when the thing can be selected.
- One thing leads. Every screen has a first place for the eye, and display type is at least 2.5x the body size. Four equal cards means the eye lands nowhere and the screen reads as generated.
- Output completeness. A partial output is a broken output. Deliver full files, never placeholders. Asked for N components, deliver all N.
Decision framework
User needs, then accessibility, then consistency, then aesthetics, then developer experience. Never sacrifice a higher tier for a lower one. Beautiful but inaccessible is broken; consistent but confusing is the wrong pattern.
Where the depth lives
| Read it when | File |
|---|---|
| Tokens, palettes, theming, dark mode, any colour decision | ${CLAUDE_SKILL_DIR}/../../../.claude/rules/tokens-and-color.md |
| Type scale, line length, the 4px spacing rhythm | ${CLAUDE_SKILL_DIR}/../../../.claude/rules/typography-and-spacing.md |
| Building any screen or component, composition, empty states | ${CLAUDE_SKILL_DIR}/../../../.claude/rules/components.md |
| Auditing, or finishing any interactive element | ${CLAUDE_SKILL_DIR}/../../../.claude/rules/accessibility.md |
| Generating code for React, Next.js, SwiftUI, or any adapter | ${CLAUDE_SKILL_DIR}/../../../.claude/rules/frameworks.md |
| Design review, prototyping, research, handoff | ${CLAUDE_SKILL_DIR}/../../../.claude/rules/review-and-research.md |
| Aesthetic direction, motion, voice and tone, governance, QA | ${CLAUDE_SKILL_DIR}/../../../.claude/rules/brand-and-operations.md |
Then pick the runnable skill for the job: design-tokens, design-component,
design-code, design-review, a11y-audit, apply-aesthetic, brandkit,
image-to-code, redesign, and the rest. Interrogate the brief first with
/grill-me; prove the result with /gate; judge it with /critique.
FAQ
What does the design-doctrine skill do?
The house rules for ANY design or UI work - the verification protocol (run the gate, never claim a number), the absolute no-emoji rule, token by intent, one shared theme, the eight states, one thing leads, and output completeness. Load this FIRST whenever building, reviewing, or theming a screen, component, or token set. Installed as a plugin, this skill carries what CLAUDE.md carries in the repo.
How do I install design-doctrine?
Run npx skills add https://github.com/plugin87/ux-ui-agent-skills --skill design-doctrine in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/design-doctrine/ (personal) or .claude/skills/design-doctrine/ (project).
Which AI agents can use design-doctrine?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is design-doctrine safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains design-doctrine?
It is published by plugin87 in plugin87/ux-ui-agent-skills. It has 272 recorded installs.
More from plugin87/ux-ui-agent-skills
image-to-code
plugin87/ux-ui-agent-skills
Turn a reference image, screenshot, or mockup into token-driven, accessible code. Infer the design system from the reference (palette, type scale, spacing, radius, layout archetype), map it to the 3-tier tokens, rebuild it, then verify with the kit's gates. Use when the user provides a design/screenshot and wants matching UI code.
design-review
plugin87/ux-ui-agent-skills
Review or audit a design/UI across 6 weighted dimensions with Nielsen's 10 heuristics and a prioritized findings table. Use when the user wants a design critique, quality score, heuristic evaluation, or audit of an existing screen, page, or product before/after build.
a11y-audit
plugin87/ux-ui-agent-skills
Audit a UI or design against WCAG 2.2 AA/AAA and ARIA patterns, returning criterion-referenced findings with severity and specific fixes. Use when the user wants an accessibility check, contrast verification, keyboard/screen-reader review, or wants to confirm a component meets POUR.
design-tokens
plugin87/ux-ui-agent-skills
Generate, extend, or audit design tokens in DTCG format with the 3-tier architecture (primitive → semantic → component). Use when the user wants a color palette, type scale, spacing/shadow/radius/motion tokens, multi-brand theming, or wants to validate token files. Covers colors, typography, spacing, shadows, borders, breakpoints, motion, gradients, opacity, blur, sizing, states, theming.
redesign
plugin87/ux-ui-agent-skills
Upgrade an existing website or app to premium quality without breaking functionality. Audit the current design, identify generic/AI tells, then apply taste and system rules surgically. Use when the user wants to improve, modernize, polish, or "make better" an existing UI/codebase.
apply-aesthetic
plugin87/ux-ui-agent-skills
Apply a visual direction, an archetype (high-end agency, editorial minimal, brutalist, soft-SaaS, dark-tech) or one of 2,144 named design systems (apple, linear-app, stripe, vercel, notion, material, shadcn, spotify, tesla…), by resolving it into the token system. Use when the user wants a specific look/vibe/brand feel, or asks to make a design feel premium/expensive/non-generic.
Popular frontend & design skills
setup-matt-pocock-skills
mattpocock/skills
Configure this repo for the engineering skills: set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.
frontend-design
anthropics/skills
Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
hyperframes-animation
heygen-com/hyperframes
All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.
prototype
mattpocock/skills
Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.
hyperframes-core
heygen-com/hyperframes
The HyperFrames composition contract — build one renderable project. Use for composition structure, the data- timing attributes, class="clip", tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Read before writing composition HTML.
vercel-react-best-practices
vercel-labs/agent-skills
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.