Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Convert structured project-note JSON manuscripts into validated EPUB and optional Kindle-clickable PDF files. Use when the user asks to turn project notes, book-system JSON, FIRE-indexed notes, Luhmann/Zettelkasten numbered chunks, table-of-contents cards, index cards, cross-linked project notes, or manuscript JSON into an EPUB/PDF with chapter directories, keyword index cards, weighted links, bidirectional backlinks, versioned filenames, chapter-splitting plans, and full link testing.
.claude/skills/twhsi-project-note-json-to-epub/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 83% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 105% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 65% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 102% | 0% |
Use this skill when a project-note JSON or folder-derived JSON manuscript needs to become an EPUB, or an EPUB plus a PDF review/distribution edition, especially when the user wants chapter directories, index cards, cross-links, keyword numbering, versioned check editions, Chinese character counts, chapter-splitting plans, Kindle-clickable PDF links, or full EPUB/PDF link verification.
Chinese trigger phrases include:
專案筆記Json變成Epub目錄索引卡交叉連結把這章做成EPUB章節拆書關鍵字索引卡雙向連結EPUB同時生成PDFKindle可以點擊連結title, sources, toc, chunks, index, and validation fields if present.{書名} 檢查版 YYYY-MM-DD NN.{書名}_檢查版_YYYY-MM-DD_NN.epub.download.epub copy for mobile sharing if the user needs an easy download link.1.1, 3.3.c3b, and 3.3.d.1.K001, K002, ...K001.keyword_backlinks.book_split_plan to JSON when the project is likely to become multiple chapter books.Text/index.xhtml to正文 parts, use part2.xhtml#p099, not Text/part2.xhtml#p099.Text/part*.xhtml back to the index, use index.xhtml#idx-k001, not ../Text/index.xhtml#idx-k001.index.xhtml last. This matches normal human book structure where an index appears after the main text.p099 in EPUB should map to PDF destination p099, and keyword K001 should map to idx-k001.id anchors and all href links.index[].links.chunks[].keyword_backlinks.true_body_cjk_count from正文 body/chunk text only, excluding TOC, index cards, navigation files, metadata, CSS, generated link labels, and markup.orthogonal_check.ok is true when the JSON includes directory/index/cross-link fields.pypdf or equivalent and fail if internal GoTo/destination link counts do not match the expected forward/backlink model.META-INF/container.xml, OEBPS/content.opf, OEBPS/nav.xhtml, and XHTML text files must exist.dc:title in content.opf must match the requested book/version title.-正文 keyword markers should show the keyword plus a small clickable Kxxx backlink.
-正文 keyword markers must include clickable Kxxx backlinks to the keyword index destination.
/System/Library/Fonts/STHeiti Medium.ttc with a selected subfont index; in other environments choose an available Noto/Source Han CJK font.Before telling the user it is finished, report:
texterrors: 0 title: ... all_href_count: ... index_forward_links_tested: ... body_return_links_tested: ... index_entries: ... true_body_cjk_count: ... file type: EPUB document pdf_internal_links_tested: ... pdf_render_checked: ... pdf file type: PDF document
If any count fails, fix the generator and rebuild rather than editing EPUB output by hand.
Return two links when possible:
download.epubMention the version title and the link-test summary briefly.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 25,741 | 33,798 | +31% | 1 | 1 | 0% | 4,570 | 8,345 | +83% | 0 | 0 | — |
case-02 | fail→fail | 31,565 | 5,218 | -83% | 1 | 1 | 0% | 5,177 | 2,390 | -54% | 0 | 0 | — |
case-03 | pass→pass | 17,210 | 15,878 | -8% | 1 | 1 | 0% | 3,302 | 5,032 | +52% | 0 | 0 | — |
case-04 | pass→pass | 18,360 | 20,022 | +9% | 1 | 1 | 0% | 2,984 | 5,434 | +82% | 0 | 0 | — |
case-05 | pass→pass | 16,441 | 10,787 | -34% | 1 | 1 | 0% | 2,946 | 4,111 | +40% | 0 | 0 | — |
case-06 | pass→pass | 17,285 | 11,016 | -36% | 1 | 1 | 0% | 2,670 | 3,936 | +47% | 0 | 0 | — |
case-07 | fail→pass | 12,819 | 9,915 | -23% | 1 | 1 | 0% | 1,785 | 3,656 | +105% | 0 | 0 | — |
case-08 | pass→pass | 9,486 | 7,595 | -20% | 1 | 1 | 0% | 1,637 | 3,462 | +111% | 0 | 0 | — |
case-09 | pass→pass | 11,443 | 4,224 | -63% | 1 | 1 | 0% | 1,704 | 2,760 | +62% | 0 | 0 | — |
case-10 | fail→pass | 15,107 | 8,372 | -45% | 1 | 1 | 0% | 2,223 | 3,289 | +48% | 0 | 0 | — |
case-11 | pass→pass | 11,534 | 4,704 | -59% | 1 | 1 | 0% | 1,635 | 2,831 | +73% | 0 | 0 | — |
case-12 | pass→pass | 10,856 | 9,924 | -9% | 1 | 1 | 0% | 1,772 | 3,769 | +113% | 0 | 0 | — |
case-13 | fail→pass | 12,545 | 6,263 | -50% | 1 | 1 | 0% | 1,832 | 3,016 | +65% | 0 | 0 | — |
case-14 | fail→pass | 37,593 | 3,668 | -90% | 1 | 1 | 0% | 1,353 | 2,728 | +102% | 0 | 0 | — |
case-15 | fail→pass | 15,436 | 3,855 | -75% | 1 | 1 | 0% | 2,477 | 2,793 | +13% | 0 | 0 | — |
case-16 | fail→pass | 18,756 | 10,689 | -43% | 1 | 1 | 0% | 3,006 | 3,976 | +32% | 0 | 0 | — |
case-17 | fail→pass | 13,569 | 8,500 | -37% | 1 | 1 | 0% | 2,090 | 3,600 | +72% | 0 | 0 | — |
case-18 | pass→pass | 12,998 | 7,881 | -39% | 1 | 1 | 0% | 1,796 | 3,350 | +87% | 0 | 0 | — |
case-19 | fail→fail | 18,390 | 7,202 | -61% | 1 | 1 | 0% | 2,858 | 3,408 | +19% | 0 | 0 | — |
case-20 | fail→pass | 9,658 | 2,375 | -75% | 1 | 1 | 0% | 1,531 | 2,491 | +63% | 0 | 0 | — |
case-21 | pass→pass | 13,812 | 6,767 | -51% | 1 | 1 | 0% | 2,130 | 3,233 | +52% | 0 | 0 | — |
case-22 | fail→pass | 7,225 | 3,625 | -50% | 1 | 1 | 0% | 1,111 | 2,693 | +142% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +45 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.