PDF Toolkit
XiaomiMiMo/MiMo-Code
Reads, transforms, composes and fills PDFs with Python scripts for extraction, merging, watermarking, encryption, OCR and form filling.
A skill your agent uses when the user has attached a PDF, paper, report, or other document and the answer needs its content: summarize a section, compare sections, read specific pages, check the…
$ npx skills add xuzhougeng/wisp-science --skill pdf-explore -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install xuzhougeng/wisp-science pdf-explore --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/pdf-explore .claude/skills/pdf-explore && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pdf-explore" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/pdf-explore into .claude/skills/pdf-explore/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pdf-explore", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/xuzhougeng/wisp-science/tree/main/skills/pdf-exploreType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add xuzhougeng/wisp-science --skill pdf-explore -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install xuzhougeng/wisp-science pdf-explore --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/pdf-explore .agents/skills/pdf-explore && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pdf-explore" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/pdf-explore into .agents/skills/pdf-explore/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pdf-explore", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add xuzhougeng/wisp-science --skill pdf-explore -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install xuzhougeng/wisp-science pdf-explore --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/pdf-explore .cursor/skills/pdf-explore && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pdf-explore" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/pdf-explore into .cursor/skills/pdf-explore/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pdf-explore", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/xuzhougeng/wisp-science.git --path skills/pdf-explore--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add xuzhougeng/wisp-science --skill pdf-explore -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install xuzhougeng/wisp-science pdf-explore --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/pdf-explore .gemini/skills/pdf-explore && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pdf-explore" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/pdf-explore into .gemini/skills/pdf-explore/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pdf-explore", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install xuzhougeng/wisp-science pdf-exploreInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add xuzhougeng/wisp-science --skill pdf-explore -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/pdf-explore .github/skills/pdf-explore && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pdf-explore" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/pdf-explore into .github/skills/pdf-explore/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pdf-explore", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add xuzhougeng/wisp-science --skill pdf-explore -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install xuzhougeng/wisp-science pdf-explore --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/pdf-explore .opencode/skills/pdf-explore && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pdf-explore" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/pdf-explore into .opencode/skills/pdf-explore/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pdf-explore", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pdf-exploreA skill your agent uses when the user has attached a PDF, paper, report, or other document and the answer needs its content: summarize a section, compare sections, read specific pages, check the…
PDF Explore is an agent skill from xuzhougeng/wisp-science. Use this skill when the user has attached a PDF, paper, report, or other document and the answer needs its content: summarize a section, compare sections, read specific pages, check the table of contents, or read a value off a figure. The read tool cannot parse PDF binary — python is the extraction path. Provides pdfpages (pages as text or rendered PNGs, cached) and pdfoutline (embedded-bookmark TOC) in the persistent python kernel; load them once via the Runtime Sidecar exec line that useskill appends. For PDF…
Its SKILL.md is about 1.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `runtime.py`).
It sits in Documents & Office, covering PDF and Document parsing. It works with pypdf and Python. The repository describes itself as: Open-source, local-first desktop AI research workbench for scientific computing with Python/R, MCP bioinformatics tools, SSH/WSL/GPU runtimes, and OpenAI/Anthropic models. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 5eb95c9. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Python), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
PDF Explore loads about 1.2k tokens when it runs. Until then it costs about 148 tokens; SKILL.md has 437 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from xuzhougeng/wisp-science at commit 5eb95c9, republished under its Apache-2.0 licence (© xuzhougeng). 437 words, ~1,159 tokens.
.claude/skills/pdf-explore/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.read chokes on PDF binary, and pasting a 50-page document costs 40K+
tokens. The sidecar parses once into the persistent Python kernel (memory +
disk cached), after which you pull exactly the pages the question needs.
Setup, once per session: run the exec(...) line from the "Python
Runtime Sidecar" section at the end of this skill's use_skill output.
Definitions survive across cells until the kernel restarts. pypdfium2 is
required (pillow too for image mode); if the first call raises
ImportError, follow its hint and re-run.
| call | use for | gives |
|---|---|---|
pdf_outline(path) | any structured document — start here | [{page, heading, level}] from embedded bookmarks, [] + hint when absent |
pdf_pages(path, pages=[...], mode="text") | the specific pages you need | [{page, text, n_chars}] |
pdf_pages(path, mode="image", dpi=200, pages=[N]) | figures, scans | one PNG per page in .cache/pdf-explore/, for view_image |
default mode="auto" | unknown file | text, auto-switching to images when pages have no text layer |
toc = pdf_outline("report.pdf")
for entry in toc:
indent = " " * (entry["level"] - 1)
print(f'p{entry["page"]:>3} {indent}{entry["heading"]}')Costs nothing when bookmarks exist (LaTeX-compiled papers almost always
have them). On [], there is no LLM fallback here — print the opening
lines of each page from pdf_pages(path, mode="text") and build the map
yourself. Watch for the [pdf_outline] offset warning: some PDFs bookmark
logical page numbers, which are shifted from file page numbers by the
front matter.
hits = pdf_pages("report.pdf", pages=[12, 13], mode="text")
for h in hits:
print(f'\n[page {h["page"]}]\n{h["text"]}')Fine up to roughly five pages (~2–4KB each). Kernel output past the ~16KB context budget is head/tail-truncated at ingestion, so anything larger goes through a file instead.
For "summarize the methods", cross-section comparisons, or any multi-range
pull, write all wanted pages in one call and read the result — read
output enters context untruncated:
section_pages = [5, *range(21, 26), 62, 63, 64] # from the outline
chunks = pdf_pages("report.pdf", pages=section_pages, mode="text")
open("pull.txt", "w").write(
"".join(f'\n[page {c["page"]}]\n{c["text"]}' for c in chunks))
print("bytes:", __import__("os").path.getsize("pull.txt"))Then read pull.txt, with offset/limit when it's long. As text a
page runs ~800 tokens; as an attached image ~8K — and the parse is paid
once.
A whole-page render can't resolve axis labels on a dense figure. Render at high dpi, crop to the figure with PIL, and view the crop:
import os
from PIL import Image
page = pdf_pages("report.pdf", mode="image", pages=[7], dpi=200)[0]
crop = os.path.join(os.path.dirname(page["image_path"]), "panel7.png")
Image.open(page["image_path"]).crop((x0, y0, x1, y1)).save(crop)view_image the crop (or the full image_path once, to locate the
figure). Every viewed image stays in context until /compact ages it out —
view the few crops that matter, never the whole render set. Crops belong
beside the renders under .cache/, never in the project's output
directories: they are reading aids, not products.
The reference host's LLM helpers (pdf_scan page ranking, pdf_extract
sweeps, pdf_map per-page summaries) require an in-kernel model bridge
Wisp doesn't provide, so they don't exist here. For an exhaustive pass,
dump pages to files in chunks (recipe above) and work through them, or hand
the on-disk text to the explore subagent.
© xuzhougeng, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/pdf-explore of xuzhougeng/wisp-science.
Open the folder on GitHubat commit 5eb95c9
PDF Explore next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| PDF Explore this skillxuzhougeng/wisp-science | 1k | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| PDF ToolkitXiaomiMiMo/MiMo-Code | 14k | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| PDF Generation, Forms and Extractionpipeshub-ai/pipeshub-ai | 3.8k | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| PDF Readerespennilsen/pi | 122 | — | ~1.6k | Automated safety check: Pass | MIT | |
| PDF Processinganthropics/skills | 180k | 48 repos | ~2k | Automated safety check: Pass | Proprietary | |
| PDF Processing with PythonHKUDS/DeepTutor | 41k | — | ~2.7k | Automated safety check: Pass | Apache-2.0 |
XiaomiMiMo/MiMo-Code
Reads, transforms, composes and fills PDFs with Python scripts for extraction, merging, watermarking, encryption, OCR and form filling.
pipeshub-ai/pipeshub-ai
Picks the right library for generating a new PDF, filling an existing PDF form, or extracting text and tables, defaulting to Node where possible.
espennilsen/pi
Read and extract content from PDF files — text, tables, metadata, and images.
anthropics/skills
Handles everyday PDF jobs in Python and on the command line: extract text and tables, merge, split, rotate, watermark, fill forms, encrypt and OCR.
HKUDS/DeepTutor
Reads, extracts from, creates, merges, splits, watermarks, encrypts and fills PDF files with pdfplumber, pypdf and reportlab inside a Python sandbox.
TokenRhythm/opensquilla
Deterministic PDF operations through bundled scripts: extract text and tables, merge files or page ranges, split by range, fill form fields and build PDFs from data.
xuzhougeng/wisp-science
A skill your agent uses when designing, reviewing, or implementing single-cell RNA-seq QC in Python or R with a human-in-the-loop, data-driven approach.
xuzhougeng/wisp-science
学术审查 / research-integrity screening of a manuscript's figures and reported numbers.
xuzhougeng/wisp-science
将概念、理论或分析方法类图书蒸馏为证据可追溯、经人工门禁审核且不暴露书名、作者、出版社等来源身份的任务型 Skill 候选。用于新建或恢复图书蒸馏、以本地 Tesseract 扫描 DOCX 全部内嵌图像或 Poppler 渲染的扫描 PDF 全页、建立 source map 与 evidence/claim/relation/capability…
xuzhougeng/wisp-science
Create, update, validate, and evaluate Wisp skills. An agent skill from xuzhougeng/wisp-science.
xuzhougeng/wisp-science
Build, audit, authorize, recover, or finalize dynamic Zotero citations and bibliographies in Microsoft Word DOCX files with a protected-source, digest-bound workflow.
xuzhougeng/wisp-science
Set up and validate a reproducible Python or R environment on a Wisp execution context.
Categories
A skill your agent uses when the user has attached a PDF, paper, report, or other document and the answer needs its content: summarize a section, compare sections, read specific pages, check the…. PDF Explore is an agent skill from xuzhougeng/wisp-science. Use this skill when the user has attached a PDF, paper, report, or other document and the answer needs its content: summarize a section, compare sections, read specific pages, check the table of contents, or read a value off a figure.
PDF Explore fits situations like: the user has attached a PDF; other document and the answer needs its content: summarize a section; compare sections; read specific pages.
Run `npx skills add xuzhougeng/wisp-science --skill pdf-explore -a claude-code`. Or copy the skill folder (skills/pdf-explore in xuzhougeng/wisp-science) into .claude/skills/pdf-explore in your project. Claude Code loads it when a task matches its description.
Run `npx skills add xuzhougeng/wisp-science --skill pdf-explore -a codex`. Or copy the skill folder (skills/pdf-explore in xuzhougeng/wisp-science) into .agents/skills/pdf-explore in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add xuzhougeng/wisp-science --skill pdf-explore -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pdf-explore, .gemini/skills/pdf-explore, .github/skills/pdf-explore and .opencode/skills/pdf-explore in your project.
Going by SKILL.md and its folder, PDF Explore needs Python for the scripts in its folder. Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
PDF Explore is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.2k tokens (SKILL.md is roughly 4.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with PDF Explore: PDF Toolkit (XiaomiMiMo/MiMo-Code, 14k stars), PDF Generation, Forms and Extraction (pipeshub-ai/pipeshub-ai, 3.8k stars), PDF Reader (espennilsen/pi, 122 stars) and PDF Processing (anthropics/skills, 180k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
xuzhougeng (a GitHub user) maintains it in xuzhougeng/wisp-science, which has 1,022 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on October 9, 2026.
Source: xuzhougeng/wisp-science on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.