Book-to-Skill Converter
Turn written knowledge into an agent skill by extracting structure, not summaries.
A book is crystallized expertise: frameworks, principles, techniques that took years to
develop. Read once, forgotten. The workarounds all fail — PDF search returns page numbers
instead of answers, an agent handed the raw file hallucinates or drowns, reading notes rot.
This skill compiles a source into a knowledge base the agent loads on demand: a small
resident core, one chapter file at a time, and never the whole book again.
What it produces:
| File |
Contents |
Budget |
SKILL.md |
Core frameworks + chapter index + topic index |
< 4,000 tokens (resident) |
chapters/chNN-*.md |
One summary per chapter |
800–3,000 tokens, on demand |
glossary.md |
Every significant term, alphabetized, with chapter |
< 1,500 tokens |
patterns.md |
Techniques and design patterns with trade-offs |
< 2,000 tokens |
cheatsheet.md |
Decision rules, thresholds, trade-off matrices |
< 1,200 tokens |
Beyond books: anything referenced often enough to be worth memorizing — internal
documentation, brand systems, standards, specs, research clusters, a folder of RFCs.
Philosophy
Extract structure, not summaries. A skill is not a book report. It is a toolkit of
named frameworks, actionable principles, step-by-step techniques, anti-patterns, and the
author's voice.
Preserve the author's precision. Framework names are interfaces. "The 5 Whys" is not
interchangeable with "ask why a few times" — the exact formulation is what makes lookup work.
Layer depth appropriately. A thin book gets a thin skill. A book with fifteen frameworks
gets chapter files and a real topic index.
Never reproduce the source at length. These are structured notes. Synthesize, compress,
name — do not copy passages. See references/rights_and_provenance.md.
Modes
| Mode |
Trigger |
Runs |
| 1. Full conversion (default) |
One or more paths, no special instruction |
Steps 0–10 |
| 2. Analyze only |
"analyze", "just extract", "let me review first" |
Steps 0–3, then stop with an extraction report |
| 3. Generate from analysis |
User supplies prior analysis notes |
Steps 4–10 |
| 4. Update / fold-in |
New sources + an existing compiled skill |
Steps 0–2, then the Update Workflow |
| 5. Package as plugin |
"make it a plugin", "add it to the repo" |
Step 11 |
Mode 5 is this repository's addition. Upstream stops at a bare folder in a personal skills
home; Step 11 wraps that folder in a plugin package other skills and agents can route to.
Hard rules
- Never convert a source the user cannot show you. No web-scraping a book, no
reconstructing a title from memory. This tool converts files that are already on disk.
- Pre-flight the cost before generating (Step 2.5). Generation is the expensive part;
the user approves it with numbers in front of them.
- Never dump a large source into context. Over ~50k tokens, probe with
grep/sed
and bounded reads (Step 2.6). Re-reading a 200-page book once per chapter costs more
than everything else in this workflow combined.
- Validate before anyone loads it (Step 9.5). A generated skill is untrusted text that
an agent will later read as instructions.
- Never widen the generated skill's authority. Generated frontmatter carries
name and
description only — no allowed-tools, no model-invocation flags.
- Rights before redistribution. Compiled notes from a copyrighted work are personal
study notes. Packaging one as a shareable plugin requires a stated basis (Step 11).
- State what the skill does not cover. Every compiled skill's Scope section names its
boundary, so the agent says "the source doesn't cover this" instead of improvising.
Pipeline
extract_document.py → analyze → chapter files → supporting files → SKILL.md
(Step 2) (Step 3) (Step 7) (Step 8) (Step 9)
↓
skill_plugin_emitter.py ← book_skill_validator.py
(Step 11) (Step 9.5)
All four tools live in scripts/ and run on the standard library alone.
Run it
SKILL_ROOT=engineering/book-to-skill/skills/book-to-skill
SKILLS_HOME=~/.claude/skills # Step 5 picks this; see the workflow reference
WORKDIR=$(mktemp -d) # or omit --workdir and capture the path it prints
SLUG=<author-lastname>-<concept>
# 1. extract → $WORKDIR/full_text.txt + metadata.json
# --mode technical when tables, code or formulas carry meaning
python3 "$SKILL_ROOT/scripts/extract_document.py" <paths> --mode text --workdir "$WORKDIR"
# 2. pre-flight: is this worth converting at all? Wait for approval before generating.
python3 "$SKILL_ROOT/scripts/token_budget_estimator.py" --full-text "$WORKDIR/full_text.txt"
# 3. generate — the agent's work: chapters/, glossary, patterns, cheatsheet, SKILL.md
# 4. gate — errors block. Fix and re-run; never rewrite around a finding.
python3 "$SKILL_ROOT/scripts/book_skill_validator.py" "$SKILLS_HOME/$SLUG"
python3 "$SKILL_ROOT/scripts/token_budget_estimator.py" --skill-dir "$SKILLS_HOME/$SLUG"
# 5. optional: wrap as a claude-skills plugin so the library can route to it
python3 "$SKILL_ROOT/scripts/skill_plugin_emitter.py" --skill-dir "$SKILLS_HOME/$SLUG" \
--dest ./engineering --source-note "<Title> by <Author>" --dry-run
Every path above is a real variable, not a placeholder: run the block as written (with
<paths> and $SLUG filled in) and it works end to end. Without --workdir the extractor
creates a private temp directory and prints it — capture that instead.
extract_document.py --check reports which extractors are installed and prints the install
command for what is missing. Every tool supports --help, --sample and --output json.
The full step-by-step procedure — what to ask at each step, the file templates, the
per-chapter budget matrix, and the update/fold-in workflow — is in
references/conversion_workflow.md. Read it before
running a conversion. Summary of the eleven steps:
| Step |
Does |
| 0–1 |
Scope check; resolve paths; detect an update/fold-in against an existing skill |
| 1.5 |
Ask content type → BOOK_TYPE (technical vs. text), which picks the extractor |
| 2 |
Extract → full_text.txt + metadata.json |
| 2.5 |
Pre-flight cost estimate and worth-converting verdict — wait for approval |
| 2.6 |
Over ~50k tokens, probe with grep/sed instead of reading the source |
| 3 |
Analyze structure (title, author, chapters, themes). Mode 2 stops here. |
| 4 |
Ask purpose → DEPTH (reference vs. study). Never ask a second budget question. |
| 5 |
Skill name and destination root; offer update / overwrite / rename on a collision |
| 6–8 |
Create the structure; write chapter files; write glossary, patterns, cheatsheet |
| 9 |
Write the master SKILL.md — under 4,000 tokens, indexes intact |
| 9.5 |
Validate. Errors block. |
| 10 |
Clean up the workdir and report |
| 11 |
Optionally package as a plugin, behind the rights gate |
Validator findings worth knowing
| Rule |
Means |
index.dead_link |
The chapter index links a file that was never written |
index.topic_dangling |
A topic points at a chapter that does not exist |
budget.over_cap on SKILL.md |
Compaction will truncate the indexes — navigation is the first thing lost |
unicode.invisible |
Extraction should have stripped this; investigate the source |
frontmatter.allowed_tools |
The generated skill is trying to grant itself tool authority |
Safety-family warnings are deliberately broad — a source about prompt injection legitimately
trips them. Read each in context; do not auto-silence them.
Forcing-question library
Walk these one at a time, with a recommended answer, before running a conversion.
"Is this source worth converting, or should I just read it?"
Recommended: convert when it is > 3× the compiled skill's size and you will return
to it. One-shot reads are cheaper unconverted. (Step 2.5 verdict.)
"Reference or study?"
Recommended: reference, unless you intend to internalize the author's reasoning. Study
depth roughly doubles generation cost and is only worth it with real worked examples.
(Step 4.)
"Technical or text?"
Recommended: technical only when tables, code, or formulas carry meaning. Docling costs
~1.5s/page; picking it for a prose book buys nothing. (Step 1.5.)
"What will you actually ask this skill?"
Recommended: name three real questions before generating. They tell you what belongs in
Core Frameworks and what the topic index must resolve. A skill nobody queries is a
summary nobody reads.
"Do you have the right to redistribute this?"
Recommended: assume not. Keep it local unless the source is public-domain, openly
licensed, your organisation's own documentation, or you have written permission.
(Step 11 rights gate.)
"Does this belong beside an existing skill?"
Recommended: check for an existing compiled skill on the same subject first — folding
new sources into one skill (Mode 4) beats two skills that half-cover a topic and give
the agent no way to choose. (Step 0.)
References
references/conversion_workflow.md — the full procedure: Steps 0–11, the file
templates, the per-chapter budget matrix, and the update/fold-in workflow
references/knowledge_extraction_canon.md — why structure beats summary; the extraction
taxonomy; what makes a framework survive compression
references/progressive_disclosure_budgets.md — where the token budgets come from and
what breaks when they are exceeded
references/document_extraction_pipeline.md — per-format extractor chains, fallbacks,
and the failure modes that produce silently bad text
references/rights_and_provenance.md — copyright posture, the rights gate, and what
provenance a compiled skill must carry
Related skills
engineering/write-a-skill — authoring a skill from your own expertise. Use that when
the knowledge is in your head; use this when it is in a document.
engineering/skill-security-auditor — full security audit of a skill package. Step 9.5
is the converter's own gate; the auditor is the repo-wide one.
engineering/llm-wiki — an incrementally-grown, interlinked vault across many sources.
This skill compiles one bounded source set into one skill.
Adapted from virgiliojr94/book-to-skill (MIT).
See ../../README.md for the full list of deviations.
1---2name: book-to-skill3description: Converts books, documentation folders, and source collections (PDF, EPUB, DOCX, HTML, Markdown, RST, AsciiDoc, RTF, MOBI/AZW) into structured agent skills — extracting named frameworks, principles, techniques, and anti-patterns into a master SKILL.md plus on-demand chapter files, a glossary, a patterns file, and a decision cheatsheet. Use when the user wants to study a document with an agent, apply an author's frameworks while working, turn internal docs or standards into a reusable knowledge base, or package a compiled book skill as a claude-skills plugin.4license: MIT5---67# Book-to-Skill Converter89Turn written knowledge into an agent skill by extracting **structure**, not summaries.1011A book is crystallized expertise: frameworks, principles, techniques that took years to12develop. Read once, forgotten. The workarounds all fail — PDF search returns page numbers13instead of answers, an agent handed the raw file hallucinates or drowns, reading notes rot.14This skill compiles a source into a knowledge base the agent loads on demand: a small15resident core, one chapter file at a time, and never the whole book again.1617**What it produces:**1819| File | Contents | Budget |20|------|----------|--------|21| `SKILL.md` | Core frameworks + chapter index + topic index | < 4,000 tokens (resident) |22| `chapters/chNN-*.md` | One summary per chapter | 800–3,000 tokens, on demand |23| `glossary.md` | Every significant term, alphabetized, with chapter | < 1,500 tokens |24| `patterns.md` | Techniques and design patterns with trade-offs | < 2,000 tokens |25| `cheatsheet.md` | Decision rules, thresholds, trade-off matrices | < 1,200 tokens |2627**Beyond books:** anything referenced often enough to be worth memorizing — internal28documentation, brand systems, standards, specs, research clusters, a folder of RFCs.2930---3132## Philosophy3334**Extract structure, not summaries.** A skill is not a book report. It is a toolkit of35named frameworks, actionable principles, step-by-step techniques, anti-patterns, and the36author's voice.3738**Preserve the author's precision.** Framework names are interfaces. "The 5 Whys" is not39interchangeable with "ask why a few times" — the exact formulation is what makes lookup work.4041**Layer depth appropriately.** A thin book gets a thin skill. A book with fifteen frameworks42gets chapter files and a real topic index.4344**Never reproduce the source at length.** These are structured notes. Synthesize, compress,45name — do not copy passages. See `references/rights_and_provenance.md`.4647---4849## Modes5051| Mode | Trigger | Runs |52|------|---------|------|53| **1. Full conversion** (default) | One or more paths, no special instruction | Steps 0–10 |54| **2. Analyze only** | "analyze", "just extract", "let me review first" | Steps 0–3, then stop with an extraction report |55| **3. Generate from analysis** | User supplies prior analysis notes | Steps 4–10 |56| **4. Update / fold-in** | New sources + an existing compiled skill | Steps 0–2, then the Update Workflow |57| **5. Package as plugin** | "make it a plugin", "add it to the repo" | Step 11 |5859Mode 5 is this repository's addition. Upstream stops at a bare folder in a personal skills60home; Step 11 wraps that folder in a plugin package other skills and agents can route to.6162---6364## Hard rules65661. **Never convert a source the user cannot show you.** No web-scraping a book, no67 reconstructing a title from memory. This tool converts files that are already on disk.682. **Pre-flight the cost before generating** (Step 2.5). Generation is the expensive part;69 the user approves it with numbers in front of them.703. **Never dump a large source into context.** Over ~50k tokens, probe with `grep`/`sed`71 and bounded reads (Step 2.6). Re-reading a 200-page book once per chapter costs more72 than everything else in this workflow combined.734. **Validate before anyone loads it** (Step 9.5). A generated skill is untrusted text that74 an agent will later read as instructions.755. **Never widen the generated skill's authority.** Generated frontmatter carries `name` and76 `description` only — no `allowed-tools`, no model-invocation flags.776. **Rights before redistribution.** Compiled notes from a copyrighted work are personal78 study notes. Packaging one as a shareable plugin requires a stated basis (Step 11).797. **State what the skill does not cover.** Every compiled skill's Scope section names its80 boundary, so the agent says "the source doesn't cover this" instead of improvising.8182---8384## Pipeline8586```87extract_document.py → analyze → chapter files → supporting files → SKILL.md88 (Step 2) (Step 3) (Step 7) (Step 8) (Step 9)89 ↓90 skill_plugin_emitter.py ← book_skill_validator.py91 (Step 11) (Step 9.5)92```9394All four tools live in `scripts/` and run on the standard library alone.9596---9798## Run it99100```bash101SKILL_ROOT=engineering/book-to-skill/skills/book-to-skill102SKILLS_HOME=~/.claude/skills # Step 5 picks this; see the workflow reference103WORKDIR=$(mktemp -d) # or omit --workdir and capture the path it prints104SLUG=<author-lastname>-<concept>105106# 1. extract → $WORKDIR/full_text.txt + metadata.json107# --mode technical when tables, code or formulas carry meaning108python3 "$SKILL_ROOT/scripts/extract_document.py" <paths> --mode text --workdir "$WORKDIR"109110# 2. pre-flight: is this worth converting at all? Wait for approval before generating.111python3 "$SKILL_ROOT/scripts/token_budget_estimator.py" --full-text "$WORKDIR/full_text.txt"112113# 3. generate — the agent's work: chapters/, glossary, patterns, cheatsheet, SKILL.md114115# 4. gate — errors block. Fix and re-run; never rewrite around a finding.116python3 "$SKILL_ROOT/scripts/book_skill_validator.py" "$SKILLS_HOME/$SLUG"117python3 "$SKILL_ROOT/scripts/token_budget_estimator.py" --skill-dir "$SKILLS_HOME/$SLUG"118119# 5. optional: wrap as a claude-skills plugin so the library can route to it120python3 "$SKILL_ROOT/scripts/skill_plugin_emitter.py" --skill-dir "$SKILLS_HOME/$SLUG" \121 --dest ./engineering --source-note "<Title> by <Author>" --dry-run122```123124Every path above is a real variable, not a placeholder: run the block as written (with125`<paths>` and `$SLUG` filled in) and it works end to end. Without `--workdir` the extractor126creates a private temp directory and prints it — capture that instead.127128`extract_document.py --check` reports which extractors are installed and prints the install129command for what is missing. Every tool supports `--help`, `--sample` and `--output json`.130131**The full step-by-step procedure — what to ask at each step, the file templates, the132per-chapter budget matrix, and the update/fold-in workflow — is in133[`references/conversion_workflow.md`](references/conversion_workflow.md). Read it before134running a conversion.** Summary of the eleven steps:135136| Step | Does |137|------|------|138| 0–1 | Scope check; resolve paths; detect an update/fold-in against an existing skill |139| 1.5 | Ask content type → `BOOK_TYPE` (technical vs. text), which picks the extractor |140| 2 | Extract → `full_text.txt` + `metadata.json` |141| 2.5 | Pre-flight cost estimate and worth-converting verdict — **wait for approval** |142| 2.6 | Over ~50k tokens, probe with `grep`/`sed` instead of reading the source |143| 3 | Analyze structure (title, author, chapters, themes). Mode 2 stops here. |144| 4 | Ask purpose → `DEPTH` (reference vs. study). Never ask a second budget question. |145| 5 | Skill name and destination root; offer update / overwrite / rename on a collision |146| 6–8 | Create the structure; write chapter files; write glossary, patterns, cheatsheet |147| 9 | Write the master `SKILL.md` — under 4,000 tokens, indexes intact |148| 9.5 | Validate. Errors block. |149| 10 | Clean up the workdir and report |150| 11 | Optionally package as a plugin, behind the rights gate |151152## Validator findings worth knowing153154| Rule | Means |155|------|-------|156| `index.dead_link` | The chapter index links a file that was never written |157| `index.topic_dangling` | A topic points at a chapter that does not exist |158| `budget.over_cap` on SKILL.md | Compaction will truncate the indexes — navigation is the first thing lost |159| `unicode.invisible` | Extraction should have stripped this; investigate the source |160| `frontmatter.allowed_tools` | The generated skill is trying to grant itself tool authority |161162Safety-family warnings are deliberately broad — a source about prompt injection legitimately163trips them. Read each in context; do not auto-silence them.164165## Forcing-question library166167Walk these one at a time, with a recommended answer, before running a conversion.1681691. **"Is this source worth converting, or should I just read it?"**170 *Recommended:* convert when it is > 3× the compiled skill's size **and** you will return171 to it. One-shot reads are cheaper unconverted. (Step 2.5 verdict.)1721732. **"Reference or study?"**174 *Recommended:* reference, unless you intend to internalize the author's reasoning. Study175 depth roughly doubles generation cost and is only worth it with real worked examples.176 (Step 4.)1771783. **"Technical or text?"**179 *Recommended:* technical only when tables, code, or formulas carry meaning. Docling costs180 ~1.5s/page; picking it for a prose book buys nothing. (Step 1.5.)1811824. **"What will you actually ask this skill?"**183 *Recommended:* name three real questions before generating. They tell you what belongs in184 Core Frameworks and what the topic index must resolve. A skill nobody queries is a185 summary nobody reads.1861875. **"Do you have the right to redistribute this?"**188 *Recommended:* assume not. Keep it local unless the source is public-domain, openly189 licensed, your organisation's own documentation, or you have written permission.190 (Step 11 rights gate.)1911926. **"Does this belong beside an existing skill?"**193 *Recommended:* check for an existing compiled skill on the same subject first — folding194 new sources into one skill (Mode 4) beats two skills that half-cover a topic and give195 the agent no way to choose. (Step 0.)196197---198199## References200201- `references/conversion_workflow.md` — **the full procedure**: Steps 0–11, the file202 templates, the per-chapter budget matrix, and the update/fold-in workflow203- `references/knowledge_extraction_canon.md` — why structure beats summary; the extraction204 taxonomy; what makes a framework survive compression205- `references/progressive_disclosure_budgets.md` — where the token budgets come from and206 what breaks when they are exceeded207- `references/document_extraction_pipeline.md` — per-format extractor chains, fallbacks,208 and the failure modes that produce silently bad text209- `references/rights_and_provenance.md` — copyright posture, the rights gate, and what210 provenance a compiled skill must carry211212## Related skills213214- **`engineering/write-a-skill`** — authoring a skill from your own expertise. Use that when215 the knowledge is in your head; use this when it is in a document.216- **`engineering/skill-security-auditor`** — full security audit of a skill package. Step 9.5217 is the converter's own gate; the auditor is the repo-wide one.218- **`engineering/llm-wiki`** — an incrementally-grown, interlinked vault across many sources.219 This skill compiles one bounded source set into one skill.220221---222223*Adapted from [virgiliojr94/book-to-skill](https://github.com/virgiliojr94/book-to-skill) (MIT).224See `../../README.md` for the full list of deviations.*