Productivity & Collaboration pdf-formstext-replacementpypdffillable-formspython-scriptlocal-execution

PDF Text Replace Skill

Find and replace text inside fillable PDF form field values, running entirely on your local machine.

FollowSkills review · FSRS-2.0
Use with care
49/ 100 5-point scale 2.5 / 5
1 2 3 4 5 6
1Trust16 / 25 · 3.2/5

The script only reads/writes user-specified PDF files; no network, credentials, or covert behavior; least privilege and data-flow transparency largely satisfied. Deducted for: no explicit user confirmation/preview step before overwriting field values, no rollback guidance, no warning about output file overwrites, and unverified publisher identity.

2Reliability9 / 20 · 2.3/5

Script is self-consistent: argument validation, input-existence check, output-directory check, explicit message when no form fields, and clear failure feedback with distinct exit codes. Deducted for: static review cannot execute paths; no committed tests covering this skill; unhandled edge cases such as non-string field values, encrypted PDFs, or partial write failures.

3Adaptability8 / 15 · 2.7/5

Scenario is clear (text replacement inside fillable PDF form fields), the frontmatter trigger description is specific, and limitations (flattened/scanned PDFs, case sensitivity) are declared. Deducted for: no Chinese-language support notes; hardcoded /app/uploads paths tie usability to a specific container environment without stating fallbacks; trigger boundaries (e.g., static-text replacement requests would mismatch) are unstated.

4Convention7 / 15 · 2.3/5

Clean structure (SKILL.md + scripts), explicit dependency note (pypdf, present in repo requirements.txt), complete limitations and error-handling sections, Apache-2.0 license at repo level. Deducted for: no per-skill versioning or changelog, no FAQ/example outputs, maintenance responsibility and update path only implied at repo level, and container-internal example paths are a hidden assumption for direct users.

5Effectiveness6 / 15 · 2.0/5

Core task (replace text in fillable PDF form fields while preserving form structure) is well defined; output is a directly usable new PDF reporting the number of modified fields, with marginal value over manual Acrobat editing. Deducted for: static review cannot confirm output correctness in practice (e.g., checkbox/special field types); 'preserves all fields' and batch-update claims are execution-unverified.

6Verifiability3 / 10 · 1.5/5

Auditable primary material exists: full script source, SKILL.md, and dependency manifest, with claims broadly cross-checkable against implementation. Deducted for: no tests, no CI test coverage of this skill, no independent execution evidence or third-party corroboration; behavioral claims (e.g., 'modified N fields') rest on code reading only, so a low score within the static cap.

Evidence confidence:Low Reviewed Sep 10, 2026 Reviewed revision 6480335953c3
Before you use it
  • This is a static source review; the script was not executed and all behavioral claims are independently unverified.
  • Example commands use the container-internal path /app/uploads; substitute local paths when running outside that container.
  • The skill overwrites PDF form field values with no preview/confirmation step; operate on copies and verify output manually; an existing output file will be overwritten with no rollback guarantee.
  • Search is case-sensitive and limited to form field values; it will not work on scanned or flattened PDFs; encrypted PDFs are unhandled and behavior depends on the pypdf version.
  • Publisher identity is not verified by the FollowSkills registry; the repo README targets macOS/Apple container sandboxing while the skill uses Docker-style paths — note the deployment-environment mismatch.
Review evidence [1][2][3][4][5][6]
See the full review method →

What does this skill do, and when should you use it?

pdf-text-replace is a skill from the open-source instavm/open-skills (OpenSkills) repository that updates values in fillable PDF forms. It runs a Python script that scans all form fields in a PDF, finds fields containing the search text, and replaces it with new text, writing a new PDF that keeps all form fields intact. It requires Python 3.7+, the pypdf library, and a non-flattened PDF. Execution happens inside OpenSkills' local sandbox container, so data never leaves your Mac. The collection is released under the Apache 2.0 license.

Reads an input PDF and iterates over all fillable form fields; replaces occurrences of a search string within field values (case-sensitive by default); writes the updated content to a new output PDF without flattening the form; reports how many fields were modified, and raises clear errors when the input file is missing, the PDF has no form fields, the search text is not found, or the output path is not writable.

  1. HR or admin staff correcting a name on a filled tax form (e.g. changing 'MANISH KUMAR' to 'MANNU KUMAR').
  2. Office workers who need to batch-update addresses, dates, or reference numbers across multiple PDF forms.
  3. Users handling sensitive financial forms who don't want files uploaded to the cloud; the replacement runs in a local sandbox.
  4. Users of MCP-compatible tools such as Claude Desktop, Gemini CLI, or OpenCode who want PDF form-editing capability on demand.

What are this skill's strengths and limitations?

Pros
  • Fully local execution — sensitive form data never leaves your machine
  • Output preserves all form fields (no flattening), so fields remain editable
  • Simple, auditable script with only pypdf as a dependency
  • Supports batch updates of field values and reports concrete errors instead of failing silently
Limitations
  • Only works on PDFs with fillable form fields; scanned/image PDFs are unsupported
  • Replaces field values only — static body text cannot be modified
  • Search is case-sensitive by default with no case-insensitive option
  • The skill notes Python 3.7+, but the repo overall requires Python 3.10+ — treat the repo requirement as authoritative
  • No dedicated test suite or standalone documentation page for this script in the repo

How do you install this skill?

The skill ships with the open-skills collection. Clone the repo and run the installer (requires an Apple Silicon Mac and Python 3.10+): git clone https://github.com/BandarLabs/open-skills.git && cd open-skills && chmod +x install.sh && ./install.sh. Installation takes about 2 minutes; the MCP server runs at http://open-skills.local:8222/mcp. The skill lives at skills/public/pdf-text-replace/ in the repo (~/.open-skills/assets/skills/ on the user side). No standalone install steps for this skill alone are documented.

How do you use this skill?

Invoke it through any MCP-compatible client (Claude Desktop, Gemini CLI, OpenCode, Qwen CLI, etc.), or run the script directly: python scripts/replace_text_in_pdf.py input.pdf "OLD TEXT" "NEW TEXT" output.pdf. The four positional arguments are input PDF, search text, replacement text, and output PDF. Note that the /app/uploads/ paths shown in SKILL.md are inside the sandbox container and map to ~/.open-skills/assets/outputs/ on the host.

How does this skill compare with similar options?

The README positions OpenSkills as a local alternative to Anthropic's official Skills: same skill format, but executed on your machine via OpenSkills' sandbox rather than in Claude's cloud. For privacy-sensitive PDF form work, that is the key difference from running Claude Skills in the cloud.

FAQ

Is my data uploaded to the cloud?
No. The skill runs in a local sandbox container on your Apple Silicon Mac via OpenSkills; the README states there are no uploads and full privacy.
Can it edit scanned PDFs?
No. It only modifies fillable form field values; scanned/image PDFs and flattened PDFs are out of scope.
What dependencies does it need?
The skill itself needs Python 3.7+ and the pypdf library (included in the container). Installing the full open-skills collection requires macOS on Apple Silicon and Python 3.10+.
What happens when replacement fails?
The script reports the specific error — missing input file, no form fields, search text not found, or unwritable output path — rather than failing silently.

More skills from this repository

All from instavm/open-skills

Related skills