Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Fill any PDF locally and place each value precisely in a visual editor. Use when the user wants to fill out a PDF form, enter data into a PDF, complete a tax/insurance/bank form, or position text on a flat/scanned PDF. Handles flat (field-less) PDFs, per-character (comb) fields, and native AcroForm fields; leaves the signature blank for the user to sign.
.claude/skills/davila7-pdf-fill-studio/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | -58% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -10% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -20% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -46% | 0% |
Fill a PDF locally, place the values precisely, then export. Flat PDFs use a browser editor; AcroForm PDFs fill natively; the signature is always left blank for the user to sign.
The user gives you a PDF to fill (form, claim, tax/bank/insurance document).
pip install pdf-fill-studio (provides the pdf-fill-studio command). From source instead: python3 -m venv .venv && .venv/bin/pip install -e ., then use .venv/bin/pdf-fill-studio.
(Replace form.pdf and profile.json with the user's actual file paths.)
pdf-fill-studio form.pdf -o out/form_filled.pdf. It detects the form type.pdf-fill-studio form.pdf -o out/form_filled.pdf --profile profile.json. Matched fields fill automatically; it prints "Needs manual input: ...]" for the rest. Ask the user for each listed field, add them to the profile, re-run, then render to verify.
onto the lines, nudge with arrow keys, and click "Export PDF". Comb fields (one box per character, e.g. postal code) are detected and filled one character per cell automatically.
out/. The user signs it themselves.Render and look: python -m pdf_fill_studio.render_page out/form_filled.pdf out/preview. Check each value sits on its line / inside its cell, not too low or spilling outside. Apply minimal coordinate corrections and re-bake if needed.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→pass | 13,827 | 3,323 | -76% | 1 | 1 | 0% | 2,553 | 1,075 | -58% | 0 | 0 | — |
case-01 | fail→fail | 5,317 | 3,236 | -39% | 1 | 1 | 0% | 489 | 885 | +81% | 0 | 0 | — |
case-02 | fail→pass | 6,894 | 4,100 | -41% | 1 | 1 | 0% | 1,203 | 1,084 | -10% | 0 | 0 | — |
case-03 | fail→fail | 4,900 | 4,491 | -8% | 1 | 1 | 0% | 255 | 705 | +176% | 0 | 0 | — |
case-05 | fail→pass | 7,551 | 4,566 | -40% | 1 | 1 | 0% | 1,371 | 1,308 | -5% | 0 | 0 | — |
case-06 | pass→pass | 10,027 | 3,374 | -66% | 1 | 1 | 0% | 1,590 | 1,067 | -33% | 0 | 0 | — |
case-07 | pass→pass | 12,661 | 4,379 | -65% | 1 | 1 | 0% | 1,937 | 1,240 | -36% | 0 | 0 | — |
case-08 | fail→pass | 6,384 | 2,405 | -62% | 1 | 1 | 0% | 1,192 | 959 | -20% | 0 | 0 | — |
case-09 | fail→pass | 7,847 | 1,965 | -75% | 1 | 1 | 0% | 1,496 | 805 | -46% | 0 | 0 | — |
case-10 | fail→pass | 25,012 | 3,432 | -86% | 1 | 1 | 0% | 2,070 | 1,031 | -50% | 0 | 0 | — |
case-11 | fail→pass | 11,370 | 2,100 | -82% | 1 | 1 | 0% | 1,819 | 859 | -53% | 0 | 0 | — |
case-12 | pass→pass | 6,306 | 1,942 | -69% | 1 | 1 | 0% | 953 | 730 | -23% | 0 | 0 | — |
case-13 | pass→pass | 11,361 | 2,175 | -81% | 1 | 1 | 0% | 1,608 | 828 | -49% | 0 | 0 | — |
case-14 | fail→pass | 10,816 | 2,735 | -75% | 1 | 1 | 0% | 1,585 | 855 | -46% | 0 | 0 | — |
case-15 | fail→pass | 5,543 | 2,892 | -48% | 1 | 1 | 0% | 943 | 1,008 | +7% | 0 | 0 | — |
case-16 | pass→pass | 3,213 | 1,504 | -53% | 1 | 1 | 0% | 495 | 730 | +47% | 0 | 0 | — |
case-17 | fail→pass | 12,575 | 4,506 | -64% | 1 | 1 | 0% | 2,065 | 1,204 | -42% | 0 | 0 | — |
case-18 | fail→pass | 13,892 | 3,160 | -77% | 1 | 1 | 0% | 2,062 | 897 | -56% | 0 | 0 | — |
case-19 | fail→pass | 12,504 | 2,426 | -81% | 1 | 1 | 0% | 2,067 | 952 | -54% | 0 | 0 | — |
case-20 | pass→pass | 10,001 | 4,873 | -51% | 1 | 1 | 0% | 1,849 | 1,381 | -25% | 0 | 0 | — |
case-21 | fail→pass | 12,546 | 5,199 | -59% | 1 | 1 | 0% | 2,303 | 1,340 | -42% | 0 | 0 | — |
case-22 | pass→pass | 10,007 | 4,692 | -53% | 1 | 1 | 0% | 1,929 | 1,241 | -36% | 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 21 counted toward the lift figure. The other 1 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 +59 percentage points is the difference between those two pass rates over the 21 comparable cases.
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.