← 返回主报告:Kimi Agent(云端沙箱)技术报告 | GitHub 原文
合规与风险声明:本报告为安全研究与互操作学习目的的逆向分析,全程只读采集,未对目标系统做任何修改;文中所有密钥、token、账号级标识(chat_id / project_id / tenant_id 等)均已脱敏;沙箱内发现的默认弱口令(VNC/SSH)属平台侧配置,仅作安全发现披露,请勿用于访问任何不属于自己的系统。docx/pdf/xlsx/kimi-slides 等引擎二进制为 Moonshot 专有许可(禁再分发/逆向),本文仅作行为级描述。报告基于单次分析窗口(约 50 分钟生命周期),软件版本与技能库存随镜像更新可能变化。
第二轮深度分析 · slug=14-slides-design 采集方式:HTTP 只读(http://127.0.0.1:18080/<沙箱路径>),本轮 SSH 不可用;沙箱 http.server 为单线程,大文件串行拉取 第一轮上下文:sections/08-skills-c.md §2-§4(kimi-slides/kimi-design/kimi-widget 初读)、sections/11-user-layer.md §4(~/.kimi-slides)
〇、一句话结论
kimi-slides 是 Moonshot 的第一方 PPT 技能,其核心不是提示词而是一套完整自研的文档技术栈:.pptd YAML DSL(1639 行规范)+ Rust 原生 CLI(resvg/usvg/cosmic-text 渲染管线,14MB 单二进制,零 Node 依赖运行时)+ 25 款编号字体包(68MB)+ 约 60 套设计系统文档。CLI 通过 npm 包 @kimi-slides/cli(私有 GitLab registry)分发,postinstall 按平台拉预编译二进制。对 Hermes 价值最高的三件可移植资产:① .pptd DSL 规范本身(纯文档,直接可抄);② “YAML DSL + 确定性 check –level auto 修复闭环”的工作流范式;③ 字体别名归一化机制(fonts.json nameList)。 硬障碍:CLI 是闭源 Rust 二进制、走私有 registry,不能直接 npm 安装。
一、资产清单与分布
| 资产 | 沙箱路径 | 规模 | 性质 |
|---|---|---|---|
| kimi-slides 技能 | /app/.agents/skills/kimi-slides/ | SKILL.md 130 行 + reference/(133 文件 78MB,大头是设计系统 jpg 预览图) | 纯文本/md+图 |
| kimi-design 技能 | /app/.agents/skills/kimi-design/ | SKILL.md 55 行 + reference/ 5 文件 | 纯文本 |
| kimi-widget 技能 | /app/.agents/skills/kimi-widget/ | SKILL.md + assets/icons/ 105 SVG + references/ | 纯文本+SVG |
| CLI npm 包 | /home/kimi/.npm-global/lib/node_modules/@kimi-slides/cli/ | bin+dist+scripts 极薄,vendor/ 下放二进制 | 闭源 Rust 二进制 |
| 字体包 | /home/kimi/.kimi-slides/fonts/ | 25 个编号 TTF + fonts.json | 开源字体聚合 |
二、.pptd DSL 完整语法规范(reference/pptd.md,1639 行)
这是整个技能组的地基,kimi-slides 与 kimi-design 共用同一份 pptd.md(两技能 reference 下各有一份)。定位为”AI 友好的 OOXML 再抽象“:保留 theme/页面/元素坐标,删除 Masters 嵌套,每页自包含、所见即所得。
2.1 全局约定
- 语法:YAML 1.2;
:、#、{}等特殊字符的值必须加引号或用块标量(|)。对content.text这类富含特殊字符的字段强制建议块标量,防止style="..."被 YAML 误解析——这是针对 LLM 生成错误的定向防御。 - 坐标系:px 为单位,72 PPI 下 1px=1pt,原点左上。默认尺寸:PPT 16:9=
[960,540]、4:3=[720,540];海报 16:9=[1280,720]、9:16=[720,1280]、1:1=[1080,1080]等 5 种。 - 样式优先级链(三层体系,是规范最工程化的部分):
- 文本框内文字:富文本语义标签(
等) →内联 →段落 → Text.content 直接字段 →$style主题引用 → 默认值表(color #000000 / fontSize 18 / fontFamily MiSans / lineHeight 1…)。 - 表格单元格:Cell 字段 → textStyle 引用 → TableStyleConfig 行/列分类样式(
rowOverColumn默认 true 行赢列)→ bodyStyles 按数据行索引循环 → cellStyle 基线 → 默认。 - 图表:系列显式 fill → seriesDefaults 同名字段 → 内置 10 色盘(
#1783FE #67B8A6 #C9A869 #8A84C7 #8C98A8 #5E9CF4 #7AB5D7 #B08A9C #333 #DCDCDC循环)。seriesDefaults 合并规则明确到字段级:标量覆盖、对象一级浅合并、数组整体替换,type/encode禁止出现在 defaults。文档甚至给出”反直觉示例”说明合并结果。
- 文本框内文字:富文本语义标签(
boolean | Config统一约定:false=关、true=开+默认配置、对象=开+自定义(marker/legend/axisLine/gridLine/colorbar 等统一遵守;唯一例外 scatter.marker 不能 false)。
2.2 共享类型
Color:HEX6/HEX8 +$themeKey主题引用(任何 Color 位置都支持$xxx,含嵌套数组内)。FontFamily:string | {latin, ea}—— 中西文分字体是一等公民。Border/BorderSpec:单值四边同、[上下,左右]、[上,右,下,左]顺时针、null 清除——与 OOXML 单元格边框语义对齐。Fill:solid / gradient(linear|radial + stops + angle,0=左→右顺时针) / image(src 支持 https URL,仅 jpg/jpeg/png/gif)。ImageFill 渲染顺序固定 crop→fit。ImageCrop:正数内裁、负数外扩补透明像素(outset)——比 CSS 语义更强;约束left+right<1。Shadow{blur,color,offset}、ImageFit{fill|contain|cover}、Alignment=[水平,垂直](含 justify/distributed)。
2.3 主入口 .pptd(Presentation)
version: v2 # 必填,固定 v2
title: ...
size: [960, 540]
customFonts: # 仅支持 Google Fonts CSS URL,且只支持默认字重
- {family: Noto Serif SC, src: "https://fonts.googleapis.com/css2?family=Noto+Serif+SC"}
theme: {colors, textStyles, tableStyles} # 三类 token,$key 引用
pages: [pages/1_cover.page, ...] # 相对路径列表
路径规则三条铁律:完全自包含(禁止引用目录外文件)、只支持相对路径、媒体可 URL。一切必须经 .pptd 主入口加载,.page 不能单独传给 convert/check。
2.4 页面 .page
{pageType(cover/toc/chapter/content/final/自定义), background(默认白), notes(演讲者备注), elements[](越后层级越高), animations[]}。
2.5 七种元素
- Text:富文本子集 HTML——
;style 属性白名单映射(/////
////- /
- /
支持 text-align/line-height/margin-*;支持 list-style 族;支持 color/font-size/font-family/background-color),颜色值可写$token。纯文本简写(单行≡包裹)。内嵌 LaTeX:\(...\)定界,公式只继承 color 和 font-size。支持竖排textDirection: vertical、wrap: false(单行建议显式关闭)、文字渐变/阴影。 - Shape:
shapeName取自 177 个 OOXML 形状库(shapes.md),adjustments复用 OOXML 参数序与量纲(百分比 100000=100%,角度=度×60000);shapeName: custom时给viewBox + path(SVG path,支持 M/L/H/V/C/S/Q/A/Z;外轮廓顺时针+内轮廓逆时针实现镂空)。明确”shape 不支持内嵌文字,须另叠 text”。 - Line:viewBox 归一化坐标 + points 贝塞尔控制点串 +
curve: sharp|round|smooth+ 两端箭头[ArrowType|null, ArrowType|null](arrow/stealth/diamond/oval)。 - Image:
crop→fit→cropShape固定三段渲染序,cropShape 可用任意 shape(含 custom path)做异形裁剪。 - Icon:Font Awesome 7.x free,
iconName: "fas:house"三前缀(fas/far/fab)。 - Table:
columnWidths/rowHeights为比例数组且各自求和=1;合并单元格规则独特——rowSpan/colSpan声明后被覆盖格子直接从 rows 数组省略(无 null 占位);表格不可旋转/翻转。 - Chart:ECharts 哲学——顶层无 type,13 种 series 平铺:bar/line/area/scatter/bubble/candlestick/pie/radar/waterfall/heatmap/treemap/sunburst/sankey。数据用
{cols, rows}宽表 +encode列引用(scatter/bubble 支持dataFilter长表分组)。每种 series 首行声明混排约束(bar/line/area/scatter/bubble 自由混;candlestick 仅与 bar/line/area;pie/waterfall/heatmap/treemap/sunburst/sankey 独占)。校验器配套错误类型:DuplicateColumnError/RowLengthError/UnknownColumnError/NonNumericValueError/StackModeMismatchError/WaterfallTotalMismatchWarning/CyclicGraphError(sankey DAG 检查) 等。numberFormat 只支持 Excel 子集(0/0.0/0%/#,##0/0.0E+00)。treemap 子节点按 HSL 明度每级 -10% 派生色。
2.6 动画体系
页级 animations[] 按数组序编排:22 种效果(8 进入 + 7 强调 + 6 退出 + motion-path),3 种触发器(onClick/withPrevious/afterPrevious,组语义与 PowerPoint 一致),参数化强调效果(fill-color/transparency/color-pulse 保尾态语义明确)。motion-path 用相对偏移 SVG path(必须 M 0 0 起手、单子路径)。
工程质量点评:这份规范本身就是给 LLM 写的”防呆手册”——每个易错点(合并语义、镂空方向、null 占位、viewBox 拉伸失真)都带反例和约束说明;所有默认值成表;所有约束都对应 check 的一个错误码。规范的完备度(1639 行)远超一般内部 DSL 文档,可直接当独立产品的格式规范用。
三、CLI:@kimi-slides/cli 的真实实现(重点纠偏第一轮结论)
3.1 包结构与安装机制
- 路径:
/home/kimi/.npm-global/lib/node_modules/@kimi-slides/cli/,版本 2.2.15。 - package.json:
"bin": {"kimi-slides": "./bin/kimi-slides.js"},files 只含 bin/scripts/dist,postinstall: node scripts/install.mjs,publishConfig 指向私有 registryhttps://dev.msh.team/api/v4/projects/6373/packages/npm/(GitLab npm registry,项目 ID 6373)——公网 npm 装不到。 dist/manifest.json(证据原文):
{"version":"2.2.15","releaseVersion":"926985a4","environment":"prod","channels":["inside"],
"assetBaseUrl":"https://statics.moonshot.cn/kimi-ppt-cli-native/2.2.15/926985a4",
"insideAssetBaseUrl":"https://statics.moonshot.cn/kimi-ppt-cli-native-inside/2.2.15/926985a4",
"binaries":{"linux-arm64":{"flavor":"inside","file":"kimi-slides-linux-arm64.zip","sha256":"7f30..."},
"linux-x64":{"flavor":"inside","file":"kimi-slides-linux-x64.zip","sha256":"cae4..."}},
"fonts":{"file":"kimi-slides-fonts.zip","sha256":"1ef2..."}}
即:npm 包只是安装器,真正的实现按平台从 Moonshot 静态 CDN 拉预编译 zip(SHA-256 校验),flavor 分 inside(内网)/公开两通道。当前只有 linux-x64/arm64 两个平台产物。
bin/kimi-slides.js(45 行,全文已读):纯转发壳——定位vendor/kimi-slides[.exe],缺失时懒执行 install.mjs;字体目录解析顺序:用户显式KIMI_SLIDES_FONTS_DIR>~/.kimi-slides/fonts> 包内vendor/fonts;spawnSync 透传退出码/信号。scripts/install.mjs(约 170 行,全文已读)工程细节:- 零运行时依赖:手写极简 ZIP 读取器(EOCD 中央目录解析 + store/deflate),注释明写”故意不依赖 jszip:内网 registry 无法代理 npmjs 传递依赖”。
- 幂等:
vendor/install-state记录 schema_version/version/platform/flavor/binary_sha256/asset_base_url,sha 一致即跳过。 - 字体与二进制分离安装:字体到
~/.kimi-slides/fonts(注释:”避免 npm 重装/升级时重复下载 68MB 字体包”),~/.kimi-slides/install-state内容寻址(fonts_sha256 变了才重装)。 - monorepo 开发态用
WORKSPACE_MEMBER哨兵文件跳过下载(开发用 cargo build)。 - 本地联调放行
http://,线上强制 https。
3.2 二进制本体:Rust 自研渲染管线(不是 pptxgenjs!)
vendor/kimi-slides = 14,057,752 字节 ELF x86-64(head 魔数 7f45 4c46)。strings 取证(流式取样,未落盘二进制):
rust/render/preset.rs / rust/render/mod.rs / rust/render/icon.rs / rust/render/math.rs / rust/render/chart/series.rs
/Users/moonshot/.cargo/registry/.../resvg-0.47.0/src/clip.rs
/Users/moonshot/.cargo/registry/.../usvg-0.47.0/src/text/layout.rs / parser/svgtree/mod.rs
/Users/moonshot/.cargo/registry/.../cosmic-text-0.19.0/src/font/fallback/mod.rs
/Users/moonshot/.cargo/registry/.../read-fonts-0.37.0 / read-fonts-0.39.2(gvar/kern/hvar/varc 表)
"Google Fonts CSS has an unterminated url (family="
"-[ratex-unicode-font] found via builtin path:" ← LaTeX 用 ratex 渲染
结论:
- 渲染管线:pptd → 自研 Rust 布局/渲染(
rust/render/*模块)→ SVG(usvg)→ resvg 0.47 栅格化 PNG(screenshot 命令);文本排版本地用 cosmic-text 0.19(font fallback、整形),字体解析 read-fonts;LaTeX 走 ratex(unicode font)。构建机是 macOS(/Users/moonshot/路径)。 - 不是“pptxgenjs + 自研校验”——pptxgenjs 虽存在于
/home/kimi/.npm-global/lib/node_modules/(npm-global 下还有 @mermaid-js、docx、md-to-pdf、pdf-lib、pdftk、playwright、react、react-icons、sharp),但那是别的技能/工具链的依赖;kimi-slides 的 convert/check/screenshot 全部在这一个 Rust 二进制里。 - screenshot”模拟渲染可能与编辑器不一致”的原因清楚了:CLI 用 resvg 光栅化,而线上编辑器是另一套(前端 canvas/DOM)渲染器。
3.3 命令契约(reference/cli.md 全文已读)
convert <deck.pptx> [-o outdir]:pptx→pptd 目录。输出deck/deck.pptd + pages/page-N.page + media/<hash>.png,图片路径重写为相对路径./media/<hash>.png。官方明确声明非无损(SKILL.md 要求用户对损坏页面用原 pptx 对照修复)。方向是单向的——CLI 不提供 pptd→pptx 导出,导出 pptx 在前端编辑器完成(这是交付闭环的关键设计:pptd 是”工作格式”,pptx 导出被有意留在云端编辑器)。check <dir> [-p 1,3|2-10] [-s all|error|warning|TypeName,...] [--level keep|auto]:输入必须是含 .pptd 的目录。14 类检查项:- 结构类:YamlParseError / FileReadError / MissingField / InvalidType / OutOfRange / UnknownField / PageNotFound
- 引用类:InvalidTheme(
$primary不在 theme.colors)/ SrcNotFound - 布局启发式:BoundsOutside(元素越界)/ TextOverflow(文字可能溢出)/ TextUnderFill(文字占文本框高度<50%)/ TextOcclusion(被后绘制元素遮挡)/ TextDrift(文本框跨越下层元素边界) —— 文本类用 mock 文字尺寸启发式,官方自认”可能有偏差”。
- 另有图表专属的 7+ 错误码(见 §2.5 Chart)。
--level auto只做确定性修复(cli.md 原文四条):简单类型转换(”12″→12、”true”→bool);删非法可选字段;删无法安全修复的非法元素;重写 YAML 格式化。输出格式[fixed: bool][Severity:Type] file id="..." 详情。screenshot <dir> [-p spec] [-o outdir]:渲染 PNG,deck/ → deck-screenshots/pages/page-N.png。
这个三件套构成“生成→确定性校验/修复→视觉确认”的自闭环,模型不需要打开 PowerPoint 就能迭代。
四、字体机制
4.1 字体包内容(/home/kimi/.kimi-slides/fonts/)
25 个编号 TTF + fonts.json(注意编号不连续:01-15、18-26,缺 16/17,说明历史上有字体被下架):
- 英文 11 款:Liter、Hedvig Letters Sans、Oranienbaum、Quattrocento Sans、Sorts Mill Goudy、Unna、Luckiest Guy、Coda、Jersey 15、Press Start 2P、Jersey 20 Charted
- 中文 7 款:MiSans、Noto Sans SC、思源宋体(Source Han Serif CN VF)、阿里妈妈刀隶体、站酷文艺体、站酷庆科黄油体、飞波正点体、得意黑(Smiley Sans)
- 混排/其他:程荣光刻楷、精品点阵体(BoutiqueBitmap9x9/Fusion Pixel)、Long Cang(龙藏)、LXGW Bright(霞鹜文楷)、ZCOOL KuaiLe
fonts.md 清单(面向模型的选型指南)与 fonts.json(面向程序的名称解析)是两份视图:fonts.md 表格带”风格/适用场景/是否风格化字体/使用限制”(如”Noto Sans SC 因为太常见,尽量少用”、”得意黑不支持非斜体 upright”),这是把排版师的隐性知识显式化的做法。
4.2 fonts.json:别名归一化(精巧设计)
每字体带 nameList 别名数组,把中文名/英文名/Windows 系统名映射到同一文件:
{"file":"12-MiSans.ttf","family":"MiSans","nameList":["MiSans","MiSans LC","等线","微软雅黑","Microsoft YaHei"]}
{"file":"13-Noto-Sans-SC.ttf","family":"Noto Sans SC","nameList":["Noto Sans SC","思源黑体","SourceHanSans","Noto Sans","黑体","SimHei"]}
{"file":"14-SourceHanSerif.ttf","family":"Source Han Serif CN VF","nameList":["思源宋体","SourceHanSerif","siyuanSongti","宋体","SimSun"]}
{"file":"21-ChengRongGuangKeKai.ttf","nameList":["程荣光刻楷","chengrengguangkekai","楷体","KaiTi"]}
{"file":"25-LXGW-Bright.ttf","nameList":["LXGW Bright","LXGWBright","霞鹜文楷","仿宋","FangSong"]}
微软雅黑/宋体/黑体/楷体/仿宋 五大 Windows 中文字体全部被别名到内置开源字体——模型或用户写了系统字体名也能确定性落到嵌入字体,彻底解决”pptx 换机器字体丢失”问题。这是整个字体机制里移植价值最高的一块。
4.3 自定义字体
customFonts 仅支持 Google Fonts CSS URL 且仅默认字重(二进制里有对应错误串 “Google Fonts CSS has an unterminated url”)。fonts.md 建议用于补位(JetBrains Mono、Archivo Black、EB Garamond)。
五、设计资产:设计系统与场景文档(本轮全部实地补采)
5.1 slides_categories.md 总则(34 行全文已读)+ 7 场景文档
总则两部分:通用要求(每页有明确”读者任务”、翻页要有节奏、图表+形状组合可超越 chart 语法表达、”大师级产出”、来源必须 超链接标注)+ 严禁项(证据边界:禁编造数据/引用/案例,缺料要标”占位/假设”;经典 AI 模式禁令:禁止用圆角矩形卡片搭建层级——”线条、留白、字号对比是更好的方案”;禁止红紫黄绿同页的 AI 配色)。
场景路由表(”选一个主场景,必要时加一个辅场景,主场景优先”):
| 场景 | 读者任务 | 文档行数 |
|---|---|---|
| analysis-decision 分析决策 | 比较选项、形成判断、支持决策 | 36 |
| business-plan 商业提案 | 理解价值、相信方案、采取行动 | 50 |
| management-report 管理汇报 | 掌握现状、暴露问题、确认行动 | 38 |
| academic-research 学术研究 | 评估问题、方法、证据、贡献 | 136 |
| education-training 教育培训 | 理解、记住、应用或正确行动 | 256 |
| tech-engineering 技术工程 | 看清结构、依赖、指标、权衡 | 205 |
| brand-creative 品牌创意 | 建立感知、留下记忆、形成认同 | 203 |
场景文档不是模板而是设计纪律手册,共性红线在每篇重复(禁卡片/禁均分构图/禁蓝白与蓝紫渐变等”AI 典型配色”/禁风格冲突元素)。亮点举例:
- analysis-decision:”标题即结论”(断言式标题,示例”2030 年欧洲电动重卡电池达 48GWh”);正文按 5 分钟阅读深度设计;单图表不得占半宽以上;图表”去默认化”(系列色改主色阶梯、去纵向网格线、预测用虚线、关键值直接标注在图上);表格规范(深色表头白字、极细横线、数字右对齐)。
- business-plan / management-report:带行业配色处方——明确”拒绝各场景最俗套的公式化配色(科技蓝紫渐变、医院蓝白、喜庆红金)”,并给 7+ 行业的具体 HEX 三色系(如科技路演”墨黑 #141414 + 荧光黄绿 #C6F24E”、金融法务”米白 #F7F3E8 + 墨绿 #123B2F + 黄铜 #B08D3E”)。
- academic-research:基准参照 MIT/ETH/清华模板、Beamer 主题(Metropolis/Focus)、Nature/Cell 图表;按学科分视觉重心(理论推导=公式证明、CS=系统图+ablation、实验=图表紧凑族、人文=档案地图手稿);”区域规划 100px 只填 70px 内容”被列为最严重粗糙。
- tech-engineering:按工程任务给 7 种叙事骨架表(架构评审/AI 平台/安全评审/故障复盘/技术选型/测试策略/外部分享各一条”读者要判断什么→推荐叙事顺序”);证据纪律(指标带 P50/P95/P99、推断必须显式标注)。
- education-training:先设计学习、后设计页面——生产前必须写下”学习者画像/使用场景/入口状态/出口能力(可观察)/材料边界/真实任务”;教学闭环”定向→理解→示范→练习→反馈→迁移”;每页只承载一个主要学习动作。
- brand-creative:”宁可丑不可平庸”;先提取主体识别特征(”删掉所有文字仍应能认出主体”);基准参照 Monocle/Wallpaper/Pentagram;给完整视觉参照案例(如”克莱因蓝瑞士海报”:纸白 70-85% + 近黑 + Klein 蓝 5-12%、封面标题 112-136pt 行距 0.85-0.95)。
5.2 reference/design_system/:两种组织形态共存
实测目录分两套体系(应为两代资产并存):
- 编号场景系:
01_strategy/ ~ 05_academic/各含 6 个编号子目录(01-06),子目录内按语言分(如01/en/dusk-violet-consulting.md+ 同名 .jpg)。 - 命名风格族:
academic/ consulting/ finance/ promotion/ work/各 6 套命名设计系统(consulting 下有 apricot-white-brief / indigo-due-diligence / marine-blue-research / moss-green-transformation / pine-green-strategy / red-black-growth 等,共 30 套),每套 =design.md+reference.jpg成对。
抽读 consulting/pine-green-strategy/design.md(73 行全文)——结构为 PART A 品类基线 + PART B 签名系统(冲突时 B 覆盖 A):
- PART A:咨询品类底线(对标 McKinsey/BCG)——每页正文标题必须是完整断言句+一行范围副标题;每页带章节面包屑;每页一个命名分析框架(压力汇聚条/带 TODAY 标记的阶段时间线/三情景表/五力/热度表/难度×影响 2×2/价值链/人设矩阵);证据 2-3 等宽栏并行、独立判断编号 1/2/3;图表标注纪律(数据标签落在标记上、「+42% p.a.」胶囊、虚线表预测);多数页底部收束条(”如何读此页”/so-what);固定三件套(左下 source 行+右下页码,明令禁止生成稿加水印/保密章/logo 占位);”只读标题测试”(标题连读成故事)。
- PART B:具体到 HEX 的色板(深森林绿 #03522C 结构色 + 亮绿 #29B974 强调 + 薄荷 #D1F5E2 过渡区 + 负向品红 #E71C56)、版式骨架(顶部 14-17% 暗化摄影标题带、”章节码+竖线”导航条、深绿→细竖条渐变分隔带)、字体映射(Arial →
{latin: Liter, ea: MiSans}、Trebuchet MS → QuattrocentoSans、Georgia → Unna——把真实甲方的字体映射到内置字体包)、签名组件 6 件、【Slide Types and Layouts】6 种版式(每种含适用场景/结构比例/块数/配套组件/不适用情形)、密度基线。 - 编号系抽读
01_strategy/01/en/dusk-violet-consulting.md(177 行):另一代写法——风格定位/页面骨架/内容组织逐节(浅蓝-浅紫渐变页 + 黑底证据页 + 暗摄影章节页三类页面语法、底部白色导航带 + 右缘竖排报告名)。
六、kimi-design 与 general-poster.md(239 行全文已读)
- 与 kimi-slides 共用同一 pptd.md / cli.md / fonts.md / shapes.md(reference 5 文件 4 份重复),增量只有
general-poster.md。 - 定位信息图/海报/简历;frontmatter 强约束:”Unless the user explicitly requests … HTML format, this skill must be used. Direct use of image-generation tools … is strictly prohibited.”
- 工作流与 kimi-slides 同构,产物是”单页或少数几页 PPTD”,可编辑性优先:”即使只要 PNG/JPG,也要先完成可编辑 PPTD 再 screenshot 导出;不要把整张信息图合并成一张位图”。
general-poster.md 的核心机制:
- 方向探索纪律:写任何 .page 前内部形成 2-3 个实质不同的视觉方向(主视觉焦点/信息结构/空间组织至少差两项);比较摄影/生成图/自绘矢量/结构图时,重要主体须实际看过 ≥2 张候选图才定稿;”不要因为 PPTD 矢量好实现就默认纯矢量”。
- style.md 机制:新建海报前在项目根写一份简短
style.md设计简报(目标受众/画布/一句话核心信息/视觉概念/海报级动作/视觉 DNA/落选方向一句话原因/最可能退化成的俗套),是”设计简报而非新技能文件、不是 CLI 硬门槛”;局部编辑不需要,整体重设计才需要,最多更新一次。 - 画布纪律:海报≠竖版≠16:9;未定比例时默认自适应高度;选定比例后直接按该比例构图,禁止”先 16:9 再拉伸裁切”。
- 关系→图形选择表:时间演化/路径传播/步骤机制/对比/层级/实物/多样本/情绪 8 类核心关系各给表达候选;”用户说要地图就必须给能建立空间关系的地理底图,不许拿抽象折线冒充地图”。
- Few-shot 反模板化:给 6 个完整匿名简报样例(Poster Editorial/Geometric Composition/Material Evidence/Dark-Field Signals/Scientific Observation/Dynamic Collage)+ 5 个”可拆匿名动作片段”,但反复强调”不是模板库、禁止挑最像的标签整套照抄、概念名必须当次任务重新推导”。
- 真实性边界:AI 图不得冒充历史档案/科学证据/真实数据,必要时标注”AI-generated illustration”;禁伪造杂志期号/logo/水印。
- 收尾检查清单 10 条(缩略图能否看出主体+至少一个视觉记忆点;截图是否真的符合 style.md 而非仅仅通过语法检查)。
七、kimi-widget(本轮已读全部原文)
SKILL.md(57 行全文已读)——iframe 运行时契约:
- 定位:”对话内联的紧凑视觉/交互面”——图示/仪表盘/计算器/滑块/对比/时间线/状态机/小仿真;结构存在即应主动出 widget,不需要用户说”可视化”;反面清单:普通散文答、逐行代码讲解、文件列表/最终交付物、阻塞式输入流、破坏性操作、大型长生命周期应用。
- 运行时:沙箱 iframe 预载 Kimi 设计系统 CSS,所有 CSS 变量/表单样式/SVG class 运行时可用,”引用而非重定义”。允许 HTML/SVG/CSS/内联 JS/原生 API;禁止外部脚本/模块/样式表/图片/字体/CDN/npm 包/fetch/WebSocket。
- 文案纪律:”Text goes in your response, visuals go in the widget”;”widget 渲染完不复述”。
- 回传:
window.sendPrompt(text)(宿主注入时可用),text 必须写成”用户真实会敲的消息”,禁止”我选择了选项A,请继续”式机器人腔。 - 强制门:除非用户已给定精确样式,写 widget 代码前必须先读 references/design-system.md;用图标必须先读 icon-system.md。
references/design-system.md(233 行全文已读)——”Kimi Perspective Widget”设计系统:
- 核心规则:黑白为主色、灰为层级系统;强调色只来自运行时 token 且是最后手段;交互强调用深色不用蓝(focus ring/hover/选中/主按钮全用
--kimi-color-text-primary;--kimi-color-accent蓝只留给数据可视化和真语义强调——原文:”Training data associates blue with interactive; Kimi does not.”);不设任何页面/卡片底色(宿主提供背景,用 transparent/inherit)。 - 图表色彩学:sequential 默认、categorical 例外(至多 5 色
--kimi-chart-1..5,超出用线型区分)、diverging 最后手段;同指标跨类目用同色系 opacity 阶梯(color-mix 100/70/50/40/25%);色盲安全(红绿不同图、灰度可辨、不只靠颜色)。 - 字体:一切用
var(--kimi-font-sans);数字用tabular-nums而非换 mono;mono 只给代码/hash/日志;只许 400/500 两个字重;永远 sentence case;句中不加粗。 - 组件纪律:破坏性行内操作 hover 才显现(opacity 过渡而非 display:none,保键盘可达);图标最大 24px,更大空缺用排版解决;间距吸附 4/8/12/16/20/24/32 标尺;嵌套圆角外大内小(inner = outer − padding,同心圆角检查);动效 token 60-300ms。
- 流式友好写作顺序(独特工程点):输出逐 token 流式、脚本最后才执行——所以先写
<style>+静态 HTML,数据内联,<script>放最后;优先内联 style 保证流式中途控件不崩;不写注释省 token;SVG 先<defs>;避免渐变/阴影(流式 DOM diff 会闪)。 - 运行时 token 映射表:
--kimi-color-text-primary..quaternary/--kimi-color-surface/--kimi-color-border/--kimi-color-danger|positive|warning/--kimi-chart-1..5/--t-micro..slow+--ease-/--kimi-font-sans|mono;宿主同步主题,widget 自己禁用 prefers-color-scheme。
references/icon-system.md(105 行全文已读)+ 图标库:105 个 SVG(已实地清点 assets/icons/ = 105 个 .svg),是完整 Kimi 图标库的”widget 子集”(品牌 logo、富文本格式、宿主 app 专属图标被有意排除)。24×24 viewBox、fill="currentColor"、1.8px 描边风格;manifest.json 每图标带 name/file/category/aliases(中英)/use_for/avoid_for/default_size 七字段(实测 AddIcon 条目:aliases 含”添加/新建/加号”,avoid_for 含”upload file”)——avoid_for 反向消歧是防误用的关键设计;13 个 category 分文件索引(general/arrows/chat/input/navigation/editor/media/file/status/image/data/social/system);选图标流程 5 步(意图→grep manifest→查 avoid_for→优先无后缀名→读文件内联);自绘图标必须与库内图标”视觉重量不可区分”,禁止凭记忆画 Lucide/Material/FontAwesome 形状。
八、工作流与交付闭环(为什么这个技能组”好用”)
- 输入侧高度结构化:step2 要求先判”请求类型(创建/编辑/复刻) × 设计方法(自主/设计系统/模板/风格迁移) × 输入类型(主题/全文/大纲) × 页数”四维,模糊就走 ask 工具澄清——把 PPT 生成从开放式生成变成分类路由。
- 产出侧确定性闭环:pptd(LLM 友好的 YAML)→
check --level auto(确定性修复)→screenshot(resvg 视觉回读)→ 多轮修复。 - 交付侧锁定云端:产物必须写
/mnt/agents/output/<folder>;禁止转 pptx 交付,交付物是 kimi_ref 卡片→前端编辑器(预览/编辑/批注回传/导出 pptx+图片/版本管理)。pptd 是”活格式”,pptx 只是导出产物之一——这是把用户留在自家编辑器的商业设计,也是技术上”CLI 不做 pptd→pptx”的原因。 - 反 AI 腔文案规范写进 SKILL.md(禁”不是 X 而是 Y”、”闭环”、”抓手”等),图片素材有明确优先级链(用户提供>官网/官方报告>搜索直相关>生成图凑氛围),并要求批量搜图后再按图片比例设计页面。
九、坑与限制(实测+官方自述)
convert有损:SKILL.md 两技能都写了”用户报告未改动区域损坏时,需解析原 pptx 对照修复”。- 文本类 check 是启发式(mock 文字尺寸),误报需人工/模型判断;screenshot 是 resvg 模拟渲染,与前端编辑器存在像素差。
- 硬限制散见规范:shape 不含文字、table/chart 不可旋转、customFonts 仅 Google Fonts 默认字重、ImageFill.src 仅 4 种图片格式、图表堆叠同类型仅一组、sankey 必须 DAG。
- CLI 平台覆盖只有 linux-x64/arm64(manifest 无 darwin/win 条目,尽管 bin 壳处理了 win32 后缀)。
- 字体包 68MB、CLI 二进制 14MB——私有化部署带宽成本。
十、移植评估表
| 组件 | 对 Hermes 价值 | 对 Kimi Code 价值 | 移植工作量 | 硬依赖 |
|---|---|---|---|---|
| .pptd DSL 规范(pptd.md 1639 行) | 高:AI 友好文档中间格式的设计范本,可直接用作 Hermes 文档产物的 DSL 蓝本 | 高:Kimi Code 生成 PPT/海报类产物可直接采纳该 DSL | 纯拷贝(md 文档) | 无 |
| check –level auto 校验范式(14+7 类规则、确定性修复四原则) | 高:「YAML DSL + 确定性校验修复闭环」是 runtime 无关的工作流范式 | 高:同样适用 | 需重写(规则逻辑在 Rust 二进制内,但规则语义已在 cli.md/pptd.md 完整文档化,可照着重实现) | 无(规则已文档化) |
| @kimi-slides/cli 二进制 | 中:能用但拿不到 | 中 | 不可移植:私有 GitLab registry(dev.msh.team 项目 6373)+ 闭源 Rust 二进制 + CDN 分发热更;沙箱内 vendor/kimi-slides 单二进制理论上可拷出但属闭源资产且只有 linux 版 | 闭源组件、私有 registry、statics.moonshot.cn |
| 字体包 25 TTF + fonts.json 别名机制 | 高:fonts.json 别名归一化(微软雅黑→MiSans 等)机制可直接抄;字体全部为开源字体(MiSans/思源/站酷/阿里妈妈/LXGW/Google Fonts),可合法搬走 | 高 | 纯拷贝(字体)+ 小适配(别名解析逻辑需自己实现,约 50 行) | 字体均为 OFL/免费商用授权,无法律硬依赖;68MB 体积 |
| fonts.md 选型指南(排版师知识显式化) | 中:写法值得学,内容可按需裁剪 | 中 | 纯拷贝 | 无 |
| 177 形状库 shapes.md | 中:OOXML adjustments 参数表是公开知识,文档化省调研 | 中 | 纯拷贝 | 无 |
| design_system 设计系统库(30 套命名族 + 30 套编号场景,md+jpg) | 高:PART A 品类基线 + PART B 签名系统的双层写法(含 HEX 色板/版式骨架/字体映射/密度基线)是”设计知识文档化”的成熟模板,可直接套用到 Hermes 的产物风格库 | 高 | 纯拷贝(md);jpg 预览图 78MB 可不搬 | 无 |
| slides_categories 7 场景文档 + 总则(反 AI 模式禁令) | 中:场景路由 + 每页读者任务的纪律可直接抄 | 中 | 纯拷贝 | 无 |
| general-poster.md 的 style.md 简报机制(方向探索纪律 + few-shot 反模板化) | 高:”先写设计简报再产出、记录落选理由与退化风险”是通用的防平庸化机制,可推广到 Hermes 所有视觉/文档产物 | 高 | 纯拷贝(机制) | 无 |
| kimi-widget iframe 契约 + 233 行设计系统 + 105 图标(manifest 七字段含 avoid_for) | 高(对 Hermes 前端型产物):sandbox 限制清单 + var(–xxx) token 纪律 + sendPrompt 回传契约 + 流式友好写作顺序,是”对话内嵌产物”的完整协议设计 | 中(Kimi Code 终端场景无 iframe 宿主,仅契约思想与图标 manifest 机制可借鉴) | 需适配(需 Hermes 前端宿主配合实现 token CSS 与 sendPrompt 桥);图标库+manifest 纯拷贝 | 宿主前端 |
| kimi_ref 交付闭环(前端编辑器/版本管理/批注回传) | 中:思想可借鉴,实现绑死 Kimi 云端编辑器 | 低 | 需重写 | 云端编辑器服务 |
| install.mjs 零依赖安装器模式 | 中:手写 zip 解析+SHA256+幂等 state 的内网分发模式可直接照搬到 Hermes 的二进制工具分发 | 中 | 纯拷贝(170 行) | 无 |
十一、密钥/凭证检查
本技能组采集范围内未发现密钥/token。唯一的凭证面:CLI 的 publishConfig 指向私有 registry dev.msh.team(无内嵌 token);资产 CDN statics.moonshot.cn 为公开静态地址(无鉴权参数)。
十二、采集完整性说明
本轮已实地通读:两份 SKILL.md、pptd.md 1639 行全文、cli.md、fonts.md、fonts.json、shapes.md 头部+结构、slides_categories.md 总则 + 7 场景文档全文、design_system 两套组织 + 2 套设计系统 design.md 全文(pine-green-strategy / dusk-violet-consulting)、general-poster.md 239 行全文、kimi-widget 三件套全文(SKILL.md 57 / design-system.md 233 / icon-system.md 105 行)+ 105 图标清点、CLI 包全部文本源码(package.json/bin/install.mjs/manifest/install-state)。
唯一未竟项:Rust 二进制(14MB)经单线程 http.server + frp 隧道多次断流,只完成头部约 1.5MB 的 strings 取证(已足够确认 resvg/usvg/cosmic-text/read-fonts/ratex 管线与 rust/render/* 模块名);未拿到子命令 help 与 pptx 写出段(zip/ooxml 序列化)的字符串证据。如需补采,建议在隧道稳定时分段 Range 拉取(注意该 http.server 不支持 Range,需整流拉取)。