一个 MIT 开源项目,作者 virgiliojr94,冲到 GitHub 8000+ 星。
地址:github.com/virgiliojr94/book-to-skill
一句话概括,它把一本技术书 PDF、EPUB、DOCX 或者一整个文档文件夹,编译成 Claude Code / GitHub Copilot CLI / Amp 都能加载的 Skill,之后按需查询。

它解决什么问题
直接把整本 PDF 拖进 Claude 的 project 或者 context,有三个具体的坑。
第一,一本 400 页的书大约 20 万 token,每一次对话都要全量重刷,费用不谈,注意力也被无关章节稀释。
第二,模型容易把不同章节的例子混在一起,或者引用书里根本不存在的段落。
第三,PDF 里的表格和代码块经过普通抽取后结构全丢,技术书里这两样恰恰是核心。
book-to-skill 的思路是把「找到正确章节」这件事从执行期挪到编译期。编译一次,之后每次提问只加载核心索引 + 相关章节,大约 5000 token 就能回答一个针对性问题,比整本塞进去省 24 到 51 倍。
编译产物长什么样
跑完 /book-to-skill your-book.pdf 之后,~/.claude/skills/<slug>/ 下会生成:
关键点是 chapters 里的每章文件默认不进 context,问到相关话题才被读进来。
支持的输入格式
PDF、EPUB、DOCX、TXT、Markdown、reStructuredText、AsciiDoc、HTML、RTF,以及 MOBI / AZW / AZW3 等 Kindle 格式。
Markdown 因为结构已经干净,编译最快;PDF 因为要过版面还原,最慢。
编译流程
编译前会先问一个问题:这是技术书还是文字书。
技术书走 docling,保留表格和代码块的 Markdown 格式,大约每页 1.5 秒文字书走 pdftotext → PyPDF2 → pdfminer.six的降级链,秒级完成
抽取完成后,Claude 自动分析文档结构,识别书名、作者、章节边界和目录,再逐章生成 800 到 1200 token 的摘要,最后统一产出 SKILL.md + glossary + patterns + cheatsheet。
技术书模式下,每章摘要额外保留一个 Code Examples 段和一个 Reference Tables 段。
安装
两个文件搞定,一句 curl。
mkdir -p ~/.claude/skills/book-to-skill/scriptscurl -o ~/.claude/skills/book-to-skill/SKILL.md \ https://raw.githubusercontent.com/virgiliojr94/book-to-skill/master/SKILL.mdcurl -o ~/.claude/skills/book-to-skill/scripts/extract.py \ https://raw.githubusercontent.com/virgiliojr94/book-to-skill/master/scripts/extract.py或者 git clone:
git clone https://github.com/virgiliojr94/book-to-skill.git \ ~/.claude/skills/book-to-skill或者在 Claude Code 里直接说一句:
Install book-to-skill: https://raw.githubusercontent.com/virgiliojr94/book-to-skill/master/SKILL.md依赖
纯文本、Markdown、reStructuredText、AsciiDoc 不需要装任何东西。
PDF 分两种:
sudo apt install poppler-utils | |||
pip3 install PyPDF2 | |||
pip3 install pdfminer.six | |||
pip3 install docling |
EPUB 推荐 pip3 install ebooklib beautifulsoup4。
一键自检当前环境:
python3 scripts/extract.py --check会列出每种格式当前用的抽取器和还缺哪个包。
使用
编译:
# PDF,自动从文件名推导 skill 名/book-to-skill ~/Downloads/designing-data-intensive-applications.pdf# EPUB,自定义名字/book-to-skill ~/books/clean-code.epub clean-code# 多个文件合并成一个 skill/book-to-skill ~/papers/paper1.pdf ~/notes/export.txt unified-research# 整个文件夹/book-to-skill ~/workspace/project-docs/ project-knowledge# glob/book-to-skill "~/books/*.epub" my-library# 向现有 skill 增量追加/book-to-skill ~/articles/new-paper.pdf ~/.claude/skills/project-knowledge编译完成后,像普通 skill 一样调用:
/designing-data-intensive-apps # 加载核心心智模型/designing-data-intensive-apps replication # 查某个话题/designing-data-intensive-apps ch05 # 直接看第 5 章/designing-data-intensive-apps "what chapters do you have?"GitHub Copilot CLI 需要 /skills reload 刷新一下 skill 列表。Claude Code 和 Amp 下次会话自动识别。
和 RAG 的区别
跨几十本书搜索还是 RAG 的主场;深入一本书用它的框架,book-to-skill 更合适。
不只是书
作者在文档里明确说了几类适合的场景:
内部文档、架构决策记录、runbook、onboarding 指南 品牌语调手册、设计系统原则 一组相关论文加个人笔记,合并成一个统一 skill,可持续增量追加 RFC、API 契约、合规文档
判断标准很简单,一份文档如果被反复打开、多到希望自己已经背下来,就是候选。
局限
需要清楚的三点:
第一,Skill 是编译期的一次性快照,书改版了要重新编译。
第二,摘要本身由模型生成,抽取过程仍可能漏掉或扭曲细节,它降低的是「无中生有」类幻觉,不保证逐字正确。
第三,跨大量无结构文档库的场景,向量检索仍然更合适。
项目自身
全部代码 1300 行左右,两个核心文件:SKILL.md(skill 定义,约 530 行)+ scripts/extract.py(抽取脚本,约 830 行) MIT 协议 大于 50K token 的书(130 页以上),SKILL.md 用 grep + sed 按章切片读取,避免自身编译时占满 context 不携带任何书本内容,是一个转换器,只处理用户自己的文件
以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~
谢谢你看我的文章,我们,下次再见。
夜雨聆风