Documents — PDF, Word, Excel & PowerPoint Skill
One skill for the four most common document formats. All four share a single
agent workflow — structured content in, render-ready, validated artifact out —
so they live in ONE family skill with per-format references, following the
epub precedent. Load the shared workflow below, then pull the per-format
reference for the format you are actually touching.
| Format |
Extension |
Reference (load on demand) |
| PDF |
.pdf |
references/pdf.md |
| Word |
.docx |
references/word.md |
| Excel |
.xlsx |
references/excel.md |
| PowerPoint |
.pptx |
references/powerpoint.md |
| All formats |
— |
references/output-quality.md |
Generation templates for each format live in templates/, and the
validation script with per-format fixtures lives in scripts/.
When to use
Load this skill when the task involves any of the four formats:
- Generate: build a report, memo, spreadsheet, or deck from structured
content (markdown, JSON, data tables, outlines).
- Edit: modify an existing document's content, layout, or metadata in place.
- Extract: pull text, tables, or structure out of an existing file.
- Convert: move content between formats or from a data source into a document.
- Validate: check that a produced artifact is structurally sound and will
render correctly before it is delivered.
When not to use
- Ebooks and EPUB — use the
epub skill; it owns the EPUB container,
reading order, and package validation.
- Images, video, and other media — this skill covers document formats only;
route media production to the appropriate media skills.
- Code and API documentation sites — use the technical-documentation and
documentation-site conventions, not office documents.
- Data pipelines — moving or transforming raw data belongs to
data-engineering; Excel here is a deliverable format, not a data store.
- Office documents to Markdown — converting an existing office document
(docx, xlsx, pptx, pdf, odt, rtf, epub, csv) to GitHub-Flavored Markdown
belongs to the
anydoc skill; this skill owns generation, editing, and
validation, not document-to-markdown extraction.
The Shared Workflow
Every document task follows the same six steps, regardless of format. Deep
format-specific detail is deferred to the per-format reference — read it at the
step where it matters.
1. Scope
Pin down what the document is for before touching a file:
- Audience and purpose — who reads it and what decision it supports.
- Format — PDF (fixed layout, print, archival), Word (editable prose,
review), Excel (data, calculations), PowerPoint (presentation).
- Boundaries — page/slide count, size limits, brand or style constraints.
- Source of truth — the structured content the document is generated from
(markdown, JSON, CSV, outline), so the artifact is reproducible.
2. Content model
Represent the document's content as structured data before rendering:
- A title, sections/headings, body text, and metadata for prose documents.
- A table model (headers, rows, column types) for spreadsheets.
- A slide outline (title + bullets per slide, speaker notes) for decks.
- Keep content and layout separate: content in the model, layout in the
template. This is what makes regeneration cheap.
3. Template
Choose the generation template for the target format from templates/:
- templates/pdf-template.md — fixed-layout
document skeleton (print-ready HTML/CSS or LaTeX source).
- templates/word-template.md — Word processing
document structure (styles, headings, tables).
- templates/excel-template.md — workbook
structure (sheets, cells, shared strings, formulas).
- templates/powerpoint-template.md — slide
deck structure (slides, layouts, notes).
Fill the [fill: ...] markers in the template with content from the content
model. Templates are the contract between content and layout — changing the
template is how you change appearance without touching content.
4. Render
Produce the artifact file:
- PDF — render the template to PDF (print CSS in a browser or engine, or a
LaTeX toolchain). See references/pdf.md for tooling.
- Word / Excel / PowerPoint — write the OOXML package directly (stdlib
zipfile + XML for small artifacts) or with the conventional library for the
format (python-docx, openpyxl, python-pptx). See the per-format reference for
the exact package layout to produce.
5. Validate
Never deliver unvalidated output. Run the validation script:
python3 scripts/validate-documents.py --render-check --json report.pdf brief.docx data.xlsx deck.pptx
The script performs structural sanity (container signatures, required
parts, XML well-formedness) and, when a renderer is installed, a render
check (actually renders the file). When no renderer is present it reports
unavailable instead of failing — validation never hard-requires a renderer.
See references/output-quality.md for the full
output-quality checklist, and the fixture files in
fixtures/ (one per format) to smoke-test the script itself:
python3 scripts/validate-documents.py --json fixtures/sample.pdf fixtures/sample.docx fixtures/sample.xlsx fixtures/sample.pptx
6. Deliver
Hand off the artifact with its provenance:
- The source content model (so it can be regenerated).
- The template version used.
- The validation result (structure passed; render checked or unavailable).
- Any known deviations (fonts substituted, images downscaled, layout drift).
Exit conditions
The task is complete when the artifact exists, passes structural validation
(and the render check when a renderer is available), and the content matches
the agreed scope. Stop after delivering the validated artifact with its
provenance; do not keep iterating on layout without a new scope instruction.
Scripts
All scripts live in scripts/ relative to this skill's directory and
follow cli-builder conventions: --json for machine output, non-interactive,
errors to stderr. Run with --help for full flag details.
validate-documents.py — Structural Sanity + Render Check
python3 scripts/validate-documents.py report.pdf # human report
python3 scripts/validate-documents.py --json report.pdf # machine report
python3 scripts/validate-documents.py --render-check --json report.pdf data.xlsx deck.pptx
Behavior:
- Structural sanity per format: PDF header/EOF/page objects; OOXML ZIP
container,
[Content_Types].xml, required parts, XML well-formedness.
Legacy .doc/.xls/.ppt files are recognized via OLE2 magic bytes.
- Render check (
--render-check): renders PDF via pdftoppm/mutool/gs
and Office formats via LibreOffice. Reports unavailable — exit 0 — when no
renderer is installed (graceful degradation, never a crash).
- Exit codes: 0 all pass (or render check unavailable); 1 a file fails
structure or rendering; 2 usage/I/O error.
- JSON output: top-level
status (ok / fail / unavailable / error)
with per-file checks and render results.
Related skills
- epub — ebook container skill; the sibling family-skill
precedent for this format family.
- data-engineering — data pipelines and
transformation; Excel is a deliverable format here, not a data store.
- cli-builder — the CLI conventions the validation
script follows (
--json, non-interactive, exit codes).
1---2name: documents3description: Generate, inspect, validate, and fix PDF, Word (.docx), Excel (.xlsx), and PowerPoint (.pptx) documents: turn structured content into render-ready artifacts, verify structural and output quality before delivery, and repair broken files. Use when a task involves creating, editing, converting, or validating office documents and PDFs. Do not use for ebook packaging (use epub), for images, video, or other media production, for API or code documentation, or for data pipelines (use data-engineering).4license: MIT5---67# Documents — PDF, Word, Excel & PowerPoint Skill89One skill for the four most common document formats. All four share a single10agent workflow — structured content in, render-ready, validated artifact out —11so they live in ONE family skill with per-format references, following the12`epub` precedent. Load the shared workflow below, then pull the per-format13reference for the format you are actually touching.1415| Format | Extension | Reference (load on demand) |16|--------|-----------|----------------------------|17| PDF | `.pdf` | [references/pdf.md](references/pdf.md) |18| Word | `.docx` | [references/word.md](references/word.md) |19| Excel | `.xlsx` | [references/excel.md](references/excel.md) |20| PowerPoint | `.pptx` | [references/powerpoint.md](references/powerpoint.md) |21| All formats | — | [references/output-quality.md](references/output-quality.md) |2223Generation templates for each format live in [templates/](templates/), and the24validation script with per-format fixtures lives in [scripts/](scripts/).2526## When to use2728Load this skill when the task involves any of the four formats:2930- **Generate**: build a report, memo, spreadsheet, or deck from structured31 content (markdown, JSON, data tables, outlines).32- **Edit**: modify an existing document's content, layout, or metadata in place.33- **Extract**: pull text, tables, or structure out of an existing file.34- **Convert**: move content between formats or from a data source into a document.35- **Validate**: check that a produced artifact is structurally sound and will36 render correctly before it is delivered.3738## When not to use3940- **Ebooks and EPUB** — use the `epub` skill; it owns the EPUB container,41 reading order, and package validation.42- **Images, video, and other media** — this skill covers document formats only;43 route media production to the appropriate media skills.44- **Code and API documentation sites** — use the technical-documentation and45 documentation-site conventions, not office documents.46- **Data pipelines** — moving or transforming raw data belongs to47 `data-engineering`; Excel here is a *deliverable format*, not a data store.48- **Office documents to Markdown** — converting an existing office document49 (docx, xlsx, pptx, pdf, odt, rtf, epub, csv) to GitHub-Flavored Markdown50 belongs to the `anydoc` skill; this skill owns generation, editing, and51 validation, not document-to-markdown extraction.5253## The Shared Workflow5455Every document task follows the same six steps, regardless of format. Deep56format-specific detail is deferred to the per-format reference — read it at the57step where it matters.5859### 1. Scope6061Pin down what the document is for before touching a file:6263- **Audience and purpose** — who reads it and what decision it supports.64- **Format** — PDF (fixed layout, print, archival), Word (editable prose,65 review), Excel (data, calculations), PowerPoint (presentation).66- **Boundaries** — page/slide count, size limits, brand or style constraints.67- **Source of truth** — the structured content the document is generated from68 (markdown, JSON, CSV, outline), so the artifact is reproducible.6970### 2. Content model7172Represent the document's content as structured data before rendering:7374- A **title, sections/headings, body text, and metadata** for prose documents.75- A **table model** (headers, rows, column types) for spreadsheets.76- A **slide outline** (title + bullets per slide, speaker notes) for decks.77- Keep content and layout separate: content in the model, layout in the78 template. This is what makes regeneration cheap.7980### 3. Template8182Choose the generation template for the target format from [templates/](templates/):8384- [templates/pdf-template.md](templates/pdf-template.md) — fixed-layout85 document skeleton (print-ready HTML/CSS or LaTeX source).86- [templates/word-template.md](templates/word-template.md) — Word processing87 document structure (styles, headings, tables).88- [templates/excel-template.md](templates/excel-template.md) — workbook89 structure (sheets, cells, shared strings, formulas).90- [templates/powerpoint-template.md](templates/powerpoint-template.md) — slide91 deck structure (slides, layouts, notes).9293Fill the `[fill: ...]` markers in the template with content from the content94model. Templates are the contract between content and layout — changing the95template is how you change appearance without touching content.9697### 4. Render9899Produce the artifact file:100101- **PDF** — render the template to PDF (print CSS in a browser or engine, or a102 LaTeX toolchain). See [references/pdf.md](references/pdf.md) for tooling.103- **Word / Excel / PowerPoint** — write the OOXML package directly (stdlib104 `zipfile` + XML for small artifacts) or with the conventional library for the105 format (python-docx, openpyxl, python-pptx). See the per-format reference for106 the exact package layout to produce.107108### 5. Validate109110Never deliver unvalidated output. Run the validation script:111112```bash113python3 scripts/validate-documents.py --render-check --json report.pdf brief.docx data.xlsx deck.pptx114```115116The script performs **structural sanity** (container signatures, required117parts, XML well-formedness) and, when a renderer is installed, a **render118check** (actually renders the file). When no renderer is present it reports119`unavailable` instead of failing — validation never hard-requires a renderer.120See [references/output-quality.md](references/output-quality.md) for the full121output-quality checklist, and the fixture files in122[fixtures/](fixtures/) (one per format) to smoke-test the script itself:123124```bash125python3 scripts/validate-documents.py --json fixtures/sample.pdf fixtures/sample.docx fixtures/sample.xlsx fixtures/sample.pptx126```127128### 6. Deliver129130Hand off the artifact with its provenance:131132- The **source content model** (so it can be regenerated).133- The **template version** used.134- The **validation result** (structure passed; render checked or unavailable).135- Any **known deviations** (fonts substituted, images downscaled, layout drift).136137## Exit conditions138139The task is complete when the artifact exists, passes structural validation140(and the render check when a renderer is available), and the content matches141the agreed scope. Stop after delivering the validated artifact with its142provenance; do not keep iterating on layout without a new scope instruction.143144## Scripts145146All scripts live in [scripts/](scripts/) relative to this skill's directory and147follow cli-builder conventions: `--json` for machine output, non-interactive,148errors to stderr. Run with `--help` for full flag details.149150### validate-documents.py — Structural Sanity + Render Check151152```bash153python3 scripts/validate-documents.py report.pdf # human report154python3 scripts/validate-documents.py --json report.pdf # machine report155python3 scripts/validate-documents.py --render-check --json report.pdf data.xlsx deck.pptx156```157158Behavior:159160- **Structural sanity** per format: PDF header/EOF/page objects; OOXML ZIP161 container, `[Content_Types].xml`, required parts, XML well-formedness.162 Legacy `.doc/.xls/.ppt` files are recognized via OLE2 magic bytes.163- **Render check** (`--render-check`): renders PDF via `pdftoppm`/`mutool`/`gs`164 and Office formats via LibreOffice. Reports `unavailable` — exit 0 — when no165 renderer is installed (graceful degradation, never a crash).166- **Exit codes**: 0 all pass (or render check unavailable); 1 a file fails167 structure or rendering; 2 usage/I/O error.168- **JSON output**: top-level `status` (`ok` / `fail` / `unavailable` / `error`)169 with per-file checks and render results.170171## Related skills172173- [epub](../epub/SKILL.md) — ebook container skill; the sibling family-skill174 precedent for this format family.175- [data-engineering](../data-engineering/SKILL.md) — data pipelines and176 transformation; Excel is a deliverable format here, not a data store.177- [cli-builder](../cli-builder/SKILL.md) — the CLI conventions the validation178 script follows (`--json`, non-interactive, exit codes).