[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71BD9M8SMXJGTDCC9X6VMEB":3,"skill-same:01M71BD9M8SMXJGTDCC9X6VMEB":53},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":34,"repositoryHtmlUrl":35,"repositoryHomepageUrl":36,"ownerHtmlUrl":37,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":38,"install":39,"resources":52},"01M71BD9M8SMXJGTDCC9X6VMEB","epub-ebooklib",null,"Build an EPUB with Python ebooklib without producing empty chapters; use whenever creating .epub files.","agentforce314\u002Fclawcodex","agentforce314","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F273884145?v=4","01M71BD6XFN30RH9ZYF9RZARGV","01M71BD6Y206V5GKMW18YF52SX",927,"MIT","https:\u002F\u002Fgithub.com\u002Fagentforce314\u002Fclawcodex\u002Fblob\u002Fmain\u002Fdocs\u002Fexamples\u002Fskills\u002Fepub-ebooklib\u002FSKILL.md",[],[18,19,20,21,22,23,24,25],"epub","epub ebooklib","python","use","files","build","empty","with","2026-11-10 10:12:30",false,"---\nname: epub-ebooklib\ndescription: Build an EPUB with Python ebooklib without producing empty chapters; use whenever creating .epub files.\n---\n\n# Building EPUBs with ebooklib\n\n- Run with `\u002Fusr\u002Fbin\u002Fpython3` if the default python lacks ebooklib.\n- Set chapter content as BYTES with no XML declaration: `ch.content = html.encode(\"utf-8\")`, where `html` starts with `\u003Chtml ...>` and NOT `\u003C?xml ...?>`. A str starting with `\u003C?xml` silently serializes as an empty chapter.\n- Escape text (`html.escape`) and wrap paragraphs in `\u003Cp>`.\n- Add every chapter to `book.spine` and a `epub.EpubNcx()` \u002F `epub.EpubNav()`.\n- Right after `epub.write_epub`, verify once: unzip the file, check each chapter xhtml is larger than ~500 bytes. Fix at once if not, then stop; do not re-verify repeatedly.\n","# Building EPUBs with ebooklib\n\n- Run with `\u002Fusr\u002Fbin\u002Fpython3` if the default python lacks ebooklib.\n- Set chapter content as BYTES with no XML declaration: `ch.content = html.encode(\"utf-8\")`, where `html` starts with `\u003Chtml ...>` and NOT `\u003C?xml ...?>`. A str starting with `\u003C?xml` silently serializes as an empty chapter.\n- Escape text (`html.escape`) and wrap paragraphs in `\u003Cp>`.\n- Add every chapter to `book.spine` and a `epub.EpubNcx()` \u002F `epub.EpubNav()`.\n- Right after `epub.write_epub`, verify once: unzip the file, check each chapter xhtml is larger than ~500 bytes. Fix at once if not, then stop; do not re-verify repeatedly.\n",{"name":5,"description":7},"main","cd3108710319b9e68d55b6213a77123ef53bde61","docs\u002Fexamples\u002Fskills\u002Fepub-ebooklib",167,"https:\u002F\u002Fgithub.com\u002Fagentforce314\u002Fclawcodex","https:\u002F\u002Fclawcodex.app","https:\u002F\u002Fgithub.com\u002Fagentforce314","2026-11-08 17:09:56",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add agentforce314\u002Fclawcodex --skill epub-ebooklib",{"tool":45,"command":46},"bunx","bunx skills add agentforce314\u002Fclawcodex --skill epub-ebooklib",{"tool":48,"command":49},"pnpm","pnpm dlx skills add agentforce314\u002Fclawcodex --skill epub-ebooklib","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fagentforce314\u002Fclawcodex\u002Fblob\u002Fmain\u002Fdocs\u002Fexamples\u002Fskills\u002Fepub-ebooklib\u002FSKILL.md",true,[],[54,70,90,107],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":65,"publishedAt":26},"01M71BDGWAAJBEQMK7ZRC4K3WW","lint-py","Run lints on Python files.","https:\u002F\u002Fgithub.com\u002Fagentforce314\u002Fclawcodex\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Flint-py\u002FSKILL.md",[60],{"categoryNo":61,"categoryName":62,"taxonomyType":63,"taxonomyTypeDesc":64},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",[66,67,68,69,20,22],"lint","lint py","Bash","run",{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":79,"publishedAt":26},"01M71BDF39FM007N3977FX9Y2V","add-component","Scaffold a new React component.","https:\u002F\u002Fgithub.com\u002Fagentforce314\u002Fclawcodex\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Ffrontend\u002Fadd-component\u002FSKILL.md",[76],{"categoryNo":77,"categoryName":78,"taxonomyType":63,"taxonomyTypeDesc":64},"01JBSEEDCAT000000000000009","前端开发",[80,81,82,83,84,85,86,87,88,89],"add","add component","component","react component","name","new","when","user","scaffold","react",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":26},"01M71BDDFEA4V0KJQ2SDHAVQ7S","commit-helper","Generate a conventional-commit message from staged changes.","https:\u002F\u002Fgithub.com\u002Fagentforce314\u002Fclawcodex\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Fcommit-helper\u002FSKILL.md",[],[97,98,99,68,100,101,102,103,104,105,106],"commit","helper","commit helper","commit message","changes","message","generate","scope","read","staged",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":26},"01M71BDBGCCM9JCNSMP0BDMP2T","scrape-cloudflare-site","Fetch web pages (e.g. novel chapters) that return a Cloudflare \"Just a moment\" page to curl or headless Chrome.","https:\u002F\u002Fgithub.com\u002Fagentforce314\u002Fclawcodex\u002Fblob\u002Fmain\u002Fdocs\u002Fexamples\u002Fskills\u002Fscrape-cloudflare-site\u002FSKILL.md",[],[114,115,116,117,118,119,120,121,122,123,124,125,126,127],"scrape cloudflare site","scrape","site","cloudflare","pages","fetch","novel","curl","web","headless","headless chrome","just","page","chrome"]