All skills

improve-animations (emilkowalski/skills)

improve-animations: turns a vague 'audit the animations' into a list with exact easing curves (control 3.2, skill 4.8), but a one-sentence prompt of the same checklist scores 4.9 for 0.84 of the tokens

RecommendedSafe

25.5 / 30

Lift over no skill: +1.66

Recommended: the total 25.5/30 is at least 22, output quality 4.8 is at least 3.5, and the lift +1.66 is at least +1.0.

SOTA

Pass

Tested with Codex.

Covers Codex, Claude Code

Codex CLI 0.166 (SOTA tier): 18 graded runs. A pass here also covers Claude Code under our tier rule; it says nothing about the second tier.

Scores

Each dimension is 0 to 5 and the six add up to the total out of 30. 5 is better on every dimension. Cost 5 means cheap and fast. Install 5 means easy.

Trigger reliability
5.0
Lift over no skill
3.7
Output quality
4.8
Token and time cost
4.0
Install and portability
4.0
Safety
4.0

Security review

Safe

Static scan: 0 CRITICAL / 2 HIGH / 0 MEDIUM. Manual review: Safe to run in a no-network sandbox (scanner hits explained). A clean scan does not prove a skill safe.

Install

npx skills@latest add emilkowalski/skills --skill improve-animations

Source

Pinned commit: a81dbca07f2217b7103e510c0f13f8d5b017afc9

Tested: 2026-11-02

What we tested

  • Audit the motion code — Audit the animations and motion in this project. Give me a prioritized list of what to fix, each with the file and the exact replacement values. Do not change any files.
  • Audit two components — Audit only the dropdown and the modal animations in styles.css. What is wrong and what exactly should they become? Do not change any files.
  • Top fixes for another person to implement — I'm handing the motion fixes to a colleague who has not seen this project. List the 5 highest-leverage animation fixes with the exact CSS to write for each, so they can implement them without asking me anything. Do not change any files.

Pros

  • Lifts the mean score from 3.15 to 4.81 over no skill (+1.66).
  • The skill was picked up without being named: Skill file read in 6/6 treatment runs.
  • High absolute quality with the skill: 4.81 out of 5.

Cons

  • A one-sentence prompt scored 4.94, against 4.81 with the skill (-0.13).
  • n=2 per task per arm; differences under about 1 point are noise.

Review

Codex CLI 0.166 (gpt-6-astra, low reasoning) on a dedicated Windows test PC, a fresh temporary project and temporary HOME/TMPDIR/caches per run, skill installed (treatment) or absent (control) or absent with the skill's core requirement squeezed into one sentence appended to the prompt (one-liner group), 2 runs per group per task, network off, /tmp writes blocked. The prompts never mention the skill (except the wording noted below). One small web app (am_app) with 8 planted motion problems. Tasks: audit the whole project, audit only the dropdown and modal, and fix five named problems. Prompts say 'animations and motion' without naming any rule. The one-liner lists the rules and asks for exact replacement values.

Three-arm comparison

ArmMean score (0-5)Tokens per run
Without the skill3.1565k
One-sentence prompt4.9465k
With the skill4.8178k

Measured with Codex CLI over 18 runs, scored by rule-based checks with no LLM judge. Total 25.5 / 30, verdict Recommended.

Verdict: Recommended (25.5 / 30). Source: emilkowalski/skills, skills/improve-animations, pinned at commit a81dbca. Install: npx skills@latest add emilkowalski/skills --skill improve-animations. Licence: MIT (repo LICENSE).

What it is

The improve-animations skill (emilkowalski/skills): a motion-design audit guide: custom ease-out curves instead of ease-in/default, 150-300 ms durations, transform and opacity only, no transition: all, no scale(0) starts, transform-origin at the trigger, reduced-motion support, and no animation on high-frequency actions.

How we tested

Codex CLI 0.166 (gpt-6-astra, low reasoning) on a dedicated Windows test PC, a fresh temporary project and temporary HOME/TMPDIR/caches per run, skill installed (treatment) or absent (control) or absent with the skill's core requirement squeezed into one sentence appended to the prompt (one-liner group), 2 runs per group per task, network off, /tmp writes blocked. The prompts never mention the skill (except the wording noted below).

