From pdf-form-filler
Fill PDF forms automatically using stored personal and family information. Use this skill when the user wants to fill out a PDF form (school enrollment, medical forms, government documents, permission slips, etc.) with their own or a family member's data. Triggers on phrases like "fill this form", "fill out this PDF", "fill for my son/daughter/child/wife/husband", or when a PDF form is provided with a request to complete it. Handles both fillable PDF forms (with interactive fields) and flat/scanned forms. Remembers personal data across sessions — asks for unknown info and saves it for future use.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pdf-form-filler:pdf-form-fillerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Fill PDF forms using stored personal and family data. Ask for anything unknown and save it.
Fill PDF forms using stored personal and family data. Ask for anything unknown and save it.
Personal data is stored at ~/.config/pdf-form-filler/personal_data.json by default.
Override by setting the PDF_FORM_FILLER_DATA environment variable to any path (useful for synced/shared storage):
export PDF_FORM_FILLER_DATA="/path/to/Dropbox/personal_data.json"
Management script: ${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py
If the data file does not exist, ask the user where they want to store it before initializing:
I need to create a file to store your personal data. Where should I save it?
- Default –
~/.config/pdf-form-filler/personal_data.json(local only)- Synced – a path inside Dropbox, OneDrive, iCloud Drive, etc. (shared across devices)
If you choose a synced path, also add
export PDF_FORM_FILLER_DATA="<path>"to your shell profile so it's used automatically in future sessions.
Then initialize with the chosen path (use --data-file if not the default):
# Default path
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" init
# Custom/synced path
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" init --data-file "/path/to/synced/personal_data.json"
Then ask the user for basic info about themselves and family members before proceeding with the form.
# Show all data or a specific member
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" show
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" show --member child_1
# Update one field (dot notation for nested fields)
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" update --member child_1 --field first_name --value "Jan"
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" update --member child_1 --field health.allergies --value "pollen"
# Update multiple fields at once
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" batch-update --member parent_1 --updates '{"first_name":"Petr","last_name":"Novák"}'
# Add a new family member
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" add-member --id child_2 --role child
# Find what's missing for a member
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" find-gaps --member child_1
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" find-gaps --member child_1 --fields "first_name,last_name,date_of_birth,health"
Follow these steps in order for every form-filling request:
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" show to load all stored data.init), then collect basic family info before continuing.Determine who the form is for based on the user's request:
If the family has multiple children and the request is ambiguous (e.g., "for my kid"), ask which child.
Use the PDF skill's form analysis workflow. Read /mnt/skills/public/pdf/FORMS.md and follow its instructions to determine whether the PDF has fillable fields or needs annotation-based filling.
Key steps from FORMS.md:
python /mnt/skills/public/pdf/scripts/check_fillable_fields.py <file.pdf>extract_form_field_info.py + fill_fillable_fields.pyextract_form_structure.py or visual approach + fill_pdf_form_with_annotations.pyAfter analyzing the form fields, map each field to the corresponding personal data:
Common Czech school form mappings:
Also recognize common fields in English: Name, Date of birth, Address, Phone, etc.
find-gaps for the target member, filtered to only the fields needed by this form.Example prompt to user:
To fill this form for Jan, I need a few things I don't have yet:
- Birth number (rodné číslo)
- Health insurance company
- Insurance number
Could you provide these?
After the user provides missing values, immediately save them using batch-update before filling the form. This ensures the data is available for future forms.
python "${CLAUDE_PLUGIN_ROOT}/skills/pdf-form-filler/scripts/manage_data.py" batch-update --member child_1 --updates '{"birth_number":"1503151234","health.insurance_company":"VZP","health.insurance_number":"1503151234"}'
If the user provides info about a new family member not yet in the data (e.g., mentions a second child for the first time), add the member first with add-member, then batch-update.
Follow the appropriate path from FORMS.md (fillable or non-fillable) using the mapped data to create the filled PDF.
npx claudepluginhub jatuma/form-filler-plugin --plugin pdf-form-fillerFill web forms by fetching form fields from a URL, searching the user's local knowledge base for relevant info, and generating a pre-filled markdown document. Useful for conference applications, speaker submissions, event registrations, and profile forms.
Fills institutional Word form templates (.doc/.docx) for IRB protocols, ethics applications, and grant proposals while preserving original formatting. Korean-aware CJK support.
Prepares federal and state tax returns by extracting data from source documents, computing taxes, and filling official PDF forms.