Emil Kowalski skills
Which Emil Kowalski skills Aura ships, which it skipped, and the command that installs or updates them.
Aura uses Emil Kowalski’s skills for motion, polish, and interface craft, and Vercel’s React best practices for React and Next.js performance. They were compared with the skills already in this repo and with the team’s skill library before anything was copied. Two skills that do the same job are not both installed.
aura init, aura setup, and aura blueprint copy the reconciled set into .cursor/skills/. Docs for the runbook are the Agent blueprint. This page is the practice: what each skill is for, when to apply it, and how to update it.
Pins and license
| Source | Commit | License |
|---|---|---|
| emilkowalski/skills | e8a175de22ae1e49370fc144c1f3bb9aeedf988d | MIT. Copyright (c) 2026 Emil Kowalski. The notice is in each skill’s LICENSE. |
vercel-labs/agent-skills skills/react-best-practices | 063bee94c3f4df8453406c830b0a7df0f2860278 | MIT. The upstream README states MIT. Copyright (c) Vercel, Inc. is in that skill’s LICENSE. |
Both licenses allow copying. The files in packages/cli/templates/cursor/skills/ are the copies the blueprint ships. They are not floating installs of npx skills add.
Aura foundation rules and DESIGN.md win when a skill disagrees: 13px spacing, accent and gray steps, fluid type, the 17px floor on editable inputs, and the animation tokens (buttons cubic-bezier(0.4, 0, 0.6, 1), dialogs cubic-bezier(0.16, 1, 0.3, 1), about 250ms, CSS @theme tokens). gdp-ts proofs win over the Vercel note server-auth-actions.
What Aura ships
| Skill | Use it when |
|---|---|
emil-design-eng | Shaping or reviewing polish, component decisions, and which motion belongs. Criteria only. It does not edit a design file. |
animate | Building a web animation: whether it should exist, then tool, properties, curve, and duration. |
review-animations | Reviewing motion in a diff against exact curves and durations. Explicit invoke. Default is to flag. |
improve-animations | Auditing motion in a codebase and writing self-contained fix plans. It does not apply the fixes. |
find-animation-opportunities | Looking for places that should animate, with exact values, and places that should not. Read-only. |
animation-vocabulary | A motion effect is described vaguely and needs its name before a design or implementation decision. |
apple-design | Gesture, spring, depth, type, or restraint decisions in an Apple-like way, translated for the web. |
prototype | Several genuinely different versions of one UI piece, behind a picker. Explicit invoke. |
mobile-native | A web app feels like a website on a phone: tap highlight, 100vh, safe areas, overscroll, input zoom. Inputs stay at 17px. |
break-ui | Stress-testing a screen with worst-case data: long names, empty lists, huge counts. |
ask-sonner | A file already imports sonner (DataGrid still does). New toasts use the Aura toast. |
pick-ui-library | Explicitly asked which library fits a frontend task. If @aura already has the component, use it before an external library. |
react-best-practices | Writing or reviewing React or Next.js for waterfalls, bundle size, server work, and re-renders. The skill name is vercel-react-best-practices. |
The team library already had adaptations of emil-design-eng, animation-vocabulary, apple-design, find-animation-opportunities, improve-animations, review-animations, and prototype. Where those were short pointers at an external criteria file, the full upstream text is now in the skill, and the team’s “do not edit a design file” line stays. Where the team’s body already matched upstream (animation-vocabulary, find-animation-opportunities), that body stayed. humanize is a team prose skill and does not share a job with this set, so blueprint does not install it.
Comparison
| Skill | Closest we had | Overlap | Decision |
|---|---|---|---|
emil-design-eng | Team skill (criteria stub) and the animation rule | Partial | Merge |
animate | Animation rule (guardrail, not a builder) | Partial | Merge. The rule stays; the skill builds. |
animate-expo | None | None | Skip. Pablo decided not to install it. |
review-animations | Team skill (criteria stub) | Partial | Merge |
improve-animations | Team skill (criteria stub) | Partial | Merge |
find-animation-opportunities | Team skill, same body | Same | Keep ours |
animation-vocabulary | Team skill, same body | Same | Keep ours |
apple-design | Team skill (criteria stub) | Partial | Merge |
write-swift | None | None | Skip. Pablo decided not to install it. |
pick-ui-library | shadcn skill and the Aura registry | Partial | Adopt. Aura-first: if @aura already has the component, use it before an external library. Pablo decided to ship it. |
prototype | Team skill (criteria stub) | Partial | Merge |
mobile-native | Typography rule (17px) and hover gating | Partial | Merge. 16px inputs raised to 17px. |
break-ui | None | None | Adopt |
ask-sonner | Aura Toast docs; DataGrid still imports sonner | Partial | Merge, scoped to existing sonner imports. Pablo kept it. |
react-best-practices | apps/www/AGENTS.md is a Next.js version note, not a performance guide. gdp-ts is authorization. | None for this job | Adopt |
Skipped
Pablo decided these stay out.
write-swifthas no equivalent, and Aura and the SGD apps do not ship Swift.animate-expohas no equivalent. It is React Native and Expo. Web motion isanimate.
Install or update
From the app root:
pnpm dlx @aura-design/cli@latest blueprintThe same command runs at the end of aura init and aura setup. Re-running it refreshes the pinned skills when the copy in the CLI has changed, and does nothing to them when they already match. It does not create a second folder. A same-named skill under .agents/skills/ is removed.
--force overwrites wiki bootstrap files. It is not required to update these skills.
The skills are not part of @aura/skills in the registry. Consumer projects get them from blueprint.