One small web app (am_app) with 8 planted motion problems. Tasks: audit the whole project, audit only the dropdown and modal, and fix five named problems. Prompts say 'animations and motion' without naming any rule. The one-liner lists the rules and asks for exact replacement values.

  1. Audit the motion code — Audit the animations and motion in this project. Give me a prioritized list of what to fix, each with the file and the exact replacement values. Do not change any files.
  2. Audit two components — Audit only the dropdown and the modal animations in styles.css. What is wrong and what exactly should they become? Do not change any files.
  3. Top fixes for another person to implement — I'm handing the motion fixes to a colleague who has not seen this project. List the 5 highest-leverage animation fixes with the exact CSS to write for each, so they can implement them without asking me anything. Do not change any files.

Scoring is programmatic (hidden tests / planted-issue recall / constraint checks / render+OCR where relevant), 0–5 per run. No LLM judge decided any score.

Results

The one-liner given to the third group: "Audit the motion code like a senior design engineer: flag ease-in and default curves, transition: all, scale(0) starts, layout-property animation, missing reduced-motion, animation on high-frequency actions, wrong transform-origin and slow durations; for each give the exact replacement (custom ease-out cubic-bezier, 150-300 ms, transform/opacity only) so someone else can apply it, and change no source files."

TaskControl scoreOne-linerWith skillControl tokensOne-liner tokensWith-skill tokensSkill read
t1-audit3.214.824.8265k66k77k2/2
t2-focus2.55.05.063k64k77k2/2
t3-five-fixes3.755.04.6265k65k78k2/2

Mean score: 3.15 without vs 4.81 with the skill (delta +1.66). Tokens per run: 65k vs 78k (1.20x); time 48s vs 49s. One-liner group: 4.94 (the skill's gain over the one-liner: -0.13; one-liner's own gain over no skill: +1.79); one-liner tokens 65k per run, so the skill costs 1.19x the one-liner.

What happened

  • Control 3.15, skill 4.81, one-liner 4.94 (n=6 each). Without guidance Codex found 3-7 of the 8 planted problems and gave no cubic-bezier or exact easing curve in 5 of 6 runs.
  • The skill closes that gap: 5.0 on both focus runs, where control missed the scale(0) modal start in both, and every audit gives exact curves. The one-liner reaches the same result.
  • On the five-fixes task the skill was slightly behind the one-liner (4.62 vs 5.0): both treatment runs missed the 700 ms linear card hover, and each missed one other planted problem (scale(0) modal, or transition: all).
  • Tokens: skill 78k, one-liner 65k, control 65k (1.2x control). The skill was read in 6/6 treatment runs without being named.

Dimension scores

DimensionScoreWhy
1_output_quality4.81

Mean score 4.81/5 with the skill (programmatic checks, see per-task table).

2_lift_vs_no_skill3.66

+1.66 points vs 3.15 without the skill (n=2 per task; under ~1 point is noise).

3_trigger5.0Skill file read in 6/6 treatment runs.
4_instructions_portability4SKILL.md with reference text only.
5_efficiency41.20x tokens (78k vs 65k per run) and 1.03x time (49s vs 48s).
6_safety_hygiene4Prose only; see security.md.

Limits of this test

  • Recall checks on the text of the audit and regex checks on the changed CSS; nothing was rendered or measured in a browser.
  • The one-liner is a close paraphrase of the skill's own checklist, which makes it a strong comparison.
  • One fixture; n=2 per cell.
  • n = 2 per group per task: differences under about 1 point are noise.
  • Rule-based scoring measures what the checks can see; it cannot judge taste or whether a result is the best possible.

Security

See security.md. Scan: 0 CRITICAL / 2 HIGH / 0 MEDIUM. Verdict: safe to run (no-network sandbox). A clean scan does not prove a skill safe.

Bottom line

The skill clearly beats an unprompted audit, mainly by always supplying concrete curves and durations. A single sentence listing the same rules does as well for less, so the gain is over no guidance, not over a good prompt.

Transcript

Run log for improve-animations: Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.
Columns: task, arm-run, score (0-5), tokens, seconds, checks passed, skill files the agent opened.

