animate (emilkowalski/skills)
Baut eine Animation von Grund auf und legt Zweck, Eigenschaften, Kurve, Dauer, Unterbrechung und Ausstieg fest.
animate: Bringt die von Codex generierten UI-Animationen dazu, den Motion-Regeln eines Design Engineers zu folgen (Kontrolle 3.7, Skill 4.4, One-Liner 5.0) bei 1.7x den Tokens; ein Ein-Satz-Prompt mit denselben Regeln ist besser und günstiger
Codex CLI · gpt-6-astra
22.0 / 30
Lift gegenüber ohne Skill: +0.64 · Situativ · 18 Läufe
Situativ: der Lift +0.64 liegt unter +1.0. Für „Empfohlen“ sind insgesamt 22/30, eine Ausgabequalität von 3.5 und ein Lift von +1.0 nötig.
SOTA
BestandenGetestet mit Codex.
Gilt für Codex, Claude Code
Codex CLI 0.166 (SOTA-Stufe): 18 bewertete Läufe. Ein Bestehen hier deckt gemäß unserer Stufenregel auch Claude Code ab; über die zweite Stufe sagt es nichts aus.
Punktzahlen
Jede Dimension reicht von 0 bis 5, und die sechs ergeben zusammen die Gesamtpunktzahl von 30. 5 ist in jeder Dimension besser. Kosten 5 bedeutet günstig und schnell. Installation 5 bedeutet einfach.
- Trigger-Zuverlässigkeit
- 5.0
- Lift gegenüber ohne Skill
- 2.6
- Ausgabequalität
- 4.4
- Token- und Zeitkosten
- 2.0
- Installation und Portabilität
- 4.0
- Sicherheit
- 4.0
Sicherheitsprüfung
SicherStatischer Scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Manuelle Prüfung: Sicher in einer Sandbox ohne Netzwerk auszuführen (keine Befunde). Ein sauberer Scan beweist nicht, dass ein Skill sicher ist.
Installieren
npx skills@latest add emilkowalski/skills --skill animate
Fixierter Commit: a81dbca07f2217b7103e510c0f13f8d5b017afc9
Getestet: 2026-11-02
Was wir getestet haben
- Animiertes Dropdown-Menü — menu.html bauen: ein Button, der ein Dropdown-Menü mit 5 Einträgen öffnet, mit Öffnen- und Schließen-Animation. Eine eigenständige HTML-Datei schreiben (Inline-CSS und -JS, keine Bibliotheken).
- Animierter Modal-Dialog — modal.html bauen: ein Button, der einen Modal-Dialog mit abgedunkeltem Hintergrund öffnet, mit Öffnen- und Schließen-Animation. Eine eigenständige HTML-Datei schreiben (Inline-CSS und -JS, keine Bibliotheken).
- Toast-Benachrichtigungen — toasts.html bauen: drei Buttons, die jeweils eine Toast-Benachrichtigung anzeigen, die sich stapelt und selbst schließt, mit Enter- und Exit-Animation. Eine eigenständige HTML-Datei schreiben (Inline-CSS und -JS, keine Bibliotheken).
Vorteile
- Hebt den Mittelwert von 3.71 auf 4.36 gegenüber ohne Skill (+0.64).
- Der Skill wurde erkannt, ohne genannt zu werden: Skill-Datei in 6/6 Treatment-Läufen gelesen.
Nachteile
- Ein Ein-Satz-Prompt erzielte 5.0 gegenüber 4.36 mit dem Skill (-0.64).
- Verbraucht 1.68x die Tokens von ohne Skill.
- n=2 pro Aufgabe und Variante; Unterschiede unter etwa 1 Punkt sind Rauschen.
Bewertung
Codex CLI 0.166 (gpt-6-astra, niedriges Reasoning) auf einem dedizierten Windows-Test-PC, einem frischen temporären Projekt und temporären HOME/TMPDIR/Caches pro Lauf; Skill installiert (Treatment) oder nicht vorhanden (Kontrolle) oder nicht vorhanden mit der Kernanforderung des Skills in einem an den Prompt angehängten Satz (One-Liner-Gruppe); 2 Läufe pro Gruppe und Aufgabe; Netzwerk aus; Schreiben nach /tmp blockiert. Die Prompts nennen den Skill nie (außer der unten genannten Formulierung). Drei Build-Aufgaben, jeweils eine eigenständige HTML-Datei mit Inline-CSS und -JS: ein Dropdown-Menü, ein Modal mit abgedunkeltem Hintergrund und gestapelte Toasts, alle mit Öffnen-/Schließen- bzw. Enter-/Exit-Animationen. Die Prompts nennen keine Motion-Regeln. Der One-Liner listet die Regeln in einem Satz auf.
Drei-Arm-Vergleich
| Variante | Durchschnittsnote (0-5) | Tokens pro Lauf |
|---|---|---|
| Ohne Skill | 3.71 | 78k |
| Ein-Satz-Prompt | 5.0 | 105k |
| Mit Skill | 4.36 | 132k |
Gemessen mit Codex CLI über 18 Läufe, bewertet durch regelbasierte Prüfungen ohne LLM-Richter. Gesamt 22.0 / 30, Urteil Situativ.
Urteil: Situationsabhängig (22.0 / 30). Quelle: emilkowalski/skills, skills/animate, festgeschrieben auf Commit a81dbca. Installation: npx skills@latest add emilkowalski/skills --skill animate. Lizenz: MIT (LICENSE im Repo).
Was es ist
Der Skill animate (emilkowalski/skills) liefert Bewegungsregeln für UI-Animationen: nur mit Absicht animieren, eine eigene ease-out-cubic-bezier-Kurve (nie ease-in oder der Standard), 150-300 ms, ausschließlich transform und opacity, Press-Feedback mit scale(0.97), nie von scale(0) starten, Eingänge staffeln, unterbrechbare Übergänge, prefers-reduced-motion, Hover nur mit (hover: hover).
Wie wir getestet haben
Codex CLI 0.166 (gpt-6-astra, niedriges Reasoning) auf einem dedizierten Windows-Test-PC, pro Lauf ein frisches temporäres Projekt sowie temporäre HOME/TMPDIR/Caches, Skill installiert (Treatment) oder nicht vorhanden (Kontrolle) oder nicht vorhanden mit der Kernanforderung des Skills als einem an den Prompt angehängten Satz (Ein-Satz-Gruppe), 2 Läufe pro Gruppe und Aufgabe, Netzwerk aus, Schreibzugriffe auf /tmp blockiert. Die Prompts nennen den Skill nie (außer der unten erwähnten Formulierung).
Drei Bauaufgaben, jeweils eine eigenständige HTML-Datei mit Inline-CSS und JS: ein Dropdown-Menü, ein Modal mit abgedunkeltem Hintergrund und Toasts, die sich stapeln — alle mit Öffnen-/Schließen- bzw. Ein-/Ausblendanimationen. Die Prompts erwähnen keine Bewegungsregeln. Der Ein-Satz-Prompt listet die Regeln in einem Satz.
- Animiertes Dropdown-Menü — Baue menu.html: ein Button, der ein Dropdown-Menü mit 5 Einträgen öffnet, mit Öffnungs- und Schließanimation. Schreibe eine eigenständige HTML-Datei (Inline-CSS und JS, keine Bibliotheken).
- Animierter Modal-Dialog — Baue modal.html: ein Button, der einen Modal-Dialog mit abgedunkeltem Hintergrund öffnet, mit Öffnungs- und Schließanimation. Schreibe eine eigenständige HTML-Datei (Inline-CSS und JS, keine Bibliotheken).
- Toast-Benachrichtigungen — Baue toasts.html: drei Buttons, die jeweils eine Toast-Benachrichtigung anzeigen, die sich stapelt und selbst schließt, mit Ein- und Ausblendanimation. Schreibe eine eigenständige HTML-Datei (Inline-CSS und JS, keine Bibliotheken).
Die Bewertung erfolgt programmatisch (versteckte Tests / Erkennung eingepflanzter Fehler / Constraint-Checks / Rendering+OCR, wo relevant), 0–5 pro Lauf. Kein LLM-Judge hat eine Bewertung entschieden.
Ergebnisse
Der Ein-Satz-Prompt für die dritte Gruppe: "Animate wie ein Design Engineer: nur animieren, was einen Zweck hat, eine eigene ease-out-cubic-bezier-Kurve verwenden (nie ease-in oder der Standard), 150-300 ms, nur transform und opacity, Press-Feedback mit scale(0.97), nie von scale(0) starten, Eingänge staffeln, unterbrechbare Übergänge, prefers-reduced-motion beachten und Hover mit (hover: hover) absichern."
| Aufgabe | Kontrollwert | Ein-Satz | Mit Skill | Kontroll-Token | Ein-Satz-Token | Mit-Skill-Token | Skill gelesen |
|---|---|---|---|---|---|---|---|
| t1-dropdown | 3.5 | 5.0 | 4.14 | 81k | 100k | 163k | 2/2 |
| t2-modal | 3.5 | 5.0 | 4.57 | 61k | 100k | 110k | 2/2 |
| t3-toasts | 4.14 | 5.0 | 4.36 | 93k | 114k | 121k | 2/2 |
Durchschnittswert: 3.71 ohne vs. 4.36 mit dem Skill (Delta +0.64). Token pro Lauf: 78k vs. 132k (1.68x); Zeit 82s vs. 81s. Ein-Satz-Gruppe: 5.0 (Gewinn des Skills gegenüber dem Ein-Satz-Prompt: -0.64; Gewinn des Ein-Satz-Prompts gegenüber ohne Skill: +1.29); Ein-Satz-Token 105k pro Lauf, der Skill kostet also 1.25x so viel wie der Ein-Satz-Prompt.
Was passiert ist
- Kontrolle 3.71, Skill 4.36, Ein-Satz 5.0 (je n=6). Eine regelbasierte Bewegungsprüfung zählt, wie viele von 10 Regeln die Seite befolgt. Die Kontrolle erreichte 6-8 von 10, der Skill 8-9, und der Ein-Satz-Prompt erfüllte in allen 6 Läufen jede Prüfung.
- Die Regeln, die die Kontrolle am häufigsten verfehlte: Press-Feedback (ein :active-scale) in 3 von 6 Läufen, dazu gestaffelte Eingänge und nicht standardmäßiges Easing in einigen Läufen. Der Skill verfehlte Press-Feedback noch in 2 Läufen sowie gestaffelten Eingang oder Easing in mehreren; bei der Toast-Aufgabe lag sein Wert bei 4.14 und 4.57 gegenüber 4.14 für die Kontrolle.
- Token: Skill 132k, Ein-Satz 105k, Kontrolle 78k pro Lauf (1.7x Kontrolle, 1.3x Ein-Satz). Der Skill wurde in 6/6 Treatment-Läufen gelesen; er nutzt mehr Befehle (9.3 pro Lauf gegenüber 4.7).
- Treatment-Läufe legen pro Lauf etwa 3 neue Dateien an (die Skill-Kopie im Arbeitsordner).
Dimensionswerte
| Dimension | Wert | Begründung |
|---|---|---|
| 1_output_quality | 4.36 | Durchschnittswert 4.36/5 mit dem Skill (programmatische Checks, siehe Tabelle pro Aufgabe). |
| 2_lift_vs_no_skill | 2.64 | +0.64 Punkte gegenüber 3.71 ohne den Skill (n=2 pro Aufgabe; unter ~1 Punkt ist Rauschen). |
| 3_trigger | 5.0 | Skill-Datei in 6/6 Treatment-Läufen gelesen. |
| 4_instructions_portability | 4 | SKILL.md-Regeln plus Referenztext. |
| 5_efficiency | 2 | 1.68x Token (132k vs. 78k pro Lauf) und 0.99x Zeit (81s vs. 82s). |
| 6_safety_hygiene | 4 | Nur Prosa; siehe security.md. |
Grenzen dieses Tests
- Regelbasierte Checks am Code-Text einer HTML-Datei; die Animationen wurden nicht im Browser gerendert oder zeitlich gemessen, daher werden Flüssigkeit und visuelle Qualität nicht beurteilt.
- Der Ein-Satz-Prompt ist eine enge Paraphrase der Checkliste des Skills, und die Checks spiegeln dieselbe Regelliste.
- n=2 pro Zelle.
- n = 2 pro Gruppe und Aufgabe: Abweichungen unter etwa 1 Punkt sind Rauschen.
- Regelbasierte Bewertung misst, was die Checks sehen können; sie kann weder Geschmack beurteilen noch, ob ein Ergebnis das bestmögliche ist.
Sicherheit
Siehe security.md. Scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Urteil: sicher ausführbar (Sandbox ohne Netzwerk). Ein sauberer Scan beweist nicht, dass ein Skill sicher ist.
Fazit
Der Skill verbessert die Einhaltung der Bewegungsregeln gegenüber keiner Anleitung, aber als ein Satz erreichen dieselben Regeln mit weniger Token eine perfekte Bewertung. Der Nutzen besteht also nur gegenüber einem nackten Prompt.
Transkript
Laufprotokoll: animate (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Spalten: Aufgabe, Gruppe-Lauf, Punktzahl (0-5), Tokens, Sekunden, bestandene Prüfungen, vom Agenten geöffnete Skill-Dateien. t1-dropdown control-1: Punkte 3.71, Tokens 52757, Sek. 64.6, Prüfungen 1/2, nichts geöffnet t1-dropdown control-2: Punkte 3.29, Tokens 109744, Sek. 78.3, Prüfungen 1/2, nichts geöffnet t1-dropdown oneliner-1: Punkte 5.0, Tokens 90139, Sek. 90.1, Prüfungen 2/2, nichts geöffnet t1-dropdown oneliner-2: Punkte 5.0, Tokens 110798, Sek. 84.6, Prüfungen 2/2, nichts geöffnet t1-dropdown treatment-1: Punkte 4.14, Tokens 162460, Sek. 70.2, Prüfungen 2/2, geöffnet animate t1-dropdown treatment-2: Punkte 4.14, Tokens 165193, Sek. 85.1, Prüfungen 2/2, geöffnet animate t2-modal control-1: Punkte 3.71, Tokens 69259, Sek. 69.5, Prüfungen 1/2, nichts geöffnet t2-modal control-2: Punkte 3.29, Tokens 52805, Sek. 73.9, Prüfungen 1/2, nichts geöffnet t2-modal oneliner-1: Punkte 5.0, Tokens 110675, Sek. 103.1, Prüfungen 2/2, nichts geöffnet
18 Läufe, 3 Artefakte
Beispielausgabe
SOTA · With the skill: menu.html (t1-dropdown, run 1, Codex)
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Workspace menu</title> <style> :root { font-family: system-ui, sans-serif; color: #252c39; background: #f4f5f7; --ease-out: cubic-bezier(0.23, 1, 0.32, 1); } * { box-sizing: border-box; } body { margin: 0; min-height: 100svh; display: grid; place-items: center; padding: 24px; } main { width: min(100%, 400px); min-height: 440px; } .eyebrow { color: #687183; font-size: 11px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; } h1 { margin: 12px 0 8px; font-size: 30px; letter-spacing: -.04em; } .description { margin: 0 0 28px; color: #687183; font-size: 14px; line-height: 1.6; } .dropdown { position: relative; width: min(100%, 280px); } button { font: inherit; cursor: pointer; } .trigger { display: flex; align-items: center; justify-content: space-between; gap: 32px; border: 1px solid #303a4e; border-radius: 12px; background: #293448; color: white; padding: 14px 18px; font-size: 14px; font-weight: 600; box-shadow: 0 3px 5px #20293b15; } .chevron { width: 16px; height: 16px; transition: transform 200ms var(--ease-out); } [aria-expanded="true"] .chevron { transform: rotate(180deg); } .menu { position: absolute; top: calc(100% + 10px); left: 0; width: 100%; padding: 6px; border: 1px solid #e1e4eb; border-radius: 14px; background: white; box-shadow: 0 16px 36px -12px #27324a30, 0 3px 8px #27324a08; opacity: 0; transform: scale(.95); transform-origin: top left; pointer-events: none; transition: opacity 200ms var(--ease-out), transform 200ms var(--ease-out); } .dropdown.open .menu { opacity: 1; transform: scale(1); pointer-events: auto; } .item { width: 100%; display: flex; align-items: center; gap: 12px; border: 0; border-radius: 8px; background: transparent; color: #394256; padding: 12px; text-align: left; font-size: 14px; } .icon { width: 20px; text-align: center; color: #738098; font-size: 18px; line-height: 1; } .item:last-child { margin-top: 5px; border-top: 1px solid #edf0f5; border-radius: 0 0 8px 8px; } button:focus-visible { outline: 2px solid #657cf0; outline-offset: 3px; } .item:focus-visible { outline-offset: -2px; background: #f0f3fa; } @media (hover: hover) and (pointer: fine) { .trigger:hover { background: #36435b; } .item:hover { background: #f0f3fa; } } .dropdown.instant .menu, .dropdown.instant .chevron { transition: none; } @media (prefers-reduced-motion: reduce) { .menu, .dropdown.open .menu { transform: none; } .chevron { transition: none; } } .status { margin-top: 300px; font-size: 13px; color: #687183; min-height: 20px; } </style> </head> <body> <main> <div class="eyebrow">Your workspace</div> <h1>A little room for everything.</h1> <p class="description">Your everyday essentials, one click away.</p> <div class="dropdown" id="dropdown"> <button class="trigger" id="trigger" type="button" aria-haspopup="menu" aria-expanded="false" aria-controls="menu"> Workspace <svg class="chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-wid [... excerpt: first 3200 of 7249 characters]