1实现原理 · 为什么它能做到
这个 skill 不是可执行程序,而是注入给本机 coding-agent CLI 的一段提示词:宿主取 SKILL.md 正文,前面压一段全站共享设计指令、后面接用户内容,拼成一条 prompt 交给已登录的 agent,再把 agent 的 stdout 当 HTML 取回。
【输入格式】: ${opts.format} 【用户内容】: ${opts.content}
共享指令层(不属于任何单个 skill,但每个模板都被它压着)把输出钉成『自包含单文件 HTML』,并明令禁止 agent 使用 Write/Edit/Bash 等文件系统工具,HTML 直接以对话正文流式输出。
- **禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。不要把 HTML 写到任何 \`.html\` 文件里。前端直接捕获你的 stdout 文本, 文件落盘由前端负责。
SKILL.md 之外还有一条『内容驱动数量』覆盖规则:模板里写的任何页数/帧数/卡片数一律视为参考下限,实际数量由用户内容决定——防止 agent 用模板数字压缩用户内容。
- 模板只定义"可用版面 / 风格 / 配色 / 字体 / 组件库", **不定义** slide / 帧 / 卡片 / section 的数量。
加载约定是『一个 skill = 一个文件夹』:SKILL.md(YAML frontmatter 供选择器 + 正文即模板 prompt),可选 example.md(样本输入)与 example.html(可直接打开的预览样张);新增模板只需加目录,不改 TS 代码。
* SKILL.md — frontmatter (id, scenario, tags, …) + prompt body * example.md — (optional) sample input content * example.html — (optional) pre-rendered preview, shown inline in the picker
选择链路(CLI 侧)是三级漏斗:关键词强信号(每命中 1 词 2 分,阈值 3)→ 退化为 tags/scenario 打分 → 仍无把握就把用户内容前 800 字交给本地 agent 做一句话分类。
const CONFIDENCE_THRESHOLD = 3;
预览链路独立于生成:/api/templates/<id>/preview 把 example.html 原样以 text/html 返回给 iframe;前端 iframe 用 sandbox="allow-scripts allow-same-origin"。
sandbox="allow-scripts allow-same-origin"
故障效果被拆成可叠的层:主标题居中 6-9vw 白层,后面套 cyan #00f0ff 与 magenta #ff2bd6 两层偏移伪影,制造色散像散。
- cyan `#00f0ff` translate(`-3px`, `1px`)。
『数据腐败』靠 clip-path 横向切片 + 每段独立 @keyframes(80-160ms、错峰、translateX -10px→10px)实现,并每隔 1.5s 触发一次整标题的 horizontal smear 重故障。
- 整层加 clip-path 切片 5-8 段, 每段 `@keyframes` 随机 translateX -10px → 10px, 持续 80-160ms, 错峰播放, 营造 "data corruption" 像散。
环境层由三件套构成:56px 网格(透明 5%)+ scanlines 横线(2px 间隔)+ 全屏 noise grain(data-URI feTurbulence,opacity 6%、mix-blend-mode overlay)。
【画布】1920×1080, 背景 `#070708` 近黑或 CRT 暗灰 `#0d0e10`; 加 56px 网格 (透明 5%) + scanlines 横线 (透明 8%, 2px 间隔)。
高阶选项给了 SVG 三通道偏移滤镜:<filter id="rgbShift"> 用 feColorMatrix + feOffset + feMerge,在故障瞬间整层应用。
- 定义 `<filter id="rgbShift">` 用 `feColorMatrix` + `feOffset` + `feMerge` 把 R/G/B 三通道偏移; 整层 `filter: url(#rgbShift)` 在故障瞬间应用。
文字内容与用语被约束:标题/副标必须用用户内容(严禁 lorem ipsum),副标可被假乱码字符替换,顶部 caption 与底部 timecode 用 mono 小字与低透明度营造仪表感。
example_name: "故障标题 · SIGNAL_LOST"
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| network | Google Fonts(Space Grotesk / JetBrains Mono,示例页实际引用) |
| network | Tailwind Play CDN(共享指令强制;示例页亦引用) |
| network | hyperframes 目录页(frontmatter 出处标注,非运行时请求) |
4风险提醒 风险提醒:绿色 · 放心使用
- 动效密度高:切片 keyframes + 1.5s 重故障 + noise grain 叠加,在低端设备或长时录制中可能掉帧。 — SKILL.md【主标题】+【附加层】
- 视觉噪声强:做正标题(品牌发布、正式产品名)时可读性会被伪影吃掉一部分,模板只保证风格不保证可读性。 — SKILL.md:整层加 clip-path 切片 5-8 段…营造 "data corruption" 像散
- 宿主侧:预览 iframe sandbox="allow-scripts allow-same-origin";本模板动效靠 CSS,但仍受该预览权限影响。 — sandbox="allow-scripts allow-same-origin"(next/src/components/preview-pane.tsx)
- 注入面:用户标题/副标被逐字拼进 prompt 并直接渲染到画面。 — assemblePrompt 末尾直接拼接【用户内容】
5第二遍独立确认
- [ok] 伪影/动效/环境层规格 — 重读 SKILL.md【主标题】【附加层】【SVG 滤镜】三段,引用与 JSON 逐字一致。
- [ok] recommended 定位 — SKILL.md frontmatter recommended: 6;README『Featured / 推荐』组文案按 recommended 排序,且有截图 docs/screenshots/skills/frame-glitch-title.png 双重印证。
- [ok] 外部端点存在性 — example.html 实测命中 fonts.googleapis.com(Space Grotesk / JetBrains Mono)与 cdn.tailwindcss.com;无其它第三方域。
- [ok] 『无外部图片』结论 — 噪点用 data:image/svg+xml feTurbulence 内联,未引用外链图片;URL 扫描未命中图片资源。
- [ok] 安全面 — 目录内 3 个文件无自写脚本(仅 Tailwind CDN 标签)、无凭证、无写盘、无表单外发。
- [ok] meta 元数据 — GitHub API 实查 stars=8827、pushed_at=2026-09-15T03:36:24Z、license Apache-2.0。
6结论
5102ef969a7b9825…553ed98c28