.agents/skills/view-pdf/SKILL.md
Interactive PDF viewer. Use when the user wants to open, show, or view a PDF and collaborate on it visually — annotate, highlight, stamp, fill form fields, place signature/initials, or review markup together. Not for summarization or text extraction (use native Read instead).
npx skillsauth add mmahalwy/cooper view-pdfInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You have access to a local PDF server that renders documents in a live viewer and lets you annotate, fill forms, and place signatures with real-time visual feedback.
Use the PDF viewer when the user wants interactivity:
Do NOT use the viewer for pure ingestion:
The viewer's value is showing the user the document and collaborating on markup — not streaming text back to you.
list_pdfsList available local PDFs and allowed local directories. No arguments.
display_pdfOpen a PDF in the interactive viewer. Call once per document.
url — local file path or HTTPS URLpage — initial page (optional, default 1)elicit_form_inputs — if true, prompts the user to fill form
fields before displaying (use for interactive form-filling)Returns a viewUUID — pass this to every interact call. Calling
display_pdf again creates a separate viewer; interact calls with
the new UUID won't reach the one the user is looking at.
Also returns formFields (name, type, page, bounding box) if the PDF
has fillable fields — use these coordinates for signature placement.
interactAll follow-up actions after display_pdf. Pass viewUUID plus one or
more commands. Batch multiple commands in one call via the
commands array — they run sequentially. End batches with
get_screenshot to verify changes visually.
Annotation actions:
add_annotations — add markup (see types below)update_annotations — modify existing (id + type required)remove_annotations — delete by id arrayhighlight_text — auto-find text by query and highlight it
(preferred over manual rects for text markup)Navigation actions:
navigate (page), search (query), find (query, silent),
search_navigate (matchIndex), zoom (scale 0.5–3.0)Extraction actions:
get_text — extract text from page ranges (max 20 pages). Use for
reading content to decide what to annotate, NOT for summarization.get_screenshot — capture a page as an image (verify your annotations)Form action:
fill_form — fill named fields: fields: [{name, value}, ...]All annotations need id (unique string), type, page (1-indexed).
Coordinates are PDF points (1/72 inch), origin top-left, Y increases
downward. US Letter is 612×792pt.
| Type | Key properties | Use for |
|------|----------------|---------|
| highlight | rects, color?, content? | Mark important text |
| underline | rects, color? | Emphasize terms |
| strikethrough | rects, color? | Mark deletions |
| note | x, y, content, color? | Sticky-note comments |
| freetext | x, y, content, fontSize? | Visible text on page |
| rectangle | x, y, width, height, color?, fillColor? | Box regions |
| circle | x, y, width, height, color?, fillColor? | Circle regions |
| line | x1, y1, x2, y2, color? | Draw lines/arrows |
| stamp | x, y, label, color?, rotation? | APPROVED, DRAFT, CONFIDENTIAL, etc. |
| image | imageUrl, x?, y?, width?, height? | Signatures, initials, logos |
Image annotations accept a local file path or HTTPS URL (no data: URIs). Dimensions auto-detected if omitted. Users can also drag & drop images directly onto the viewer.
display_pdf to open the documentinteract → get_text on relevant page range to understand contentinteract → add_annotations + get_screenshotUnlike headless form tools, this gives the user live visual feedback and handles forms with cryptic/unnamed fields where the label is printed on the page rather than in field metadata.
display_pdf — inspect returned formFields (name, type, page,
bounding box)Text1, Field_7), get_screenshot
the pages and match bounding boxes to visual labelsinteract → fill_form, then get_screenshot to show the resultFor simple well-labeled forms, display_pdf with
elicit_form_inputs: true prompts the user upfront instead.
display_pdf, check formFields for signature-type fields or ask
which page/positioninteract → add_annotations with type: "image" at the target
coordinatesget_screenshot to confirm placementDisclaimer: This places a visual signature image. It is not a certified or cryptographic digital signature.
/abs/ URLs auto-convert to PDF)development
Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like "the xlsx in my downloads") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved.
documentation
Write or review UX copy — microcopy, error messages, empty states, CTAs. Trigger with "write copy for", "what should this button say?", "review this error message", or when naming a CTA, wording a confirmation dialog, filling an empty state, or writing onboarding text.
development
Rapidly triage an incoming NDA and classify it as GREEN (standard approval), YELLOW (counsel review), or RED (full legal review). Use when a new NDA arrives from sales or business development, when screening for embedded non-solicits, non-competes, or missing carveouts, or when deciding whether an NDA can be signed under standard delegation.
development
Triage and prioritize a support ticket or customer issue. Use when a new ticket comes in and needs categorization, assigning P1-P4 priority, deciding which team should handle it, or checking whether it's a duplicate or known issue before routing.