mcpskills.net
技能MCP智能体提示词
mcpskills.net — A curated directory of AI agent Skills and MCP servers
TermsPrivacy
← 返回技能
Design

Kami · 紙

为专业文档和产品落地页排版:简历、一页纸、白皮书、信件、作品集、幻灯片、落地页。温润的羊皮纸底色、墨蓝点缀、衬线主导的层级。

作者:tw93仓库 →来源 →

kami · 紙

紙 · かみ —— 承载你交付物的那张纸。

好内容值得配好纸。一套设计语言贯穿八种文档类型:温润的羊皮纸画布、墨蓝点缀、衬线主导的层级、紧凑的编辑节奏。

它是 Kaku · Waza · Kami 的一部分——Kaku 写代码,Waza 磨习惯,Kami 交付文档。

更新检查(非阻塞)。 任务开始时,运行 bash scripts/check-update.sh。它每天至多做一次只读的版本检查,并在有更新的 kami 可用时打印一行;将该行转达给用户,然后继续。它不发送任何数据,并在离线、沙盒或没有 curl 时静默失败。绝不要让它阻塞工作。

步骤 0 · 加载品牌配置(如果存在)

检查 ~/.config/kami/brand.md(首选)或 ~/.kami/brand.md(旧版回退)。如果找到,阅读 references/brand-profile.md 以获取完整的四层应用规范(占位符替换、会话默认值、视觉定制、习惯备注)及其六条护栏。如果不存在配置,则不中断地继续。

关键规则:显式提示词 > 编辑判断 > 习惯备注 > frontmatter 默认值 > 内置默认值。配置静默填补空缺;它绝不覆盖当前的对话。

步骤 0.5 · 用户项目风格扫描(可选启用)

仅当用户明确引用某个同级项目作为视觉参考时才运行此步骤:"像我的 <project> 网站那样"、"匹配 <repo> 的风格"、"用 <directory> 的外观"。当不存在此类引用时,静默跳过。

触发时,在生成之前:

  1. 定位被引用项目的样式文件:
    find <referenced-path> -maxdepth 4 \( -name "*.css" -o -name "tailwind.config.*" -o -name "theme.*" -o -name "tokens.*" \) | head -20
    
  2. 提取:主色值(hex / hsl)、字体栈、间距刻度、圆角刻度。优先采用 CSS 变量或设计 token 中声明的值,而非内联字面量。
  3. 将其合并到会话内的品牌配置中,作为 C 层(视觉定制),而非 B 层(会话默认值)。不要覆盖显式的 --brand 标志或用户在本轮输入的值。
  4. 在继续之前用一行回报:"scanned <project>, extracted N colors / M fonts; using as visual reference."

如果被引用的路径不存在、找不到类 CSS 文件,或提取结果会与用户在当前消息中的显式值冲突,则跳过并回退到品牌配置默认值。


步骤 1 · 决定语言

匹配用户的语言。 中文 -> *.html / slides-weasy.html。英文 -> *-en.html / slides-weasy-en.html。日文 -> CJK 路径(.html / slides-weasy.html)作为尽力而为,优先 JP 明朝体,发货前做视觉 QA。韩文 -> 专用的 *-ko.html / slides-weasy-ko.html 系列作为尽力而为,发货前做视觉 QA。参考文档是共享的英文规范。

当语言含糊时(例如像 "resume" 这样的单词命令),用一行问句确认,而不是猜测。

| 用户语言 | HTML 模板 | 幻灯片(PDF 默认) | 幻灯片(PPTX 回退) | |---|---|---|---| | 中文(主) | *.html | slides-weasy.html | slides.py | | 英文 | *-en.html | slides-weasy-en.html | slides-en.py | | 日文(尽力而为) | *.html | slides-weasy.html | slides.py | | 韩文(尽力而为) | *-ko.html | slides-weasy-ko.html | 无(仅在需要 PPTX 时使用 slides-en.py) | | 其他语言(尽力而为) | 按文字覆盖选择 CJK 或 EN 路径,然后手动核验 | 选择 slides-weasy.html 或 slides-weasy-en.html,然后手动核验 | 仅在需要 PPTX 时使用 slides.py / slides-en.py |

默认走 WeasyPrint HTML 路径;仅当用户明确需要可编辑的演示文稿时才回退到 PPTX(slides*.py)。

