Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Inspect a Core UI or code surface for a small number of justified motion opportunities and explicitly identify what should remain static. Use when asked what should animate, where motion would improve feedback or comprehension, how to make an interface feel more alive without over-animating it, or whether a proposed animation is worth adding. Read-only; do not use to review or fix existing motion code or to implement animations.
.claude/skills/asymmetric-al-find-animation-opportunities/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 250% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 22% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 76% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 13% | 0% |
Find high-value motion by exercising restraint. A result with no surviving opportunities is valid; daily-use product UI usually benefits from less motion.
static interface, or which proposed motion ideas are worth pursuing.
recommendations; route those follow-ups to the existing motion skills.
docs/ai/rules/frontend.md, thendocs/ai/skills/emil-design-engineering/SKILL.md and docs/ai/skills/anim/SKILL.md before judging a surface.
boundary, touch gates, and reduced-motion baseline override generic examples.
improve-animations to audit or plan fixes for existing motion andreview-animations only for an explicitly requested motion-diff review. Use motion later if an approved implementation needs motion/react details.
files, install tooling, or change dependencies while it is active.
Every recommendation must pass all five checks:
high-frequency, or information-dense interactions. Frequent feedback may use an existing near-imperceptible Core utility; it is not a new opportunity.
preventing a jarring change, explanation, or rare delight. “Looks cool” fails.
easier to understand. It must not delay access to content or action.
Button, Base UIoverlays, shared hover/press utilities, or RouteMainViewTransitionBoundary. Never stack a second entrance or hover grammar on top.
avoid layout-driving properties, remain interruptible where state can reverse, preserve reduced-motion behavior, and gate hover motion to fine pointers.
methods, frequency, current motion owners, and performance/accessibility constraints. Inspect a running UI when available; otherwise state the limits of code-only evidence.
relationships, missing progress/feedback, rare empty/success/onboarding moments, and gesture transitions. Also inspect the places most likely to be over-animated so the report contains meaningful rejections.
Reject duplicates, speculative ideas, and anything already intentional.
Name the existing Core token, preset, utility, or primitive to reuse. Do not invent literal durations, easings, scales, or a parallel motion system.
gate that rejected each. If nothing survives, say that the interface should remain as-is.
by a Base UI primitive or the shared route-transition layer.
Usually reject command palettes, keyboard shortcuts, dense tables, live charts, routine list navigation, page-load choreography, blanket scroll reveals, and decorative movement on data users are reading. Shared buttons already have press feedback; shared overlays and routes already have their own motion grammar.
| # | Location | Current seam | Purpose | Frequency | Core-compatible recipe | | --- | -------- | ------------ | ------- | --------- | ---------------------- |
Each row needs exact file:line evidence and an existing Core mechanism. Mark anything requiring a live feel-check rather than pretending code proves taste.
| Location | Candidate considered | Rejection gate | Why static is better | | -------- | -------------------- | -------------- | -------------------- |
State how much motion the surface actually needs, the highest-leverage survivor if one exists, and whether a follow-up improve-animations plan <description> would be warranted.
See references/upstream.md for the reviewed upstream source, MIT license, Core adaptations, and refresh workflow.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,760 | 5,672 | -66% | 1 | 1 | 0% | 2,281 | 1,686 | -26% | 0 | 0 | — |
case-02 | fail→fail | 19,857 | 6,502 | -67% | 1 | 1 | 0% | 3,140 | 1,546 | -51% | 0 | 0 | — |
case-03 | fail→fail | 16,519 | 6,465 | -61% | 1 | 1 | 0% | 2,346 | 1,506 | -36% | 0 | 0 | — |
case-04 | fail→pass | 3,088 | 8,209 | +166% | 1 | 1 | 0% | 528 | 1,849 | +250% | 0 | 0 | — |
case-05 | fail→fail | 15,839 | 8,791 | -44% | 1 | 1 | 0% | 3,132 | 1,928 | -38% | 0 | 0 | — |
case-06 | fail→fail | 14,299 | 7,046 | -51% | 1 | 1 | 0% | 3,888 | 1,745 | -55% | 0 | 0 | — |
case-07 | fail→pass | 13,588 | 10,953 | -19% | 1 | 1 | 0% | 2,549 | 3,115 | +22% | 0 | 0 | — |
case-08 | fail→pass | 14,363 | 16,335 | +14% | 1 | 1 | 0% | 2,126 | 3,748 | +76% | 0 | 0 | — |
case-09 | fail→pass | 9,678 | 7,085 | -27% | 1 | 1 | 0% | 1,705 | 2,475 | +45% | 0 | 0 | — |
case-10 | pass→pass | 12,205 | 8,252 | -32% | 1 | 1 | 0% | 1,998 | 2,682 | +34% | 0 | 0 | — |
case-11 | fail→fail | 11,462 | 6,674 | -42% | 1 | 1 | 0% | 2,732 | 1,640 | -40% | 0 | 0 | — |
case-12 | fail→fail | 10,697 | 6,020 | -44% | 1 | 1 | 0% | 2,066 | 1,509 | -27% | 0 | 0 | — |
case-13 | fail→pass | 11,752 | 8,726 | -26% | 1 | 1 | 0% | 2,511 | 2,826 | +13% | 0 | 0 | — |
case-14 | fail→pass | 13,971 | 17,065 | +22% | 1 | 1 | 0% | 2,208 | 4,125 | +87% | 0 | 0 | — |
case-15 | pass→fail | 12,907 | 6,796 | -47% | 1 | 1 | 0% | 2,020 | 1,770 | -12% | 0 | 0 | — |
case-16 | fail→fail | 3,577 | 7,669 | +114% | 1 | 1 | 0% | 138 | 1,701 | +1133% | 0 | 0 | — |
case-17 | pass→fail | 10,153 | 6,363 | -37% | 1 | 1 | 0% | 1,485 | 1,522 | +2% | 0 | 0 | — |
case-18 | fail→pass | 9,740 | 16,452 | +69% | 1 | 1 | 0% | 1,945 | 3,942 | +103% | 0 | 0 | — |
case-19 | fail→pass | 11,921 | 11,618 | -3% | 1 | 1 | 0% | 2,072 | 3,214 | +55% | 0 | 0 | — |
case-20 | fail→fail | 15,286 | 7,151 | -53% | 1 | 1 | 0% | 2,975 | 1,663 | -44% | 0 | 0 | — |
case-21 | pass→pass | 13,756 | 7,879 | -43% | 1 | 1 | 0% | 2,377 | 2,433 | +2% | 0 | 0 | — |
case-22 | fail→fail | 11,789 | 6,553 | -44% | 1 | 1 | 0% | 1,827 | 1,659 | -9% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 11 counted toward the lift figure. The other 11 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +27 percentage points is the difference between those two pass rates over the 11 comparable cases. 4 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.