{"full_name":"virgiliojr94/book-to-skill","owner":"virgiliojr94","name":"book-to-skill","url":"https://github.com/virgiliojr94/book-to-skill","description":"Turn any technical book PDF into a Claude Code skill — ready to study, reference, and use while you work.","homepage":"","topics":[],"language":"Python","license":"MIT","avatar":"https://avatars.githubusercontent.com/u/23645449?u=166e1f40a5f894c33cbf5341f6623fd83df4e69b&v=4","created_at":"2026-05-01T02:09:39Z","pushed_at":"2026-11-08T21:22:31Z","metrics":{"stars":37515,"forks":3973,"watchers":149,"issues":77,"prs":251,"releases":5,"issues_open":null,"issues_closed":null,"prs_open":null,"prs_closed":null,"prs_merged":null,"discussions":0},"growth":{"day":{"stars":87,"forks":14,"base_day":"2026-11-09"},"week":{"stars":738,"forks":79,"base_day":"2026-11-03"},"month":{"stars":4056,"forks":476,"base_day":"2026-10-11"}},"history":{"dates":["2026-09-06","2026-09-07","2026-09-08","2026-09-09","2026-09-10","2026-09-11","2026-09-12","2026-09-13","2026-09-14","2026-09-15","2026-09-16","2026-09-17","2026-09-18","2026-09-19","2026-09-20","2026-09-21","2026-09-22","2026-09-23","2026-09-24","2026-09-25","2026-09-26","2026-09-27","2026-09-28","2026-09-29","2026-09-30","2026-10-01","2026-10-02","2026-10-03","2026-10-04","2026-10-05","2026-10-06","2026-10-07","2026-10-08","2026-10-09","2026-10-10","2026-10-11","2026-10-12","2026-10-13","2026-10-14","2026-10-15","2026-10-16","2026-10-17","2026-10-18","2026-10-19","2026-10-20","2026-10-21","2026-10-22","2026-10-23","2026-10-24","2026-10-25","2026-10-26","2026-10-27","2026-10-28","2026-10-29","2026-10-30","2026-10-31","2026-11-01","2026-11-02","2026-11-03","2026-11-04","2026-11-09","2026-11-10"],"stars":[24077,25160,25493,25841,26153,26403,26624,26991,27783,27944,28198,28506,28661,28948,29112,29278,29709,30030,30244,30632,30769,30897,31018,31116,31305,31815,31982,32128,32265,32400,32558,32888,33016,33240,33299,33459,33834,33959,34059,34197,34310,34425,34652,34757,34850,34967,35059,35144,35458,35582,35729,35858,35967,36184,36280,36416,36500,36578,36777,36862,37428,37515],"forks":[2537,2618,2635,2673,2714,2740,2761,2795,2869,2884,2915,2952,2977,3011,3025,3051,3086,3117,3138,3174,3188,3202,3217,3228,3249,3302,3317,3335,3359,3374,3394,3436,3451,3474,3478,3497,3540,3560,3578,3597,3609,3621,3636,3651,3659,3676,3688,3698,3744,3760,3773,3788,3806,3826,3851,3862,3870,3877,3894,3906,3959,3973],"watchers":[116,117,118,120,121,121,121,123,130,129,130,131,131,134,133,133,135,137,138,138,138,137,138,139,141,144,144,144,145,145,147,147,147,145,145,146,147,147,147,147,147,145,146,147,147,147,146,146,149,149,152,152,148,149,149,149,148,148,147,148,149,149],"issues_open":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"prs_open":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"boards":{"weekly":154,"monthly":134,"weekly_rate":152,"monthly_rate":136},"same_owner":[],"issues":[{"number":309,"title":"Proposal: slim down the installed skill payload (split runtime files from dev/site files)","comments":4,"created_at":"2026-10-27T23:23:59Z"},{"number":128,"title":"PDF: `pdftotext -layout` interleaves columns on multi-column documents, and the word-based token estimate hides the 26x size blowup","comments":3,"created_at":"2026-08-10T01:48:47Z"},{"number":169,"title":"The generator's own SKILL.md is 7k tokens with zero references — 52% of it loads before the run knows it can proceed","comments":2,"created_at":"2026-08-15T22:27:56Z"},{"number":263,"title":"[bug] BeautifulSoup HTML/EPUB extraction inserts newlines inside inline headings and code tokens","comments":1,"created_at":"2026-10-01T02:14:05Z"},{"number":259,"title":"[bug] Interrupted-run reuse accepts missing or corrupted extracted text","comments":1,"created_at":"2026-09-30T18:44:35Z"},{"number":326,"title":"[bug] Reused workdir can retain stale PDF page evidence","comments":0,"created_at":"2026-11-06T14:27:13Z"},{"number":322,"title":"[bug] EPUB fallback ignores XML whitespace around attribute equals","comments":0,"created_at":"2026-11-05T13:46:04Z"}],"discussions":[],"latest_release":{"name":"v1.4.0","tag":"v1.4.0","published_at":"2026-08-10T19:06:32Z","body":"Extraction reliability release: six fixes for silent content loss or silent wrong answers, plus the first changelog generated from commit messages.\n\n**Highlights**\n\n- **Scanned PDFs fail fast.** An image-only PDF used to run the whole extraction chain — Docling across every page in technical mode — before failing with a message about Unicode sanitization. It now stops on the first pages in ~0.01s and tells you to run `ocrmypdf` (#130), and the docs finally state the limit (#132).\n- **Real words stopped being deleted.** Page-edge cleanup treated any short word built from `ivxlcdm` as a page number, so \"MIX\", \"CIVIL\" and \"VIVID\" vanished when they were alone on a page's first or last line (#119).\n- **Table-of-contents detection no longer depends on input order.** With multiple sources, `has_toc` was re-derived over the joined corpus and its 30k-char window only ever covered the first book — the same two books in the opposite order gave opposite answers (#114).\n- **A single unreadable file no longer aborts the batch** (#120), and `~` in a quoted glob is expanded, so the README's own example works (#118).\n- **CJK tables of contents with inserted whitespace** (`目 录`, including the ideographic space) are detected (#112).\n- **The generated-skill scanner reads nested chapters** and reports Markdown it left out of scope instead of printing an unqualified pass (#115).\n\nThanks to @Zhengzhongjie, @Hotragn, @aryansk and @dex0shubham for these fixes.\n\n---\n\n### Added\n- Warn on unknown CLI flags instead of silently ignoring (#89)\n- Make the site indexable and shareable\n- Add Booklin banner and hand-made share card\n- Apply pdftotext cleanup to pypdf and pdfminer paths too (#101)\n\n### Documentation\n- Sync architecture, skill spec, and README with v1.3.0\n- Reserve README project listings for sponsors\n- Add Booklin mascot to the README (#106)\n- Split README into pages and add Booklin mascot set (#110)\n- State that scanned PDFs need OCR first (#132)\n\n### Fixed\n- Gate lowercase Roman behind heading context, add FP coverage (#88)\n- CJK-aware token estimate (rescued from #70) (#103)\n- Support documented help flags (#97)\n- Emit block boundaries at end tags in the stdlib parser (#107)\n- Skip control destination groups in the dependency-free fallback (#109)\n- Scrub bidirectional controls and remaining invisible code points (#108)\n- Write metadata.json as UTF-8 (#105)\n- Detect Markdown-prefixed chapter headings (#91) (#92)\n- Reserve the banner's space on the site build\n- Abort early on scanned PDFs with an OCR hint (#130)\n- Stop edge-of-page cleanup deleting real one-word lines (#119)\n- Expand `~` in input paths (#118)\n- Skip an unreadable source instead of aborting the batch (#120)\n- Detect a table of contents in any source, not just the first (#114)\n- Scan nested chapters and report markdown left out of scope (#115)\n- Detect whitespace-separated CJK ToC headers (#112)\n- Stop duplicating the PR number in generated entries (#131)\n\n### Miscellaneous\n- Untrack stale compiled bytecode (#94)\n- Generate CHANGELOG from commits with git-cliff (#104)\n\n### Notes on selected changes\n\n*Written by hand before this file became generated; kept for the detail the\none-line entries above do not carry.*\n\n**CJK-aware token estimate** — `estimate_tokens` now counts CJK codepoints\ndirectly (against `CJK_CHARS_PER_TOKEN`) instead of whitespace-delimited words,\nfixing a ~1000× undercount for space-less Chinese/Japanese books in the cost\npre-flight. Latin behavior is unchanged and the estimate stays deterministic\nand dependency-free (rescued from #70).\n\n**Stale tracked bytecode** — `scripts/__pycache__/extract.cpython-313.pyc` was committed\nalongside the EPUB-support change and has been tracked ever since, despite `.gitignore`\nlisting both `*.pyc` and `__pycache__/` (ignore rules do not untrack already-committed\nfiles). The file was inert — its timestamp-based header records a 11,321-byte source while\n`scripts/extract.py` is now 871 bytes, so Python always invalidated it and re"},"readme":true,"readme_zh":true,"news":[{"title":"Book-to-skill: Turn a technical book PDF into a Claude Code skill","url":"https://github.com/virgiliojr94/book-to-skill","hn":"https://news.ycombinator.com/item?id=48649087","source":"Hacker News","lang":"en","date":"2026-06-23","points":3,"comments":1},{"title":"GitHub爆火项目book-to-skill：把书变成实战技能的免费训练系统","url":"https://blog.csdn.net/weixin_42529328/article/details/165510979","source":"blog.csdn","lang":"zh","date":"2026-09-15"},{"title":"从读书到掌握技能：book-to-skill如何引爆GitHub，打造高效学习闭环","url":"https://blog.csdn.net/weixin_42522669/article/details/165138723","source":"blog.csdn","lang":"zh","date":"2026-09-12"},{"title":"book-to-skill 使用教程：把任意文档蒸馏成 AI Skill 个人知识库 Agent 技能详解","url":"https://blog.csdn.net/qq_34958121/article/details/163916135","source":"blog.csdn","lang":"zh","date":"2026-09-03"},{"title":"Github八月开源 Top 10：500+ GPT 生图神级灵感库、DeepSeek Harness、AI 入门课 ...","url":"https://www.bilibili.com/pt/video/BV1H6tA6DE13/","source":"bilibili","lang":"zh","date":"2026-08-28"},{"title":"読んだ本をAIスキル化する「book-to-skill」——技術書が、いつでも参照できる辞書になる","url":"https://note.com/aihelp/n/ndf0e76bbbe6b","source":"note","lang":"zh","date":"2026-08-17"},{"title":"book-to-skill이란? 사내 문서에 응용하면 RAG는 필요 없어질까, 엔지니어를 위한 해설","url":"https://note.com/obataka123/n/nabc57943ce67?hl=ko","source":"note","lang":"en","date":"2026-07-29"},{"title":"从GitHub周榜看Skill崛起：AI能力包如何重塑开发范式","url":"https://news.google.com/rss/articles/CBMiX0FVX3lxTFBfb0lqWkswN3BpLVUtNDJJbDhvVDdpZUZXY2VZS3AyX0FrbG9GMTRTVFRZbUpCUkZqYWR0cnZQbll6cXd2REVMUEp2ZnZGVnE2cUFBZWVBRDYyWFZMTWIw?oc=5","source":"CSDN","lang":"zh","date":"2026-11-09"},{"title":"GitHub周榜权力交接：Skill退烧，大厂接棒定标准","url":"https://news.google.com/rss/articles/CBMiXkFVX3lxTE40ZEJaOVQzRU16MTNCUTh3TDJ1dDhUeDFack9iNUtZRWpIV2Ftb2VXVDE4VncwQXJIbjRKUm5qNGJlVzBJYWZxS3duRWVyUnk1eFk4dm5MMFNmTGVmc3c?oc=5","source":"CSDN","lang":"zh","date":"2026-11-09"},{"title":"GitHub周榜揭示AI Agent技能生态交接：Skill退烧后大厂接棒","url":"https://news.google.com/rss/articles/CBMiXkFVX3lxTE1QTVB6Wl82VFNaWlc1ODFPdk83SWlTTlZ4bEpuLTRiUFh2cWRDWVpNOXdhb3p4eU5YT1p4QlpNTDNrVXhhdmpUZWltdlVQX2xRampiNTlnNXZ5eW5JUEE?oc=5","source":"CSDN","lang":"zh","date":"2026-11-09"},{"title":"GitHub周榜观察：Skill类项目热度暴涨，如何理解并手写技能包","url":"https://news.google.com/rss/articles/CBMiX0FVX3lxTE1QVXloQWtWY29kcnNVRW1VSGxYcGVPOWdBZ3QxRThnakh0SGRmTi1rZ1M0RFpSbC1faDBOM0xXd0pRLWpBaTBxUTJ0WXQyVXVCaGVoVFNlMl9VUy1UX2tr?oc=5","source":"CSDN","lang":"zh","date":"2026-11-06"},{"title":"GitHub周报Skill霸榜：从SKILL.md到AI技能包，轻量方案逆袭Agent","url":"https://news.google.com/rss/articles/CBMiX0FVX3lxTE9KaFJDaUd4WjBKR2hwa3dTZ0owTHR5Z2hfNjNfWVhGcEVLT2VNeDcxQ0Q3Q0o1MndPbmxCVmN1VzVNNDBYTDIwUlllelh1aEIwVWcwUUtUT0E0ZTlEUG1r?oc=5","source":"CSDN","lang":"zh","date":"2026-11-06"},{"title":"GitHub周报解读：Skill技能包为何成为AI应用新焦点","url":"https://news.google.com/rss/articles/CBMiX0FVX3lxTFBPeEVMTTJjQ1UzLXlXUko0Qno2ZkJzaE5rUkRiNUZhbVhubVNwUEkxS09QMkdjckZqWmlJXzlpbnl2ZXNzdmJZLVFzREVZaTg0dEVFWFl2cFVsdTVWZ3NN?oc=5","source":"CSDN","lang":"zh","date":"2026-11-06"}],"stale":false,"snapshot_at":"2026-11-10T09:35:25Z","history_start":"2026-09-06"}