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 });
实现原理是「叙事弧线 + 版面模具」双锁:六条公理约束内容(真问题在前、必须有失败、顿悟在前命名在后…),六个 layout class 约束版式节奏,任一不过即重做。
【六条公理 — 任一不过, 重做】
节奏由模具序列锁死:.feature → .note → .archive → .cross → .hero → .closing,开阔与紧凑交替、转折处放大、结尾回到中心对称。
**节奏铁律**: 开阔(feature)→ 紧(note 错位)→ 紧(archive 横长)→ 爆(cross 200px)→ 开阔(hero)→ 静(closing 中心对称)。
「必须四种字族同时使用」把排版从单一字族拉出层次:Serif 标题/引文、Sans 正文、Mono 编号/脚注、Hand 手写批注各司其职。
【字族对比 — 必须四种同时使用】
颜色系统写成 CSS 变量并限色 ≤4 主色,且明文禁止纯黑 #000。
**禁止 `#000` 纯黑**
交付契约是单文件 HTML + 内联 CSS + Google Fonts CDN、不写 JS、静态长图、容器 1080px 自适应高度;该 CDN 属产物期引用(浏览器打开 HTML 时拉字体),skill 执行期不外发。
输出**单文件 HTML**, inline CSS + Google Fonts CDN(Noto Serif SC / Noto Sans SC / Caveat / JetBrains Mono)。不写 JS, 静态长图。容器宽 1080px, 高度自适应。
skill 末尾明示改编来源与版本,站点可标注衍生关系。
本 skill 改编自 [lijigang/ljg-skills · ljg-card -v sketchnote](https://github.com/lijigang/ljg-skills/tree/master/skills/ljg-card)(v2.3.0)。
2核心能力
4风险提醒 风险提醒:绿色 · 放心使用
- 字体走 Google Fonts(产物期引用) — 产物引 fonts.googleapis.com / fonts.gstatic.com(SKILL.md:198 要求,example.html:7-9 实引);离线或网络受限环境下浏览器取不到字体,四字族的「灵魂」对比会退化为后备字族。skill 执行期不发请求。
- 内容侧约束重,输入要求高 — 六公理要求有真问题、必须有失败、顿悟先于命名、不点题;若用户素材是教科书定义式,模板会要求重构叙事,可能产出与预期不符的专题叙事。
- 用户内容逐字进 prompt 的注入面 — 宿主装配层直接插值用户内容;粘贴文本中的指令性内容可改变生成结果。产物为本地 HTML,危害限于内容与外观。
- 产物在预览面板同源执行(宿主行为) — 宿主预览用 sandbox="allow-scripts allow-same-origin";本模板产物静态无脚本,实际攻击面小。
5第二遍独立确认
- [ok] 六模具与示例的一致性 — example.html 中 <section class="feature">、<aside class="note">、<section class="archive">、<section class="cross">、<section class="hero">、<section class="closing"> 依次出现,节奏铁律(爆点在 cross、收尾 closing 中心对称)可对照验证。
- [ok] 「不写 JS」的声明 vs 实际 — example.html 全文无 <script> 标签、无 on* 事件属性;所有图形为内联 SVG(viewBox 0 0 280 220 等),与【输出契约】不写 JS、静态长图一致。
- [ok] 端点性质(产物期 vs 执行期) — SKILL.md:198 逐字命中「inline CSS + Google Fonts CDN(Noto Serif SC / Noto Sans SC / Caveat / JetBrains Mono)」;example.html:7-9 有 preconnect 与 css2 链接。字体由浏览器加载产物时取用,属产物期引用(批4 终版口径不判级),故维持 green;端点已列入 security.reason 与 verdict.risks。
- [ok] 示例文本与公理的相符性 — 示例标题「涌现的命名 · 复杂系统 1972」不在标题中直接揭示概念定义,closing 才给中文概念名与 byline(人名·年份·文献),符合「顿悟在前、命名在后」公理。
- [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结论
fa995708ae5df142…553ed98c28