#56 by GitHub stars
virgiliojr94/book-to-skill
Converts books and documents (PDF, EPUB, DOCX, HTML, Markdown, plain text, RTF, MOBI/AZW with Calibre) into structured agent skills, extracting frameworks, mental models, principles, techniques, and anti-patterns. Use when the user wants to study a document through GitHub Copilot CLI, Amp, Claude Co
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · +3 / −2 lines
Before Network or broad shell → After Network or broad shell
7540eefbe749 → e7bb659d3261
- 132 > "📐 Technical mode selected — using Docling for structure-aware extraction (tables, code blocks, formulas preserved as markdown). This takes ~1.5s per page, so expect a few minutes for longer sources. Starting now…"
+ 132 > "📐 Technical mode selected — PDFs attempt Docling for layout-aware extraction. EPUBs and other formats use their existing text extractors; code, tables, and formulas may lose structure. Check each source's `extraction_method` and `fallback_reason` in metadata.json for the actual extraction path."
- 463 Read the corresponding section of the extracted `full_text.txt` (use character offsets or grep for chapter headings).
+ 463 Read the corresponding section of the extracted `full_text.txt` using top-level `chapter_ranges` from `metadata.json` when present (`start_line`/`end_line` are 1-based inclusive, for `sed`/`Read`); otherwise grep for chapter headings. (`sources[].chapter_ranges` use the same fields but line numbers in that source's text only, not the consolidated `full_text.txt`.)
+ 613 - Full text: `<output_text from metadata.json>` — grep it for depth the chapter files omit (local extraction, not shipped)
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 7540eefbe749
No earlier version was observed for comparison.
Verified commit e7bb659d3261491c8b28793dcb9102fa64a46c22
git clone --filter=blob:none --no-checkout https://github.com/virgiliojr94/book-to-skill.git .hotskills/virgiliojr94-book-to-skill && git -C .hotskills/virgiliojr94-book-to-skill checkout --detach e7bb659d3261491c8b28793dcb9102fa64a46c22
# Copy each selected skill directory from .hotskills/virgiliojr94-book-to-skill into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/virgiliojr94/book-to-skill.git .hotskills/virgiliojr94-book-to-skill && git -C .hotskills/virgiliojr94-book-to-skill checkout --detach e7bb659d3261491c8b28793dcb9102fa64a46c22
# Copy each selected skill directory from .hotskills/virgiliojr94-book-to-skill into .agents/skills/<skill-name>/Heat
7.6- Star growth, last 7 daysAhead of 88% of tracked repositories
- Star growth, last 24 hoursAhead of 87% of tracked repositories
- Rank movement, last 7 daysAhead of 83% of tracked repositories
- Commits, last 30 daysAhead of 88% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
How it works
book-to-skill
When your agent uses it
Converts books and documents (PDF, EPUB, DOCX, HTML, Markdown, plain text, RTF, MOBI/AZW with Calibre) into structured agent skills, extracting frameworks, mental models, principles, techniques, and anti-patterns. Use when the user wants to study a document through GitHub Copilot CLI, Amp, Claude Code, Hermes Agent, OpenCode, or OpenClaw, apply an author's frameworks while working, or build a reusable knowledge base from a file.
What it loads into context
Frontmatter
110 tokensAlways available to the agent
SKILL.md
13,728 tokensWhen the skill is activated
Reference documents
34,551 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Philosophy
- Modes of Operation
- Skill Locations
- Step 0 — Out-of-scope check
- Step 1 — Validate input
- Step 1.5 — Identify content type
- Step 2 — Extract text from the source documents
- Step 2.5 — Pre-flight cost estimate
- Step 2.6 — REPL-style access for large books (> 50k tokens)
- Step 3 — Analyze book structure
- Step 4 — Ask purpose (Full Conversion only)
- Step 5 — Determine skill name
- Step 6 — Create skill directory structure
- Step 7 — Generate chapter summaries
- Reference Tables *(technical books only — omit if BOOK_TYPE=text)*
- Worked Example *(DEPTH=study only — omit for DEPTH=reference)*
- Key Takeaways
- Connects To
- Step 9.5 — Scan the generated skill
- Step 10 — Cleanup and report
- Step 11 — Publish the generated skill to GitHub (optional)
- Update / Fold-in Workflow
- Quality Rules
Scripts executed separately
book_to_skill/__init__.pybook_to_skill/__main__.pybook_to_skill/cli.pybook_to_skill/config.pybook_to_skill/dependencies.pybook_to_skill/exceptions.pybook_to_skill/parsers/__init__.pybook_to_skill/parsers/calibre.pybook_to_skill/parsers/docx.pybook_to_skill/parsers/epub.pybook_to_skill/parsers/html.pybook_to_skill/parsers/pdf.pybook_to_skill/parsers/rtf.pybook_to_skill/parsers/text.pybook_to_skill/pdf_inspector_integration.pybook_to_skill/sanitize.pybook_to_skill/utils.pyscripts/extract.pytests/evals/test_manifest.pytests/evals/test_paper_flat.pytests/evals/test_replay.pytests/evals/test_score.pytests/evals/test_score_robustness.pytests/fixtures/generate_pdf_page_provenance.pytests/test_batch_resilience_unreadable.pytests/test_book_to_skill.pytests/test_calibre_stale_output.pytests/test_chapter_content_split.pytests/test_chapter_method_reported.pytests/test_chapter_numeric_false_positives.pytests/test_cjk_radical_normalization.pytests/test_cjk_supplementary_plane.pytests/test_code_fence_closers.pytests/test_corpus_newlines.pytests/test_dependency_install_semantics.pytests/test_discovery_tax.pytests/test_docling_fallback.pytests/test_docs_host_lists.pytests/test_epub_container_entities.pytests/test_epub_image_reporting.pytests/test_epub_utf16.pytests/test_fingerprint.pytests/test_hermes_host_support.pytests/test_html_block_boundaries.pytests/test_html_boilerplate_extraction.pytests/test_intro_and_support_note.pytests/test_isolated_install_hint.pytests/test_malformed_text_bom.pytests/test_metadata_encoding.pytests/test_multi_source_structural_chapters.pytests/test_multi_source_toc.pytests/test_no_bytecode_pollution.pytests/test_numbered_headings.pytests/test_openclaw_host_support.pytests/test_opencode_host_support.pytests/test_output_dir_security.pytests/test_part_chapter_count.pytests/test_pdf_inspector_integration.pytests/test_pdf_outline_chapters.pytests/test_pdf_page_number_detection.pytests/test_pdf_page_sidecar.pytests/test_pdftotext_edge_only_boilerplate.pytests/test_per_run_workdir.pytests/test_publish_visibility_gate.pytests/test_repo_hygiene.pytests/test_rerun_guard.pytests/test_rtf_destination_groups.pytests/test_rtf_escaped_controls.pytests/test_rtf_line_break.pytests/test_rtf_surrogate_pairs.pytests/test_sanitize_annotation_controls.pytests/test_sanitize_bidi_controls.pytests/test_sanitize_extracted_text.pytests/test_scan_coverage.pytests/test_scan_generated_skill.pytests/test_scope_selection_contract.pytests/test_setext_punctuation_guard.pytests/test_skill_template_full_text.pytests/test_source_chapter_samples.pytests/test_structural_framing_sections.pytests/test_technical_epub.pytests/test_tilde_expansion.pytests/test_tool_call_token_vs_prose.pytests/test_translation_drift.pytests/test_unbalanced_code_fence.pytests/test_validate_skill.pytools/discovery_tax.pytools/evals/manifest.pytools/evals/paper_flat.pytools/evals/replay.pytools/evals/score.pytools/scan_generated_skill.pytools/validate_skill.py
Files
.gitattributesasset28 bytes.github/FUNDING.ymlasset23 bytes.github/ISSUE_TEMPLATE/bug_report.mddoc508 bytes.github/ISSUE_TEMPLATE/feature_request.mddoc469 bytes.github/PULL_REQUEST_TEMPLATE.mddoc3,309 bytes.github/dependabot.ymlasset693 bytes.github/workflows/ci.ymlasset10,141 bytes.github/workflows/codeql.ymlasset805 bytes.github/workflows/deploy-docs.ymlasset3,518 bytes.gitignoreasset599 bytesAGENTS.mddoc5,198 bytesBACKERS.mddoc967 bytesCHANGELOG.mddoc15,915 bytesCLAUDE.mddoc134 bytesCONTRIBUTING.mddoc4,803 bytesLICENSE.mddoc1,068 bytesREADME.mddoc15,379 bytesREADME.ru.mddoc12,303 bytesREADME.zh-CN.mddoc15,073 bytesSECURITY-NOTICE.mddoc1,842 bytesSECURITY.mddoc1,290 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesSKILL.mdcore55,464 bytesbook_to_skill/__init__.pyruns217 bytesbook_to_skill/__main__.pyruns74 bytesbook_to_skill/cli.pyruns1,336 bytesbook_to_skill/config.pyruns2,400 bytesbook_to_skill/dependencies.pyruns12,494 bytesbook_to_skill/exceptions.pyruns117 bytesbook_to_skill/parsers/__init__.pyruns18 bytesbook_to_skill/parsers/calibre.pyruns2,409 bytesbook_to_skill/parsers/docx.pyruns9,772 bytesbook_to_skill/parsers/epub.pyruns9,087 bytesbook_to_skill/parsers/html.pyruns5,757 bytesbook_to_skill/parsers/pdf.pyruns12,561 bytesbook_to_skill/parsers/rtf.pyruns8,022 bytesbook_to_skill/parsers/text.pyruns1,459 bytesbook_to_skill/pdf_inspector_integration.pyruns10,250 bytesbook_to_skill/sanitize.pyruns11,563 bytesbook_to_skill/utils.pyruns91,446 bytescliff.tomlasset2,519 bytesdocs/404.mddoc550 bytesdocs/CNAMEasset21 bytesdocs/architecture.mddoc9,680 bytesdocs/assets/banner.webpasset57,360 bytesdocs/assets/booklin-casting.pngasset204,464 bytesdocs/assets/booklin-celebrating.pngasset192,768 bytesdocs/assets/booklin-confused.pngasset167,473 bytesdocs/assets/booklin.pngasset190,433 bytesdocs/assets/logo.pngasset196,590 bytesdocs/assets/og-card.jpgasset123,478 bytesdocs/faq.mddoc5,300 bytesdocs/how-it-works.mddoc4,434 bytesdocs/index.mddoc3,910 bytesdocs/install.mddoc7,591 bytesdocs/performance.mddoc3,457 bytesdocs/research/progressive-disclosure-evals.mddoc25,632 bytesdocs/robots.txtdoc74 bytesdocs/usage.mddoc3,159 bytesevals/fixtures/pd00-synthetic-book.txtdoc938 bytesevals/fixtures/pd03-book.txtdoc183 bytesevals/fixtures/pd03-metadata.jsonasset424 bytesevals/fixtures/replay_trajectories.jsonasset1,006 bytesmkdocs.ymlasset2,769 bytesoverrides/main.htmlasset2,790 bytespyproject.tomlasset1,028 bytesscripts/extract.pyruns1,333 bytestests/evals/test_manifest.pyruns4,348 bytestests/evals/test_paper_flat.pyruns4,729 bytestests/evals/test_replay.pyruns2,838 bytestests/evals/test_score.pyruns2,636 bytestests/evals/test_score_robustness.pyruns9,304 bytestests/fixtures/generate_pdf_page_provenance.pyruns1,227 bytestests/fixtures/pdf_page_provenance.pdfasset2,047 bytestests/test_batch_resilience_unreadable.pyruns5,786 bytestests/test_book_to_skill.pyruns136,973 bytestests/test_calibre_stale_output.pyruns9,015 bytestests/test_chapter_content_split.pyruns3,056 bytestests/test_chapter_method_reported.pyruns2,137 bytestests/test_chapter_numeric_false_positives.pyruns6,365 bytestests/test_cjk_radical_normalization.pyruns3,877 bytestests/test_cjk_supplementary_plane.pyruns4,609 bytestests/test_code_fence_closers.pyruns3,444 bytestests/test_corpus_newlines.pyruns3,293 bytestests/test_dependency_install_semantics.pyruns2,199 bytestests/test_discovery_tax.pyruns4,560 bytestests/test_docling_fallback.pyruns4,245 bytestests/test_docs_host_lists.pyruns819 bytestests/test_epub_container_entities.pyruns3,550 bytestests/test_epub_image_reporting.pyruns2,965 bytestests/test_epub_utf16.pyruns6,032 bytestests/test_fingerprint.pyruns12,628 bytestests/test_hermes_host_support.pyruns9,244 bytestests/test_html_block_boundaries.pyruns6,863 bytestests/test_html_boilerplate_extraction.pyruns3,073 bytestests/test_intro_and_support_note.pyruns1,743 bytestests/test_isolated_install_hint.pyruns2,822 bytestests/test_malformed_text_bom.pyruns1,086 bytestests/test_metadata_encoding.pyruns3,836 bytestests/test_multi_source_structural_chapters.pyruns2,068 bytestests/test_multi_source_toc.pyruns3,885 bytestests/test_no_bytecode_pollution.pyruns11,908 bytestests/test_numbered_headings.pyruns4,769 bytestests/test_openclaw_host_support.pyruns3,546 bytestests/test_opencode_host_support.pyruns10,254 bytestests/test_output_dir_security.pyruns2,208 bytestests/test_part_chapter_count.pyruns2,016 bytestests/test_pdf_inspector_integration.pyruns11,595 bytestests/test_pdf_outline_chapters.pyruns5,152 bytestests/test_pdf_page_number_detection.pyruns3,891 bytestests/test_pdf_page_sidecar.pyruns7,320 bytestests/test_pdftotext_edge_only_boilerplate.pyruns5,927 bytestests/test_per_run_workdir.pyruns3,626 bytestests/test_publish_visibility_gate.pyruns5,136 bytestests/test_repo_hygiene.pyruns2,187 bytestests/test_rerun_guard.pyruns3,482 bytestests/test_rtf_destination_groups.pyruns6,107 bytestests/test_rtf_escaped_controls.pyruns3,391 bytestests/test_rtf_line_break.pyruns2,630 bytestests/test_rtf_surrogate_pairs.pyruns2,097 bytestests/test_sanitize_annotation_controls.pyruns1,474 bytestests/test_sanitize_bidi_controls.pyruns15,462 bytestests/test_sanitize_extracted_text.pyruns3,277 bytestests/test_scan_coverage.pyruns6,603 bytestests/test_scan_generated_skill.pyruns6,085 bytestests/test_scope_selection_contract.pyruns5,587 bytestests/test_setext_punctuation_guard.pyruns5,003 bytestests/test_skill_template_full_text.pyruns498 bytestests/test_source_chapter_samples.pyruns3,188 bytestests/test_structural_framing_sections.pyruns2,957 bytestests/test_technical_epub.pyruns6,012 bytestests/test_tilde_expansion.pyruns2,603 bytestests/test_tool_call_token_vs_prose.pyruns2,504 bytestests/test_translation_drift.pyruns1,660 bytestests/test_unbalanced_code_fence.pyruns7,210 bytestests/test_validate_skill.pyruns9,655 bytestools/discovery_tax.pyruns9,177 bytestools/evals/manifest.pyruns8,255 bytestools/evals/paper_flat.pyruns4,263 bytestools/evals/replay.pyruns1,355 bytestools/evals/score.pyruns4,300 bytestools/scan_generated_skill.pyruns14,278 bytestools/validate_skill.pyruns12,440 bytes
Read SKILL.md
<!--
Cross-agent notes (informational; ignored by host agents):
- Compatible skill roots: GitHub Copilot CLI (~/.copilot/skills, ~/.agents/skills,
.github/skills, .claude/skills, .agents/skills), Amp (.agents/skills,
~/.config/agents/skills, ~/.config/amp/skills), Claude Code (~/.claude/skills),
Hermes Agent ($HERMES_HOME/skills, .hermes/skills, .agents/skills),
OpenClaw (${OPENCLAW_STATE_DIR:-~/.openclaw}/skills, .agents/skills, skills/;
~/.agents/skills only with the default state).
OpenCode (~/.config/opencode/skills, ~/.claude/skills, .opencode/skills,
~/.agents/skills, .agents/skills).
- `allowed-tools` is intentionally omitted to stay agent-neutral: Copilot CLI uses
`shell`/MCP-server names, Claude uses `Bash`/`Read`/`Write`/`Glob`/`Grep`, Amp
adds `shell_command`. The skill needs shell (to run extract.py) and file
read/write — each host will prompt for those on first use.View the complete source on GitHubSkills included
- book-to-skill
Repository facts
- License
- MIT
- Created
- May 1, 2026
- Last pushed
- Nov 3, 2026
- Forks
- 3,932
- Open issues
- 7
- Project activity
- Active
Rank over the last 12 weeks
Now #56 · best #53 · down 3 in 30 days
- #54 from Oct 14 to Oct 20
- #55 from Oct 21 to Oct 24
- #56 on Oct 25
- #56 from Oct 28 to Oct 29
- #57 from Oct 30 to Oct 31
- #56 since Nov 1
33 earlier periods
- #87 on Aug 2
- #80 on Aug 8
- #79 on Aug 9
- #77 on Aug 10
- #76 on Aug 11
- #75 on Aug 12
- #77 on Aug 13
- #75 from Aug 14 to Aug 15
- #74 on Aug 16
- #75 on Aug 17
- #74 on Aug 18
- #75 on Aug 19
- #73 from Aug 20 to Aug 21
- #71 on Aug 22
- #68 on Aug 23
- #66 on Aug 24
- #65 on Aug 25
- #64 from Aug 26 to Aug 27
- #63 from Aug 28 to Aug 30
- #62 from Aug 31 to Sep 6
- #61 on Sep 7
- #62 on Sep 8
- #61 from Sep 9 to Sep 11
- #60 on Sep 12
- #59 on Sep 13
- #58 on Sep 14
- #57 on Sep 15
- #58 from Sep 16 to Sep 17
- #57 from Sep 18 to Sep 19
- #56 from Sep 20 to Sep 25
- #55 from Sep 26 to Oct 2
- #54 from Oct 3 to Oct 4
- #53 from Oct 5 to Oct 13
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 7, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 19 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 8 dangerous shell commandsin 7 files: book_to_skill/utils.py:833 README.md:169 README.ru.md:165 and 4 more
- 226 network referencesin 24 files: tests/test_book_to_skill.py:81 README.ru.md:14 README.zh-CN.md:13 and 21 more
- 42 obfuscation signalsin 7 files: tests/test_sanitize_bidi_controls.py:27 tests/test_book_to_skill.py:724 tests/test_malformed_text_bom.py:15 and 4 more
- 1 instruction override signalin 1 file: tests/test_scan_generated_skill.py:107
- 93 executable scriptsin 93 files: book_to_skill/__init__.py:1 book_to_skill/__main__.py:1 book_to_skill/cli.py:1 and 90 more
- 23 references to secretsin 20 files: .github/workflows/ci.yml:166 SKILL.md:149 tests/test_opencode_host_support.py:35 and 17 more
- No requests to vote in Hot
Show all 393 signals by file
.github/workflows/ci.yml
BACKERS.md
- Network accessline 5
**[Become a sponsor → github.com/sponsors/virgiliojr94](https://github.com/sponsors/virgiliojr94)** - Network accessline 9
Tiers follow the monthly amount on the [sponsors page](https://github.com/sponsors/virgiliojr94): - Network accessline 26
- **[Gui Santos (@guiofsaints)](https://github.com/guiofsaints)** — the first person to sponsor this work.
CHANGELOG.md
- Network accessline 5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), - Network accessline 6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Network accessline 8
> **Do not edit this file by hand.** It is generated from Conventional Commit > messages by [git-cliff](https://github.com/orhun/git-cliff) - Network accessline 9
> messages by [git-cliff](https://github.com/orhun/git-cliff) - Network accessline 274
[1.3.0]: https://github.com/virgiliojr94/book-to-skill/releases/tag/v1.3.0 - Network accessline 275
[1.2.0]: https://github.com/virgiliojr94/book-to-skill/releases/tag/v1.2.0 - Network accessline 276
[1.1.0]: https://github.com/virgiliojr94/book-to-skill/releases/tag/v1.1.0 - Network accessline 277
[1.0.0]: https://github.com/virgiliojr94/book-to-skill/releases/tag/v1.0.0
CONTRIBUTING.md
- Network accessline 21
git clone https://github.com/virgiliojr94/book-to-skill.git - Network accessline 41
- Add or update tests for any behavior change. - **Do not edit `CHANGELOG.md`.** It is generated from Conventional Commit messages by [git-cliff](https://github.com/orhun/git-cliff) at release time. - Network accessline 42
- **Do not edit `CHANGELOG.md`.** It is generated from Conventional Commit messages by [git-cliff](https://github.com/orhun/git-cliff) at release time. Your **PR title** must be a valid Conventional Commit (`fix:`, `feat:`, - Network accessline 43
messages by [git-cliff](https://github.com/orhun/git-cliff) at release time. - Network accessline 49
- **We don't accept PRs that add third-party or "related / built-with" project links to the README or docs.** Recognition in the README is a [GitHub Sponsors](https://github.com/sponsors/virgiliojr94) benefit (sponsors are - Network accessline 50
links to the README or docs.** Recognition in the README is a [GitHub Sponsors](https://github.com/sponsors/virgiliojr94) benefit (sponsors are listed in `BACKERS.md`). This keeps the project's most visible surface reserved - Network accessline 51
[GitHub Sponsors](https://github.com/sponsors/virgiliojr94) benefit (sponsors are - Network accessline 56
conversion you ran — the document, the command, the measured tokens, what the skill turned out to be good for and where it fell short — belongs in [book-to-skill-use-cases](https://github.com/virgiliojr94/book-to-skill-use-cases): - Network accessline 57
skill turned out to be good for and where it fell short — belongs in [book-to-skill-use-cases](https://github.com/virgiliojr94/book-to-skill-use-cases): your write-up as a Gist on your own account, one line in the index there, no - Network accessline 58
[book-to-skill-use-cases](https://github.com/virgiliojr94/book-to-skill-use-cases):
README.md
- Network accessline 16
<p align="center"> <a href="https://github.com/virgiliojr94/book-to-skill/releases"><img src="https://img.shields.io/github/v/release/virgiliojr94/book-to-skill?style=for-the-badge&color=blueviolet" alt="Latest release"></a> - Network accessline 17
<a href="https://github.com/virgiliojr94/book-to-skill/releases"><img src="https://img.shields.io/github/v/release/virgiliojr94/book-to-skill?style=for-the-badge&color=blueviolet" alt="Latest release"></a> - Network accessline 18
<img src="https://img.shields.io/badge/Agent_Skills-Open_Standard-blueviolet?style=for-the-badge" alt="Agent Skills standard"> - Network accessline 19
<img src="https://img.shields.io/badge/PDF%20%E2%80%A2%20EPUB%20%E2%80%A2%20DOCX%20%E2%80%A2%20MD%20%E2%80%A2%20HTML%20%E2%80%A2%20RTF%20%E2%80%A2%20MOBI-supported-green?style=for-the-badge" alt="Formats supported"> - Network accessline 20
<img src="https://img.shields.io/badge/License-MIT-blue?style=for-the-badge" alt="MIT License"> - Network accessline 21
<a href="https://github.com/sponsors/virgiliojr94"><img src="https://img.shields.io/github/sponsors/virgiliojr94?style=for-the-badge&color=ea4aaa&logo=githubsponsors&logoColor=white" alt="Sponsor"></a> - Network accessline 24
<p align="center"> <a href="https://trendshift.io/repositories/27038?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-27038" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/b - Network accessline 25
<a href="https://trendshift.io/repositories/27038?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-27038" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/270 - Network accessline 26
<a href="https://trendshift.io/repositories/27038?utm_source=trendshift-badge&utm_medium=badge&utm_campaign=badge-trendshift-27038" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repos - Network accessline 27
<a href="https://www.star-history.com/virgiliojr94/book-to-skill"><img src="https://api.star-history.com/badge?repo=virgiliojr94/book-to-skill&type=rank" alt="Star History Rank" /></a> - Network accessline 72
Works with any host that supports the open [Agent Skills](https://github.com/agentskills/agentskills) standard — GitHub Copilot CLI, Amp, Claude Code, Codex, Hermes Agent, OpenCode, and OpenClaw all read the same `SKILL.md` format. - Network accessline 127
💬 **In practice → [use cases](https://github.com/virgiliojr94/book-to-skill-use-cases)** — a DevEx book became a survey of 300+ engineers; a scanned PDF that stalled became [#130](https://github.com/virgiliojr94/book-to-skill/pull/130). Add - Network accessline 137
# Or manually — clone into your skills folder (registers /book-to-skill): git clone https://github.com/virgiliojr94/book-to-skill.git ~/.claude/skills/book-to-skill - Network accessline 138
git clone https://github.com/virgiliojr94/book-to-skill.git ~/.claude/skills/book-to-skill - Dangerous shell operationline 169
| Text-heavy (prose, few tables) | `pdftotext` (poppler) | `sudo apt install poppler-utils` | ⚡ instant | - Network accessline 194
| HTML | `beautifulsoup4` (fallback: stdlib `html.parser`) | `pip3 install beautifulsoup4` | | RTF | `striprtf` (fallback: regex) | `pip3 install striprtf` | | MOBI / AZW / AZW3 | Calibre `ebook-convert` (external app, not pip) | https://ca - Network accessline 195
| RTF | `striprtf` (fallback: regex) | `pip3 install striprtf` | | MOBI / AZW / AZW3 | Calibre `ebook-convert` (external app, not pip) | https://calibre-ebook.com/download | | TXT / Markdown / reStructuredText / AsciiDoc | built-in | — | - Network accessline 196
| MOBI / AZW / AZW3 | Calibre `ebook-convert` (external app, not pip) | https://calibre-ebook.com/download | - Network accessline 257
**[Become a sponsor → github.com/sponsors/virgiliojr94](https://github.com/sponsors/virgiliojr94)**
README.ru.md
- Network accessline 14
> **Актуальность перевода.** Источник истины — [английский README](README.md). Этот перевод может отставать от `master`. > Синхронизирован с EN на коммите [`903d102`](https://github.com/virgiliojr94/book-to-skill/commit/903d102fe8f67ea0fe - Network accessline 15
> Синхронизирован с EN на коммите [`903d102`](https://github.com/virgiliojr94/book-to-skill/commit/903d102fe8f67ea0fe3db7bea85eec7d8b505967) (2026-08-14). - Network accessline 21
<p align="center"> <a href="https://github.com/virgiliojr94/book-to-skill/releases"><img src="https://img.shields.io/github/v/release/virgiliojr94/book-to-skill?style=for-the-badge&color=blueviolet" alt="Latest release"></a> - Network accessline 22
<a href="https://github.com/virgiliojr94/book-to-skill/releases"><img src="https://img.shields.io/github/v/release/virgiliojr94/book-to-skill?style=for-the-badge&color=blueviolet" alt="Latest release"></a> - Network accessline 23
<img src="https://img.shields.io/badge/Agent_Skills-Open_Standard-blueviolet?style=for-the-badge" alt="Agent Skills standard"> - Network accessline 24
<img src="https://img.shields.io/badge/PDF%20%E2%80%A2%20EPUB%20%E2%80%A2%20DOCX%20%E2%80%A2%20MD%20%E2%80%A2%20HTML%20%E2%80%A2%20RTF%20%E2%80%A2%20MOBI-supported-green?style=for-the-badge" alt="Formats supported"> - Network accessline 25
<img src="https://img.shields.io/badge/License-MIT-blue?style=for-the-badge" alt="MIT License"> - Network accessline 26
<a href="https://github.com/sponsors/virgiliojr94"><img src="https://img.shields.io/github/sponsors/virgiliojr94?style=for-the-badge&color=ea4aaa&logo=githubsponsors&logoColor=white" alt="Sponsor"></a> - Network accessline 29
<p align="center"> <a href="https://trendshift.io/repositories/27038?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-27038" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/b - Network accessline 30
<a href="https://trendshift.io/repositories/27038?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-27038" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/270 - Network accessline 73
Работает с хостами open [Agent Skills](https://github.com/agentskills/agentskills) — GitHub Copilot CLI, Amp, Claude Code, Hermes Agent и OpenCode, OpenClaw (общий формат `SKILL.md`). - Network accessline 127
💬 **На практике → [use cases](https://github.com/virgiliojr94/book-to-skill-use-cases)** — DevEx-книга превратилась в survey 300+ инженеров; scanned PDF, который «завис», стал [#130](https://github.com/virgiliojr94/book-to-skill/pull/130). - Network accessline 138
# Or manually: git clone https://github.com/virgiliojr94/book-to-skill.git ~/.claude/skills/book-to-skill - Network accessline 139
git clone https://github.com/virgiliojr94/book-to-skill.git ~/.claude/skills/book-to-skill - Dangerous shell operationline 165
| Text-heavy | `pdftotext` (poppler) | `sudo apt install poppler-utils` | ⚡ | - Network accessline 198
**[Become a sponsor →](https://github.com/sponsors/virgiliojr94)** · [BACKERS.md](BACKERS.md) - Network accessline 206
<a href="https://www.star-history.com/?repos=virgiliojr94%2Fbook-to-skill&type=date&legend=top-left"> - Network accessline 207
<picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=virgiliojr94/book-to-skill&type=date&theme=dark&legend=top-left" /> <source media="(prefers-color-scheme: light)" srcset="https:// - Network accessline 208
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=virgiliojr94/book-to-skill&type=date&theme=dark&legend=top-left" /> - Network accessline 209
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=virgiliojr94/book-to-skill&type=date&legend=top-left" /> - Network accessline 210
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=virgiliojr94/book-to-skill&type=date&legend=top-left" /> - Network accessline 216
<!-- translation-meta: source=README.md@c108d25b0cb58e1bdc361f3de02ed9f37075152f date=2026-10-01 scope=destination-policy maintainer=@MonteNegroX --> <sub>Destination policy synced to English README at commit <code>c108d25</code> · English - Network accessline 217
<sub>Destination policy synced to English README at commit <code>c108d25</code> · English remains canonical · Maintainer: <a href="https://github.com/MonteNegroX">@MonteNegroX</a></sub>
README.zh-CN.md
- Network accessline 13
> **翻译说明。** 以[英文 README](README.md) 为准。本翻译可能落后于 `master`。 > 与英文版同步于 commit [`907be50`](https://github.com/virgiliojr94/book-to-skill/commit/907be508ee17428fea0179f9996bde80e5282a0f)(2026-08-31)。 - Network accessline 14
> 与英文版同步于 commit [`907be50`](https://github.com/virgiliojr94/book-to-skill/commit/907be508ee17428fea0179f9996bde80e5282a0f)(2026-08-31)。 - Network accessline 20
<p align="center"> <a href="https://github.com/virgiliojr94/book-to-skill/releases"><img src="https://img.shields.io/github/v/release/virgiliojr94/book-to-skill?style=for-the-badge&color=blueviolet" alt="Latest release"></a> - Network accessline 21
<a href="https://github.com/virgiliojr94/book-to-skill/releases"><img src="https://img.shields.io/github/v/release/virgiliojr94/book-to-skill?style=for-the-badge&color=blueviolet" alt="Latest release"></a> - Network accessline 22
<img src="https://img.shields.io/badge/Agent_Skills-Open_Standard-blueviolet?style=for-the-badge" alt="Agent Skills standard"> - Network accessline 23
<img src="https://img.shields.io/badge/PDF%20%E2%80%A2%20EPUB%20%E2%80%A2%20DOCX%20%E2%80%A2%20MD%20%E2%80%A2%20HTML%20%E2%80%A2%20RTF%20%E2%80%A2%20MOBI-supported-green?style=for-the-badge" alt="Formats supported"> - Network accessline 24
<img src="https://img.shields.io/badge/License-MIT-blue?style=for-the-badge" alt="MIT License"> - Network accessline 25
<a href="https://github.com/sponsors/virgiliojr94"><img src="https://img.shields.io/github/sponsors/virgiliojr94?style=for-the-badge&color=ea4aaa&logo=githubsponsors&logoColor=white" alt="Sponsor"></a> - Network accessline 28
<p align="center"> <a href="https://trendshift.io/repositories/27038?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-27038" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/b - Network accessline 29
<a href="https://trendshift.io/repositories/27038?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-27038" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/270 - Network accessline 30
<a href="https://trendshift.io/repositories/27038?utm_source=trendshift-badge&utm_medium=badge&utm_campaign=badge-trendshift-27038" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repos - Network accessline 73
兼容任何支持开放 [Agent Skills](https://github.com/agentskills/agentskills) 标准的宿主 —— GitHub Copilot CLI、Amp、Claude Code、Hermes Agent 和 OpenCode, OpenClaw 都读取相同的 `SKILL.md` 格式。 - Network accessline 127
💬 **实践案例 → [use cases](https://github.com/virgiliojr94/book-to-skill-use-cases)** —— 一本 DevEx 书变成 300+ 工程师调研;一本扫描 PDF 卡住后成为 [#130](https://github.com/virgiliojr94/book-to-skill/pull/130)。欢迎添加你的案例:账号在你自己的 Gist,索引只需一行 PR。 - Network accessline 137
# 或手动 —— 克隆到 skills 文件夹(注册 /book-to-skill): git clone https://github.com/virgiliojr94/book-to-skill.git ~/.claude/skills/book-to-skill - Network accessline 138
git clone https://github.com/virgiliojr94/book-to-skill.git ~/.claude/skills/book-to-skill - Dangerous shell operationline 169
| 文字为主(散文,少表格) | `pdftotext` (poppler) | `sudo apt install poppler-utils` | ⚡ 即时 | - Network accessline 194
| HTML | `beautifulsoup4`(备选:标准库 `html.parser`) | `pip3 install beautifulsoup4` | | RTF | `striprtf`(备选:正则) | `pip3 install striprtf` | | MOBI / AZW / AZW3 | Calibre `ebook-convert`(外部应用,非 pip) | https://calibre-ebook.com/download | - Network accessline 195
| RTF | `striprtf`(备选:正则) | `pip3 install striprtf` | | MOBI / AZW / AZW3 | Calibre `ebook-convert`(外部应用,非 pip) | https://calibre-ebook.com/download | | TXT / Markdown / reStructuredText / AsciiDoc | 内置 | — | - Network accessline 196
| MOBI / AZW / AZW3 | Calibre `ebook-convert`(外部应用,非 pip) | https://calibre-ebook.com/download | - Network accessline 257
**[成为赞助者 → github.com/sponsors/virgiliojr94](https://github.com/sponsors/virgiliojr94)**
SECURITY-NOTICE.md
SKILL.md
- Access to secretsline 149
[Credential-related source omitted] - Access to secretsline 152
[Credential-related source omitted] - Dangerous shell operationline 686
rm -rf "$WORKDIR" - Network accessline 776
If the user declines, stop here. Requirements: the `gh` CLI, authenticated (check `gh auth status`). If `gh` is missing or unauthenticated, offer to set it up (`brew install gh` or https://cli.github.com, then `gh auth login`) — or use the - Network accessline 788
1. Add a repo `README.md` inside `$SKILLS_HOME/<skill_name>/` (never overwrite an existing file) — the skill title, a one-paragraph description ("Agent skill generated from *<Title>* by <Author> with [book-to-skill](https://github.com/virgi - Network accessline 804
✅ Published: https://github.com/<owner>/<repo_name> (<private|public>) - Network accessline 806
Install on any Agent Skills host: npx skills add https://github.com/<owner>/<repo_name> --skill <skill_name> - Network accessline 807
npx skills add https://github.com/<owner>/<repo_name> --skill <skill_name> - Network accessline 813
⚠<U+FE0F> Published from a copy: <skill folder> sits inside another git repository, so it has no remote of its own. To publish a later update, re-run Step 11, or clone https://github.com/<owner>/<repo_name> and fold new material into the - Network accessline 815
https://github.com/<owner>/<repo_name> and fold new material into the clone.
book_to_skill/__init__.py
- Executable scriptline 1
Executable file
book_to_skill/__main__.py
- Executable scriptline 1
Executable file
book_to_skill/cli.py
- Executable scriptline 1
Executable file
book_to_skill/config.py
book_to_skill/dependencies.py
- Executable scriptline 1
Executable file - Dangerous shell operationline 29
"system": [("pdftotext", "poppler-utils", "sudo apt install poppler-utils")], - Network accessline 71
"required": True, "system": [ ("ebook-convert", "Calibre", "install Calibre: https://calibre-ebook.com/download"), - Network accessline 72
"system": [ ("ebook-convert", "Calibre", "install Calibre: https://calibre-ebook.com/download"), ], - Network accessline 73
("ebook-convert", "Calibre", "install Calibre: https://calibre-ebook.com/download"), - Access to secretsline 138
[Credential-related source omitted]
book_to_skill/exceptions.py
- Executable scriptline 1
Executable file
book_to_skill/parsers/__init__.py
- Executable scriptline 1
Executable file
book_to_skill/parsers/calibre.py
- Executable scriptline 1
Executable file
book_to_skill/parsers/docx.py
- Executable scriptline 1
Executable file - Network accessline 11
ns = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}" - Network accessline 76
xml_bytes = zf.read("word/document.xml") root = ET.fromstring(xml_bytes) ns = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}" - Network accessline 77
root = ET.fromstring(xml_bytes) ns = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}" parts: list[str] = [] - Network accessline 78
ns = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}" - Network accessline 154
ns = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}"
book_to_skill/parsers/epub.py
- Executable scriptline 1
Executable file
book_to_skill/parsers/html.py
- Executable scriptline 1
Executable file
book_to_skill/parsers/pdf.py
- Executable scriptline 1
Executable file
book_to_skill/parsers/rtf.py
- Executable scriptline 1
Executable file
book_to_skill/parsers/text.py
book_to_skill/pdf_inspector_integration.py
- Executable scriptline 1
Executable file
book_to_skill/sanitize.py
- Executable scriptline 1
Executable file
book_to_skill/utils.py
cliff.toml
- Network accessline 18
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), - Network accessline 19
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Network accessline 21
> **Do not edit this file by hand.** It is generated from Conventional Commit > messages by [git-cliff](https://github.com/orhun/git-cliff) - Network accessline 22
> messages by [git-cliff](https://github.com/orhun/git-cliff)
docs/404.md
docs/index.md
- Network accessline 8
<script type="application/ld+json"> { "@context": "https://schema.org", - Network accessline 9
{ "@context": "https://schema.org", "@type": "SoftwareApplication", - Network accessline 10
"@context": "https://schema.org", - Network accessline 13
"applicationCategory": "DeveloperApplication", "operatingSystem": "Linux, macOS, Windows", "description": "Converts books and documents (PDF, EPUB, DOCX, HTML, Markdown, RTF, MOBI/AZW) into structured, on-demand agent skills for Claude Co - Network accessline 14
"operatingSystem": "Linux, macOS, Windows", "description": "Converts books and documents (PDF, EPUB, DOCX, HTML, Markdown, RTF, MOBI/AZW) into structured, on-demand agent skills for Claude Code, GitHub Copilot CLI, Amp, Codex, Hermes Agent, - Network accessline 15
"description": "Converts books and documents (PDF, EPUB, DOCX, HTML, Markdown, RTF, MOBI/AZW) into structured, on-demand agent skills for Claude Code, GitHub Copilot CLI, Amp, Codex, Hermes Agent, OpenCode, and OpenClaw.", "url": "https:// - Network accessline 16
"codeRepository": "https://github.com/virgiliojr94/book-to-skill", - Network accessline 17
"license": "https://opensource.org/licenses/MIT", - Network accessline 18
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" }, "author": { "@type": "Person", "name": "virgiliojr94", "url": "https://github.com/virgiliojr94" } } - Network accessline 19
"author": { "@type": "Person", "name": "virgiliojr94", "url": "https://github.com/virgiliojr94" } - Network accessline 29
[Get started](guide.md){ .md-button .md-button--primary } [Skill reference](skill-reference.md){ .md-button } [GitHub](https://github.com/virgiliojr94/book-to-skill){ .md-button } - Network accessline 31
[GitHub](https://github.com/virgiliojr94/book-to-skill){ .md-button } - Network accessline 72
npx skills add virgiliojr94/book-to-skill # or manually: git clone https://github.com/virgiliojr94/book-to-skill.git ~/.claude/skills/book-to-skill - Network accessline 73
# or manually: git clone https://github.com/virgiliojr94/book-to-skill.git ~/.claude/skills/book-to-skill # then, in your agent session: - Network accessline 74
git clone https://github.com/virgiliojr94/book-to-skill.git ~/.claude/skills/book-to-skill - Network accessline 82
# not on PyPI yet — pip takes it from the repository pip install "book-to-skill[pdf,epub,docx] @ git+https://github.com/virgiliojr94/book-to-skill.git" - Network accessline 83
pip install "book-to-skill[pdf,epub,docx] @ git+https://github.com/virgiliojr94/book-to-skill.git" - Network accessline 109
- :material-heart:{ .lg .middle } __[Sponsor](https://github.com/sponsors/virgiliojr94)__
docs/install.md
- Network accessline 11
The skill follows the open [Agent Skills](https://github.com/agentskills/agentskills) standard, so a single install works for any compatible host. - Network accessline 13
**One command, any host** — the [`skills` CLI](https://skills.sh) resolves the repo, detects the root `SKILL.md`, and installs the complete skill (including `scripts/extract.py` and `tools/`) into the skills folder of every host you select: - Network accessline 24
git clone https://github.com/virgiliojr94/book-to-skill.git ~/.copilot/skills/book-to-skill - Network accessline 33
git clone https://github.com/virgiliojr94/book-to-skill.git ~/.agents/skills/book-to-skill - Network accessline 45
git clone https://github.com/virgiliojr94/book-to-skill.git "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/skills/book-to-skill" - Network accessline 47
# git clone https://github.com/virgiliojr94/book-to-skill.git ~/.agents/skills/book-to-skill - Network accessline 60
# Cross-agent root (shared with Copilot CLI, Amp and Codex) — recommended: git clone https://github.com/virgiliojr94/book-to-skill.git ~/.agents/skills/book-to-skill - Network accessline 61
git clone https://github.com/virgiliojr94/book-to-skill.git ~/.agents/skills/book-to-skill - Network accessline 63
# git clone https://github.com/virgiliojr94/book-to-skill.git ~/.config/opencode/skills/book-to-skill - Network accessline 75
git clone https://github.com/virgiliojr94/book-to-skill.git \ - Network accessline 101
Install book-to-skill: https://raw.githubusercontent.com/virgiliojr94/book-to-skill/master/SKILL.md - Network accessline 107
git clone https://github.com/virgiliojr94/book-to-skill.git ~/.claude/skills/book-to-skill - Network accessline 109
# git clone https://github.com/virgiliojr94/book-to-skill.git .claude/skills/book-to-skill - Network accessline 140
pip install "book-to-skill[pdf,epub,docx] @ git+https://github.com/virgiliojr94/book-to-skill.git"
docs/research/progressive-disclosure-evals.md
- Network accessline 5
Primary source: [He et al., *Is Progressive Disclosure All You Need for Long-Context Agents?*](https://arxiv.org/abs/2607.17598) - Network accessline 589
- The open [AGENTS.md](https://agents.md/) format is intended for repository instructions consumed by coding agents. - Network accessline 591
- Claude Code currently reads `CLAUDE.md`, not `AGENTS.md` directly, so the repository contains a minimal `CLAUDE.md` importing `AGENTS.md` rather than duplicating rules. See Anthropic's project-memory documentation: <https://code.claude.co
docs/robots.txt
- Network accessline 4
Sitemap: https://booktoskill.is-a.dev/sitemap.xml
docs/usage.md
- Network accessline 45
A DevEx book became a survey applied to 300+ engineers. A scanned PDF that stalled a run became [#130](https://github.com/virgiliojr94/book-to-skill/pull/130), the early-abort fix — reported by someone who does not write software. - Network accessline 47
Both accounts, and how to add yours, are in [book-to-skill-use-cases](https://github.com/virgiliojr94/book-to-skill-use-cases): your write-up as a Gist on your own account, one line in the index, no template and no CI. Bring the numbers fro - Network accessline 56
npx skills add https://github.com/<you>/<your-book-slug> --skill <your-book-slug> - Network accessline 59
Requires the [`gh` CLI](https://cli.github.com), authenticated. The generated repo ships with a README, and the skill folder becomes the git working copy, so later fold-in updates can push to the same remote.
mkdocs.yml
- Network accessline 3
Turn any book, PDF or EPUB into a structured agent skill for Claude Code, GitHub Copilot CLI and Amp — frameworks and decision rules, loaded on demand. site_url: https://booktoskill.is-a.dev/ - Network accessline 4
GitHub Copilot CLI and Amp — frameworks and decision rules, loaded on demand. site_url: https://booktoskill.is-a.dev/ repo_url: https://github.com/virgiliojr94/book-to-skill - Network accessline 5
site_url: https://booktoskill.is-a.dev/ - Network accessline 6
repo_url: https://github.com/virgiliojr94/book-to-skill
scripts/extract.py
- Executable scriptline 1
#!/usr/bin/env python3
tests/evals/test_manifest.py
tests/evals/test_paper_flat.py
- Executable scriptline 1
Executable file
tests/evals/test_replay.py
- Executable scriptline 1
Executable file
tests/evals/test_score.py
- Executable scriptline 1
Executable file
tests/evals/test_score_robustness.py
- Executable scriptline 1
Executable file
tests/fixtures/generate_pdf_page_provenance.py
- Executable scriptline 1
Executable file
tests/test_batch_resilience_unreadable.py
- Executable scriptline 1
Executable file
tests/test_book_to_skill.py
- Executable scriptline 1
Executable file - Network accessline 81
textwrap.dedent("""\ <?xml version="1.0"?> <package xmlns="http://www.idpf.org/2007/opf" version="3.0"> - Network accessline 82
<?xml version="1.0"?> <package xmlns="http://www.idpf.org/2007/opf" version="3.0"> <metadata/> - Network accessline 83
<package xmlns="http://www.idpf.org/2007/opf" version="3.0"> - Network accessline 103
ns = "http://schemas.openxmlformats.org/wordprocessingml/2006/main" - Network accessline 112
with zipfile.ZipFile(path, "w") as zf: zf.writestr("word/document.xml", xml) zf.writestr("[Content_Types].xml", '<?xml version="1.0"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"/>') - Network accessline 113
zf.writestr("word/document.xml", xml) zf.writestr("[Content_Types].xml", '<?xml version="1.0"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"/>') return path - Network accessline 114
zf.writestr("[Content_Types].xml", '<?xml version="1.0"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"/>') - Network accessline 148
textwrap.dedent("""\ <?xml version="1.0"?> <package xmlns="http://www.idpf.org/2007/opf" version="3.0"> - Network accessline 149
<?xml version="1.0"?> <package xmlns="http://www.idpf.org/2007/opf" version="3.0"> <metadata/> - Network accessline 150
<package xmlns="http://www.idpf.org/2007/opf" version="3.0"> - Possible obfuscationline 724
"පරිච්ඡේදය ෨ ක්<U+200D>රම\nසාරාංශය\n" - Possible obfuscationline 725
"පරිච්ඡේදය 3 ප්<U+200D>රතිඵල\nසාරාංශය" - Possible obfuscationline 742
"""The Sanskrit-loan word අධ්<U+200D>යාය is also a Sinhala chapter heading.""" - Possible obfuscationline 745
"අධ්\u200dයාය ෨ ක්<U+200D>රම\nසාරාංශය\n" - Possible obfuscationline 746
"අධ්\u200dයාය 3 ප්<U+200D>රතිඵල\nසාරාංශය" - Possible obfuscationline 777
"""අධ්<U+200D>යාය shares a transliteration with four other scripts, not a block.""" - Network accessline 1745
ns = "http://schemas.openxmlformats.org/wordprocessingml/2006/main" - Network accessline 1758
with zipfile.ZipFile(bad_docx, "w") as zf: zf.writestr("word/document.xml", xml) zf.writestr("[Content_Types].xml", '<?xml version="1.0"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"/>' - Network accessline 1760
zf.writestr("[Content_Types].xml", '<?xml version="1.0"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"/>') - Network accessline 1776
ns = "http://schemas.openxmlformats.org/wordprocessingml/2006/main" - Network accessline 1789
with zipfile.ZipFile(bad_docx, "w") as zf: zf.writestr("word/document.xml", xml) zf.writestr("[Content_Types].xml", '<?xml version="1.0"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"/>' - Network accessline 1791
zf.writestr("[Content_Types].xml", '<?xml version="1.0"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"/>') - Network accessline 1818
ns = "http://schemas.openxmlformats.org/wordprocessingml/2006/main" - Network accessline 1831
with zipfile.ZipFile(bad_docx, "w") as zf: zf.writestr("word/document.xml", xml) zf.writestr("[Content_Types].xml", '<?xml version="1.0"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"/>' - Network accessline 1833
zf.writestr("[Content_Types].xml", '<?xml version="1.0"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"/>') - Network accessline 2051
_NS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main" - Network accessline 2274
def test_spine_order_overrides_manifest_order(self, tmp_path): opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2275
opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' '<item id="c2" href="ch2.xhtml" media-type="application/xhtml+xml"/>' - Network accessline 2276
'<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2289
opf = ( '<opf:package xmlns:opf="http://www.idpf.org/2007/opf" version="3.0">' - Network accessline 2290
'<opf:package xmlns:opf="http://www.idpf.org/2007/opf" version="3.0">' - Network accessline 2311
def test_non_spine_doc_kept_as_safety_net_after_spine(self, tmp_path): opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2312
opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' '<item id="c1" href="ch1.xhtml" media-type="application/xhtml+xml"/>' - Network accessline 2313
'<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2323
def test_item_attribute_order_robust(self, tmp_path): opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2324
opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' '<item href="only.xhtml" id="c1" media-type="application/xhtml+xml"/>' - Network accessline 2325
'<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2335
opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2336
'<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2344
def test_opf_in_subdir_resolves_hrefs(self, tmp_path): opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2345
opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' '<item id="c1" href="ch1.xhtml" media-type="application/xhtml+xml"/>' - Network accessline 2346
'<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2356
def test_manifest_href_fragment_is_not_part_of_archive_name(self, tmp_path): opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2357
opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' '<item id="c1" href="chapter.xhtml#section-2" ' - Network accessline 2358
'<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2367
def test_manifest_href_percent_encoding_maps_to_archive_name(self, tmp_path): opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2368
opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' '<item id="c1" href="Text/Chapter%201.xhtml" ' - Network accessline 2369
'<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2382
opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Network accessline 2383
'<package xmlns="http://www.idpf.org/2007/opf" version="3.0"><manifest>' - Possible obfuscationline 2555
raw = b"\xff\xfe\x00\x00" + self.SAMPLE.encode("utf-32-le") - Possible obfuscationline 2575
raw = b"\x00\x00\xfe\xff" + self.SAMPLE.encode("utf-32-be")
tests/test_calibre_stale_output.py
- Executable scriptline 1
Executable file
tests/test_chapter_content_split.py
- Executable scriptline 1
Executable file
tests/test_chapter_method_reported.py
- Executable scriptline 1
Executable file
tests/test_chapter_numeric_false_positives.py
- Executable scriptline 1
Executable file
tests/test_cjk_radical_normalization.py
- Executable scriptline 1
Executable file
tests/test_cjk_supplementary_plane.py
- Executable scriptline 1
Executable file
tests/test_code_fence_closers.py
- Executable scriptline 1
Executable file
tests/test_corpus_newlines.py
tests/test_dependency_install_semantics.py
- Executable scriptline 1
Executable file
tests/test_discovery_tax.py
- Executable scriptline 1
Executable file
tests/test_docling_fallback.py
- Executable scriptline 1
Executable file
tests/test_docs_host_lists.py
- Executable scriptline 1
Executable file
tests/test_epub_container_entities.py
tests/test_epub_image_reporting.py
- Executable scriptline 1
Executable file
tests/test_epub_utf16.py
- Executable scriptline 1
Executable file - Network accessline 39
) opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0">' - Network accessline 40
opf = ( '<package xmlns="http://www.idpf.org/2007/opf" version="3.0">' '<manifest><item id="first" href="z.xhtml" media-type="application/xhtml+xml"/>' - Network accessline 41
'<package xmlns="http://www.idpf.org/2007/opf" version="3.0">' - Network accessline 45
'</spine></package>' ) first = '<html xmlns="http://www.w3.org/1999/xhtml"><body><p>FIRST 中文</p></body></html>' - Network accessline 46
) first = '<html xmlns="http://www.w3.org/1999/xhtml"><body><p>FIRST 中文</p></body></html>' second = '<html xmlns="http://www.w3.org/1999/xhtml"><body><p>SECOND café</p></body></html>' - Network accessline 47
first = '<html xmlns="http://www.w3.org/1999/xhtml"><body><p>FIRST 中文</p></body></html>' - Network accessline 48
second = '<html xmlns="http://www.w3.org/1999/xhtml"><body><p>SECOND café</p></body></html>' - Access to secretsline 114
[Credential-related source omitted]
tests/test_fingerprint.py
- Executable scriptline 1
Executable file
tests/test_hermes_host_support.py
tests/test_html_block_boundaries.py
- Executable scriptline 1
Executable file - Network accessline 152
opf = ( '<?xml version="1.0"?><package version="3.0" ' 'xmlns="http://www.idpf.org/2007/opf"><manifest>' - Network accessline 153
'<?xml version="1.0"?><package version="3.0" ' 'xmlns="http://www.idpf.org/2007/opf"><manifest>' '<item id="c1" href="c1.xhtml" media-type="application/xhtml+xml"/>' - Network accessline 154
'xmlns="http://www.idpf.org/2007/opf"><manifest>'
tests/test_html_boilerplate_extraction.py
- Executable scriptline 1
Executable file
tests/test_intro_and_support_note.py
- Executable scriptline 1
Executable file
tests/test_isolated_install_hint.py
- Executable scriptline 1
Executable file
tests/test_malformed_text_bom.py
tests/test_metadata_encoding.py
- Executable scriptline 1
Executable file
tests/test_multi_source_structural_chapters.py
tests/test_multi_source_toc.py
- Executable scriptline 1
Executable file
tests/test_no_bytecode_pollution.py
tests/test_numbered_headings.py
- Executable scriptline 1
Executable file
tests/test_openclaw_host_support.py
tests/test_opencode_host_support.py
tests/test_output_dir_security.py
- Executable scriptline 1
Executable file
tests/test_part_chapter_count.py
- Executable scriptline 1
Executable file
tests/test_pdf_inspector_integration.py
- Executable scriptline 1
Executable file
tests/test_pdf_outline_chapters.py
- Executable scriptline 1
Executable file
tests/test_pdf_page_number_detection.py
- Executable scriptline 1
Executable file
tests/test_pdf_page_sidecar.py
tests/test_pdftotext_edge_only_boilerplate.py
- Executable scriptline 1
Executable file
tests/test_per_run_workdir.py
- Executable scriptline 1
Executable file
tests/test_publish_visibility_gate.py
- Executable scriptline 1
Executable file
tests/test_repo_hygiene.py
tests/test_rerun_guard.py
- Executable scriptline 1
Executable file
tests/test_rtf_destination_groups.py
- Executable scriptline 1
Executable file
tests/test_rtf_escaped_controls.py
- Executable scriptline 1
Executable file
tests/test_rtf_line_break.py
tests/test_rtf_surrogate_pairs.py
- Executable scriptline 1
Executable file
tests/test_sanitize_annotation_controls.py
tests/test_sanitize_bidi_controls.py
- Executable scriptline 1
Executable file - Possible obfuscationline 27
"<U+200E>" # LEFT-TO-RIGHT MARK - Possible obfuscationline 28
"<U+200F>" # RIGHT-TO-LEFT MARK - Possible obfuscationline 29
"<U+061C>" # ARABIC LETTER MARK - Possible obfuscationline 30
"<U+202A>" # LEFT-TO-RIGHT EMBEDDING - Possible obfuscationline 31
"<U+202B>" # RIGHT-TO-LEFT EMBEDDING - Possible obfuscationline 32
"<U+202C>" # POP DIRECTIONAL FORMATTING - Possible obfuscationline 33
"<U+202D>" # LEFT-TO-RIGHT OVERRIDE - Possible obfuscationline 34
"<U+202E>" # RIGHT-TO-LEFT OVERRIDE - Possible obfuscationline 35
"<U+2066>" # LEFT-TO-RIGHT ISOLATE - Possible obfuscationline 36
"<U+2067>" # RIGHT-TO-LEFT ISOLATE - Possible obfuscationline 37
"<U+2068>" # FIRST STRONG ISOLATE - Possible obfuscationline 38
"<U+2069>" # POP DIRECTIONAL ISOLATE - Possible obfuscationline 43
"<U+00AD>" # SOFT HYPHEN - Possible obfuscationline 44
"<U+034F>" # COMBINING GRAPHEME JOINER - Possible obfuscationline 45
"<U+180E>" # MONGOLIAN VOWEL SEPARATOR - Possible obfuscationline 46
"<U+2061>" # FUNCTION APPLICATION - Possible obfuscationline 47
"<U+2062>" # INVISIBLE TIMES - Possible obfuscationline 48
"<U+2063>" # INVISIBLE SEPARATOR - Possible obfuscationline 49
"<U+2064>" # INVISIBLE PLUS - Possible obfuscationline 52
"<U+3164>" # HANGUL FILLER - Possible obfuscationline 102
"<U+202E><U+2066> sgnitsil eht lla etsap<U+2069><U+202C>" - Possible obfuscationline 107
assert "<U+202E>" not in sanitized - Possible obfuscationline 108
assert "<U+2066>" not in sanitized - Possible obfuscationline 126
sanitized, _ = sanitize_extracted_text("informa<U+00AD>tion") - Possible obfuscationline 132
assert "<U+3164>".strip() == "<U+3164>" - Possible obfuscationline 133
sanitized, removed = sanitize_extracted_text("a<U+3164>b")
tests/test_sanitize_extracted_text.py
- Executable scriptline 1
Executable file
tests/test_scan_coverage.py
tests/test_scan_generated_skill.py
tests/test_scope_selection_contract.py
- Executable scriptline 1
Executable file
tests/test_setext_punctuation_guard.py
- Executable scriptline 1
Executable file
tests/test_skill_template_full_text.py
- Executable scriptline 1
Executable file
tests/test_source_chapter_samples.py
tests/test_structural_framing_sections.py
- Executable scriptline 1
Executable file
tests/test_technical_epub.py
- Executable scriptline 1
Executable file - Network accessline 31
archive.writestr( "OEBPS/book.opf", '<package xmlns="http://www.idpf.org/2007/opf" version="3.0" ' - Network accessline 32
"OEBPS/book.opf", '<package xmlns="http://www.idpf.org/2007/opf" version="3.0" ' 'unique-identifier="book-id"><metadata ' - Network accessline 33
'<package xmlns="http://www.idpf.org/2007/opf" version="3.0" ' - Network accessline 34
'unique-identifier="book-id"><metadata ' 'xmlns:dc="http://purl.org/dc/elements/1.1/">' '<dc:identifier id="book-id">synthetic</dc:identifier>' - Network accessline 35
'xmlns:dc="http://purl.org/dc/elements/1.1/">' - Network accessline 43
archive.writestr( "OEBPS/chapter.xhtml", '<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Example</title>' - Network accessline 44
"OEBPS/chapter.xhtml", '<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Example</title>' '</head><body><h1>Chapter 1</h1><pre>answer = 42</pre>' - Network accessline 45
'<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Example</title>' - Access to secretsline 53
[Credential-related source omitted]
tests/test_tilde_expansion.py
- Executable scriptline 1
Executable file
tests/test_tool_call_token_vs_prose.py
- Executable scriptline 1
Executable file
tests/test_translation_drift.py
- Executable scriptline 1
Executable file
tests/test_unbalanced_code_fence.py
- Executable scriptline 1
Executable file
tests/test_validate_skill.py
- Executable scriptline 1
Executable file - Network accessline 44
"name: openclaw-skill\n" "description: A test skill.\n" "homepage: https://example.com/skill\n" - Network accessline 45
"description: A test skill.\n" "homepage: https://example.com/skill\n" "user-invocable: true\n" - Network accessline 46
"homepage: https://example.com/skill\n"
tools/discovery_tax.py
- Executable scriptline 1
#!/usr/bin/env python3
tools/evals/manifest.py
tools/evals/paper_flat.py
- Executable scriptline 1
#!/usr/bin/env python3
tools/evals/replay.py
- Executable scriptline 1
#!/usr/bin/env python3
tools/evals/score.py
- Executable scriptline 1
#!/usr/bin/env python3
tools/scan_generated_skill.py
- Executable scriptline 1
#!/usr/bin/env python3
tools/validate_skill.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 16
The SKILL.md format itself is an open standard (https://github.com/agentskills/agentskills) — `name` + `description` are the - Network accessline 17
(https://github.com/agentskills/agentskills) — `name` + `description` are the - Network accessline 22
Refs: Claude https://code.claude.com/docs/en/skills - Network accessline 23
Claude https://code.claude.com/docs/en/skills - Network accessline 24
https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices - Network accessline 25
Copilot https://docs.github.com/en/copilot/concepts/agents/about-agent-skills - Network accessline 26
https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/add-skills - Network accessline 27
Amp https://ampcode.com/manual#skills - Network accessline 28
Hermes https://hermes-agent.nousresearch.com/docs/user-guide/features/skills - Network accessline 29
OpenClaw https://docs.openclaw.ai/tools/skills - Network accessline 30
OpenCode https://opencode.ai/docs/skills - Network accessline 128
# OpenCode recognizes only these five keys; unknown frontmatter is # silently ignored (https://opencode.ai/docs/skills#write-frontmatter). - Network accessline 129
# silently ignored (https://opencode.ai/docs/skills#write-frontmatter). - Possible obfuscationline 217
# leading <U+FEFF> makes text.startswith("---") false and frontmatter is missed.
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 1 fact
- Contacts schemas.openxmlformats.org, which SKILL.md, the README and the plugin manifest do not mentionbook_to_skill/parsers/docx.py:11High confidence
Hidden characters: 12 facts
- Text direction control U+202A, in codetests/test_sanitize_bidi_controls.py:30High confidence
- Text direction control U+202B, in codetests/test_sanitize_bidi_controls.py:31High confidence
- Text direction control U+202C, in codetests/test_sanitize_bidi_controls.py:32High confidence
- Text direction control U+202D, in codetests/test_sanitize_bidi_controls.py:33High confidence
- Text direction control U+202E, in codetests/test_sanitize_bidi_controls.py:34High confidence
- Text direction control U+2066, in codetests/test_sanitize_bidi_controls.py:35High confidence
- Text direction control U+2067, in codetests/test_sanitize_bidi_controls.py:36High confidence
- Text direction control U+2068, in codetests/test_sanitize_bidi_controls.py:37High confidence
- Text direction control U+2069, in codetests/test_sanitize_bidi_controls.py:38High confidence
- Text direction control U+202E, in codetests/test_sanitize_bidi_controls.py:102High confidence
- Text direction control U+202E, in codetests/test_sanitize_bidi_controls.py:107High confidence
- Text direction control U+2066, in codetests/test_sanitize_bidi_controls.py:108High confidence
Signal confidence: 383 facts
- Network access in prose of documentationBACKERS.md:5Low confidence
- Network access in prose of documentationBACKERS.md:9Low confidence
- Network access in prose of documentationBACKERS.md:26Low confidence
- Network access in prose of documentationCHANGELOG.md:5Low confidence
- Network access in prose of documentationCHANGELOG.md:6Low confidence
- Network access in prose of documentationCHANGELOG.md:8Low confidence
- Network access in prose of documentationCHANGELOG.md:9Low confidence
- Network access in prose of documentationCHANGELOG.md:274Low confidence
- Network access in prose of documentationCHANGELOG.md:275Low confidence
- Network access in prose of documentationCHANGELOG.md:276Low confidence
- Network access in prose of documentationCHANGELOG.md:277Low confidence
- Network access in code of documentationCONTRIBUTING.md:21Low confidence
- Network access in prose of documentationCONTRIBUTING.md:41Low confidence
- Network access in prose of documentationCONTRIBUTING.md:42Low confidence
- Network access in prose of documentationCONTRIBUTING.md:43Low confidence
- Network access in prose of documentationCONTRIBUTING.md:49Low confidence
- Network access in prose of documentationCONTRIBUTING.md:50Low confidence
- Network access in prose of documentationCONTRIBUTING.md:51Low confidence
- Network access in prose of documentationCONTRIBUTING.md:56Low confidence
- Network access in prose of documentationCONTRIBUTING.md:57Low confidence
- Network access in prose of documentationCONTRIBUTING.md:58Low confidence
- Network access in prose of documentationREADME.md:16Low confidence
- Network access in prose of documentationREADME.md:17Low confidence
- Network access in prose of documentationREADME.md:18Low confidence
- Network access in prose of documentationREADME.md:19Low confidence
- Network access in prose of documentationREADME.md:20Low confidence
- Network access in prose of documentationREADME.md:21Low confidence
- Network access in prose of documentationREADME.md:24Low confidence
- Network access in prose of documentationREADME.md:25Low confidence
- Network access in prose of documentationREADME.md:26Low confidence
- Network access in prose of documentationREADME.md:27Low confidence
- Network access in prose of documentationREADME.md:72Low confidence
- Network access in prose of documentationREADME.md:127Low confidence
- Network access in code of documentationREADME.md:137Low confidence
- Network access in code of documentationREADME.md:138Low confidence
- Dangerous shell operation in prose of documentationREADME.md:169Low confidence
- Network access in prose of documentationREADME.md:194Low confidence
- Network access in prose of documentationREADME.md:195Low confidence
- Network access in prose of documentationREADME.md:196Low confidence
- Network access in prose of documentationREADME.md:257Low confidence
- Network access in prose of documentationREADME.ru.md:14Low confidence
- Network access in prose of documentationREADME.ru.md:15Low confidence
- Network access in prose of documentationREADME.ru.md:21Low confidence
- Network access in prose of documentationREADME.ru.md:22Low confidence
- Network access in prose of documentationREADME.ru.md:23Low confidence
- Network access in prose of documentationREADME.ru.md:24Low confidence
- Network access in prose of documentationREADME.ru.md:25Low confidence
- Network access in prose of documentationREADME.ru.md:26Low confidence
- Network access in prose of documentationREADME.ru.md:29Low confidence
- Network access in prose of documentationREADME.ru.md:30Low confidence
and 333 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Path CLAUDE.md | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/virgiliojr94-book-to-skill/)