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 文本, 文件落盘由前端负责。
这是全批「约束最硬」的模板:SKILL.md 用「硬性视觉签名 — 不许改」一节把画布、墨色、唯一色彩、字体、行高、禁止项全部钉死。
- **画布**: 暖羊皮纸 `#f5f4ed` (永远不用纯白 `#fff`)。次级背景 `#efeee5`。
单色 accent 的纪律写成了一句可判定的话:所有 accent 只能用一个墨蓝色,严禁多色。
- **唯一色彩**: 墨蓝 `#1B365D` ——所有 accent (链接、tag 描边、重点数字、引用左 rule) 只能用这一个色, 严禁多色。
反 dashboard 的取向被显式写进设计准则,并给出替代手法(hairline 描边代替阴影)。
- "Composed pages, not dashboards." 不要堆 KPI 卡, 不要堆 emoji 图标, 不要 hero gradient。
按文档类型给 8 种可选版式骨架(One-Pager / Long Doc / Letter / Portfolio / Resume / Slides / Equity Report / Changelog),由用户内容判断选哪种,而不是固定一套页面。
- **One-Pager** — 顶 logotype (Charter italic) + 标题 + lede + 3 列要点 + 底脚 metadata。
成稿技术约束在本模板内被再次声明:单文件 HTML、用 Tailwind CDN、不引外链图片、占位用色块 + 1px 墨描边。
- 单文件 HTML, 用 Tailwind CDN; 全文中英混排时加盘古之白; 不要外链图片, 占位用 paper-tint 色块 + 1px ink 描边。
成稿样例本身是一份「像被排版过的纸」的 one-pager:folio 顶栏 + kicker + 大标题 + 3 列 pillar + 页脚,全部靠 Tailwind 类与 4 个色值。
<span>KAMI · Open Design</span>
服务端 /api/convert 只做三件事:按 templateId 从磁盘读 skill、拼 prompt、spawn 本地 agent CLI 并 SSE 流转发输出。
prompt = assemblePrompt({ body: skill.body, content, format });
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| network | Tailwind CDN(SKILL.md 明令成稿引入;静态样式,不传数据、不需凭证) |
| network | Google Fonts(样例成稿的字体来源;离线回落本地衬线) |
| package | WeasyPrint(SKILL.md 提及的打印/PDF 渲染器名——决定「用 solid hex 不用 rgba」的设计取舍) |
4风险提醒 风险提醒:绿色 · 放心使用
- 运行时外链(本批唯一) — SKILL.md 要求用 Tailwind CDN,成稿必然请求 cdn.tailwindcss.com;离线/内网环境下 Tailwind 类失效,只剩样例里的内联 CSS 兜底。虽不含数据外发,仍建议在详情页标注。
- 样例自身轻微越界 — 样例用 #3a382f 作正文色(不在 SKILL.md 墨色清单内),且未用首选 Charter 字体;复制样例当规范会与文字规范有偏差。
- 打印场景依赖本地字体 — TsangerJinKai02 / Charter / YuMincho 多为本地或商业字体,机器没有时回落 Noto Serif,中文长文的版面密度会变。
- 约束多、自由度低 — 禁止项密集,模型若被用户要求「加个彩色图表/emoji 图标」,规则与用户诉求会冲突,需人工裁定(SKILL.md 的取向是服从规则)。
- 注入面 — 用户内容逐字进 prompt;成稿在宿主预览 iframe(allow-scripts allow-same-origin)中渲染。
5第二遍独立确认
- [ok] 「暖羊皮纸 #f5f4ed(永远不用纯白 #fff)」 — 样例 body background: #f5f4ed;全文无 #fff 背景(tag 用 #efeee5)。
- [ok] 「唯一色彩墨蓝 #1B365D,严禁多色」 — 样例彩色只有 #1B365D(.ink-blue 与 tag 文字),其余为纸色/墨色/中性灰。
- [discrepancy] 「一种语言一种衬线(Charter / Source Serif Pro / Noto Serif SC)」 — SKILL.md 首选英文衬线是 Charter(fallback: Source Serif Pro),样例直接用 fallback 族名 'Source Serif Pro' 作主字体——符合「允许 fallback」的字面,但成稿与首选有差;且未加载 Charter。
- [discrepancy] 「绝不:drop-shadow / 圆角 ≥ 8px / 渐变 / rgba」 — 样例未用 drop-shadow/渐变/圆角,但正文段落用 style="color:#3a382f" 引入了 SKILL.md 墨色清单外的第四种文字色(清单只给 #1f1d18 主文与 #6b665b 次文);属轻微越界,不影响单色 accent 纪律。
- [ok] 成稿运行时外链(Tailwind CDN) — SKILL.md 明写「用 Tailwind CDN」,example.html 确有 <script src="https://cdn.tailwindcss.com"></script>;已在 external_deps 与 security.reason 逐条自证。
- [ok] 带 example.md 输入样例 — example.md 为 Open Design Studio Issue №26 的 markdown,与 example.html 内容一一对应(Berlin 坐标、Apache 2.0、四支柱)。
- [ok] 出处标注真实(非虚构来源) — frontmatter example_source_url = https://github.com/tw93/kami;README 第 490 行「模板来源」表同样映射 doc-kami-parchment ← tw93/kami,两处一致。
6结论
8d42d07c1757e428…553ed98c28