Use for creating, editing, extracting, OCRing, filling, and converting PDF documents.
beeuni marketplace install beeuni-starter:pdfpypdf, pdfplumber, pymupdf, pdf2image, pypdfium2, pytesseract, reportlab, and pillow are pre-installed. Run Python files with python3 script.py. Use uv run --with <package> script.py only for a package that is not pre-installed.from pypdf import PdfReader, PdfWriter
reader = PdfReader("document.pdf")
print(f"Pages: {len(reader.pages)}")
text = "".join(page.extract_text() or "" for page in reader.pages)
| Task | Tool | Details |
|---|---|---|
| Convert to Markdown | anydoc | anydoc document.pdf -o out.md — no OCR; scanned PDFs exit 1 |
| Create PDF from scratch | ReportLab | [blocked] |
| Read / merge / split / rotate / encrypt | pypdf | — |
| Extract text and tables | pdfplumber | [blocked] |
| Render pages to images | pypdfium2 | [blocked] |
| Create/manipulate in JavaScript | pdf-lib | — |
| CLI merge/split/encrypt/optimize/repair | qpdf | [blocked] |
| CLI text extraction | pdftotext | [blocked] |
| CLI image extraction | pdfimages | [blocked] |
| CLI page rendering | pdftoppm | [blocked] |
| OCR scanned PDFs | pytesseract + pdf2image | Convert to images, then OCR |
| Fill PDF forms | pypdf or pdf-lib | form-filling.md [blocked] |
| Convert PDF to Word | pdf2docx (load docx skill) | See docx skill — Converting PDF to Word |
skills/design-foundations/SKILL.md for palette, fonts + PDF pairings, chart colors, and core principles (1 accent + neutrals, no decorative imagery, accessibility).skills/design-foundations/SKILL.md (PDF Pairings table + Font Strategy by Format). Default to a clean sans-serif (Inter, DM Sans, Work Sans).₹ (U+20B9), ₩, ₫, ₴, ﷼. ReportLab and matplotlib render these as tofu with no fallback (matplotlib warns Glyph ... missing from font(s)). Either register a font that includes the glyph (e.g. Noto Sans), or use an ASCII fallback consistently (e.g. Rs for INR) across both charts and PDF body text so they match."Beeuni" unless the user asks for a different organization or author namec.setTitle(...), c.setAuthor("Beeuni") right after creating the canvas.
SimpleDocTemplate: pass title=..., author="Beeuni" as constructor kwargs.
pdf-lib (JS): doc.setTitle(...), doc.setAuthor("Beeuni").<super> tags, never Unicode superscripts)<a href> tag — never omit the URL or substitute a plain-text source name. See [blocked] (Source Citations) for the implementation pattern.<a href="..." color="blue"> markup. On the canvas, use canvas.linkURL(url, rect). See [blocked] (Hyperlinks).<sub> and <super> XML tags in Paragraph objects. For canvas text, manually adjust font size and y-offset. See [blocked] (Subscripts and Superscripts).pdftotext is the fastest option for plain text. Use pdfplumber when you need tables or coordinate data — don't use pypdf.extract_text() on large documents, it's slow.pdfimages extracts embedded images directly and is much faster than rendering whole pages. Only render with pypdfium2 or pdftoppm when you need a visual snapshot of the page layout.qpdf --split-pages to break up very large files before processing.pypdf to detect and decrypt (reader.is_encrypted / reader.decrypt(pw)). If you don't have the password, try qpdf --password=X --decrypt. Run qpdf --show-encryption to inspect what protection is applied.qpdf --check to diagnose structural problems, then qpdf --replace-input to attempt repair.page.extract_text() with pypdf and check content, ordering, and that nothing overflowed — and confirm metadata (title, author) is set.import pytesseract
from pdf2image import convert_from_path
pages = convert_from_path("scan_output.pdf", dpi=300)
ocr_text = "\n\n".join(
f"--- Page {n} ---\n{pytesseract.image_to_string(pg)}"
for n, pg in enumerate(pages, 1)
)
Get a complete picture of any company or person before outreach. This skill always works with web search, and gets significantly better with enrichment and CRM data.
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
Route code, repository, and data/SQL work to isolated Beeuni sessions instead of burning your main context on it. Use when asked to implement a feature, fix a bug, make failing tests pass, work a ticket/issue, refactor, navigate or change a codebase, ship a PR, review a pull request, or run SQL/warehouse analysis against a dataset — and when the user wants two agents or parallel reviewers/investigators on the same work. Covers the explore-vs-session routing call, deciding where the code lives (this project's repo vs cloning an external GitHub repo) or where the data lives, finding the repo with gh, spawning sessions in parallel, dual PR reviews, and reporting results back. Triggers: 'implement', 'fix the bug', 'make the tests pass', 'work this ticket', 'refactor this', 'open a PR', 'review this PR', 'run two agents on it', 'query the warehouse', 'analyze this dataset'.
Convert Word (.doc, .docx), PowerPoint (.ppt, .pptx), Excel (.xls, .xlsx), OpenDocument (.odt, .ods, .odp), RTF, EPUB, CSV, and PDF files to GitHub-Flavored Markdown. Use when a task needs the contents of an office document, spreadsheet, presentation, ebook, or PDF you cannot read directly.
Deep research agent skill. Use when the user needs thorough, scientific, truth-seeking research on any topic -- investigating claims, finding primary sources, synthesizing evidence, producing cited reports. Triggers on: 'research this', 'investigate', 'deep dive', 'find sources', 'what does the evidence say', 'literature review', 'fact check', 'analyze the research on', any request requiring multi-source investigation with citations.
Artifact-agnostic design guidance — works for CSS, PowerPoint, matplotlib, PDF, or any visual output. Also includes a curated catalog of named font/color themes for slides, docs, and reports (non-web assets).