t1-audit control-1: score 3.21, tokens 65584, secs 50.5, checks 2/3, opened nothing
t1-audit control-2: score 3.21, tokens 65586, secs 52.4, checks 2/3, opened nothing
t1-audit oneliner-1: score 4.64, tokens 66262, secs 51.5, checks 3/3, opened nothing
t1-audit oneliner-2: score 5.0, tokens 66276, secs 69.8, checks 3/3, opened nothing
t1-audit treatment-1: score 4.64, tokens 78329, secs 42.8, checks 3/3, opened improve-animations
t1-audit treatment-2: score 5.0, tokens 76979, secs 51.1, checks 3/3, opened improve-animations
t2-focus control-1: score 2.5, tokens 64157, secs 30.6, checks 2/4, opened nothing
t2-focus control-2: score 2.5, tokens 63682, secs 30.8, checks 2/4, opened nothing
t2-focus oneliner-1: score 5.0, tokens 64128, secs 32.3, checks 4/4, opened nothing

18 runs, 3 artifacts

Sample output

SOTA · With the skill: final message (t1-audit, run 1, Codex)

Audited all four project files. **No files changed.** This is a static code audit: `index.html` does not load `app.js`, so the dropdown click handler currently never runs. Other open states have no handlers. All motion fixes below are in [styles.css](C:/Users/<user>/AppData/Local/Temp/asv-improve-an-9e585535/work/styles.css), ordered by priority. | Priority | Severity | Location | Finding | Exact replacement | |---|---|---|---|---| | 1 | HIGH | Line 8, `.palette` | The documented ~100 daily keyboard openings should respond immediately. | Replace its declaration with `transition: none;` | | 2 | HIGH | Line 1, `.dropdown` | `400ms ease-in` delays the initial response and makes opening sluggish. | `transition: transform 200ms cubic-bezier(0.23, 1, 0.32, 1), opacity 200ms cubic-bezier(0.23, 1, 0.32, 1);` | | 3 | HIGH | Lines 4–5, `.modal` | Scaling from zero over 500ms creates excessive movement. | Use the modal replacement below. | | 4 | HIGH | Line 6, `.accordion` | Animating `height` forces repeated layout over 500ms. | Replace `transition: height 0.5s ease;` with `transition: none;`. Keep both height values. This is the smallest safe fix; a smooth reveal needs additional structure. | | 5 | MEDIUM | Missing reduced-motion rule | Dropdown and modal movement have no preference override. | Append the reduced-motion block below, after the other rules. | | 6 | MEDIUM | Line 3, `.btn` | `transition: all` can animate unintended properties. No button state currently changes a visual property. | Replace with `.btn { transition: none; }` | | 7 | MEDIUM | Line 9, `.popover` | Center scaling contradicts its documented connection to the top-bar trigger. | Replace `transform-origin: center;` with `transform-origin: top left;` **if positioned below and left-aligned with the trigger**. Placement is absent from this prototype; use `top right` for right alignment or `top center` for centered alignment. | | 8 | LOW | Lines 10–11, `.card` | A 700ms linear shadow transition makes routine hover feedback linger; hover is also ungated on touch devices. | Use the card replacement below. | Replace lines 4–5 with: ```css .modal { opacity: 0; transform: scale(0.96); transition: transform 250ms cubic-bezier(0.23, 1, 0.32, 1), opacity 250ms cubic-bezier(0.23, 1, 0.32, 1); } .modal.open { opacity: 1; transform: scale(1); } ``` Keep the modal’s centered transform origin; it is appropriate here. Replace lines 10–11 with: ```css .card { transition: none; } @media (hover: hover) and (pointer: fine) { .card:hover { box-shadow: 0 8px 24px rgba(0, 0, 0, .2); } } ``` This preserves hover feedback while removing repeated shadow painting during an animation. Append this reduced-motion override: ```css @media (prefers-reduced-motion: reduce) { .dropdown, .dropdown.open, .modal, .modal.open { transform: none; transition: opacity 200ms ease; } .popover { transition: opacity 200ms ease; } } ``` One grounded optional addition: give the Menu button press feedback with `.btn:active { transform: scale(0.97); }` and `.btn { transition: transform 160ms ease-out; }`. If adopted, also add `.btn:active { transform: none; }` in [... excerpt: first 3200 of 3496 characters]

See Pro