Revisado por Iván Quintas, Editor de IA News
book-to-skill: convierte un libro técnico en una skill de agente
Un PDF entra, una skill de Claude Code, Copilot CLI o Amp sale. 22.190 estrellas en tres meses y capítulos que se cargan solo cuando preguntas por ellos.

Hay un tipo concreto de frustración que conoce cualquiera que compre libros técnicos: te leíste entero Designing Data-Intensive Applications, subrayaste medio libro, y tres meses después no recuerdas ni que existía el capítulo 7. El PDF sigue ahí. Buscar dentro te devuelve una lista de páginas, no una respuesta. Y si le preguntas a tu agente, o alucina o te dice que no tiene el contenido.
book-to-skill ataca justo ese hueco: coge el PDF y lo convierte en una skill que tu agente carga cuando la necesita. El repo lleva 22.190 estrellas y 2.342 forks desde su primer commit el 1 de mayo, licencia MIT, y sigue recibiendo commits esta misma semana.
Qué hace, en tres pasos
El flujo cabe en una línea de comando dentro del agente:
# Instalar (cualquier host, vía el CLI de skills)
npx skills add virgiliojr94/book-to-skill
# O clonando en tu carpeta de skills
git clone https://github.com/virgiliojr94/book-to-skill.git ~/.claude/skills/book-to-skill
# Convertir: un fichero, una carpeta o un glob
/book-to-skill ./mi-libro.pdf
Le apuntas a un fichero, lo destila y tu agente lo carga bajo demanda. A partir de ahí escribes /mi-libro replication y el agente abre el capítulo correcto y responde con el contenido real del libro.
La palabra importante es destila, no resume. Lo que extrae son frameworks, reglas de decisión, técnicas y anti-patrones: estructura, no un resumen de contraportada.
La estructura que genera
Aquí está la decisión de diseño que hace que esto funcione y no sea otro volcado de texto:
| Fichero | Contenido | Tamaño |
|---|---|---|
SKILL.md | Modelos mentales + índice de capítulos | ~4.000 tokens |
chapters/ch01-*.md | Un fichero por capítulo | ~1.000 tokens c/u |
glossary.md | Términos con referencia al capítulo | ~1.500 tokens |
patterns.md | Técnicas, algoritmos y patrones | ~2.000 tokens |
cheatsheet.md | Tablas de decisión y reglas rápidas | ~1.000 tokens |
Los capítulos no cuentan contra el presupuesto de la skill hasta que preguntas por ese tema. El agente arranca con cuatro mil tokens de mapa y baja al capítulo concreto solo cuando hace falta. Es la misma idea de índice jerárquico que ya vimos en la wiki que OpenKB compila sin base de datos vectorial, aplicada a un solo libro en vez de a una carpeta de documentos.
El impuesto del bucle de descubrimiento
El proyecto pone número a su propia tesis: de 24 a 51 veces menos tokens que volcar el libro en el contexto para responder una pregunta, medido sobre libros reales.
El razonamiento detrás es más interesante que la cifra. Un agente que lee un PDF no solo lee: navega. Vuelve al índice, retrocede, reprocesa. Y lo repite en cada turno de la conversación, porque el contexto no recuerda la exploración anterior. Los autores llaman a eso discovery loop tax, el impuesto del bucle de descubrimiento, y la propuesta es pagarlo una única vez, en la conversión, para que después cada consulta cueste en proporción a la respuesta y no al libro.
Conviene leer el número como lo que es —una medición del propio proyecto, con su metodología publicada— y no como un benchmark independiente. La dirección, en cambio, es difícil de discutir: estructurar una vez sale más barato que redescubrir en cada pregunta.
Formato abierto, no formato de Anthropic
Detalle que se pasa por alto en el hilo original: el SKILL.md que genera es el del estándar abierto Agent Skills, así que la misma carpeta la leen Claude Code (~/.claude/skills/), GitHub Copilot CLI (~/.copilot/skills/) y Amp o cualquier host cross-agent (~/.agents/skills/).
Es la misma convergencia que comentamos cuando Google enseñó las skills del ADK a su Agents CLI: tres CLIs de tres empresas distintas leyendo el mismo fichero Markdown. Y encaja con el argumento de fondo de por qué la portabilidad de tu trabajo con agentes no debería depender del proveedor: lo que queda en disco es texto plano, no un artefacto atado a un cliente.
Qué necesita y dónde se atasca
La extracción es Python determinista y elige herramienta según el tipo de libro. Para PDF de prosa, pdftotext, pypdf o pdfminer.six, instantáneos. Para PDF técnico con código, tablas o fórmulas, docling, que preserva las tablas en Markdown a cambio de ~1,5 segundos por página. Antes de empezar, la skill pregunta si el libro es técnico o de prosa y elige sola. Un python3 scripts/extract.py --check te dice qué extractores tienes y el comando exacto para instalar los que falten.
El límite duro son los PDF escaneados. Si el fichero son imágenes de páginas sin capa de texto, no hay nada que extraer, y el extractor lo detecta en las primeras páginas y se para en vez de fabricar una skill vacía. La solución es tuya: ocrmypdf entrada.pdf salida.pdf y vuelves a convertir.
Hay un segundo límite que el repo no puede resolver y conviene tener presente: una skill destilada de un libro con derechos de autor es contenido derivado. Para uso personal, sobre un libro que has comprado, es análogo a tus propias notas. Publicarla es otra cosa. El proyecto lo tiene en cuenta a medias —la publicación a GitHub es privada por defecto— pero la decisión sigue siendo del usuario.
El nombre dice “libro”, el input es cualquier prosa estructurada
La parte que más rendimiento le veo no son los libros. Es todo lo demás que relees sin parar: los ADR y runbooks de tu propio docs/, un manual de marca de sesenta páginas, un montón de papers sobre un tema, RFCs y contratos de API que consultas pero nunca memorizas.
Ahí la regla que propone el README es buena heurística: si abres un documento lo bastante a menudo como para desear habértelo aprendido, es candidato.
Lo que resume bien el momento es que hace un año la respuesta a «tengo un libro y quiero preguntarle cosas» habría sido trocear, embeber y montar un RAG. Ahora la respuesta es compilar estructura una vez y dejar que el agente navegue. El mismo giro que hace útil convertir una web en Markdown antes de dársela a un LLM, llevado a tu estantería.
Repositorio en github.com/virgiliojr94/book-to-skill, y el hilo de Hasan Toor que lo puso a circular este fin de semana.
📎 Fuente original: Hasan Toor en X ↗
Noticias relacionadas
Preguntas frecuentes
- ¿Qué genera exactamente book-to-skill a partir de un PDF?
- Una carpeta de skill con cinco piezas: SKILL.md con los modelos mentales del libro y el índice de capítulos (~4.000 tokens), un fichero por capítulo en chapters/ (~1.000 tokens cada uno) que solo se carga cuando preguntas por ese tema, glossary.md con los términos y su capítulo de origen (~1.500), patterns.md con técnicas y patrones (~2.000) y cheatsheet.md con tablas de decisión (~1.000).
- ¿Funciona solo con Claude Code?
- No. Genera el formato SKILL.md del estándar abierto Agent Skills, que leen igual Claude Code (~/.claude/skills/), GitHub Copilot CLI (~/.copilot/skills/) y Amp o cualquier host cross-agent (~/.agents/skills/). El mismo directorio sirve para los tres.
- ¿Qué formatos de libro admite?
- PDF, EPUB, DOCX, HTML, RTF, MOBI/AZW con Calibre, y texto plano, Markdown, reStructuredText o AsciiDoc sin dependencias extra. Para PDF elige extractor según el libro: pdftotext, pypdf o pdfminer.six si es prosa, y docling —a razón de un segundo y medio por página— si tiene código, tablas o fórmulas.
- ¿Sirve con un PDF escaneado?
- No directamente. Un PDF que son imágenes de páginas sin capa de texto no tiene nada que extraer. El extractor lo detecta en las primeras páginas y se detiene con una explicación, en vez de recorrer el libro entero para producir una skill vacía. Hay que pasarle OCR antes, por ejemplo con ocrmypdf entrada.pdf salida.pdf.
- ¿De dónde sale la mejora de 24x-51x en tokens?
- Es una medición del propio proyecto sobre libros reales, y compara responder una pregunta con la skill frente a volcar el libro en el contexto. El argumento es que un agente que lee un PDF no solo lee: navega, vuelve al índice, retrocede y reprocesa en cada turno. book-to-skill paga ese coste de estructuración una sola vez, en la conversión.