Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Edit PDFs with natural-language instructions using the nano-pdf CLI. Modify text, fix typos, update titles, and make content changes to specific pages without manual editing.
.claude/skills/graniet-nano-pdf/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | -76% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -71% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -51% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -70% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -43% | 0% |
This skill is repo-local and stays inactive until explicitly activated.
When the original instructions refer to legacy tool names, use these Kheish mappings:
terminal => bashweb_extract => web_fetch, plus web_search when discovery is neededsearch_files => grep_search and glob_searchbrowser_* tools require a browser-capable surfaced tool or MCP; if none is available, use the closest available surface and say so explicitlyWhen the instructions mention local helper files, resolve them from ${KHEISH_SKILL_DIR}.
Edit PDFs using natural-language instructions. Point it at a page and describe what to change.
bash# Install with uv (recommended — already available in Kheish) uv pip install nano-pdf # Or with pip pip install nano-pdf
bashnano-pdf edit <file.pdf> <page_number> "<instruction>"
bash# Change a title on page 1 nano-pdf edit deck.pdf 1 "Change the title to 'Q3 Results' and fix the typo in the subtitle" # Update a date on a specific page nano-pdf edit report.pdf 3 "Update the date from January to February 2026" # Fix content nano-pdf edit contract.pdf 2 "Change the client name from 'Acme Corp' to 'Acme Industries'"
read_file to check file size, or open it)nano-pdf --help for config)| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,121 | 10,176 | +43% | 1 | 1 | 0% | 1,255 | 693 | -45% | 0 | 0 | — |
case-02 | fail→fail | 12,084 | 4,576 | -62% | 1 | 1 | 0% | 2,260 | 706 | -69% | 0 | 0 | — |
case-03 | fail→fail | 7,014 | 4,579 | -35% | 1 | 1 | 0% | 1,375 | 677 | -51% | 0 | 0 | — |
case-04 | pass→fail | 5,806 | 5,941 | +2% | 1 | 1 | 0% | 1,113 | 798 | -28% | 0 | 0 | — |
case-05 | pass→fail | 25,683 | 6,235 | -76% | 1 | 1 | 0% | 6,171 | 783 | -87% | 0 | 0 | — |
case-06 | fail→fail | 6,666 | 5,272 | -21% | 1 | 1 | 0% | 443 | 727 | +64% | 0 | 0 | — |
case-07 | fail→pass | 12,408 | 1,009 | -92% | 1 | 1 | 0% | 2,448 | 593 | -76% | 0 | 0 | — |
case-08 | pass→pass | 9,420 | 1,679 | -82% | 1 | 1 | 0% | 1,645 | 658 | -60% | 0 | 0 | — |
case-09 | fail→pass | 11,872 | 1,486 | -87% | 1 | 1 | 0% | 2,188 | 643 | -71% | 0 | 0 | — |
case-10 | fail→pass | 8,938 | 1,940 | -78% | 1 | 1 | 0% | 1,647 | 807 | -51% | 0 | 0 | — |
case-11 | fail→pass | 13,314 | 1,908 | -86% | 1 | 1 | 0% | 2,335 | 705 | -70% | 0 | 0 | — |
case-12 | pass→pass | 2,606 | 2,315 | -11% | 1 | 1 | 0% | 465 | 872 | +88% | 0 | 0 | — |
case-13 | pass→pass | 3,527 | 1,883 | -47% | 1 | 1 | 0% | 645 | 742 | +15% | 0 | 0 | — |
case-14 | fail→pass | 7,196 | 1,572 | -78% | 1 | 1 | 0% | 1,284 | 735 | -43% | 0 | 0 | — |
case-15 | pass→pass | 12,343 | 3,967 | -68% | 1 | 1 | 0% | 1,850 | 1,201 | -35% | 0 | 0 | — |
case-16 | pass→pass | 15,191 | 1,150 | -92% | 1 | 1 | 0% | 2,605 | 604 | -77% | 0 | 0 | — |
case-17 | pass→pass | 5,725 | 3,256 | -43% | 1 | 1 | 0% | 997 | 533 | -47% | 0 | 0 | — |
case-18 | pass→pass | 7,404 | 1,435 | -81% | 1 | 1 | 0% | 1,281 | 629 | -51% | 0 | 0 | — |
case-19 | pass→pass | 6,467 | 1,349 | -79% | 1 | 1 | 0% | 1,146 | 627 | -45% | 0 | 0 | — |
case-20 | fail→pass | 7,793 | 1,941 | -75% | 1 | 1 | 0% | 1,335 | 740 | -45% | 0 | 0 | — |
case-21 | fail→pass | 9,564 | 1,580 | -83% | 1 | 1 | 0% | 1,704 | 725 | -57% | 0 | 0 | — |
case-22 | fail→fail | 6,729 | 3,962 | -41% | 1 | 1 | 0% | 346 | 652 | +88% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 15 counted toward the lift figure. The other 7 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 15 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.