All skills

pdf (Anthropic)

pdf skill review: no lift on our tasks, twice the cost

SituationalSafe

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

Pass

Tested 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

Safe

Static 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

Source

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

ArmMean score (0-5)Tokens per run
Without the skill4.58116k
One-sentence prompt5.069k
With the skill4.58228k

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:

  1. Table extraction. Pull a 12-row table that spans two pages (header repeated on page two) into sales.csv and report the total revenue.
  2. Merge, rotate, split. Combine two PDFs, rotate only the last page 90 degrees, save page one as cover.pdf, leave the originals alone.
  3. 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.md refers to FORMS.md and REFERENCE.md, but the files are forms.md and reference.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 pdf2image for 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

DimensionScoreWhy
Output quality4.335 of 6 runs fully correct in both groups
Lift vs no skill2.00.0 difference
Trigger5.0Read in 6 of 6 runs unprompted
Instructions and portability3

python vs python3, file-name case, undeclared libraries

Efficiency21.98x tokens, about 1.6x time
Safety and hygiene4Scripts 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.

GroupMean score (0-5)Tokens per run
No skill4.58116k
One sentence5.0069k
Skill installed4.58228k

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

See Pro