Productividad

book-to-skill

Convierte un libro en PDF (o tus documentos) en una skill: marcos, reglas de decisión y un archivo por capítulo que tu agente consulta cuando lo necesitas.

Instalación

$ npx skills add virgiliojr94/book-to-skill

Revisada: instálala con precaución

Escaneo automático con SkillSpector (NVIDIA) el 4 de noviembre de 2026: nota 100/100, riesgo crítico, 63 avisos.

La mayoría de avisos salen de sus tests: frases como «Ignore previous instructions» o caracteres invisibles están ahí a propósito para comprobar que la skill los limpia de los libros. «Enable Developer Mode» es la instrucción de Windows para crear enlaces simbólicos, y los comentarios HTML son notas normales. Lo real: ejecuta un extractor en Python en tu ordenador y escribe la skill generada en tu carpeta de skills (~/.agents/skills, con un enlace en ~/.claude/skills). Ojo: el autor avisa de una copia maliciosa en otro usuario de GitHub (Leutenegger/book-to-skill); instala solo desde virgiliojr94/book-to-skill.

Ver los avisos del escáner (primeros 60)
  • Hidden Instructions (high) en .github/PULL_REQUEST_TEMPLATE.md:50: «<!-- Drag in an image: the bug vs the fix, the generated skill, the dashboard, etc. A picture of broken-vs-fixed is the fastest way to get a PR reviewed. »
  • Hidden Instructions (high) en SKILL.md:6: «<!-- Cross-agent notes (informational; ignored by host agents): - Compatible skill roots: GitHub Copilot CLI (~/.copilot/skills, ~/.agents/skills, .github»
  • Incomplete referenced artifact analysis (high) en SKILL.md:102: «SKILL.md (partial)»
  • Instruction Override (high) en SKILL.md:757: «Enable Developer Mode»
  • Incomplete referenced artifact analysis (high) en SKILL.md:788: «README.md (partial)»
  • Credential Access (high) en tests/test_book_to_skill.py:1749: «/etc/passwd»
  • Env Variable Harvesting (high) en tests/test_corpus_newlines.py:41: «dict(os.environ, BOOK_SKILL_WORKDIR=str(output))»
  • Env Variable Harvesting (high) en tests/test_epub_container_entities.py:67: «dict(os.environ, BOOK_SKILL_WORKDIR=str(output), PYTHONIOENCODING="utf-8")»
  • Env Variable Harvesting (high) en tests/test_epub_utf16.py:114: «os.environ.copy()»
  • Env Variable Harvesting (high) en tests/test_multi_source_structural_chapters.py:51: «dict(os.environ, BOOK_SKILL_WORKDIR=str(workdir))»
  • Env Variable Harvesting (high) en tests/test_no_bytecode_pollution.py:105: «os.environ.items()»
  • Hidden Instructions (high) en tests/test_sanitize_bidi_controls.py:30: «‪»
  • Hidden Instructions (high) en tests/test_sanitize_bidi_controls.py:31: «‫»
  • Hidden Instructions (high) en tests/test_sanitize_bidi_controls.py:32: «‬»
  • Hidden Instructions (high) en tests/test_sanitize_bidi_controls.py:33: «‭»
  • Hidden Instructions (high) en tests/test_sanitize_bidi_controls.py:34: «‮»
  • Hidden Instructions (high) en tests/test_sanitize_bidi_controls.py:35: «⁦»
  • Hidden Instructions (high) en tests/test_sanitize_bidi_controls.py:36: «⁧»
  • Hidden Instructions (high) en tests/test_sanitize_bidi_controls.py:37: «⁨»
  • Hidden Instructions (high) en tests/test_sanitize_bidi_controls.py:38: «⁩»
  • Instruction Override (high) en tests/test_scan_coverage.py:27: «Ignore all previous instructions»
  • Credential Access (high) en tests/test_scan_coverage.py:27: «.env »
  • YARA rule 'agent_skill_prompt_injection_hidden_instructions': Prompt injection or hidden i (high) en tests/test_scan_generated_skill.py:104: «model; Ignore previous instructions»
  • Instruction Override (high) en tests/test_scan_generated_skill.py:107: «Ignore previous instructions»
  • MCP server referenced without pinned version: 'uvx git-cliff'. (medium) en CONTRIBUTING.md:73: «uvx git-cliff»
  • External Transmission (medium) en README.md:27: «https://api.star-history.com/»
  • MCP server referenced without pinned version: 'npx skills'. (medium) en README.md:123: «npx skills»
  • Sudo/Root Execution (medium) en README.md:169: «sudo »
  • analysis-evasion (medium) en README.ru.md:1
  • Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were (medium) en SKILL.md:1: «Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, file_read, file_write, network, shell.»
  • Session Persistence (medium) en SKILL.md:412: «create the directory if missing). One exception, so the default does not invent a convention in someone else's house: if `~/.agents»
  • Session Persistence (medium) en SKILL.md:757: «create the symlink (a plain copy drifts on the next Update/Fold-in). Enable Developer Mode / create the link manually, or run the skill from ~/.agents»
  • subprocess module call (medium) en book_to_skill/dependencies.py:124: «subprocess.run( [sys.executable, "-m", "pip", "install", *packages], text=True, timeout=600, )»
  • subprocess module call (medium) en book_to_skill/parsers/calibre.py:43: «subprocess.run( ["ebook-convert", input_path, str(output_path)], capture_output=True, text=True, timeout=300 )»
  • subprocess module call (medium) en book_to_skill/parsers/pdf.py:89: «subprocess.run( ["pdftotext", "-layout", "-enc", "UTF-8", pdf_path, "-"], capture_output=True, text=True, timeout=120, encod»
  • subprocess module call (medium) en book_to_skill/parsers/pdf.py:110: «subprocess.run( ["pdftotext", "-f", "1", "-l", str(pages), "-enc", "UTF-8", os.path.abspath(pdf_path), "-"], capture_output=True, text=T»
  • subprocess module call (medium) en book_to_skill/parsers/pdf.py:286: «subprocess.run( ["pdfinfo", pdf_path], capture_output=True, text=True, timeout=15, )»
  • Autonomous Decision Making (medium) en book_to_skill/utils.py:1760: «without asking»
  • Skill Enumeration (medium) en docs/install.md:101: «skill/master/SKILL.md»
  • subprocess module call (medium) en tests/evals/test_manifest.py:94: «subprocess.run(command, check=True, capture_output=True, text=True, encoding="utf-8")»
  • subprocess module call (medium) en tests/evals/test_replay.py:36: «subprocess.run(command, check=True, capture_output=True)»
  • subprocess module call (medium) en tests/evals/test_replay.py:62: «subprocess.run( [sys.executable, str(REPLAY), str(fixture)], check=True, capture_output=True, text=True, )»
  • subprocess module call (medium) en tests/test_corpus_newlines.py:43: «subprocess.run( [ sys.executable, str(ROOT / "scripts" / "extract.py"), str(source), "--mode", »
  • Dynamic import via __import__() (medium) en tests/test_discovery_tax.py:111: «__import__("re")»
  • subprocess module call (medium) en tests/test_epub_container_entities.py:68: «subprocess.run( [sys.executable, "-B", "-S", str(ROOT / "scripts" / "extract.py"), str(source), "--mode", "text", "--install-mi»
  • subprocess module call (medium) en tests/test_epub_utf16.py:116: «subprocess.run( [sys.executable, "-B", "-S", str(ROOT / "scripts" / "extract.py"), str(self.path), "--mode", "text", "--install-missing»
  • subprocess module call (medium) en tests/test_hermes_host_support.py:55: «subprocess.run(["git", "init", "-q"], cwd=project, check=True)»
  • subprocess module call (medium) en tests/test_hermes_host_support.py:75: «subprocess.run( ["bash", "-c", _extract_probe_script()], cwd=nested, env=env, check=True, capture_output=True, t»
  • subprocess module call (medium) en tests/test_hermes_host_support.py:164: «subprocess.run( ["bash", "-c", _extract_probe_script()], cwd=run_from, env=env, check=True, capture_output=True, »
  • subprocess module call (medium) en tests/test_hermes_host_support.py:195: «subprocess.run( ["bash", "-c", _extract_probe_script()], cwd=project, env=env, check=True, capture_output=True, »
  • subprocess module call (medium) en tests/test_multi_source_structural_chapters.py:41: «subprocess.run( [ sys.executable, str(ROOT_DIR / "scripts" / "extract.py"), *map(str, paths), "--mode", »
  • subprocess module call (medium) en tests/test_no_bytecode_pollution.py:111: «subprocess.run( argv, cwd=str(cwd), env=env, capture_output=True, text=True, encoding="utf-8", errors="r»
  • subprocess module call (medium) en tests/test_opencode_host_support.py:57: «subprocess.run( [cand, "-c", "true"], capture_output=True, timeout=30, )»
  • subprocess module call (medium) en tests/test_opencode_host_support.py:104: «subprocess.run( [BASH, "-c", _extract_probe_script()], cwd=cwd, env=env, check=True, capture_output=True, text=T»
  • subprocess module call (medium) en tests/test_opencode_host_support.py:126: «subprocess.run( [BASH, "-lc", "cygpath -w -- " + shlex.quote(raw)], capture_output=True, text=True, timeout=30, »
  • subprocess module call (medium) en tests/test_pdf_page_sidecar.py:149: «subprocess.run( [sys.executable, str(ROOT / "scripts" / "extract.py"), str(FIXTURE), "--mode", "text", "--install-missing", "no", *opti»
  • subprocess module call (medium) en tests/test_repo_hygiene.py:14: «subprocess.run( ["git", *args], cwd=REPO_ROOT, capture_output=True, timeout=30, text=True, »
  • subprocess module call (medium) en tests/test_source_chapter_samples.py:63: «subprocess.run( [sys.executable, str(ROOT_DIR / "scripts" / "extract.py"), *map(str, paths), "--mode", "text", "--install-missing", "no"], »
  • subprocess module call (medium) en tests/test_technical_epub.py:60: «subprocess.run( command, cwd=ROOT, env=env, capture_output=True, text=True, encoding="utf-8", timeout=30, )»
  • subprocess module call (medium) en tools/evals/manifest.py:113: «subprocess.run( ["git", "rev-parse", "HEAD"], cwd=base_dir, capture_output=True, text=True, encoding="utf-8", errors="replace", timeout=»

Un escáner automático no garantiza que book-to-skill sea segura. Lee su código antes de instalarla, sobre todo si ejecuta scripts o pide permisos.

¿Para qué sirve?

  • Preguntarle a tu agente por un capítulo concreto de un libro técnico que tienes
  • Convertir la documentación interna o el manual de marca en una skill consultable
  • Tener una chuleta de reglas de decisión de cualquier libro

Preguntas sobre book-to-skill

¿Qué hace book-to-skill?

Convierte un libro en PDF (o tus documentos) en una skill: marcos, reglas de decisión y un archivo por capítulo que tu agente consulta cuando lo necesitas.

¿Cómo se instala book-to-skill?

Copia y ejecuta en tu terminal: npx skills add virgiliojr94/book-to-skill. Después pídeselo a Claude con normalidad.

¿book-to-skill es gratis?

Sí. Es un proyecto de código abierto de virgiliojr94 con licencia MIT. Solo necesitas tu propio plan de Claude.

Skillario no es el autor de esta skill. La ficha resume su funcionamiento; el proyecto pertenece a virgiliojr94. Revisa su README antes de instalarla.

Skills relacionadas

Cada día se añade una skill nueva.
Personaje de Skillario