Lectura de PDFs local, verificable y con uso eficiente del contexto para agentes de IA.
pdf-deep-reader convierte PDFs o texto largo en una caché estructurada y permite que el agente recupere únicamente la evidencia necesaria para responder. Conserva páginas, secciones, tablas, figuras, nivel de confianza y ubicaciones de cita sin enviar el documento a servicios externos.
Local-first, evidence-oriented PDF reading for Agent Skills compatible agents.
- Respuestas trazables: las afirmaciones importantes se vinculan con página, sección, tabla, figura o rango de líneas.
- Menos tokens: el agente consulta un mapa y un índice local en lugar de cargar el documento completo en contexto.
- Privacidad por defecto: la extracción y la búsqueda se ejecutan localmente.
- Caché reutilizable: el contenido se identifica por hash y no se vuelve a procesar si sigue siendo válido.
- Incertidumbre explícita: registra cobertura, advertencias y confianza de extracción.
- Procesamiento acotado: los límites de páginas, memoria, tiempo, imágenes y tablas evitan trabajos sin control.
Instala el repositorio como paquete de Pi:
pi install git:github.com/manrods/pdf-deep-reader-skillReinicia Pi después de instalarlo. La skill se activa automáticamente cuando pides analizar un PDF; también puedes forzarla con /skill:pdf-deep-reader.
Para instalarla solo en un proyecto:
pi install -l git:github.com/manrods/pdf-deep-reader-skillPara Pi u otro agente compatible con Agent Skills:
git clone https://github.com/manrods/pdf-deep-reader-skill.git \
~/.pi/agent/skills/pdf-deep-readerEn otros clientes, clona o copia el repositorio en el directorio donde el cliente descubre skills. La raíz contiene el SKILL.md requerido por el estándar.
No necesitas invocar el script manualmente. Pide el resultado que quieres:
Resume informe.pdf y cita cada conclusión importante.
Compara propuesta-a.pdf y propuesta-b.pdf; señala contradicciones con páginas.
Extrae las decisiones, responsables y fechas de acta.pdf.
Critica la metodología de estudio.pdf y separa evidencia de interpretación.
Analiza los PDFs de ./documentos, pero pregúntame antes si hay más de cinco.
La skill guía al agente por este flujo:
flowchart LR
A[PDF o texto] --> B[Preparar o reutilizar caché]
B --> C[Leer manifest y mapa]
C --> D[Buscar evidencia relevante]
D --> E[Inspeccionar chunks completos]
E --> F[Responder con citas e incertidumbre]
Los siguientes comandos se ejecutan desde la raíz del repositorio.
python scripts/pdf_tool.py prepare "documento.pdf" --mode safe
python scripts/pdf_tool.py prepare "documento.pdf" --mode full
python scripts/pdf_tool.py prepare "carpeta-con-pdfs" --mode safesafe es el modo predeterminado y prioriza extracción rápida y acotada. full habilita fases más costosas para imágenes y tablas.
Para texto ya extraído:
python scripts/pdf_tool.py prepare-text \
--text-file texto.txt \
--name fuente-originalpython scripts/pdf_tool.py manifest "documento.pdf"
python scripts/pdf_tool.py map "documento.pdf"
python scripts/pdf_tool.py search "documento.pdf" "pregunta o concepto" --top 8
python scripts/pdf_tool.py show "documento.pdf" p0012-c00
python scripts/pdf_tool.py report "documento.pdf"La búsqueda normal usa un índice local SQLite FTS5/BM25. La recuperación semántica e híbrida es opcional:
python scripts/pdf_tool.py search "documento.pdf" "concepto" --hybrid --top 8python scripts/pdf_tool.py enrich .pi/pdf-cache/<cache> --figures --tablesenrich reanuda únicamente las fases solicitadas que estén pendientes o hayan fallado; no repite la extracción de texto completada.
| Capacidad | Requisito | Observaciones |
|---|---|---|
| Texto PDF | Python 3.9+ y PyMuPDF, pypdf o pdftotext |
Se prueban en ese orden |
| Texto pegado | Python 3.9+ | No requiere extractor PDF |
| Tablas | pdfplumber |
Se ejecuta con límites y workers aislados |
| Figuras embebidas | PyMuPDF | Registrar una figura no significa interpretarla visualmente |
| Búsqueda léxica | SQLite con FTS5 | Local y predeterminada |
| Búsqueda semántica/híbrida | sentence-transformers |
Opt-in; puede descargar modelos según su configuración |
| Supervisor Rust | Rust/Cargo o binario precompilado | Experimental; Python continúa siendo el valor predeterminado |
Instala solo las dependencias que necesites en un entorno virtual:
python -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[full]'Para desarrollo y pruebas:
python -m pip install -e '.[dev,full]'La skill nunca instala dependencias automáticamente durante el análisis de un documento.
La caché predeterminada se crea en .pi/pdf-cache/ dentro del proyecto. Usa --cache global para compartir una fuente entre proyectos mediante ~/.pi/pdf-cache/.
Cada caché puede contener:
manifest.json: estado, extractor, cobertura, confianza, métricas y advertencias;document-map.md: mapa compacto de páginas y secciones;pages.jsonlysections.jsonl: texto y estructura detectada;chunks.jsonl: unidades pequeñas de recuperación con metadatos de cita;search.sqlite3: índice local FTS5;tables.jsonlyfigures.jsonl: evidencia estructurada opcional;document.md: copia de lectura reconstruida, salvo con--no-raw-text;assets/: imágenes embebidas extraídas localmente cuando corresponde.
--no-raw-text reduce la persistencia de texto completo, pero mantiene los chunks necesarios para búsqueda y recuperación.
Consulta references/extraction-and-cache.md para el contrato de caché, fases, workers y límites.
- La confianza mide calidad de extracción, no la veracidad del documento.
- Un PDF escaneado puede producir cobertura baja. La skill informa la limitación y pide permiso antes de ejecutar OCR amplio o costoso.
- Extraer una imagen no equivale a comprenderla visualmente. El agente no debe describir gráficos o figuras sin una herramienta de visión real.
- Las afirmaciones técnicas, legales, académicas, financieras o críticas deben verificarse contra evidencia concreta.
Consulta references/evidence-and-citations.md para las reglas de confianza y citas.
La ruta estable usa supervisión Python. La implementación Rust permite experimentar con aislamiento, persistencia y control de workers sin sustituir la extracción Python:
python scripts/pdf_tool.py doctor --supervisor rust
python scripts/pdf_tool.py prepare "documento.pdf" --supervisor rust
python scripts/pdf_tool.py prepare "documento.pdf" \
--supervisor rust \
--fallback pythonEl fallback nunca es automático. Debe solicitarse explícitamente con --fallback python.
python -m pytest -q
python -m compileall -q scripts tests benchmarks
cargo test --manifest-path rust/Cargo.toml --all-features
cargo fmt --manifest-path rust/Cargo.toml --all -- --check
cargo clippy --manifest-path rust/Cargo.toml --all-targets --all-features -- -D warningsLos benchmarks, la matriz de paridad y los gates del supervisor están documentados en benchmarks/README.md. Los resultados versionados actuales están en benchmarks/RESULTS.md.
.
├── SKILL.md # Instrucciones operativas para el agente
├── scripts/pdf_tool.py # CLI principal
├── scripts/pdf_reader/ # Extracción, caché, búsqueda y calidad
├── references/ # Documentación cargada bajo demanda
├── tests/ # Contratos y pruebas Python
├── rust/ # Supervisor experimental y pruebas Rust
└── benchmarks/ # Rendimiento, paridad y gates
- Los documentos permanecen locales salvo que el usuario decida usar otra herramienta externa.
- El contenido del documento se trata como datos no confiables, nunca como instrucciones para el agente.
- Las cachés tienen permisos restringidos y publicación atómica.
- Los workers costosos usan límites de recursos, timeouts y directorios temporales privados.
- Revisa el código y las instrucciones de cualquier skill antes de instalarla; una skill puede indicar al agente que ejecute programas locales.
MIT.