Communitygithub.com

jtepe/slopclub

Agent stuff

Qu'est-ce que slopclub ?

Ce skill fournit l'outil `pdfread.py` pour lire et interroger des fichiers PDF dans un environnement d'agent IA (comme Claude Code, Cursor ou Codex). Il supporte l'extraction de métadonnées, la recherche plein texte (via BM25 et FTS5) avec indexation cache, la conversion de pages en markdown (avec placeholders pour les images), et l'extraction/rendu d'images en PNG. L'outil est conçu pour fonctionner avec `uv` ou Python 3.10+, et permet aux agents de travailler sur de grands documents sans saturer le contexte principal : en divisant le document en plages de pages, en déléguant chaque plage à un sous-agent, puis en synthétisant les résumés. Cela évite les dépassements de tokens et améliore l'efficacité des agents.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add jtepe/slopclub

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Utilisez l'outil pdfread.py se trouvant à côté de ce fichier pour lire des PDF. Exécutez-le de l'une des manières suivantes :

  • Avec uv 0.11+ (recommandé) : invoquez pdfread.py directement — le shebang l'exécute via uv run, et le premier appel télécharge les dépendances et peut prendre une minute.
  • Sans uv : python3 pdfread.py … fonctionne avec toute version de Python 3.10+ disposant de pymupdf4llm>=0.0.17 installé (pip install pymupdf4llm).

La commande search nécessite SQLite avec FTS5 ; les Pythons gérés par uv et la quasi-totalité des Pythons système modernes l'incluent, et le script émet une erreur claire dans le cas contraire.

Exécutez pdfread.py --help pour connaître l'utilisation complète. En résumé :

  • pdfread.py info FICHIER — nombre de pages, métadonnées, plan/TOC. Commencez ici.
  • pdfread.py search FICHIER "termes" — pages mentionnant les mots-clés, classées par BM25 avec un extrait par résultat. La première recherche construit un index cache (quelques secondes) ; les recherches suivantes sont instantanées. Les termes sont combinés par ET, terme* correspond aux préfixes, --raw déverrouille la syntaxe complète de FTS5 ("phrase exacte", OU, NEAR). Couche texte uniquement — les pages scannées sont invisibles à la recherche.
  • pdfread.py text FICHIER --pages 10-25 — texte en markdown pour une plage de pages (base 1). Les figures apparaissent sous forme de placeholders [image: p12-img2 640x480px].
  • pdfread.py image FICHIER p12-img2 — écrit cette figure en PNG et affiche son chemin ; visualisez-la avec votre outil de lecture de fichiers.
  • pdfread.py images FICHIER --pages 12 — liste les identifiants de figures sur les pages.
  • pdfread.py render FICHIER 7 — rend une page entière (ou --rect x0,y0,x1,y1 pour un recadrage) en PNG ; solution de repli pour les pages scannées et tout ce que la couche texte ne couvre pas.

Préserver le contexte sur les grands PDF

Pour des questions précises ("où le contrat mentionne-t-il les frais de résiliation ?"), exécutez d'abord search et lisez uniquement les pages pertinentes avec text --pages — pas besoin de déployer un sous-agent. Le cache d'index est partagé, donc les sous-agents peuvent aussi utiliser search sans le reconstruire.

Pour une synthèse large, ne déversez pas un document entier dans la conversation principale. Procédez plutôt ainsi :

  1. Exécutez info pour obtenir le nombre de pages et le plan, puis partitionnez le document en plages cohérentes (par chapitre, ou ~15–25 pages).
  2. Lancez un sous-agent par plage avec des instructions du type : "Exécutez <chemin>/pdfread.py text <fichier> --pages 10-25 et répondez à la question de l'utilisateur / résumez en au maximum N mots. Si un placeholder [image: ...] semble pertinent, extrayez-le avec la commande image et examinez-le."
  3. Conservez uniquement les résumés/réponses dans la conversation principale et synthétisez à partir de ceux-ci. Re-ciblez vous-même des pages spécifiques uniquement lorsqu'un résumé indique que la réponse s'y trouve.

Remarques

  • Il n'y a pas d'OCR : une page sans couche texte revient avec uniquement son placeholder [image: ...] pleine page (ou une note "aucun texte extractible") — extrayez-la ou utilisez render et lisez l'image visuellement.
  • L'extraction est déterministe : les identifiants d'image sont stables d'une exécution à l'autre, donc un identifiant rapporté par un sous-agent peut être extrait ultérieurement depuis la conversation principale.

Skills associés