跳转到正文
报告库
用途分类 / 开发辅助

Review Animations Skill 安全审计

作者说它能做什么(原文)

Reviews animation and motion code against a high craft bar derived from Emil Kowalski's design engineering philosophy. Default to flagging; approval is earned.

第三方安全检查结论

发现安全风险

已检查文件
2
发现的风险
2
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。未发现风险
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。未发现风险
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。未发现风险
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。未发现风险
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。发现 2 项风险
中风险

绝对化规则可在缺少产品上下文时强制形成阻断结论

原文依据:4 处
发现了什么

Skill 要求默认挑错,并把键盘触发动画、超过 300ms 的 UI 动画及若干实现方式直接设为阻断条件。规则没有要求先确认产品需求、测量性能、动画频率或用户研究,因此审查结论可能来自预设而非项目证据。

为什么需要注意

若团队把该 verdict 当作合并门槛,合法的品牌动效、长时解释动画或具有状态提示作用的键盘交互可能被删除或阻止发布。

该 Skill 会在审查动画时采用“默认挑错”,并规定每个违反所列标准的情况都必须成为 finding;若涉及键盘/高频操作、`scale(0)`、UI 中的 `ease-in` 等,还会直接给出 Block。虽然时长规则允许“有理由”的例外,且频率本身是一项判断因素,但流程没有明确要求先验证实际使用频率、产品目标或用户测试。这可能使用户依据预设规则拒绝本来合理的设计。用户可要求作者把阻断条件改为需有项目上下文或实测证据,并允许明确记录的例外。

SKILL.md:13来自说明文档打开原文件
You are a senior design engineer with a brutal eye for craft. Your bias is toward **motion that feels right**, not motion that merely runs. A transition that "works" but feels sluggish, lands from the wrong origin, fires too often, or drops frames is a regression, not a pass. Default to flagging. Approval is earned, not assumed.
查看另外 3 个位置
SKILL.md:25来自说明文档打开原文件
2. **Frequency-appropriate.** Match motion to how often it's seen. Keyboard-initiated and 100+/day actions get **no** animation. Tens/day gets reduced motion. Occasional gets standard. Rare/first-time can have delight.3. **Responsive easing.** Entering/exiting elements use `ease-out` or a strong custom curve. `ease-in` on UI is a block — it delays the moment the user watches most. Built-in CSS easings are too weak; expect custom cubic-beziers.4. **Sub-300ms UI.** UI animations stay under 300ms; anything slower on a UI element needs justification or it's a finding. Per-element budgets live in [STANDARDS.md](STANDARDS.md).
SKILL.md:104来自说明文档打开原文件
- **Block** — any feel-breaking regression, animation on a keyboard/high-frequency action, `scale(0)`/`ease-in` on UI, or a non-GPU animation with an easy GPU fix.- **Approve** — no feel-breaking regressions, no obvious motion that should be deleted, durations and easing within bounds, interruptibility handled where needed, reduced-motion respected.
SKILL.md:21来自说明文档打开原文件
Every animation in the diff is measured against these. A violation is a finding.1. **Justified motion.** Every animation must answer "why does this animate?" — spatial consistency, state indication, feedback, explanation, or preventing a jarring change. "It looks cool" on a frequently-seen element is a block.2. **Frequency-appropriate.** Match motion to how often it's seen. Keyboard-initiated and 100+/day actions get **no** animation. Tens/day gets reduced motion. Occasional gets standard. Rare/first-time can have delight.
中风险

性能断言过于绝对且内部不一致,可能驱动无依据的重写

原文依据:4 处
发现了什么

参考文件断言只有 transform 和 opacity 可动画,并声称 Framer Motion 的 x/y/scale 一概不使用硬件加速;同时又推荐动画化 clip-path。它还给 modal/drawer 规定最长 500ms,却声明所有 UI 必须低于 300ms。这些相互冲突的绝对规则没有要求浏览器、设备或性能分析数据。

为什么需要注意

用户可能为并不存在的性能问题重写动画,增加回归和维护成本;同一实现也可能因选取不同规则而得到相反结论。

参考规则确有会影响审查决定的内部冲突:时长表允许模态框/抽屉达到 500ms,紧接着却要求 UI 动画低于 300ms;性能部分宣称“只”应动画化 transform/opacity,但同一文件又把 clip-path 作为动画工具并给出 WAAPI 示例。它还对 Framer Motion 简写作无条件性能断言,未限定版本、浏览器或测量条件。若照此重写,用户可能承担无必要的实现变更。可要求作者说明例外优先级,并让性能 finding 依赖目标环境中的 profiling。