在设计、写作、生产和图表方面,始终使用 CHEATSHEET.md 和 references/*.md 作为指导。

带有 class="language-*" 的代码块,仅当构建环境中安装了可选的 Pygments 时才会高亮。没有它,PDF 仍能渲染,代码块保持单色。

步骤 1.5 · 意图提取(静默清单)

在选择模板之前,核验这四个维度是否清晰。除非有 2 个及以上维度缺失且无法从上下文推断,否则不要提问。

| 维度 | 提取什么 | 示例 | |---|---|---| | 目的 | 这份文档为何存在 | 说服投资人 vs. 统一内部团队 vs. 拿下一位候选人 | | 受众 | 谁在读,他们已经知道什么 | 技术型 CTO(跳过基础)vs. 非技术董事会(解释术语) | | 约束 | 在长度、格式、语气或交付上的硬限制 | "最多一页"、"正式英文"、"可印刷 A4" | | 成功 | 什么结果算成功 | 他们约了一次会面 / 他们批准了预算 / 他们理解了架构 |

规则:

  • 如果对话已经回答了某个维度,静默跳过。
  • 如果某个维度可以从文档类型推断(例如简历的目的永远是"拿到面试"),则跳过。
  • 如果有 2 个及以上维度确实不清晰,用一个紧凑的问题来问(最多 2 个子问题)。
  • 绝不要把四个维度全都当作清单来问。这是一次后台核验,不是一张表单。

执行契约

在创建或修改输出之前,锁定契约:语言、模板、输出格式、页数或长度目标、视觉验收检查、以及验证命令。当用户的请求清晰时从中推断;仅当缺失字段会实质性改变交付物时才提问。

使用最接近的现有模板和验证路径。除非当前请求不添加就无法满足,否则不要新增模板、共享 CSS 层、依赖、脚本标志或可选模式。

如果某项改动触及 SKILL.md、模板、脚本、参考资料或打包输入,需判断在交接前是否必须刷新 dist/kami.zip。在打包包含改动后的文件之前,已发货的行为不算就绪。


步骤 2 · 选择文档类型

| 用户说 | 文档 | 中文模板 | 英文模板 | 韩文模板 | |---|---|---|---|---| | "one-pager / 方案 / 执行摘要 / exec summary" | One-Pager | one-pager.html | one-pager-en.html | one-pager-ko.html | | "white paper / 白皮书 / 长文 / 年度总结 / technical report" | Long Doc | long-doc.html | long-doc-en.html | long-doc-ko.html | | "formal letter / 信件 / 辞职信 / 推荐信 / memo" | Letter | letter.html | letter-en.html | letter-ko.html | | "portfolio / 作品集 / case studies" | Portfolio | portfolio.html | portfolio-en.html | portfolio-ko.html | | "resume / CV / 简历 / 履歴書" | Resume | resume.html | resume-en.html | resume-ko.html | | "slides / PPT / deck / 演示" | Slides | slides-weasy.html | slides-weasy-en.html | slides-weasy-ko.html | | "个股研报 / equity report / 估值分析 / investment memo / 股票分析" | Equity Report | equity-report.html | equity-report-en.html | equity-report-ko.html | | "更新日志 / changelog / release notes / 版本记录" | Changelog | changelog.html | changelog-en.html | changelog-ko.html | | "landing page / 落地页 / 官网 / product page / 产品页" | Landing Page | landing-page.html | landing-page-en.html | landing-page-ko.html |

Changelog vs. release notes:上面的 changelog 模板用于带样式的文档输出。GitHub release notes 是另一种交付物;使用 /write 的 Release Note Template Mode。

Landing Page:屏幕优先的交互式模板。无 PDF 输出。包含带自动轮播的画廊轮播、首屏入场动画、响应式断点(880px / 480px)以及 prefers-reduced-motion 支持。作为静态 HTML 部署到 Vercel / Netlify / 任意主机。代理填入 值和 HTML 注释块,然后保存为可直接服务的 .html 文件。

Landing Page 配套文件:对于生产环境的多语言部署,把五个 landing-page-*.example 文件复制到主 HTML 旁,去掉 .example 后缀,并填入占位符。它们涵盖 Vercel rewrites 和 headers、sitemap hreflang、robots AI 允许列表,以及给 AI 助手的 llms.txt + llms-full.txt。主 HTML 已在 <head> 中带有匹配的 hreflang 和 og:locale;landing-page-en.html 末尾的 Accept-Language 重定向被注释掉,可选启用。{{SITE_ORIGIN}} 是你 {{CANONICAL_URL}} 的协议 + 主机(例如 https://example.com)。参见 references/design.md 第 11 节《Companion assets》。

生产产品站模式:如果用户需要文档、帮助、发布、changelog、路线图、法律页面,或两种以上语言,就把它当作一个站点系统来处理。在填充模板之前,锁定产品品类、真实截图位、语言列表、配套文件、长内容页面,以及生成器/检查需求。把项目专属的发布制品、支付提供商、appcast 规则和私有本地路径排除在 Kami 之外。参见 references/design.md 第 11 节《Product site system》。

文档页面:当落地页成长为文档或帮助站点时,使用 references/design.md 第 11 节《Documentation site》中的文档外壳:带 2px 品牌色边条(而非深色下划线)的粘性侧边栏导航、在平板断点以下隐藏的本页 TOC、受约束的正文行宽,以及安静无边框的上一页/下一页翻页器(文字链接,而非带边框的卡片)。在构建时高亮代码、运行时零 JS,呈现在深色代码表面上;纯代码仍是事实来源。

幻灯片:默认走 slides-weasy.html / slides-weasy-en.html / slides-weasy-ko.html(WeasyPrint HTML → PDF)。仅当用户明确需要可编辑的 PPTX 文件时才使用 slides.py / slides-en.py。仅当用户明确要求 Marp / markdown 幻灯片 / 存在于 .md 文件中的演示文稿时,才使用 assets/templates/marp/slides-marp(.md|.css)。

演示文稿配方:起草幻灯片前先阅读 design.md 第 8 节。在生成或裁剪视觉素材之前,先勾勒标题序列、论据形态和图片位。让受众文案与视觉简报分开。Marp 专属约束见 design.md §8《Marp variant》。

决策树(在提问前使用)

在求助于一行问句之前,先走一遍这棵树。仅当两个单元格确实都吻合时才提问。

| 信号 | 文档 | |---|---| | 长度目标未知 | 在分类前先问"多少页" | | ≤ 1 页 + 投资人 / 招聘者 / 执行摘要受众 | one-pager | | ≤ 1 页 + 正式信函(销售、招聘、辞职、备忘录) | letter | | 1.5-2 页 + 职业叙事 + 项目要点 | resume | | 3-6 页 + 项目展示 + 视觉为重 | portfolio | | 6-15 页 + 持续论证 + 低视觉密度 | long-doc | | 演示流程 + 演讲者支持 + 每页一个论断 | slides | | 财务 / 指标看板 + 论点 + 价格或风险视图 | equity-report | | 逐版本日志 + 发布事实 | changelog | | 产品展示 + 定价 + 截图 + 供浏览的 FAQ | landing-page |

值得用一行问句的含糊示例:

  • "1.5 页、视觉素材很重的职业故事" -> 问"resume 还是 portfolio?"
  • "2 页、带指标方块的执行摘要" -> 问"one-pager 还是 equity-report?"
  • "5 页、带若干图表的论证" -> 问"long-doc 还是 portfolio?"

先从这棵树里挑。仅当树确实给不出答案时才提问。

图表(基本单元,而非单独的模板类型)

当用户要求在 long-doc / portfolio / 幻灯片内嵌入图表(而非独立文档)时,路由到 assets/diagrams/,而不是某个模板:

| 用户说 | 图表 | 模板 | |---|---|---| | "架构图 / architecture / 系统图 / components diagram" | Architecture | assets/diagrams/architecture.html | | "流程图 / flowchart / 决策流 / branching logic" | Flowchart | assets/diagrams/flowchart.html | | "象限图 / quadrant / 优先级矩阵 / 2×2 matrix" | Quadrant | assets/diagrams/quadrant.html | | "柱状图 / bar chart / 分类对比 / grouped bars" | Bar Chart | assets/diagrams/bar-chart.html | | "折线图 / line chart / 趋势 / 股价 / time series" | Line Chart | assets/diagrams/line-chart.html | | "环形图 / donut / pie / 占比 / 分布结构" | Donut Chart | assets/diagrams/donut-chart.html | | "状态机 / state machine / 状态图 / lifecycle" | State Machine | assets/diagrams/state-machine.html | | "时间线 / timeline / 里程碑 / milestones / roadmap" | Timeline | assets/diagrams/timeline.html | | "泳道图 / swimlane / 跨角色流程 / cross-team flow" | Swimlane | assets/diagrams/swimlane.html | | "树状图 / tree / hierarchy / 层级 / 组织架构" | Tree | assets/diagrams/tree.html | | "分层图 / layer stack / 分层架构 / OSI / stack" | Layer Stack | assets/diagrams/layer-stack.html | | "维恩图 / venn / 交集 / overlap / 集合关系" | Venn | assets/diagrams/venn.html | | "K 线 / candlestick / OHLC / 股价走势 / price history" | Candlestick | assets/diagrams/candlestick.html | | "瀑布图 / waterfall / 收入桥 / revenue bridge / decomposition" | Waterfall | assets/diagrams/waterfall.html |

绘制前先阅读 references/diagrams.md——其中有选型指南、kami token 映射,以及 AI 粗制滥造的反模式表。从模板中提取 <svg> 块,放入 long-doc / portfolio 内的 <figure> 中。

绘制前,始终自问:一段写得好的文字会不会比这张图教给读者的更少? 如果不会,就别画。

从数据自动选择图表。 当内容包含数值数据时,选定图表类型并直接嵌入,无需等用户指定。决策树(首个匹配胜出):

| 数据形态 | 图表 | |---|---| | 有 open/high/low/close 字段,或每日价格 | Candlestick | | 有汇总为某个总计的 + 和 - 贡献(桥、瀑布、损益) | Waterfall | | 单一序列,数值合计约 100%,项目数 ≤ 6 | Donut | | 单一序列,数值合计约 100%,项目数 ≥ 7 | Horizontal bar | | 两个或更多序列跨时间(月、季、年) | Line | | 单一序列跨时间,以较大的计数变化为主(非比率) | Bar | | 多个类别、同一时间快照、2+ 序列 | Grouped bar | | 2×2 战略或优先级定位 | Quadrant | | 深度 ≥ 2 的层级数据 | Tree | | 带决策分支的流程 | Flowchart | | 跨团队或跨角色、≥ 3 个参与者的流程 | Swimlane | | 2-3 个组之间的集合重叠或共享属性 | Venn | | 类别对比、单一序列、无时间轴 | Bar |

当数据适配多种类型时,优先选最能清晰展现差异的那种。始终嵌入到一个 <figure> 中,并配上陈述洞见(而非仅陈述数据范围)的标题。

步骤 2.1 · 来源与素材检查

当文档依赖用户草稿之外的事实或素材时,在提炼或填充内容之前运行此步骤。仅当用户已提供所需一切的个人草稿时才跳过。

来源检查

当文档提及某个具体公司、产品、人物、发布日期、版本、融资轮次、指标、市场事实、技术规格,或任何可能变化的当前事实时触发。

  • 写作前使用一手来源:用户提供的素材、官网、文档、备案文件、新闻稿、应用商店页面或仓库发布
  • 为驱动文档的事实保留一份简短的来源名称与日期记录
  • 如果来源相互冲突或某个事实无法快速核实,询问用户,而非静默选择
  • 避免诸如"最新"、"近期"、"全新"之类听起来时效性强的说法,以及版本号、发布日期或财务数字,除非它们已被核实

素材检查

当文档关于某个公司、产品、项目、场所或个人品牌时触发。

在排版前确认能让主体可识别的素材:

| 需求 | 何时必需 | 接受 | |---|---|---| | Logo | 任何品牌化文档 | 用户文件或官方 SVG/PNG | | 产品图 | 实体产品 / 场所 / 物件 | 官方图、用户图,或标注的空缺 | | UI 截图 | App / SaaS / 网站 / 工具 | 当前截图、官方产品图,或用户抓图 | | 品牌色 | 品牌化的 one-pager / portfolio / 演示文稿 | 官方值、从素材提取的值,或保留 kami 墨蓝 | | 字体 | 仅当品牌字体重要时 | 官方字体、相近的系统回退,或 kami 默认 |

如果缺少必需项,使用一个紧凑的空缺表并问一次。不要用通用图片、近似的 logo 手绘或杜撰的值来替代缺失的素材。

Logo 回退:当请求没有指定 logo、但品牌配置有 logo 路径时,按 references/brand-profile.md C 层填入 one-pager / portfolio / slides-weasy 中被注释掉的 .brand-logo 位。把 ~ 展开为绝对路径;如果文件缺失或模板没有该位,就保持其注释状态并在没有 logo 的情况下渲染(绝不插入损坏的图片)。当前请求中的显式 logo 永远胜出。

素材状态块

素材检查之后,在继续之前输出一个结构化的状态块。这是一次性的透明展示,不是提问:

Materials status:
- Logo: OK assets/client-logo.svg
- Brand colors: OK #1B365D mapped to --brand
- Product screenshot: MISSING (proceeding with kami default placeholder)
- UI screenshot: not required for this doc type

使用 OK、MISSING 或 not required。如果某个必需项缺失且没有用户输入到达,就用空缺表问一次;否则静默继续。

步骤 2.5 · 提炼原始内容(如适用)

自动判断是否需要提炼。 不要问用户;从输入来判断:

| 跳过提炼(直接填充) | 运行提炼 | |---|---| | 内容有与模板结构匹配的明确小节标签 | 没有小节结构的原始散文 | | 指标已带单位量化到位 | 数字零散或隐含,未被提取 | | 用户写了 "use this as-is" / "直接用这个" / "原封不动" | 用户粘贴了多来源的堆砌(聊天 / 邮件串 / 多份文档) | | 内容数量与模板匹配(例如 4 个指标对应 4 张指标卡) | 内容数量与模板不匹配(项太多或太少) | | 一致的声音、前后一致的主张 | 跨来源的冲突主张或重复事实 |

拿不准时就运行提炼。提炼成本低;重建一份错位的文档则不然。

当用户交来原始素材(会议记录、灵感倾倒、不同格式的现有文档、聊天记录、零散要点)时:

  1. 提取:抽出每一条事实主张、数字、日期、名称、来源、素材引用和行动项
  2. 分类:把每条提取映射到目标模板的小节(各文档类型的小节结构见 references/writing.md)
  3. 空缺检查:列出模板需要、而原始内容没有的东西——包括缺失的事实、缺失的佐证和缺失的素材
  4. 问一次:把空缺表分享给用户。不要靠猜测来填补空缺。

空缺检查示例:

| 模板需要 | 已找到 | 缺失 | |---|---|---| | 4 张指标卡 | "8 years"、"50-person team" | 还差 2 个可量化的结果 | | 3-5 个核心项目 | 提到了 2 个 | 至少再加 1 个带成果的 | | 素材 | 已提供 logo 文件 | 产品截图来源 |

然后带着结构化、已提炼的内容,进入步骤 2.6(幻灯片)或排版备注(其他所有文档类型)。

步骤 2.6 · 演示文稿预检(仅限幻灯片)

除幻灯片外的所有文档类型都跳过此步骤。

路径选择

默认走 WeasyPrint HTML 路径。仅当用户明确需要可编辑的 PPTX 文件时切换到 pptx。仅当用户明确要求 Marp / markdown 幻灯片时切换到 Marp。

| 路径 | 模板 | 何时 | |---|---|---| | WeasyPrint HTML → PDF(默认) | slides-weasy.html / slides-weasy-en.html / slides-weasy-ko.html | 除非需要 PPTX 或 Marp,所有情况 | | python-pptx → PPTX(回退) | slides.py / slides-en.py | 用户明确需要可编辑的 PPTX | | Marp Markdown(变体) | assets/templates/marp/slides-marp.md(+ slides-marp.css)/ slides-marp-en.md(+ slides-marp-en.css) | 用户明确要求 Marp、"markdown slides" 或 .md 演示文稿。随附的 .md 是 Kami Marp 本身的可运行演示;复制它,替换内容,保留结构。通过本地 marp CLI 渲染;未捆绑。 |

页面尺寸

默认是 280mm 158mm。仅当用户提到长度或密度约束时才询问。

| 尺寸 | 何时 | |---|---| | 280mm 158mm | 默认;适配大多数演示文稿 | | 297mm 167mm | 用户想要稍多空间 | | 338mm 190mm | 内容繁重的幻灯片,或每页数据点很多 |

内容预检

在起草任何幻灯片之前,与用户确认以下要点。一次问完,已回答的跳过:

| # | 问题 | |---|---| | 1 | 受众 + 场合 —— 谁在场,是现场主题演讲、投资人 1:1,还是异步分享链接? | | 2 | 长度目标 —— 演讲时长还是幻灯片数?(15 分钟:约 10 页 / 30 分钟:约 20 页 / 45 分钟:约 25-30 页) | | 3 | 源素材 —— 哪些内容已就绪:提纲、文档、笔记、数据? | | 4 | 图片 —— 是否有可用的截图、图表、logo 或产品图;哪些幻灯片需要真实的论据位;是否需要单独的视觉简报? | | 5 | 硬约束 —— 品牌色、必需 logo、是否需要 PPTX、是否有某些必须存在的幻灯片? | | 6 | 格式确认 —— 是幻灯片演示文稿,还是一份长得像演示文稿的 one-pager? |

在起草任何落地页或产品站之前,从源素材锁定以下要点。仅当某个缺失项会改变交付物时才问一次:

| # | 锁定 | |---|---| | 1 | 产品品类 —— 首屏品类:app、CLI、终端、工具、技能、模板系统,或其他用户提供的标签。 | | 2 | 真实素材 —— 可用的产品截图、logo、图标或 UI 抓图,映射到 hero/gallery/feature/social 位。缺失的素材必须保持标注状态,不可用图库图片替代。 | | 3 | 站点形态 —— 单页,还是首页加 docs/help/releases/changelog/roadmap/legal 页面? | | 4 | 语言 —— 确切的语言列表、规范路径,以及是否需要生成器/检查模式。 | | 5 | 事实面 —— 安装路径、价格、版本、支持渠道、FAQ、llms.txt 和 llms-full.txt,它们必须保持同步。 |

幻灯片内容规则

  • 幽灵演示文稿测试:只按顺序读幻灯片标题。它们必须讲清论证;如果讲不清,在做样式前先修标题或结构
  • 每页一种论据形态:图表、表格、截图、代码、引语或结论。拆开混合论据,而非把一页塞满
  • 受众文案保持干净:标题、正文和图注绝不包含图片提示词、裁剪说明或生成备注
  • 无分节分隔页:用 .eyebrow 来标注分节编号,而非一个专门的蓝底页面
  • 无 CJK 括号:把 (...) 替换为 · 或 ,
  • 每个要点占一行:精简到能占一行为止
  • 2×2 布局:使用 table.t2x2,而非 CSS Grid
  • 钉住的结论:在 position: absolute; bottom: 12mm 处使用 .co

这些规则同样适用于 Marp 演示文稿。Marp 专属语法:见 references/design.md §8《Marp variant》。

步骤 2.7 · 排版备注(透明、非阻塞)

在加载规范和填充模板之前,写一段编辑风格的简短备注,陈述排版意图:模板选择、长度目标、叙事弧线、内嵌图表、素材状态和输出格式。匹配文档的语言。控制在 80 字以内,写成散文,而非状态面板。紧接着立即继续;不要等待。

示例(CN):

排版意图:Equity Report 中文版,2 页 A4。先立论与目标价,进入估值 (DCF 与可比公司),落于催化剂与风险。中段嵌一张营收趋势折线和 FY26 收入桥瀑布。Logo 已就位,产品图暂缺,header 改走纯文字。输出 HTML 与 PDF。

示例(EN):

Layout intent: Equity Report (EN), two pages A4. Open with thesis and price target, run through valuation (DCF and comparables), close on catalysts and risks. A revenue line chart and an FY26 waterfall sit mid-doc. Logo is in hand; product image is absent, so the header stays text-only. Output: HTML and PDF.

这段备注是为了透明,不是为了审批。如果用户反对,就调整;否则继续到步骤 3。


步骤 3 · 加载适量的规范

挑选与任务匹配的层级。默认选用能覆盖工作的最低层级。

| 层级 | 何时 | 阅读 | |---|---|---| | 仅内容 | 更新文字、替换要点、翻译现有文档。CSS 不动。 | 仅 CHEATSHEET.md | | 布局微调 | 调整间距、移动小节、在规范内更改字号。触及 CSS。 | CHEATSHEET.md + 模板(token 已内联) | | 新文档 | 从零或从原始内容构建。 | 完整设计规范 + 写作规范 + 模板 | | 简历内容 | 简历专属的要点结构、项目框架、范围-结果-成效规则。 | resume-writing.md + 模板 | | 来源 / 素材 | 公司、产品、市场、发布、融资、规格,或品牌化主体。 | writing.md 的来源规则 + 用户/来源素材 | | 演示文稿(>20 页) | 需要 Part Divider、Code Cards、分节标题的长演示文稿。 | 完整设计规范 + Deck Recipe(design.md 第 8 节) | | 排障 | 渲染 bug、字体问题、页面溢出。 | production.md(如成因是 CSS,再加设计规范) | | 反模式 | 在发货前审查 AI 生成的草稿。 | anti-patterns.md(六类清单) | | 图表 | 在文档中嵌入 SVG。 | 仅 diagrams.md(自带 token 映射) |

如果工作中途发现需要超出初始层级,你随时可以升级。

供参考的完整规范文件:

  • 设计:references/design.md
  • 写作(通用):references/writing.md
  • 写作(简历专属):references/resume-writing.md
  • 生产:references/production.md
  • 图表:references/diagrams.md
  • 反模式:references/anti-patterns.md

步骤 4 · 把内容填入模板

  • 把模板复制到你的工作目录;不要从零手写 HTML
  • CSS 不动,只编辑 body
  • 内容遵循 writing.md:用数据胜过形容词,用独特措辞胜过行业陈词
  • 避免 references/anti-patterns.md 中列出的模式:空洞、杜撰、模仿、过度、来源空缺、语气污染
  • 填充前,在 writing.md 的"Quality bars by document type"小节中阅读你文档类型的质量标准。结构是必要的但不充分:一条简历要点需要 Action + Scope + Result + Business Outcome;一份股票研报需要差异化认知 + 量化催化剂;幻灯片需要论断-论据式标题。达到质量标准与填满每个占位符同样重要。

不要生成

以下是最常见的 AI 文档失误。完整清单请交叉参考 references/anti-patterns.md。

  • 不要在最终文档中留下占位文本("Lorem ipsum"、"[Insert here]"、"TBD")
  • 不要杜撰指标、财务数据或统计数字;用 [DATA NEEDED: description] 标注空缺
  • 不要把图库图片描述当作图片占位符("A diverse team collaborating in a modern office")
  • 不要为填满模板槽位而灌水(一份有 3 个真实项目的简历不需要 5 个编造的)
  • 不要写一段只是把自己的标题换成句子重述一遍的文字

填写 PDF 元数据(WeasyPrint 会把它们读入 PDF)

每个模板的 <head> 中都有 meta 占位符。构建前把这四个都填好:

| 占位符(CN) | 占位符(EN) | 规则 | |---|---|---| | {{作者}} | {{AUTHOR}} | 简历/信件/作品集:用文档中那个人的名字。其余一律:保持原样(构建脚本从 git 配置或环境变量推断) | | {{摘要}} | {{DESCRIPTION}} | 从前 2 段中提取一句话(≤150 字符) | | {{关键词}} | {{KEYWORDS}} | 从标题 + 小节标题中取 3-5 个关键词,逗号分隔 | | {{文档标题}} / {{信件主题}} 等 | {{DOC_TITLE}} / {{LETTER_SUBJECT}} 等 | 从 H1 或 .header .title 文本推断 |

<meta name="generator" content="Kami"> 已在模板中固定;不要更改它。

作者推断:build.py 会自动从以下来源设置 PDF /Author 元数据:

  1. git config user.name(主)
  2. KAMI_AUTHOR 环境变量(回退)
  3. "Kami"(最终回退)

对于个人文档(简历/信件/作品集),HTML 的 <meta name="author"> 应与内容中那个人的名字匹配。对于非个人文档(one-pager/long-doc),保持占位符原样,让构建脚本去推断。

步骤 4.1 · 每页密度目标(仅限多页模板)

适用:slides-weasy / long-doc / portfolio / equity-report / changelog。不适用 resume / one-pager / letter(这些有独立的长度合约)。

正文页填充率目标 60-80%。封面 / 目录 / 末尾署名页豁免。这条规则解决的是 AI 生成多页文档时最常见的 draft 缺陷:把内容拆得太散,结果几页都填不满。

Items-per-page contract

| Template | Typical body page | Hard floor (merge if below) | |---|---|---| | slides-weasy | 1 assertion title + 3-5 supporting items, or 1 chart + 2-3 callouts | <3 items and no chart → merge into adjacent slide | | long-doc | 1 chapter heading + 2-4 paragraphs + at most 1 figure | Chapter renders to <40% page → merge into neighbor chapter | | portfolio | 1 project header + 1 hero image + 3-5 outcome bullets | No image and <3 outcomes → merge with adjacent project | | equity-report | 1 section + 1 table/chart + supporting prose | Only a 2-row table on the page → combine sections | | changelog | 1 version block + 4-8 entries | Version has <4 entries → place on the same page as the prior version |

稀疏页合并规则

最终定稿前,扫描草稿。任何会渲染到不足 50% 满的正文页 → 按顺序采用其一:

  1. 向上合并到前一节。
  2. 向下合并到后一节。
  3. 把一个列表提升为一张能撑起空间的小图表或表格。
  4. 把一个 .co callout 钉到底部(仅限 slides-weasy)。钉住的 callout 上方的留白是有意为之,不算稀疏。

"填充"稀疏页的禁忌做法:用灌水文字凑数、把标题重述成一句话、编造统计数字、用不同措辞重述前一页。如果合并选项都不适用,那这一页本身就不该存在。

末页豁免

最后一个正文页允许 40-60% 填充率。在末页强求平衡通常意味着灌水。版权页 / 收尾幻灯片可为任意填充率。

构建后验证

python3 scripts/build.py --check-density   # flags >25% (WARN) / >50% (SPARSE) trailing whitespace

如果某个正文页(非封面、非末页)得到 SPARSE 警告,把它当作草稿缺陷,按合并规则重新撰写。

步骤 4.5 · 自动选择输出格式

不要问用户要导出哪种格式。从上下文决定:

| 信号 | 输出 | 为什么 | |---|---|---| | 任何文档请求 | HTML + PDF | PDF 是默认交付物,HTML 是源 | | 幻灯片 / PPT / 演示文稿 | HTML + PDF + PPTX | 演示需要可投影的格式 | | "分享" / "发朋友圈" / "share" / "post" / "preview" | + PNG | 社交平台和即时通讯需要图片 | | "嵌入" / "插图" / "embed in another doc" | 仅 PNG | 作为素材用于其他文档内部 | | 用户明确指定某种格式 | 听用户的 | 显式请求覆盖自动选择 |

对文档模板,PDF 总是随附。落地页作为可直接服务的静态 HTML 文件发货。PPTX 跟随幻灯片。PNG 跟随分享场景。用户永远不必去想格式问题。

步骤 5 · 构建并验证

python3 scripts/build.py --verify           # build all templates + page count + font check + slides
python3 scripts/build.py --verify resume-en # single target full verification
python3 scripts/build.py landing-page        # screen-first static HTML template check
python3 scripts/build.py --verify slides    # single slide deck verification
python3 scripts/build.py --check-placeholders path/to/filled.html
python3 scripts/build.py --check-resume-balance path/to/resume.pdf
python3 scripts/build.py --check-density              # page whitespace scanner (skips cover)
python3 scripts/build.py --check            # CSS rule violations only (fast, no build)
python3 scripts/build_metadata.py --check   # Codex plugin mirror + marketplace drift check

屏幕验证:--check-density 是一道打印关卡。对于屏幕输出(落地页或文档页),改为在每种语言下以 375px 和 1280px 截图渲染后的页面,并在发货前扫描断行孤字。参见 references/design.md 第 11 节《Responsive screenshot verification》。

源模板有意保留 {{...}} 字段。在已完成的文档上运行占位符检查,而非在模板库上。

视觉异常(标签双矩形、字体回退、分页问题)-> production.md 第 4 部分。

维护者模式检查

仅在维护本仓库或发布包时使用这些,不用于普通的文档生成。

  • 如果 marketplace 元数据、生成的插件镜像、版本选择或安装路径发生变化,运行 python3 scripts/build_metadata.py --check;对于 Codex 安装行为,还要用隔离的 CODEX_HOME=/tmp/... 进行冒烟测试,使用 codex plugin marketplace add <path>、codex plugin add kami@kami 和 codex plugin list。
  • 如果 SKILL.md、模板、脚本、参考资料或其他打包输入发生变化,且该行为通过技能包发货,运行 bash scripts/package-skill.sh 并在交接前检查 dist/kami.zip。
  • 如果刷新了某个 GitHub release 资产,下载已上传的 kami.zip,并将 ZIP 条目名称加每条目的 SHA-256 摘要与本地 dist/kami.zip 对比;页面文字、文件大小和容器哈希都不够。

字体

中文

  • 主衬线:TsangerJinKai02-W04.ttf(400 字重)+ TsangerJinKai02-W05.ttf(500 字重,真粗体)
  • 模板使用双 @font-face 声明:W04 用于正文,W05 用于标题
  • 两个文件都是商业字体。在仓库中保留它们以供本地预览和 CDN 回退,但不要把它们打包进 Claude Desktop 技能 ZIP
  • 烘焙进模板的回退链:Source Han Serif SC -> Noto Serif CJK SC -> Songti SC -> STSong -> Georgia

日文(尽力而为)

  • 使用 CJK 模板路径,尚无专用的 -ja 模板
  • JP 明朝优先的字体栈:YuMincho -> Hiragino Mincho ProN -> Noto Serif CJK JP -> Source Han Serif JP -> TsangerJinKai02 -> serif
  • 发货前在视觉上核验断行、标点节奏和强调字重

韩文(尽力而为)

  • 专用的 -ko 模板使用 Source Han Serif K Regular / Medium,并在每个回退栈中保留真实的 OTF 家族名 Source Han Serif KR
  • 回退:Noto Serif KR / Apple SD Gothic Neo / AppleMyungjo / Charter / Georgia
  • 这些 OTF 采用 OFL 许可,被纳入跟踪以供本地预览 / CDN 回退,但排除在 Claude Desktop 技能 ZIP 之外,以保持包体小巧

英文

  • 单一衬线:Charter(系统自带,macOS/iOS),标题和正文都用它
  • 无单独的无衬线:--sans: var(--serif),每页一种字体
  • 回退:Georgia(跨平台)/ Palatino / Times New Roman

把字体文件放在 HTML 旁、用相对的 @font-face 路径,是最稳定的方案。scripts/package-skill.sh 会从 Claude Desktop ZIP 中排除大型 CJK 字体文件,使上传的包保持在 6MB 包体上限以下。始终上传 package-skill.sh 的输出,绝不要手动 zip 的检出(被跟踪的 CJK 字体会让它过大,Claude Desktop 会拒绝上传)。

字体自动恢复(Claude Desktop)

在构建中文或韩文文档之前,确保字体存在。脚本会尝试多个 CDN 源,带重试和大小校验:

bash scripts/ensure-fonts.sh

它会下载到 XDG 用户字体目录(${XDG_DATA_HOME:-~/.local/share}/fonts/kami,用 KAMI_FONT_DIR 覆盖),而非技能的 assets/fonts——这样已安装的技能保持小巧,让 Claude Desktop 永远不触发其大小限制。fontconfig 默认扫描该目录,因此 WeasyPrint 能在那里找到 TsangerJinKai02 和 Source Han Serif K;在线渲染则回退到 jsDelivr 的 @font-face URL。构建前运行一次。如果所有源都失败,脚本会按语言打印备选方案。

反馈协议

当用户给出含糊的视觉反馈("看着不对"、"太挤了"、"不够优雅")时,不要猜测。带着当前值反问:

| 用户说 | 询问 | |---|---| | "太挤了" / "too cramped" | 哪个元素?行高(当前:X)?内边距(当前:Y)?页边距? | | "太松了" / "too loose" | 同方向,反向 | | "颜色不对" / "color feels wrong" | 哪个元素?品牌蓝用得过多?某个灰色读起来太冷? | | "不够好看" / "not polished" | 字体渲染?对齐?留白分布?层级不清晰? | | "看着不专业" / "unprofessional" | 内容措辞?还是布局(对齐、一致性)? |

模板回复:"X is currently set to Y. Would you like (a) [specific alternative within spec] or (b) [another option]?"

绝不要在不指明确切属性及其新值的情况下说"我会调整间距"。


何时不要使用此技能

  • 用户明确想要 Material / Fluent / Tailwind 默认风格——这是不同的设计语言
  • 需要暗色 / 赛博朋克 / 未来主义美学(这是刻意反未来的)
  • 需要饱和的多色(这只有一个点缀色)
  • 需要卡通 / 动画 / 插画风格(这是编辑风的)
  • Web 动态应用 UI(这是面向打印 / 静态文档的)

接下来:套用步骤 3 的层级表来决定读什么,然后复制匹配的模板并开始填充。