1实现原理 · 为什么它能做到
模板本体没有可执行代码:loader 从 src/lib/templates/skills/<id>/SKILL.md 读入 frontmatter 与正文,正文(body)与 example 内容一起作为 LoadedSkill 返回。
const raw = safeRead(path.join(dir, "SKILL.md"));
下发前宿主固定拼装 prompt:模板正文夹在共享设计指令 SHARED_DESIGN_DIRECTIVES 与【输入格式】/【用户内容】之间。
Wrap a per-template instruction body with the shared design directives and
共享指令把硬约束写成对 agent 的显式禁令,并强制内容驱动数量(模板里的数字只作参考下限)。
**禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。
真正执行的是用户本机已安装并登录的编码 agent CLI:宿主 spawn 子进程,把 prompt 交给它,HTML 从 stdout 流式捕获。
import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process";
/api/convert 是模板的执行路径:它把 skill.body 与用户内容组装成 prompt 后交给 invokeAgent。
prompt = assemblePrompt({ body: skill.body, content, format });
模板以 typography 优先的比例约束开头(70% 文字 / 20% 图 / 10% chrome),并要求 ≥600 字,直接排除短图文卡片类输入。
【意图】≥ 600 字的真正的长文章, 排版以 typography 为主, 70% 文字 20% 图 10% chrome。
骨架固定为五段:Masthead → Hero → 单栏 65ch 正文 → Author bio 卡片 → Related posts 三卡。
- Masthead (publication name + date)
三处排版细节被单独规定:pull quote(大号 serif 斜体 + 左侧色条)、figures 自带 italic caption、代码块圆角深底带语言标签。
- Pull quote 用大号 serif 斜体 + 左侧色条
示例产物用纯内联 CSS + 系统字族实现(无 Tailwind、无字体 CDN、全文零 URL),是该模板零外链路线的实现证据。
font-family: -apple-system, system-ui, sans-serif
示例正文实现了 hero/lede/byline/hero-figure/pull quote/figures 等骨架元素,但未实现 SKILL.md 要求的 Author bio 卡片与 Related posts 三卡。
<figure class="numbers">
2核心能力
4风险提醒 风险提醒:绿色 · 放心使用
- 示例未覆盖模板全部骨架 — Author bio 卡片与 Related posts 三卡在示例中缺失;以示例为唯一参照的 agent 可能漏做这两段,用户需自行确认产出完整性。
- 字数下限靠模型自律 — ≥600 字是对输入的要求而非校验:宿主不含字数检查,短输入也可能被硬撑成长文或压缩成卡片。
- 用户内容逐字进 prompt 的注入面 — 宿主装配层直接插值用户内容(无转义/围栏);粘贴文本中的指令性内容可改变生成结果,危害限于产物内容与外观。
- 产物预览以同源脚本沙箱渲染(宿主行为) — preview-pane.tsx:297 的 sandbox="allow-scripts allow-same-origin";本模板产物静态无脚本,实际风险低。
5第二遍独立确认
- [discrepancy] 示例覆盖度 vs SKILL.md 骨架 — SKILL.md 要求五段骨架,example.html 实现了 Masthead / Hero / 正文 / 三处细节,但缺 Author bio 卡片与 Related posts(3 张卡)——示例结尾为 .endnote 招募卡。详情页不宜把该示例当作模板完整形态。
- [ok] 「零外链」判定 — blog-post/ 目录内 http(s) 命中数为 0,<script> 命中数为 0;字体为 -apple-system/system-ui/monospace 等系统字族,执行期与产物期均无外发。
- [ok] 无 example.md 的后果 — 目录只有 SKILL.md + example.html;loader 的 metaFromDir 以 existsSync 判定 hasMd=false,选择器仍会因 hasHtml=true 生成 example 元数据,行为正常。
- [ok] license / stars / commit 元数据 — GitHub API(api.github.com/repos/nexu-io/html-anything):spdx_id=Apache-2.0、stargazers_count=8827、pushed_at=2026-09-15T03:36:24Z;工作副本 git HEAD = 553ed98c283f9c0f489902d035416a972d6a9699(与任务表 pin 553ed98c283f 同源)。
- [ok] skill.path 与目录资产面 — pin 目录内该路径存在且含 SKILL.md;目录内文件清单已用 glob 全量核对(含隐藏文件),无 scripts/、无 references/、无二进制资产(competitive-teardown 的 assets/ 为纯 HTML,另行记录)。
6结论
95b69396ce0f37a7…553ed98c28