pdf (Anthropic)
pdf skill review: no lift on our tasks, twice the cost
20.6 / 30
Lift over no skill: +0.00
Situational: the total 20.6/30 is under 22 and the lift +0.00 is under +1.0. Recommended needs a total of 22/30, output quality of 3.5, and a lift of +1.0.
SOTA
PassTested with Codex.
Covers Codex, Claude Code
Codex CLI 0.166 (SOTA tier): 18 graded runs. A pass here also covers Claude Code under our tier rule; it says nothing about the second tier.
Scores
Each dimension is 0 to 5 and the six add up to the total out of 30. 5 is better on every dimension. Cost 5 means cheap and fast. Install 5 means easy.
- Trigger reliability
- 5.0
- Lift over no skill
- 2.0
- Output quality
- 4.6
- Token and time cost
- 2.0
- Install and portability
- 3.0
- Safety
- 4.0
Security review
SafeStatic scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Manual review: Safe to run in a no-network sandbox (no findings). A clean scan does not prove a skill safe.
Install
npx skills@latest add anthropics/skills --skill pdf
Pinned commit: ca45fc496a3436251f191354091d557da31c15b5
Tested: 2026-11-02
What we tested
- Table extraction. Pull a 12-row table that spans two pages (header repeated on page two) into sales.csv and report the total revenue.
- Merge, rotate, split. Combine two PDFs, rotate only the last page 90 degrees, save page one as cover.pdf, leave the originals alone.
- Fill a form. Set three fields and tick a checkbox in a fillable PDF, keep fields editable.
Pros
- The skill was picked up without being named: Skill read in 6/6 treatment runs (auto-trigger on any PDF task works).
- High absolute quality with the skill: 4.58 out of 5.
Cons
- No measurable lift over no skill (+0.00, inside the noise).
- A one-sentence prompt scored 5.0, against 4.58 with the skill (-0.42).
- Uses 1.98x the tokens of no skill.
- Test caveat: The one-sentence arm ran later on a Windows machine with pypdf vendored, so its comparison with control and treatment is confounded by the environment.
- n=2 per task per arm; differences under about 1 point are noise.
Review
Codex CLI 0.166 (gpt-6-astra, low reasoning), a fresh temporary project per run, skill installed or absent, two runs per group, network off. Inputs were PDFs we generated, so we could check the results with code: The prompts never mentioned the skill.
Three-arm comparison
| Arm | Mean score (0-5) | Tokens per run |
|---|---|---|
| Without the skill | 4.58 | 116k |
| One-sentence prompt | 5.0 | 69k |
| With the skill | 4.58 | 228k |
Measured with Codex CLI over 18 runs, scored by rule-based checks with no LLM judge. Total 20.6 / 30, verdict Situational.
Disclosure: The one-sentence arm ran later on a Windows machine with pypdf vendored, so its comparison with control and treatment is confounded by the environment.
Verdict: Situational (20.3 / 30). Source: anthropics/skills, skills/pdf, pinned at commit ca45fc4. Install: npx skills@latest add anthropics/skills --skill pdf. Licence: proprietary (use is governed by your agreement with Anthropic; this is not open source).
What it is
A guide for PDF work: read and extract text and tables, merge, split, rotate, watermark, create new PDFs, fill forms, encrypt, extract images, OCR scanned pages. SKILL.md covers the basics with Python snippets (pypdf, pdfplumber, reportlab) and command-line tools (pdftotext, qpdf). Two more files (forms.md, reference.md) and eight helper scripts handle forms and bounding boxes.
How we tested
Codex CLI 0.166 (gpt-6-astra, low reasoning), a fresh temporary project per run, skill installed or absent, two runs per group, network off. Inputs were PDFs we generated, so we could check the results with code:
- Table extraction. Pull a 12-row table that spans two pages (header repeated on page two) into
sales.csvand report the total revenue. - Merge, rotate, split. Combine two PDFs, rotate only the last page 90 degrees, save page one as
cover.pdf, leave the originals alone. - Fill a form. Set three fields and tick a checkbox in a fillable PDF, keep fields editable.
The prompts never mentioned the skill.
What happened
It triggers reliably. The agent read SKILL.md in all six treatment runs, unprompted.
It made no difference to the outcome. Task 1 (2 of 2 checks) and task 2 (6 of 6) passed in all four runs of each task, with and without the skill. Task 3 failed once in each group, so both groups passed 5 of 6 runs overall.
Both failures were the same, and both agents said they had succeeded. The checkbox was saved as the text value Yes while its visual state stayed /Off. A PDF viewer shows it unticked, and the final messages in those two runs said the box was ticked. One failure was a control run, the other a treatment run. The treatment agent had read FORMS.md, which tells it to inspect field types and use each checkbox's checked_value, but it never got that far (next paragraph), so the skill did not prevent the error.
The scripts did not run as documented. FORMS.md says to run python scripts/check_fillable_fields .... macOS has no python, only python3, and the stock environment has no pypdf. The two treatment runs then diverged. One searched the disk, found pypdf inside the user's uv cache, ran the skill's own scripts through PYTHONPATH, and filled the form correctly. The other tried pip install (it failed offline), then wrote a Swift/PDFKit program and got the checkbox wrong. The control runs improvised in the same ways (Swift in one, pypdf in the other). So the skill's tooling only helped in the one run that managed to borrow a library from outside the project directory.
It doubles the cost. Treatment runs averaged 228,000 tokens against 116,000 without (1.98x) and took 72 seconds against 46. The agent reads the skill, then forms.md, then tries the scripts first. On the form task the treatment run that succeeded needed 35 commands and 434,000 tokens; the control runs needed 16 commands and about 185,000.
Portability notes
SKILL.mdrefers toFORMS.mdandREFERENCE.md, but the files areforms.mdandreference.md. This worked in our runs because macOS file systems ignore case; on Linux those links would break.- It assumes
python, and several Python libraries, are installed. A clean machine usually has neither. - The guide mentions
pip install pytesseract pdf2imagefor OCR, which needs network access.
Safety review
We ran the scanner and then read SKILL.md, forms.md, reference.md and all eight scripts. The scripts import only standard-library modules plus pypdf, pdfplumber, pdf2image and PIL; they read an input file and write local files. No subprocess calls, sockets, environment reads, eval or downloads. No instructions to hide anything or to touch credentials. The finding worth flagging is the licence: it is proprietary, so the site should not label it open source. See security.md.
Scores
| Dimension | Score | Why |
|---|---|---|
| Output quality | 4.33 | 5 of 6 runs fully correct in both groups |
| Lift vs no skill | 2.0 | 0.0 difference |
| Trigger | 5.0 | Read in 6 of 6 runs unprompted |
| Instructions and portability | 3 |
|
| Efficiency | 2 | 1.98x tokens, about 1.6x time |
| Safety and hygiene | 4 | Scripts clean; proprietary licence |
Who should use it
Modern agents already merge, rotate, split and extract tables from clean PDFs without help, as our control group showed, so for these jobs the skill mostly adds tokens. It might earn its keep on harder cases we did not test: scanned documents and OCR, password-protected files, forms without fillable fields (the bounding-box workflow), or an environment where the helper libraries are installed so the scripts work. If you install it, make sure python and pypdf exist first, or the guidance will not run as written.
Limits of this test
Two runs per group, three tasks, one model at low reasoning effort, offline sandbox with no Python PDF libraries in the stock environment. Runs shared the system temp folder, and one treatment run reused a virtual environment another run had created there, so isolation between runs was not perfect. A fully equipped machine could change the result in the skill's favour. The Codex tier counts for Codex and Claude Code under the site's rule.
Update (2 Nov 2026): one-sentence group added
Third group: no skill, with one sentence ("Use proper PDF tooling: extract tables by page with their header rows intact, merge/rotate/split pages without losing content, fill real form fields by name and keep the original file unchanged, then verify the output by reopening it."). 6 runs, rule-based checks, run on a Windows machine with a vendored pypdf/pdfplumber set available offline.
| Group | Mean score (0-5) | Tokens per run |
|---|---|---|
| No skill | 4.58 | 116k |
| One sentence | 5.00 | 69k |
| Skill installed | 4.58 | 228k |
All six one-sentence runs passed every check, including the checkbox form fill that failed once in the control and once in the skill group. The skill cost 3.3x the one-sentence tokens. Caveat: the one-sentence runs ran on a different machine (Windows) from the first two groups (macOS) and had the PDF libraries available, which the Mac runs did not, so this comparison is confounded by environment. It does suggest the skill's 2x token overhead buys nothing on these three tasks.
Transcript
Run log for pdf: Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run. Columns: task, arm-run, score (0-5), tokens, seconds, checks passed, skill files the agent opened. t1-table-extract control-1: score 5.0, tokens 60651, secs 25.2, checks 2/2, opened nothing t1-table-extract control-2: score 5.0, tokens 60785, secs 24.8, checks 2/2, opened nothing t1-table-extract oneliner-1: score 5.0, tokens 90438, secs 33.9, checks 2/2, opened nothing t1-table-extract oneliner-2: score 5.0, tokens 91726, secs 41.4, checks 2/2, opened nothing t1-table-extract treatment-1: score 5.0, tokens 123259, secs 43.4, checks 2/2, opened pdf t1-table-extract treatment-2: score 5.0, tokens 128381, secs 38.7, checks 2/2, opened pdf t2-merge-rotate control-1: score 5.0, tokens 91967, secs 56.9, checks 6/6, opened nothing t2-merge-rotate control-2: score 5.0, tokens 108232, secs 45.9, checks 6/6, opened nothing t2-merge-rotate oneliner-1: score 5.0, tokens 49185, secs 27.4, checks 6/6, opened nothing
18 runs, 3 artifacts
Sample output
SOTA · With the skill: sales.csv (t1-table-extract, run 1, Codex)
Product,Region,Units,Revenue Aurora Lamp,EMEA,1240,48360 Basalt Desk,NA,310,93000 Cedar Shelf,NA,875,52500 Delta Chair,APAC,642,70620 Ember Kettle,EMEA,2210,66300 Fjord Rug,NA,198,39600 Grove Planter,APAC,1534,30680 Harbor Clock,EMEA,420,25200 Iris Vase,NA,905,27150 Juniper Stool,APAC,377,20735 Kestrel Mirror,EMEA,260,41600 Lumen Sconce,NA,733,43980