STANDARDS.md:41来自说明文档打开原文件
| Element | Duration || --- | --- || Button press feedback | 100–160ms || Tooltips, small popovers | 125–200ms || Dropdowns, selects | 150–250ms || Modals, drawers | 200–500ms || Marketing / explanatory | Can be longer |**Rule: UI animations stay under 300ms.** A 180ms dropdown feels more responsive than a 400ms one. Faster spinners make load feel faster (same actual time). Instant tooltips after the first (skip delay + animation) make a toolbar feel faster.
查看另外 3 个位置
STANDARDS.md:112来自说明文档打开原文件
- **Only animate `transform` and `opacity`** — they skip layout/paint and run on the GPU. `padding`/`margin`/`height`/`width`/`top`/`left` trigger all three rendering steps.- **Don't drive child transforms via a CSS variable on the parent** — it recalcs styles for all children. Set `transform` directly on the element.  ```js  element.style.setProperty('--swipe-amount', `${d}px`); // bad: recalc on all children  element.style.transform = `translateY(${d}px)`;        // good: only this element  ```- **Framer Motion shorthands are NOT hardware-accelerated.** `x`/`y`/`scale` run on the main thread via rAF and drop frames under load. Use the full transform string:  ```jsx  <motion.div animate={{ x: 100 }} />                          // drops frames under load  <motion.div animate={{ transform: "translateX(100px)" }} />  // hardware accelerated  ```- **CSS animations beat JS under load** — they run off the main thread; rAF-based animations stutter while the browser loads/scripts/paints. Use CSS for predetermined motion, JS for dynamic/interruptible.- **WAAPI** gives JS control with CSS performance (hardware-accelerated, interruptible, no library):
STANDARDS.md:124来自说明文档打开原文件
- **CSS animations beat JS under load** — they run off the main thread; rAF-based animations stutter while the browser loads/scripts/paints. Use CSS for predetermined motion, JS for dynamic/interruptible.- **WAAPI** gives JS control with CSS performance (hardware-accelerated, interruptible, no library):  ```js  element.animate([{ clipPath: 'inset(0 0 100% 0)' }, { clipPath: 'inset(0 0 0 0)' }],    { duration: 1000, fill: 'forwards', easing: 'cubic-bezier(0.77, 0, 0.175, 1)' });  ```
STANDARDS.md:135来自说明文档打开原文件
- **3D**: `rotateX/Y` + `transform-style: preserve-3d` for depth/orbit/flip without JS.- **`clip-path: inset(t r b l)`** is a powerful animation tool: each value eats in from that side. Uses: reveal-on-scroll (`inset(0 0 100% 0)` → `inset(0 0 0 0)`), hold-to-delete overlay, seamless tab color transitions (duplicate + clip the active copy), comparison sliders.
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

6 个说明模块

该 Skill 只审查动画与动效代码,并要求对差异中的每个动画应用十项规则;它明确拒绝一般代码审查。

查看原文
SKILL.md:9来自说明文档打开原文件
A specialized review skill. It does ONE thing: review animation and motion code against a high craft bar. It does not write features, fix unrelated bugs, or review non-motion code. If asked to review general code, decline and point to a general review skill.
SKILL.md:21来自说明文档打开原文件
Every animation in the diff is measured against these. A violation is a finding.

其输出必须包含逐项修改建议表和明确的 Block/Approve 决定,并引用具体文件与行号。

查看原文
SKILL.md:82来自说明文档打开原文件
A single markdown table. One row per issue. Never a "Before:/After:" list.
SKILL.md:102来自说明文档打开原文件
Close with an explicit decision:- **Block** — any feel-breaking regression, animation on a keyboard/high-frequency action, `scale(0)`/`ease-in` on UI, or a non-GPU animation with an easy GPU fix.- **Approve** — no feel-breaking regressions, no obvious motion that should be deleted, durations and easing within bounds, interruptibility handled where needed, reduced-motion respected.
SKILL.md:107来自说明文档打开原文件
Be specific and cite `file:line`. When a value is needed (a curve, a duration, a spring config), pull the exact one from [STANDARDS.md](STANDARDS.md) rather than approximating.

提供的文件中没有安装步骤、脚本、命令、凭据处理、网络请求或文件写入指令;可见行为主要是指导模型形成代码审查意见。

查看原文
SKILL.md:64来自说明文档打开原文件
When proposing fixes, prefer earlier moves over later ones:1. **Delete the animation** (high-frequency / no purpose / keyboard-triggered).2. **Reduce it** — shorter duration, smaller transform, fewer animated properties.3. **Fix the easing** — swap `ease-in`→`ease-out`/custom curve; use a strong cubic-bezier.4. **Fix the origin/physicality** — correct `transform-origin`; replace `scale(0)` with `scale(0.95)`+opacity.5. **Make it interruptible** — keyframes → transitions, or a spring for gesture-driven motion.6. **Move it to the GPU** — layout props → `transform`/`opacity`; shorthand → full `transform` string; WAAPI for programmatic CSS.7. **Asymmetric timing** — slow the deliberate phase, snap the response.8. **Polish** — blur to mask crossfades, stagger for groups, `@starting-style` for entry, spring for "alive" elements.9. **Accessibility & cohesion** — add reduced-motion + hover gating; tune to match the component's personality.
从这里开始 · 工作说明SKILL.md
review-animations
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。

文件引用关系图

1 处引用
哪些文件发起引用引用了什么
连线表示真实的文件引用,不是运行顺序。点击节点可高亮相关连线,并查看具体文件和原文位置。虚线表示还有文件需要定位。
文件与检查记录2 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文
  • STANDARDS.md已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明
  • STANDARDS.md配套文件

代码和说明中提到的操作

连接外部网站
STANDARDS.md:37来自说明文档打开原文件
Find curves at [easing.dev](https://easing.dev/) or [easings.co](https://easings.co/) — don't hand-roll from scratch.
读取了多少行
301
文件校验值(用于核对版本)
5168c1172cd1dae8283e4e47682b04bec89015198b2f9d108a692022d0fb2229