Create and edit PDFs to a professional standard — generate from content, draw vector/precise layouts, embed custom (incl.
Skill by spinabot
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/spinabot-pdf
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/pdf
What's inside
- Skill name
pdf- Description
- Create and edit PDFs to a professional standard — generate from content, draw vector/precise layouts, embed custom (incl. CJK/Unicode) fonts, CREATE and fill AcroForm fields (text/checkbox/radio/dropdown), flatten, merge/split/rotate, stamp/watermark, encrypt, and extract text. Use when the user asks Brigade to make a PDF, fill or build a PDF form, or combine/split/stamp/secure PDFs.
- License
- MIT
- Instructions
- 85 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# pdf — professional PDFs
| Need | Path |
|------|------|
| Simple content PDF (title, headings, paragraphs, image) | **Path 1 — `make_document` tool** |
| Fill an existing form, merge/split/stamp/watermark | **Path 2 — `edit_document` tool** |
| Form-field CREATION, vector drawing, embedded fonts (bold/CJK), precise layout, encryption, page surgery | **Path 3 — script `@cantoo/pdf-lib` via `brigade exec-node`** |
| Pixel-perfect, brand-styled layout from HTML/CSS | **Path 4 — HTML→PDF (optional binary)** |
> Note: PDF is a *final* format with no reflow engine. If the recipient must edit, deliver the editable source (`.docx`/`.xlsx`) **and** the PDF.
---
## Path 1 — quick content PDF (`make_document` tool)
```
make_document(format="pdf", content={ title, pages:[{ heading, paragraphs, image:{path} }] })
```
Flow layout, US-Letter, single column, word-wrapped. Good for reports/summaries/letters. For forms, precise layout, or custom fonts → Path 3.
## Path 2 — edit an existing PDF (`edit_document` tool)
- `fill_form {fields}` — fill existing AcroForm fields by name (text/checkbox/dropdown).
- `merge {pdfs}` / `add_pages {pdfs}` · `split {pages}` · `remove_pages {pages}`.
- `stamp {text}` · `watermark {text}` (45° translucent).
**Form decision:** first detect whether the PDF has real fillable fields. If it does → fill them (clean, type-validated). If it's a flat/scanned form (no fields) → you must draw text at coordinates instead (Path 3, annotations) — never assume fields exist.
## Path 3 — full power: script `@cantoo/pdf-lib`
Brigade bundles **`@cantoo/pdf-lib`** (a maintained pdf-lib fork — note the scoped name) plus **`@pdf-lib/fontkit`** (custom-font embedding) and **`unpdf`** (text extraction). `write` a `gen.cjs`, run `brigade exec-node gen.cjs`:
```js
// gen.cjs — illustrative
const fs = require("node:fs");
const { PDFDocument, StandardFonts, rgb } = require("@cantoo/pdf-lib");
(async () => {
const pdf = await PDFDocument.create();
// embed a custom font (real bold / CJK / Unicode) — requires fontkit
// const fontkit = require("@pdf-lib/fontkit"); pdf.registerFontkit(fontkit);
// const font = await pdf.embedFont(fs.readFileSync("Brand-Bold.ttf"));
const font = await pdf.embedFont(StandardFonts.HelveticaBold);
const page = pdf.addPage([612, 792]); // US Letter; origin is BOTTOM-LEFT, y-up
page.drawText("Invoice", { x: 54, y: 720, size: 22, font, color: rgb(0.1, 0.1, 0.1) });
page.drawRectangle({ x: 54, y: 700, width: 504, height: 1, color: rgb(0.8, 0.8, 0.8) }); // vector rule
// CREATE fillable form fields
const form = pdf.getForm();
const name = form.createTextField("client.name");
name.addToPage(page, { x: 120, y: 640, width: 300, height: 18 });
const agree = form.createCheckBox("agree");
agree.addToPage(page, { x: 54, y: 600, width: 14, height: 14 });
// form.flatten(); // bake fields into static content if no further filling
fs.writeFileSync(process.argv[2] || "out.pdf", await pdf.save());
console.log("wrote");
})();
```
`@cantoo/pdf-lib` covers: draw text/lines/rects/ellipses/SVG paths/images; embed custom TTF/OTF fonts (subset, full Unicode); **create AND fill** AcroForm text/checkbox/radio/dropdown/option-list fields; flatten; copy/merge/split/rotate pages; metadata; **password encryption** (the reason this fork is bundled). Extract text/structure with `unpdf`.
**Coordinate gotcha:** pdf-lib origin is **bottom-left, y-up**. If you author field positions from a top-left image/spec, convert: `y_pdf = pageHeight - y_top - height`. One coordinate convention per script.
## Path 4 — pixel-perfect / branded PDF from HTML+CSS (optional)
pdf-lib has **no HTML/CSS layout engine** — for a designed, brand-styled document, render HTML→PDF. Use whatever is present (detect first):
```bash
command -v soffice >/dev/null 2>&1 && soffice --headless --convert-to pdf brand.html # LibreOffice route
```
A headless browser (Puppeteer/Playwright `page.pdf()`) is the higher-fidelity alternative if installed. Prefer Path 1/3 unless the brand design genuinely requires CSS.
## Conventions
- Use real AcroForm fields when filling a fillable PDF; only fall back to drawn-text annotations for flat/scanned forms.
- Embed a font for anything beyond basic Latin — standard PDF fonts lack bold-as-a-face and all CJK/emoji (missing glyphs render as boxes).
- Keep ≥0.5" margins; align to a grid; don't rely on text reflowing (there's no engine — you place it).
## Verify (required)
Confirm the output exists and opens. For filled/created forms, re-open and read back the field values (or render to an image with `soffice`/a viewer and look at placement) before declaring done — never fill or place blind.From spinabot/brigade, MIT.
More from spinabot/brigade
- 0.788score
skill-creator
spinabot
Create, edit, improve, or audit AgentSkills.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
taskflow-inbox-triage
spinabot
Example TaskFlow authoring pattern for inbox triage.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
slack
spinabot
Use when you need to control Slack from Brigade via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
lead-scout
spinabot
How to find and VERIFY business leads (any niche, any city) — especially "businesses without a website" prospecting.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
taskflow
spinabot
Use when work should span one or more detached tasks but still behave like one job with a single owner context.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
github
spinabot
GitHub operations via `gh` CLI: issues, PRs, CI runs, code review, API queries.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
share-skills
spinabot
Use when you need to author, package, or share a skill folder — understanding the SKILL.md format, where skills live, and how to bundle a folder so it can be…
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
node-connect
spinabot
Diagnose Brigade node connection and pairing failures for Android, iOS, and macOS companion apps.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
docx
spinabot
Create and edit Microsoft Word (.docx) documents to a professional standard — reports, proposals, contracts, letters, memos — with custom styles, multi-level…
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
hyperframes
spinabot
Author HTML compositions that the `render_video` tool turns into deterministic MP4 video — animated charts and dashboards, data explainers, text/quote cards…
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
healthcheck
spinabot
Host security hardening and risk-tolerance configuration for Brigade deployments.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
things-mac
spinabot
Manage Things 3 via the `things` CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database).
SkillBFreshness: B★ 11.4KClaude Code +9
Signals
- Stars
- 11,356
- Forks
- 77
- Open issues
- 1
- Last commit (this folder)
- Jun 28, 2026 (4 months ago)
- Last release
- Sep 15, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/spinabot/brigade
- Website
- www.brigade.spinabot.com
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from spinabot
- 0.788score
skill-creator
spinabot
Create, edit, improve, or audit AgentSkills.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
github
spinabot
GitHub operations via `gh` CLI: issues, PRs, CI runs, code review, API queries.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
slack
spinabot
Use when you need to control Slack from Brigade via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
healthcheck
spinabot
Host security hardening and risk-tolerance configuration for Brigade deployments.
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
docx
spinabot
Create and edit Microsoft Word (.docx) documents to a professional standard — reports, proposals, contracts, letters, memos — with custom styles, multi-level…
SkillBFreshness: B★ 11.4KClaude Code +9 - 0.786score
hyperframes
spinabot
Author HTML compositions that the `render_video` tool turns into deterministic MP4 video — animated charts and dashboards, data explainers, text/quote cards…
SkillBFreshness: B★ 11.4KClaude Code +9
Cite this page
pdf skill. Agent Mart. https://agentmart.dev/skills/spinabot-pdf (last updated 2026-10-24)