Agentset baseline-ui
Enforces an opinionated UI baseline to prevent AI-generated interface slop.
install
source · Clone the upstream repo
git clone https://github.com/agentset-ai/agentset
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/agentset-ai/agentset "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.agents/skills/baseline-ui" ~/.claude/skills/agentset-ai-agentset-baseline-ui && rm -rf "$T"
manifest:
.agents/skills/baseline-ui/SKILL.mdsource content
Baseline UI
Enforces an opinionated UI baseline to prevent AI-generated interface slop.
How to use
-
Apply these constraints to any UI work in this conversation./baseline-ui -
Review the file against all constraints below and output:/baseline-ui <file>- violations (quote the exact line/snippet)
- why it matters (1 short sentence)
- a concrete fix (code-level suggestion)
Stack
- MUST use Tailwind CSS defaults (spacing, radius, shadows) before custom values
- MUST use
(formerlymotion/react
) when JavaScript animation is requiredframer-motion - SHOULD use
for entrance and micro-animations in Tailwind CSStw-animate-css - MUST use
utility (cn
+clsx
) for class logictailwind-merge
Components
- MUST use accessible component primitives for anything with keyboard or focus behavior (
)Radix - MUST use the project’s existing component primitives first
- NEVER mix primitive systems within the same interaction surface
- MUST add an
to icon-only buttonsaria-label - NEVER rebuild keyboard or focus behavior by hand unless explicitly requested
- MUST use
prop on theisLoading
component when indicating loading stateButton - NEVER use
orml-x
when styling an icon inside a button, since spacing will be given to it automaticallymr-x - NEVER explicitly set border color to
since this is the default border colorborder-border
Interaction
- MUST use an
for destructive or irreversible actionsAlertDialog - SHOULD use structural skeletons for loading states
- NEVER use
, useh-screenh-dvh - MUST respect
for fixed elementssafe-area-inset - MUST show errors next to where the action happens
- NEVER block paste in
orinput
elementstextarea
Animation
- NEVER add animation unless it is explicitly requested
- MUST animate only compositor props (
,transform
)opacity - NEVER animate layout properties (
,width
,height
,top
,left
,margin
)padding - SHOULD avoid animating paint properties (
,background
) except for small, local UI (text, icons)color - SHOULD use
on entranceease-out - NEVER exceed
for interaction feedback200ms - MUST pause looping animations when off-screen
- MUST respect
prefers-reduced-motion - NEVER introduce custom easing curves unless explicitly requested
- SHOULD avoid animating large images or full-screen surfaces
Typography
- MUST use
for headings andtext-balance
for body/paragraphstext-pretty - MUST use
for datatabular-nums - SHOULD use
ortruncate
for dense UIline-clamp - NEVER modify
(letter-spacing
) unless explicitly requestedtracking-
Layout
- MUST use a fixed
scale (no arbitraryz-index
)z-x - SHOULD use
for square elements instead ofsize-x
+w-xh-x - SHOULD use
for spacing between elements instead ofgap-*
orspace-x-*
(with appropriatespace-y-*
andflex
classes)flex-direction
Performance
- NEVER animate large
orblur()
surfacesbackdrop-filter - NEVER apply
outside an active animationwill-change - NEVER use
for anything that can be expressed as render logicuseEffect
Design
- NEVER use gradients unless explicitly requested
- NEVER use purple or multicolor gradients
- NEVER use glow effects as primary affordances
- SHOULD use Tailwind CSS default shadow scale unless explicitly requested
- MUST give empty states one clear next action
- SHOULD limit accent color usage to one per view
- SHOULD use existing theme or Tailwind CSS color tokens before introducing new ones