improve-animations (emilkowalski/skills)
審查程式庫中的動效程式碼,產出依優先順序排列、可交給其他代理執行的改善方案。
improve-animations:把模糊的「檢查動畫」變成附有確切緩動曲線的清單(對照組 3.2、技能組 4.8),但把同一份檢查清單濃縮成一句話提示就能拿到 4.9,Token 卻只要 0.84 倍
Codex CLI · gpt-6-astra
25.5 / 30
相對未使用技能的提升:+1.66 · 推薦 · 18 次執行
推薦:總分 25.5/30 至少 22,產出品質 4.8 至少 3.5,提升幅度 +1.66 至少 +1.0。
SOTA
透過使用 Codex 測試。
涵蓋 Codex, Claude Code
Codex CLI 0.166(SOTA 等級):18 次評分執行。依我們的等級規則,在這裡通過也涵蓋 Claude Code;但這不代表第二等級的結果。
分數
每個維度為 0 到 5 分,六個維度相加即為滿分 30 的總分。每個維度都是 5 分最好。成本 5 分代表便宜又快速;安裝 5 分代表容易安裝。
- 觸發可靠性
- 5.0
- 相對未使用技能的提升
- 3.7
- 產出品質
- 4.8
- Token 與時間成本
- 4.0
- 安裝與可攜性
- 4.0
- 安全性
- 4.0
安全審查
安全靜態掃描:0 CRITICAL / 2 HIGH / 0 MEDIUM。人工審查:可在無網路沙箱中安全執行(已說明掃描器命中的原因)。掃描結果不能證明技能一定安全。
安裝
npx skills@latest add emilkowalski/skills --skill improve-animations
固定 Commit: a81dbca07f2217b7103e510c0f13f8d5b017afc9
測試日期: 2026-11-02
我們測了什麼
- 檢查動態程式碼 — 檢查這個專案裡的動畫與動態效果。給我一份依優先順序排列的待修正清單,每一項都要附上檔案與確切的替換數值。不要修改任何檔案。
- 檢查兩個元件 — 只檢查 styles.css 裡的下拉選單與彈出視窗動畫。哪裡有問題,它們確切應該變成什麼樣子?不要修改任何檔案。
- 交給別人實作的重點修正 — 我要把動態修正交給一位沒看過這個專案的同事。列出 5 個影響最大的動畫修正,並附上每一項要寫的確切 CSS,讓他不必問我任何問題就能實作。不要修改任何檔案。
優點
- 相對未使用技能,平均分數從 3.15 提升到 4.81(+1.66)。
- 技能即使未被點名也會被採用:6/6 次實驗組執行都讀取了技能檔案。
- 使用技能後的絕對品質很高:4.81 / 5。
缺點
- 一句話提示得分 4.94,使用技能則為 4.81(-0.13)。
- 每個任務的每個組別 n=2;約 1 分以內的差異屬於雜訊。
評測
在專用的 Windows 測試電腦上執行 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都使用全新的暫存專案與暫存的 HOME/TMPDIR/快取,技能分為已安裝(實驗組)、未安裝(對照組),以及未安裝但把技能核心要求濃縮成一句話附加在提示詞後(一句話提示組),每個任務的每個組別執行 2 次,關閉網路,封鎖 /tmp 寫入。提示詞從未提到技能(除了下方註明的措辭)。一個小型網頁應用程式(am_app),埋了 8 個動態問題。任務:檢查整個專案、只檢查下拉選單與彈出視窗,以及修正五個指定問題。提示詞只說「動畫與動態」,沒有點名任何規則。一句話提示組列出規則,並要求提供確切的替換數值。
三組對照
| 組別 | 平均分數(0-5) | 每次執行 Token 用量 |
|---|---|---|
| 未使用技能 | 3.15 | 65k |
| 一句話提示 | 4.94 | 65k |
| 使用技能 | 4.81 | 78k |
以 Codex CLI 執行 18 次,採規則式檢查評分,不經 LLM 評審。總分 25.5 / 30,評級為 推薦。
評定:推薦(25.5 / 30)。 來源:emilkowalski/skills,skills/improve-animations,固定於 commit a81dbca。安裝:npx skills@latest add emilkowalski/skills --skill improve-animations。授權: MIT(儲存庫 LICENSE)。
這是什麼
improve-animations 技能(emilkowalski/skills):一份動態設計稽核指南:用自訂 ease-out 曲線取代 ease-in/預設曲線、時長 150-300 ms、只用 transform 與 opacity、不要 transition: all、不要從 scale(0) 開始、transform-origin 設在觸發位置、支援 reduced-motion,而且高頻操作不加動畫。
我們如何測試
在專用的 Windows 測試 PC 上使用 Codex CLI 0.166(gpt-6-astra、低推理),每次執行都使用全新的臨時專案與臨時 HOME/TMPDIR/快取,安裝技能(使用技能組)、不安裝(對照組),或是不安裝但把技能核心要求濃縮成一句話附加在提示詞後(一句話組);每個任務的每組各執行 2 次,關閉網路、封鎖 /tmp 寫入。提示詞完全沒有提到技能名稱(下述措辭除外)。
一個小型網頁應用程式(am_app),埋了 8 個動態問題。任務:稽核整個專案、只稽核下拉選單與對話框,以及修正五個指定問題。提示詞只說「animations and motion」,沒有指名任何規則。一句話提示列出規則,並要求提供確切的替代值。
- 稽核動態程式碼 — 稽核這個專案中的動畫與動態效果。給我一份依優先順序排列的修正清單,每項附上檔案與確切的替代值。請勿變更任何檔案。
- 稽核兩個元件 — 只稽核 styles.css 中的下拉選單與對話框動畫。哪裡有問題,它們確切應該變成什麼樣子?請勿變更任何檔案。
- 交給別人實作的首要修正 — 我要把動態修正交給一位沒看過這個專案的同事。列出 5 個影響最大的動畫修正,每項附上要寫的確切 CSS,讓他不必問我任何事就能實作。請勿變更任何檔案。
評分採程式化方式(隱藏測試/植入問題召回/限制條件檢查/視情況搭配渲染+OCR),每次執行 0–5 分。所有分數都不是由 LLM 評審決定。
結果
給第三組的一句話提示:"像資深設計工程師那樣稽核動態程式碼:指出 ease-in 與預設曲線、transition: all、從 scale(0) 開始、對版面屬性做動畫、缺少 reduced-motion、在高頻操作上加動畫、錯誤的 transform-origin 與過慢的時長;針對每一項給出確切的替代方案(自訂 ease-out cubic-bezier、150-300 ms、只用 transform/opacity),讓別人可以直接套用,並且不要變更任何原始檔案。"
| 任務 | 對照組分數 | 一句話提示 | 使用技能 | 對照組 token | 一句話組 token | 使用技能 token | 技能讀取 |
|---|---|---|---|---|---|---|---|
| t1-audit | 3.21 | 4.82 | 4.82 | 65k | 66k | 77k | 2/2 |
| t2-focus | 2.5 | 5.0 | 5.0 | 63k | 64k | 77k | 2/2 |
| t3-five-fixes | 3.75 | 5.0 | 4.62 | 65k | 65k | 78k | 2/2 |
平均分數:未使用技能 3.15,使用技能 4.81(差異 +1.66)。每次執行 token:65k 對 78k(1.20x);時間 48 秒對 49 秒。一句話組:4.94(技能相對一句話提示的增益:-0.13;一句話提示相對未使用技能的增益:+1.79);一句話組每次執行 65k token,因此技能成本是一句話提示的 1.19 倍。
實際情況
- 對照組 3.15、使用技能 4.81、一句話組 4.94(各 n=6)。沒有指引時,Codex 找到 8 個植入問題中的 3–7 個,而且 6 次執行中有 5 次沒有給出 cubic-bezier 或確切的緩動曲線。
- 技能補上了這個缺口:兩次只稽核特定元件的執行都拿 5.0,對照組則兩次都漏掉對話框從 scale(0) 開始的問題;每次稽核也都給出確切曲線。一句話提示達到相同結果。
- 在五項修正任務上,技能略遜於一句話提示(4.62 對 5.0):兩次使用技能組執行都漏掉 700 ms linear 的卡片滑鼠移入效果,而且各自還漏掉另一個植入問題(對話框 scale(0),或 transition: all)。
- Token:使用技能 78k、一句話組 65k、對照組 65k(對照組的 1.2 倍)。技能在 6/6 次使用技能組執行中都被讀取,而且全程未被指名。
面向分數
| 面向 | 分數 | 原因 |
|---|---|---|
| 1_output_quality | 4.81 | 使用技能時平均 4.81/5(程式化檢查,見各任務表)。 |
| 2_lift_vs_no_skill | 3.66 | 相對未使用技能的 3.15 提升 +1.66 分(每個任務 n=2;約 1 分以下屬雜訊)。 |
| 3_trigger | 5.0 | 使用技能組 6/6 次執行都讀取技能檔案。 |
| 4_instructions_portability | 4 | 只有 SKILL.md 參考文字。 |
| 5_efficiency | 4 | token 1.20x(每次執行 78k 對 65k)、時間 1.03x(49 秒對 48 秒)。 |
| 6_safety_hygiene | 4 | 只有文字說明;請見 security.md。 |
這項測試的限制
- 對稽核文字做召回檢查,對變更後的 CSS 做正規表達式檢查;沒有在瀏覽器中渲染或量測任何東西。
- 一句話提示是技能本身檢查清單的貼近改寫,因此是很強勁的對照。
- 只有一組測試素材;每個組合 n=2。
- 每組每任務 n = 2:約 1 分以下的差異屬雜訊。
- 規則式評分只能衡量檢查項目看得到的部分,無法判斷品味,也無法判斷結果是否為最佳。
安全性
請見 security.md。掃描:CRITICAL 0 / HIGH 2 / MEDIUM 0。評定:可安全執行(無網路沙盒)。掃描乾淨並不代表技能安全。
總結
這項技能明顯勝過沒有提示的稽核,主要原因是它總會提供具體的曲線與時長。用一句話列出相同規則,效果一樣卻更省,因此增益來自勝過「沒有指引」,而不是勝過「好的提示」。
完整紀錄
執行日誌:improve-animations (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 欄位:任務、組-輪次、得分(0-5)、token、秒、通過的檢查、代理開啟的 skill 檔案。 t1-audit control-1: 得分 3.21, token 65584, 秒 50.5, 檢查 2/3, 未開啟 t1-audit control-2: 得分 3.21, token 65586, 秒 52.4, 檢查 2/3, 未開啟 t1-audit oneliner-1: 得分 4.64, token 66262, 秒 51.5, 檢查 3/3, 未開啟 t1-audit oneliner-2: 得分 5.0, token 66276, 秒 69.8, 檢查 3/3, 未開啟 t1-audit treatment-1: 得分 4.64, token 78329, 秒 42.8, 檢查 3/3, 開啟 improve-animations t1-audit treatment-2: 得分 5.0, token 76979, 秒 51.1, 檢查 3/3, 開啟 improve-animations t2-focus control-1: 得分 2.5, token 64157, 秒 30.6, 檢查 2/4, 未開啟 t2-focus control-2: 得分 2.5, token 63682, 秒 30.8, 檢查 2/4, 未開啟 t2-focus oneliner-1: 得分 5.0, token 64128, 秒 32.3, 檢查 4/4, 未開啟
18 次執行、3 個產出檔案
範例產出
SOTA · 装了 skill:final message(t1-audit,第 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]