✦
pdf
configured/claude-cli/ never invoked at runtime
Installs
12
Definitions
3
3 of 12 installs drifted
Metadata
NamepdfDescriptionUse this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.Harness typesclaude-cliDefinitions3 distinct across 12 installsPeople9
Installs
12
with this skill configured · 9 people · 9 hosts
People
9
who own those installs
Sessions
34
on those installs, past 7 days · could have run it, not did
Invocations
0
no harness emits skill calls yet

Definitions

3 distinct · by SKILL.md hash

The installs with this skill don't hold the same SKILL.md. Canonical is the most-installed definition; every other row is drift from it. Pick a row to read that definition below.

12 installs, by the definition each one holds
9 of 12on canonical a91f3c0e
2 of 12on drift 4be07d12
1 of 12on drift c0d8e551
definition
installs
harnesses
first seen
delta vs canonical
a91f3c0e canonical9claude-cli2026-07-14—
4be07d12 2claude-cli2026-09-02body +14 lines (a "Redaction" section); scripts/redact.py added
c0d8e551 1claude-cli2026-09-19frontmatter adds allowed-tools; body identical to canonical

Definition

SKILL.md · 314 lines · 7.9 KB · a91f3c0e canonical

What the harness reads when this skill triggers — as scanned on mbp-sofia, 2026-07-14, at ~/.claude/skills/pdf/SKILL.md.

always in context~118 tokens

The routing text every session on 12 installs carries, before the skill ever triggers.

Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.

Frontmatter
namepdfdescription(above)licenseProprietary. LICENSE.txt has complete terms
Decoded
Invocationmodel + user (defaults — no disable-model-invocation / user-invocable)Invoke as/pdfTools(unrestricted — no allowed-tools)Scopeuser · claude-cli
on trigger~2140 tokens · 314 of the 500-line guidancesha256 a91f3c0e · 0644 · modified 2026-07-14

PDF Processing Guide

Overview

This guide covers essential PDF processing operations using Python libraries and command-line tools. For advanced features, JavaScript libraries, and detailed examples, see REFERENCE.md. If you need to fill out a PDF form, read FORMS.md and follow its instructions.

Quick Start

from pypdf import PdfReader, PdfWriter

# Read a PDF
reader = PdfReader("document.pdf")
print(f"Pages: {len(reader.pages)}")

# Extract text
text = ""
for page in reader.pages:
    text += page.extract_text()

Python Libraries

pypdf - Basic Operations

Merge PDFs

writer = PdfWriter()
for pdf_file in ["doc1.pdf", "doc2.pdf"]:
    reader = PdfReader(pdf_file)
    for page in reader.pages:
        writer.add_page(page)
with open("merged.pdf", "wb") as output:
    writer.write(output)

pdfplumber - Text and Table Extraction

Use scripts/extract_form_structure.py to dump the field tree before filling a form, and scripts/check_bounding_boxes.py to validate placement afterwards.

Command-Line Tools

  • pdftotext -layout in.pdf out.txt keeps column layout
  • qpdf --decrypt --password=… in.pdf out.pdf strips owner encryption
  • gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook compresses for email

Scanned PDFs

Run OCR (ocrmypdf --skip-text) first; the extraction recipes above only see the text layer.

Abridged on the design site — production folds the body at ~80 lines with a "Show all 314 lines" toggle.
SKILL.md
---
name: pdf
description: Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.
license: Proprietary. LICENSE.txt has complete terms
---
# PDF Processing Guide

## Overview

This guide covers essential PDF processing operations using Python libraries and command-line tools. For advanced features, JavaScript libraries, and detailed examples, see REFERENCE.md. If you need to fill out a PDF form, read FORMS.md and follow its instructions.

## Quick Start

```python
from pypdf import PdfReader, PdfWriter

# Read a PDF
reader = PdfReader("document.pdf")
print(f"Pages: {len(reader.pages)}")

# Extract text
text = ""
for page in reader.pages:
    text += page.extract_text()
```

## Python Libraries

### pypdf - Basic Operations

**Merge PDFs**

```python
writer = PdfWriter()
for pdf_file in ["doc1.pdf", "doc2.pdf"]:
    reader = PdfReader(pdf_file)
    for page in reader.pages:
        writer.add_page(page)
with open("merged.pdf", "wb") as output:
    writer.write(output)
```

