Install
openclaw skills install @samonysh/cookbook-forgeGenerates deep technical CookBooks, Handbooks, and Surveys from user materials (websites, PDFs, EPUBs, GitHub repos, arxiv papers, docs). Produces MDX chapters first, then ElegantBook LaTeX/PDF, Nextra website, and optimized EPUB. Invoke when user asks to write a Cookbook, handbook, survey, technical book, or structured long-form documentation for a project/domain.
openclaw skills install @samonysh/cookbook-forgeDomain CookBook / Handbook / Survey 生成器。从用户提供的自然语言需求与多源资料(网页、PDF、EPUB、GitHub、arxiv 论文、项目文档等)出发,按照 O'Reilly CookBook 与 Springer Handbook 的行文布局风格,先生成章节化 MDX(基于 unified/MDX),再按用户指定转换为:
默认输出 MDX;用户可指定任意子集组合。每个输出格式独占一个子文件夹。
满足以下任一条件时调用本 Skill:
latex-to-nextra-site。epub-reader-optimizer。elegantbook-latex。本 Skill 是编排型 Skill,执行时按需联动以下能力(由主 agent 在调用本 skill 后自行调度,或由本 skill 描述指示):
| 能力 | 用途 |
|---|---|
agent-browser / vivaldi-automation | 爬取网页、抓取站点地图、遍历文档站 |
WebFetch / WebSearch | 获取网页内容、网络搜索补充资料 |
arxiv-watcher / connected-papers-browser | 获取 arxiv 及相关论文 |
doc2x-cli | PDF OCR/解析为 Markdown/文本 |
gh-cli | 读取 GitHub 仓库结构、README、源码、docs |
plantuml / drawio / excalidraw / chart-visualization | 生成图表(架构图、类图、时序图、流程图、数据图表) |
elegantbook-latex | 编译 ElegantBook LaTeX → PDF |
Read / 文件读取 | 本地 EPUB、MD、代码、PDF 文本提取 |
本 Skill 自带 assets 与 scripts:
scripts/epub-zip.mjs — EPUB 合规打包(Node 内置 zlib 手写 ZIP,零依赖;保证 mimetype STORED 且为第一;打包后遍历 central directory 二次校验)。scripts/subset-fonts.mjs — 字体子集化(基于 fonteditor-core,TTF → WOFF2;未安装时会提示 npm install fonteditor-core 并给出 Python fallback 命令)。scripts/optimize-formula-images.mjs — 公式即图片型 HTML 结构修复(纯 JS 正则替换)。scripts/mdx2tex.mjs — MDX → ElegantBook LaTeX 转换器(先按 code fence 分块,避免代码内 #/{}/_ 被转义;从 frontmatter 读 title;支持 callout→tcolorbox、表格→tabularx、图片→figure、列表→itemize)。scripts/word-count.mjs — 字数统计(GFM 表格按"表头+分隔行"块计数,不再虚高)。scripts/build-epub.mjs — MDX → EPUB 完整构建(tokenize-first 转换;callout→div.class;代码块不被 heading 正则误伤;自动拷贝图片并登记 MIME;CSS 追加 callout/math/table/code 样式)。scripts/kroki-render.mjs — PlantUML 通过 Kroki.io 远程渲染(deflate+base64url 编码 GET,含隐私提示)。assets/nextra-template/scripts/scaffold-nextra.mjs — 把模板里的 {{BOOK_SLUG}}/{{BOOK_TITLE}}/{{GITHUB_REPO_URL}}/{{YEAR}} 占位符替换为真实值,自动拷贝 mdx→pages/zh、figures→public/figures、生成 pages/en 英文骨架。assets/stylesheet.template.css / assets/stylesheet.formula-image.css — EPUB 样式表。assets/template-mdx/ — 单章 MDX 模板(含 $$ 块级公式写法约定)。assets/nextra-template/ — Nextra 站点骨架(已启用 mermaid + KaTeX)。references/style-guide-oreilly.md — O'Reilly CookBook 行文布局参考。references/style-guide-springer.md — Springer Handbook 行文布局参考。产出一本面向目标读者(默认是中高级开发者/架构师/研究者)的深度书籍。要求:
mdx/、latex-pdf/、nextra-site/、epub/ 子文件夹。<BookSlug>/
├── mdx/ # 权威中间格式(默认必出)
│ ├── index.mdx # 封面/扉页
│ ├── preface.mdx
│ ├── ch00-overview.mdx # 全景图章
│ ├── ch01-xxx.mdx
│ ├── ...
│ ├── appendix-a.mdx
│ ├── references.mdx
│ ├── _meta.ts # 章节顺序(Nextra 兼容)
│ └── public/
│ ├── figures/ # 图片 / 渲染后的图表
│ └── diagrams-src/ # plantuml/.drawio/mermaid 源
├── latex-pdf/ # 当用户要求 PDF 时生成
│ ├── latex/
│ │ ├── main.tex
│ │ ├── elegantbook.cls
│ │ ├── chapters/
│ │ ├── figures/
│ │ ├── diagrams/
│ │ └── metadata/
│ └── dist/<BookSlug>.pdf
├── nextra-site/ # 当用户要求网站时生成
│ ├── package.json
│ ├── next.config.mjs
│ ├── theme.config.tsx
│ ├── middleware.js
│ ├── pages/zh/*.mdx
│ ├── pages/en/*.mdx # 英文骨架(可选)
│ ├── public/figures/
│ ├── scripts/
│ ├── Dockerfile
│ └── docker-compose.yml
├── epub/ # 当用户要求 EPUB 时生成
│ ├── <BookSlug>.epub
│ └── build/ # 解包/构建中间目录(交付前可清理)
└── metadata/
├── sources.md # 所有参考资料来源
├── image-sources.md
├── word-count.txt
└── outline.md # 最终章节大纲(与用户对齐版)
识别用户输入:
若有缺失,用 AskUserQuestion 简洁询问,不要一次问超过 4 个问题。
按以下顺序穷尽资料,建立 metadata/sources.md:
WebFetch 抓正文;若是文档站,遍历 sitemap.xml 或导航栏抓取所有相关页。gh-cli 读取 README、docs/、examples/、源码关键目录、CHANGELOG、issues/PR 中的设计讨论。arxiv-watcher 获取摘要、全文 PDF;如需相关论文用 connected-papers-browser。doc2x-cli 做 OCR/解析为 Markdown;扫描版优先 OCR。WebSearch 搜博客、演讲、RFC、设计文档。每条资料记录:URL/路径、标题、作者/组织、访问日期、使用章节。
参考 O'Reilly CookBook 与 Springer Handbook 结构,产出 metadata/outline.md:
典型结构(按书的规模缩放,短篇手册可精简):
00 前言、目标读者、阅读路线、致谢
01 领域/项目全景图(含一张总览架构图,必读)
02 基础概念与术语
03 快速开始 / Hello World / 最小可运行示例
04 安装、环境、构建系统
05 核心概念与编程模型
06 整体架构(架构图)
07 关键模块/子系统深度解析(分多章)
08 核心调用链/生命周期/数据流(时序图/流程图)
09 配置、扩展、插件机制
10 实战 Recipes(至少 10–20 个任务导向案例)
11 性能、安全、可观测性、错误处理
12 测试与调试
13 部署与生产实践
14 生态、对比、路线图
15 总结与展望
附录 A API/配置速查表
附录 B 术语表
附录 C 参考资料
每章在大纲中写明:
必须用 AskUserQuestion 把 outline.md 发给用户确认后再进入写作阶段。
每章一个 .mdx 文件,放入 mdx/。章节命名规则 chNN-slug.mdx,附录 appendix-X-slug.mdx。
---
title: "第 1 章 项目全景图"
chapter: 1
slug: "ch01-overview"
wordCountTarget: 4000
status: "draft"
references:
- "https://example.com/docs"
- "sources.md#section-1"
---
参考 references/style-guide-oreilly.md 与 references/style-guide-springer.md,每章按如下模板组织(来自 assets/template-mdx/chapter-template.mdx):
```mermaid 代码围栏,Nextra 客户端渲染;导出 PDF 时通过 mermaid-cli 渲染为 PNG/SVG。mdx/public/diagrams-src/*.puml,渲染为 SVG 放入 mdx/public/figures/。渲染后端选择优先级(根据可用工具):
docker run --rm -v <srcDir>:/data -v <outDir>:/out plantuml/plantuml:latest -charset UTF-8 -output /out -tsvg /data/<file>.puml;每个 .puml 必须含 skinparam defaultFontName "WenQuanYi Micro Hei";渲染脚本(scripts/render-plantuml.mjs)必须同时产出"按文件名"与"按 @startuml alias"两份 SVG 以避免 404。node scripts/kroki-render.mjs <input.puml> <output.svg> 走 https://kroki.io/plantuml/svg/<deflate-base64url>。注意 Kroki 运行的 PlantUML 版本较旧,不支持 <style> CSS 块,必须使用 skinparam 变体(见 assets/template-mdx)。会把 .puml 源码 POST 到 kroki.io,涉密图不要用。plantuml.jar(需要 Java):离线 fallback。.drawio 源码存 diagrams-src/,导出为 .drawio.svg。.excalidraw 源码 + 导出 PNG/SVG。chart-visualization skill 生成 PNG/SVG。每张图必须:
<div className="overflow-x-auto"> 包裹。python / typescript 等)。# file: src/core/engine.py)。<、>、{、} 必须转义或包在代码块/反引号中。$E=mc^2$,块级 $$...$$(KaTeX 兼容)。[见第 3 章](./ch03-xxx.mdx)。写完所有章节后:
metadata/word-count.txt。mdx/ 目录。mdx/_meta.ts(章节顺序 + separator 分组)。调用 elegantbook-latex skill,按以下流程:
latex-pdf/latex/ 下初始化 ElegantBook 工程(参考 project-cookbook-latex 的目录规范):
main.tex 全局配置 + \input{chapters/...}chapters/ 每章一个 .texfigures/ 放图片(从 mdx/public/figures/ 拷贝)diagrams/ 放图表源metadata/ 放 sources / word-count / build-notesscripts/mdx2tex.mjs 或 pandoc + 后处理),关键映射:
# 标题 → \chapter{} / \section{} / \subsection{}**粗体** *斜体* → \textbf{} \emph{}booktabs + tabularx,宽表用 xltabular/longtabletcolorbox + listings 环境(见 project-cookbook-latex §10)<div className="callout xxx"> → \begin{tcolorbox}[...] 自定义环境\includegraphics + \begin{figure}$...$ / $$...$$ 数学公式原样保留\ref{ch:xx} / \autoref参考 latex-to-nextra-site skill,流程:
assets/nextra-template/ 拷贝骨架到 nextra-site/。node nextra-site/scripts/scaffold-nextra.mjs --slug <BookSlug> --title "<Book Title>" --github <URL> --year <YYYY>:
package.json/theme.config.tsx/docker-compose.yml 里的 {{XXX}} 占位符替换为真实值mdx/*.mdx → nextra-site/pages/zh/*.mdx(图片路径自动从 public/figures/ 改为 /figures/)pages/en/*.mdx 英文占位骨架("English translation in progress")mdx/public/figures/* → nextra-site/public/figures/.drawio.svg;其他图片拷贝到 public/figures/。npm install。npm run prepare:meta 生成 pages/zh/_meta.ts(含 separator 分组,reading-order 编号)。scripts/renumber-content.mjs 把"第 N 章"引用链接化(幂等,跳过已链接部分)。next.config.mjs 已启用 KaTeX + mermaid + standalone 输出;theme.config.tsx 配 i18n、logo、暗色模式、搜索、mermaid 开关。middleware.js 根路径重定向到 /zh。styles/globals.css 含 callout/figure/表格滚动/下载按钮样式。npm run build 必须成功(warning 允许,error 必须为零)。Dockerfile + docker-compose.yml(三阶段构建 + healthcheck),docker compose up -d --build 验证 healthy。DEPLOY.md 说明 GitHub + Vercel + Docker 三路部署。关键陷阱(务必遵守):
plantuml/plantuml:latest,不要用内置 PS1 脚本(GBK PowerShell 会失败)。skinparam defaultFontName "WenQuanYi Micro Hei",否则中文豆腐块。@startuml NAME 决定,脚本必须同时产出 "按文件名" 与 "按 alias" 两份 SVG/PNG。</> 必须转义为 </>。npm run build 出现 [nextra] Next.js doesn't support i18n by locale folder names 是已知告警,可忽略。从 mdx/ 权威内容生成 EPUB(不是从 PDF/LaTeX 反推):
epub/build/ 下建立 EPUB3 结构:
mimetype(第一文件,STORED,内容固定 application/epub+zip)META-INF/container.xmlOEBPS/content.opf(清单 + spine + 元数据)OEBPS/toc.ncx + nav.xhtml(导航)OEBPS/Text/*.xhtmlOEBPS/Images/(拷贝图)OEBPS/Fonts/(LXGW WenKai 子集化 WOFF2)OEBPS/css/stylesheet.cssassets/stylesheet.template.css 作为基础样式,若内容包含公式图片场景则额外引入 assets/stylesheet.formula-image.css,要求:
scripts/subset-fonts.mjs:
fonteditor-core(npm install fonteditor-core)从 xhtml 收集实际使用字符后做 TTF→WOFF2 子集化fonttools+brotli) fallback 命令content.opf 登记 media-type="font/woff2"scripts/optimize-formula-images.mjs 修复 HTML 结构。scripts/epub-zip.mjs 打包(手写 ZIP,mimetype STORED 且为第一;零依赖)。mimetype 是第一个条目且 STOREDnamelist()[0] == "mimetype"EPUB 样式贴近 ElegantBook(中文衬线/楷体、蓝色标题、代码块左侧蓝条),但要兼容老旧电子阅读器:
!important 覆盖阅读器主题@media (prefers-color-scheme: dark) 块(防白底白字)metadata/word-count.txt 写入最终统计(中文字符、英文词数、估算总字、章节数、Recipe、表格、代码块、图表数)。metadata/sources.md 列出所有参考资料。epub/build/、latex/latex/.aux 等)。cd nextra-site && npm install && npm run dev;PDF:直接打开 PDF;EPUB:直接打开)交付前必须逐项打勾:
metadata/sources.md 记录所有参考资料_meta.ts 章节顺序正确npm run build 成功;Docker healthy;/zh 200;所有图表 200每个生成的书籍项目根目录必须包含:
README.md(中文):简介、目录、本地产出、格式说明、贡献指南README.en.md(英文):同上英文版DEPLOY.md 说明 GitHub/Vercel/Docker 部署本 Skill 自身目录包含:
SKILL.md(本文件,英文 description,中文正文)README.md(中文,skill 自身使用说明)README.en.md(英文)| 现象 | 根因 | 处理 |
|---|---|---|
| PlantUML 中文豆腐块 □□□ | .puml 未声明 CJK 字体 | 每个 .puml 加 skinparam defaultFontName "WenQuanYi Micro Hei" |
| PlantUML 图引用 404 | 输出名按 @startuml NAME 不按文件名 | 渲染脚本产出文件名 + alias 双份 |
Nextra 构建 MDX 解析错误 < | 正文裸 < 被识别为 JSX | 转义 </> 或包反引号 |
Nextra npm run build i18n 告警 | Nextra pages/zh + Next.js i18n 同存 | 已知告警,可忽略 |
| Docker 构建后容器秒挂 | next.config.mjs 未设 output: 'standalone' | 开启 standalone;Dockerfile COPY public/ |
| EPUB 文字变白看不见 | 阅读器误触发 dark scheme | 强制白底黑字 !important;删掉 dark media 块 |
| EPUB 嵌入字体让书变 30MB | 用了完整 TTF | fontTools 子集化转 WOFF2,单字体 ~300KB |
| EPUB 打包后打不开 | mimetype 不是第一/被压缩 | 必须 Python zipfile,mimetype STORED 优先写入 |
PDF 出现 | --- | Markdown 表格 | 未转 LaTeX 表格 | mdx2tex 脚本必须把 GFM 表格转为 booktabs/tabularx |
| PDF 封面空白 | 图片不存在/尺寸错 | 严格 1280×1024;验证文件存在 + PDF 首页非空 |
| 跨章引用"第 N 章"编号错乱 | reading order ≠ 文件名 | 跑 renumber-content.mjs 链接化 |
| 字数不够 8 万 | 只写了使用文档没深入原理/源码 | 扩写 Recipes、源码解析、配置速查、附录 |
| 资料受限无法抓取 | 网站有反爬/登录墙 | 不绕过限制;改用可访问来源并告知用户 |
执行时用 TodoWrite 建立:
0. 识别输入:主题、资料、读者、字数、输出格式、图表偏好、语言、封面、部署参数
1. 穷尽式资料采集(URL/GitHub/arxiv/PDF/EPUB/本地目录/网络补充)→ metadata/sources.md
2. 设计章节大纲(含全景图、每章目标/字数/图表/来源)→ metadata/outline.md
3. AskUserQuestion 与用户对齐 outline
4. 准备封面图片(1280×1024,记录来源)
5. 逐章写作 mdx/*.mdx(含引入/地图/原理/实用/Recipes/陷阱/要点/延伸阅读)
6. 生成 mdx/public/diagrams-src/ 下的图表源 + 渲染到 mdx/public/figures/
7. 字数统计;不足则扩写
8. 生成 mdx/_meta.ts
9a. [可选] MDX → ElegantBook LaTeX,xelatex 两遍编译出 PDF
9b. [可选] 初始化 Nextra 站点,拷贝 mdx,渲染图表,npm run build + Docker 验证
9c. [可选] MDX → EPUB,子集化字体,Python 打包,自检
10. 写中英文 README + DEPLOY.md(若有 Nextra)
11. 清理中间目录,输出最终交付链接 + 统计报告
请基于 https://docs.dapr.io/ 和 GitHub 仓库 dapr/dapr,
以及《Dapr 实战》PDF 这本书,
生成一本 10 万字的 Dapr CookBook,
目标读者是中高级后端开发者,
输出 MDX + PDF + Nextra 网站,
图表用 plantuml 和 mermaid,
需要封面,网站名 Dapr CookBook,
部署到 Vercel。
执行:按上述阶段 0–6 全流程,最终交付 Dapr-CookBook/{mdx,latex-pdf,nextra-site}/。
Compress-Archive 打包 EPUB(必须 Python zipfile)。docker run plantuml/plantuml:latest。