1实现原理 · 为什么它能做到
这个 skill 不是可执行程序,而是「一个目录 = 一个模板」:SKILL.md 的 frontmatter 供选择器展示,正文(body)就是发给模型的提示词;加模板=加目录,不需要改 TypeScript。
routes rescan disk and the client refetches `/api/templates`.
实际下发提示词 = 平台共享设计指令(SHARED_DESIGN_DIRECTIVES)+ 本 skill 的 SKILL.md 正文 + 用户内容,由 assemblePrompt 拼成一条 prompt。
Wrap a per-template instruction body with the shared design directives and
成稿不走文件系统:共享指令明令禁止 Write/Edit/Bash 等文件工具,要求模型把整份 HTML 直接作为回复正文流式输出(stdout 由前端捕获落盘)。
**禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。不要把 HTML 写到任何 \`.html\` 文件里。前端直接捕获你的 stdout 文本, 文件落盘由前端负责。
交付物不是网页而是「翻开的一本书」:两页 side-by-side 横向排布,左页封面、右页内页,靠外观定位(lead magnet 风格)。
- 两页 side-by-side 横向, 像翻开的书
翻书感由两条 CSS 造出来:容器 flex 横排 + 36px 间隙,两页各 540px 宽、最小 740px 高,并各带 ±0.6deg 反向微旋转。
.page.left { transform: rotate(-0.6deg); }
页面在样例里被标成语义锚点:左页 article.page.left.cover(data-od-id="cover")、右页 article.page.right.spread(data-od-id="spread"),便于后续按块定位。
<article class="page right spread" data-od-id="spread">
内页排印走「首字下沉 + 编号步骤 + 引号开场的大引言」三件套:.columns p:first-letter 做 drop cap,.steps .row 用 28px 编号列 + 虚线分隔。
.steps .row { display: grid; grid-template-columns: 28px 1fr; gap: 10px; align-items: baseline; padding: 8px 0; border-bottom: 1px dashed var(--rule); }
封面用数据行 + TOC teaser 制造「教程产品感」:3 个统计数(16 / 38 / 1)+ 6 行目录条目(名称 + 点线 + 页码)。
<h2 class="inside">What's <em>inside.</em></h2>
服务端 /api/convert 只做三件事:按 templateId 从磁盘读 skill、拼 prompt、spawn 本地 agent CLI 并 SSE 流转发输出。
prompt = assemblePrompt({ body: skill.body, content, format });
2核心能力
4风险提醒 风险提醒:绿色 · 放心使用
- 页数固定=容纳量有限 — 只有封面 + 一页内页,内容超过约一页字量时只能压缩或加长单页(会破坏「翻开的书」比例),不适合长教程。
- 衬线小字可读性 — DM Serif Text 用于正文且字号 14px/1.55,中文缺字时会回落系统衬线,长段落读感下降;中文内容建议换 --serif-body。
- 微旋转在截图/打印时可能被裁 — ±0.6deg 旋转让四角超出包围盒,导出 PNG/PDF 时若按元素边界裁切会切掉纸角。
- 字体外链 — Google Fonts 不可达时字体族回落,视觉会与原样例有差(不影响结构)。
5第二遍独立确认
- [ok] 「两页跨页」且不随内容扩页 — 样例恰 2 个 article.page;SKILL.md【意图】明写「一封面一内页跨页排列」。
- [ok] 「像翻开的书」的视觉手法 — flex 横排 + .page.left/.page.right 反向 0.6deg 旋转 + 两页纸面色差 + 30px/60px 柔影。
- [ok] 「pull-quote + 步骤列表」 — .pullquote(含 56px 引号字形与署名行)与 .steps .row(4 条编号步骤)均在样例内。
- [ok] 字体依赖 Google Fonts — 样例 <link> 引入 Cormorant Garamond / DM Serif Text / IBM Plex Mono 三族;离线打开时回落到 Iowan Old Style/Georgia,布局不崩。
- [ok] data-od-id 的作用 — 样例有 5 处 data-od-id(cover/toc/spread/pullquote…),但 repo 内 TS/JS 对 data-od-id 零引用(grep 无命中)→ 仅成稿语义标记,不是运行时钩子。
- [ok] 无外部图片 — 全文无 <img> 与外链图;封面的几何点/线均为 CSS 绘制。
6结论
810081d8875f1560…553ed98c28