### pdfplumber - Text and Table Extraction

Use `scripts/extract_form_structure.py` to dump the field tree before filling a form, and `scripts/check_bounding_boxes.py` to validate placement afterwards.

## Command-Line Tools

- `pdftotext -layout in.pdf out.txt` keeps column layout
- `qpdf --decrypt --password=… in.pdf out.pdf` strips owner encryption
- `gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook` compresses for email

## Scanned PDFs

Run OCR (`ocrmypdf --skip-text`) first; the extraction recipes above only see the text layer.

Bundle

11 files · 40.9 KBon demand

Everything else in the skill directory — references the body points to, scripts it can run, assets it copies. Loaded only when the model follows a pointer; expand a row for the raw file.

role
size
lines
referenced
mode
scripts/fill_pdf_form_with_annotations.pyscript5.2 KB162bundled only0755 exec
scripts/fill_fillable_fields.pyscript3.8 KB118bundled only0755 exec
scripts/extract_form_structure.pyscript2.6 KB83SKILL.md line 410755 exec
scripts/extract_form_field_info.pyscript2.2 KB71bundled only0755 exec
scripts/create_validation_image.pyscript2.0 KB66bundled only0755 exec
scripts/convert_pdf_to_images.pyscript1.4 KB44bundled only0755 exec
scripts/check_fillable_fields.pyscript880 B27bundled only0755 exec
scripts/check_bounding_boxes.pyscript1.9 KB59SKILL.md line 410755 exec
REFERENCE.mdreference13.9 KB402SKILL.md line 50644
LICENSE.txtlicense1.1 KB21SKILL.md line 40644
FORMS.mdreference6.0 KB188SKILL.md line 50644

Installs

12 with this skill configured

Every install config that registers this skill — the harness, the endpoint it was scanned on, the person behind the install, which definition it holds, and how alive that install is (past 7 days).

harness
host
person
definition
version
sessions
last active
Claude Code
claude-cli
mbp-sofiasofia@meridian.dev2.1.1472h ago
Claude Code
claude-cli
mbp-dandan@meridian.dev2.1.143yesterday
Claude Code
claude-cli
mbp-priyapriya@meridian.dev2.1.1406d ago
Claude Code
claude-cli
mbp-leoleo@meridian.dev2.1.1453h ago
Claude Code
claude-cli
mbp-amaraamara@meridian.dev2.1.1422d ago
Claude Code
claude-cli
mbp-junjun@meridian.dev2.1.1415d ago
Claude Code
claude-cli
mbp-nadianadia@meridian.dev2.1.1441h ago
Claude Code
claude-cli
mbp-theotheo@meridian.dev2.1.1409d ago

Sessions

34 on installs with this skill · past 7 days

Every session on an install that has this skill — where it could have run, not where it did. Invocation is not a session event yet, so these are candidates, not receipts; newest 6 shown.

started
harness
person
host
tool calls
status
12m ago
Claude Code
claude-cli
sofia@meridian.devmbp-sofia14running
2h ago
Claude Code
claude-cli
dan@meridian.devmbp-dan3ended
5h ago
Claude Code
claude-cli
leo@meridian.devmbp-leo27ended
yesterday
Claude Code
claude-cli
amara@meridian.devmbp-amara9ended
yesterday
Claude Code
claude-cli
jun@meridian.devmbp-jun41ended
2d ago
Claude Code
claude-cli
nadia@meridian.devmbp-nadia6ended

Surface

what the installs with this skill touch

Models called and MCP servers connected by the installs that have this skill — the installs' surface, not the skill's; the Reach strip is what the definition itself can do.

Tools
all
(unrestricted — no allowed-tools)
Scripts
8
8 executable
Shell in body
3
commands the body asks the model to run
Load-time shell
0
!`cmd` blocks — run before the model reads the body
Network
0
no URLs or fetches in the bundle

Models

2 in use
ModelInstalls
◇ claude-sonnet-4-6
12
◇ claude-opus-4-6
4

MCP Servers

2 distinct
ServerInstalls
⇄ github
10
⇄ linear
6

No runtime ledger for this skill

Runtime skill attribution isn't emitted by any harness yet — invocations are a real zero, not a gap in capture. When a harness emits a tool call of kind skill, the harnesses and calls ledgers appear here.

34 sessions on the 12 installs with pdf in the past 7 days; none invoked it.