animate (emilkowalski/skills)
Construye una animación desde cero y decide propósito, propiedades, curva, duración, interrupción y salida.
animate: hace que las animaciones de UI que genera Codex sigan las reglas de movimiento de un ingeniero de diseño (control 3.7, skill 4.4, prompt de una frase 5.0) con 1.7 veces los tokens; un prompt de una frase con las mismas reglas lo hace mejor y más barato
Codex CLI · gpt-6-astra
22.0 / 30
Mejora frente a sin skill: +0.64 · Según el caso · 18 ejecuciones
Según el caso: la mejora +0.64 está por debajo de +1.0. Para ser recomendada hace falta un total de 22/30, una calidad de salida de 3.5 y una mejora de +1.0.
SOTA
AprobadaProbada con Codex.
Cubre Codex, Claude Code
Codex CLI 0.166 (nivel SOTA): 18 ejecuciones puntuadas. Una pasada aquí también cubre Claude Code según nuestra regla de niveles; no dice nada sobre el segundo nivel.
Puntuaciones
Cada dimensión va de 0 a 5 y las seis suman el total sobre 30. 5 es mejor en todas las dimensiones. Coste 5 significa barato y rápido. Instalación 5 significa fácil.
- Fiabilidad de activación
- 5.0
- Mejora frente a sin skill
- 2.6
- Calidad de salida
- 4.4
- Coste en tokens y tiempo
- 2.0
- Instalación y portabilidad
- 4.0
- Seguridad
- 4.0
Revisión de seguridad
SeguraEscaneo estático: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Revisión manual: Segura de ejecutar en un sandbox sin red (sin hallazgos). Un escaneo limpio no demuestra que una skill sea segura.
Instalar
npx skills@latest add emilkowalski/skills --skill animate
Commit fijado: a81dbca07f2217b7103e510c0f13f8d5b017afc9
Probada: 2026-11-02
Qué probamos
- Menú desplegable animado — Crea menu.html: un botón que abre un menú desplegable con 5 elementos, con animaciones de apertura y cierre. Escribe un único archivo HTML autocontenido (CSS y JS en línea, sin librerías).
- Diálogo modal animado — Crea modal.html: un botón que abre un diálogo modal con un fondo oscurecido, con animaciones de apertura y cierre. Escribe un único archivo HTML autocontenido (CSS y JS en línea, sin librerías).
- Notificaciones toast — Crea toasts.html: tres botones que muestran cada uno una notificación toast que se apila y se descarta sola, con animaciones de entrada y salida. Escribe un único archivo HTML autocontenido (CSS y JS en línea, sin librerías).
Ventajas
- Sube la puntuación media de 3.71 a 4.36 frente a sin skill (+0.64).
- La skill se activó sin nombrarla: se leyó el archivo de la skill en 6/6 ejecuciones con skill.
Inconvenientes
- Un prompt de una frase obtuvo 5.0, frente a 4.36 con la skill (-0.64).
- Usa 1.68 veces los tokens de sin skill.
- n=2 por tarea y rama; las diferencias de menos de aproximadamente 1 punto son ruido.
Reseña
Codex CLI 0.166 (gpt-6-astra, razonamiento bajo) en un PC Windows dedicado a pruebas, un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales por ejecución, skill instalada (tratamiento) o ausente (control) o ausente con el requisito central de la skill condensado en una frase añadida al prompt (grupo del prompt de una frase), 2 ejecuciones por grupo y tarea, red desactivada, escrituras en /tmp bloqueadas. Los prompts nunca mencionan la skill (salvo el texto indicado abajo). Tres tareas de construcción, cada una un archivo HTML autocontenido con CSS y JS en línea: un menú desplegable, un modal con fondo oscurecido y toasts apilados, todos con animaciones de apertura/cierre o entrada/salida. Los prompts no mencionan reglas de movimiento. El prompt de una frase enumera las reglas en una sola frase.
Comparación de tres ramas
| Rama | Puntuación media (0-5) | Tokens por ejecución |
|---|---|---|
| Sin la skill | 3.71 | 78k |
| Prompt de una frase | 5.0 | 105k |
| Con la skill | 4.36 | 132k |
Medido con Codex CLI en 18 ejecuciones, puntuado con comprobaciones basadas en reglas y sin juez LLM. Total 22.0 / 30, veredicto Según el caso.
Veredicto: Según el caso (22.0 / 30). Fuente: emilkowalski/skills, skills/animate, fijada en el commit a81dbca. Instalación: npx skills@latest add emilkowalski/skills --skill animate. Licencia: MIT (LICENSE del repositorio).
Qué es
La skill animate (emilkowalski/skills): reglas de movimiento para crear animaciones de interfaz: anima solo con un propósito, cubic-bezier ease-out personalizada (nunca ease-in ni la predeterminada), 150-300 ms, solo transform y opacity, feedback al pulsar con scale(0.97), nunca empieces desde scale(0), escalona las entradas, transiciones interrumpibles, prefers-reduced-motion, hover limitado con (hover: hover).
Cómo lo probamos
Codex CLI 0.166 (gpt-6-astra, razonamiento bajo) en un PC de pruebas Windows dedicado, un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales por ejecución, skill instalada (tratamiento) o ausente (control) o ausente con el requisito central de la skill comprimido en una frase añadida al final del prompt (grupo de una frase), 2 ejecuciones por grupo y tarea, red desactivada, escrituras en /tmp bloqueadas. Los prompts nunca mencionan la skill (salvo la formulación indicada abajo).
Tres tareas de construcción, cada una un archivo HTML autocontenido con CSS y JS en línea: un menú desplegable, un modal con fondo atenuado y toasts apilados, todos con animaciones de apertura/cierre o entrada/salida. Los prompts no mencionan las reglas de movimiento. La frase única enumera las reglas en una sola frase.
- Menú desplegable animado — Crea menu.html: un botón que abre un menú desplegable con 5 elementos, con animaciones de apertura y cierre. Escribe un único archivo HTML autocontenido (CSS y JS en línea, sin librerías).
- Diálogo modal animado — Crea modal.html: un botón que abre un diálogo modal con fondo atenuado, con animaciones de apertura y cierre. Escribe un único archivo HTML autocontenido (CSS y JS en línea, sin librerías).
- Notificaciones toast — Crea toasts.html: tres botones que muestran cada uno una notificación toast que se apila y se descarta sola, con animaciones de entrada y salida. Escribe un único archivo HTML autocontenido (CSS y JS en línea, sin librerías).
La puntuación es programática (tests ocultos / detección de problemas sembrados / comprobaciones de restricciones / renderizado + OCR cuando corresponde), 0–5 por ejecución. Ningún juez LLM decidió ninguna puntuación.
Resultados
La frase única que recibió el tercer grupo: "Anima como un ingeniero de diseño: anima solo lo que tiene un propósito, usa una cubic-bezier ease-out personalizada (nunca ease-in ni la predeterminada), 150-300 ms, solo transform y opacity, feedback al pulsar con scale(0.97), nunca empieces desde scale(0), escalona las entradas, transiciones interrumpibles, respeta prefers-reduced-motion y limita el hover con (hover: hover)."
| Tarea | Puntuación control | Una frase | Con la skill | Tokens control | Tokens de una frase | Tokens con la skill | Skill leída |
|---|---|---|---|---|---|---|---|
| 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 |
Puntuación media: 3.71 sin vs 4.36 con la skill (delta +0.64). Tokens por ejecución: 78k vs 132k (1.68x); tiempo 82s vs 81s. Grupo de una frase: 5.0 (la ganancia de la skill sobre la frase única: -0.64; la ganancia de la frase única sobre sin skill: +1.29); tokens de la frase única 105k por ejecución, así que la skill cuesta 1.25x la frase única.
Qué ocurrió
- Control 3.71, skill 4.36, una frase 5.0 (n=6 cada uno). Una comprobación de movimiento basada en reglas cuenta cuántas de las 10 reglas sigue la página. El control llegó a 6-8 de 10, la skill a 8-9, y la frase única superó todas las comprobaciones en las 6 ejecuciones.
- Las reglas que el control omitió con más frecuencia: feedback al pulsar (un scale en :active) en 3 de 6 ejecuciones, además de entradas escalonadas y easing no predeterminado en algunas ejecuciones. La skill siguió fallando el feedback al pulsar en 2 ejecuciones y la entrada escalonada o el easing en varias; en la tarea de toasts su puntuación fue 4.14 y 4.57 frente a 4.14 del control.
- Tokens: skill 132k, una frase 105k, control 78k por ejecución (1.7x el control, 1.3x la frase única). La skill se leyó en 6/6 ejecuciones de tratamiento; usa más comandos (9.3 por ejecución frente a 4.7).
- Las ejecuciones de tratamiento añaden unos 3 archivos nuevos (la copia de la skill en la carpeta de trabajo) por ejecución.
Puntuaciones por dimensión
| Dimensión | Puntuación | Motivo |
|---|---|---|
| 1_output_quality | 4.36 | Puntuación media 4.36/5 con la skill (comprobaciones programáticas, véase la tabla por tarea). |
| 2_lift_vs_no_skill | 2.64 | +0.64 puntos frente a 3.71 sin la skill (n=2 por tarea; menos de ~1 punto es ruido). |
| 3_trigger | 5.0 | Archivo de la skill leído en 6/6 ejecuciones de tratamiento. |
| 4_instructions_portability | 4 | Reglas de SKILL.md más texto de referencia. |
| 5_efficiency | 2 | 1.68x tokens (132k vs 78k por ejecución) y 0.99x tiempo (81s vs 82s). |
| 6_safety_hygiene | 4 | Solo prosa; véase security.md. |
Límites de esta prueba
- Comprobaciones basadas en reglas sobre el texto del código de un archivo HTML; las animaciones no se renderizaron ni se cronometraron en un navegador, así que no se juzga la fluidez ni la calidad visual.
- La frase única es una paráfrasis cercana de la propia lista de comprobación de la skill, y las comprobaciones reflejan esa misma lista de reglas.
- n=2 por celda.
- n = 2 por grupo y tarea: las diferencias de menos de ~1 punto son ruido.
- La puntuación basada en reglas mide lo que las comprobaciones pueden ver; no puede juzgar el gusto ni si el resultado es el mejor posible.
Seguridad
Consulta security.md. Escaneo: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Veredicto: segura de ejecutar (sandbox sin red). Un escaneo limpio no demuestra que una skill sea segura.
Conclusión
La skill mejora las reglas de movimiento que se siguen frente a no dar ninguna orientación, pero esas mismas reglas en una sola frase logran una puntuación perfecta con menos tokens, así que el beneficio solo existe frente a un prompt básico.
Transcripción
Registro de ejecuciones: animate (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Columnas: tarea, grupo-ejecución, puntuación (0-5), tokens, segundos, comprobaciones superadas, archivos de la skill que abrió el agente. t1-dropdown control-1: puntuación 3.71, tokens 52757, s 64.6, comprobaciones 1/2, no abrió nada t1-dropdown control-2: puntuación 3.29, tokens 109744, s 78.3, comprobaciones 1/2, no abrió nada t1-dropdown oneliner-1: puntuación 5.0, tokens 90139, s 90.1, comprobaciones 2/2, no abrió nada t1-dropdown oneliner-2: puntuación 5.0, tokens 110798, s 84.6, comprobaciones 2/2, no abrió nada t1-dropdown treatment-1: puntuación 4.14, tokens 162460, s 70.2, comprobaciones 2/2, abrió animate t1-dropdown treatment-2: puntuación 4.14, tokens 165193, s 85.1, comprobaciones 2/2, abrió animate t2-modal control-1: puntuación 3.71, tokens 69259, s 69.5, comprobaciones 1/2, no abrió nada t2-modal control-2: puntuación 3.29, tokens 52805, s 73.9, comprobaciones 1/2, no abrió nada t2-modal oneliner-1: puntuación 5.0, tokens 110675, s 103.1, comprobaciones 2/2, no abrió nada
18 ejecuciones, 3 artefactos
Resultado de ejemplo
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]