Office PPTX
Use the bundled scripts in this skill package to produce editable .pptx
decks. The builder writes editable text boxes, image placements, metric cards,
tables, timelines, drawn proof charts, and native PowerPoint chart objects. The
skill activation metadata includes Skill directory; treat that as SKILL_DIR
and run scripts from SKILL_DIR/scripts/.
Story First
Before building slides, identify:
- Audience and decision context.
- Claim spine: what each slide proves.
- Required proof objects: table, metric, comparison, workflow, timeline, or
narrative slide.
- Visual rhythm: title, section, bullets, two-column, and appendix slides.
Every slide should have one job.
Workflow
- Draft the slide list and title-level claims.
- For explicit control, convert each slide into a structured slide object and
run:
python3 "$SKILL_DIR/scripts/check_env.py"
python3 "$SKILL_DIR/scripts/build_pptx.py" --spec spec.json --out output.pptx
python3 "$SKILL_DIR/scripts/inspect_pptx.py" --verify output.pptx
python3 "$SKILL_DIR/scripts/layout_audit.py" output.pptx
- For a Markdown outline, use
# Deck title, ## Slide title, ## Section: Name, and bullet lists, then run:
python3 "$SKILL_DIR/scripts/outline_to_pptx.py" --outline outline.md --out output.pptx
python3 "$SKILL_DIR/scripts/inspect_pptx.py" --verify output.pptx
- If visual QA matters and LibreOffice is available, run:
python3 "$SKILL_DIR/scripts/render_preview.py" output.pptx
- To append slides to an existing deck without rebuilding it:
python3 "$SKILL_DIR/scripts/append_pptx.py" --input existing.pptx --spec append.json --out output.pptx
python3 "$SKILL_DIR/scripts/inspect_pptx.py" --verify output.pptx
python3 "$SKILL_DIR/scripts/layout_audit.py" output.pptx --reference existing.pptx
- For targeted edits to an existing deck, patch text in place to preserve the
source package, theme, layouts, media, and animations:
python3 "$SKILL_DIR/scripts/patch_pptx.py" --input existing.pptx --patch patch.json --out output.pptx
python3 "$SKILL_DIR/scripts/layout_audit.py" output.pptx --reference existing.pptx
Patch shape:
{"replace_text": [{"old": "Old title", "new": "New title"}]}
- For template-following or source-deck workflows, duplicate, drop, or reorder
source slides without rebuilding their XML:
python3 "$SKILL_DIR/scripts/duplicate_slide.py" --input template.pptx --slide 2 --out duplicated.pptx
python3 "$SKILL_DIR/scripts/deck_reorder.py" --input duplicated.pptx --order '[2,1,3]' --out reordered.pptx
python3 "$SKILL_DIR/scripts/layout_audit.py" reordered.pptx --reference template.pptx
- After rendering previews, create a contact sheet when reviewing slide rhythm:
python3 "$SKILL_DIR/scripts/make_contact_sheet.py" --images preview/page-*.png --out contact-sheet.html
- Deliver the
.pptx path or attach it with send_attachment.
Spec Shape
{
"title": "Deck title",
"slides": [
{"type": "title", "title": "Board Update", "subtitle": "Q2"},
{"type": "section", "title": "What changed"},
{"type": "bullets", "title": "Retention improved", "bullets": ["Activation rose", "Churn fell"]},
{"type": "metrics", "title": "Operating pulse", "metrics": [{"label": "ARR", "value": "$12M", "delta": "+18%"}]},
{"type": "table", "title": "Options", "headers": ["Option", "Pros", "Risks"], "rows": [["A", "Fast", "Low moat"]]},
{"type": "timeline", "title": "Launch path", "items": [{"date": "Q1", "label": "Pilot"}, {"date": "Q2", "label": "GA"}]},
{"type": "chart", "title": "Segment mix", "data": [{"label": "SMB", "value": 42}, {"label": "Enterprise", "value": 58}]},
{"type": "native_chart", "title": "Native segment mix", "chart_type": "pie", "data": [{"label": "SMB", "value": 42}, {"label": "Enterprise", "value": 58}]},
{"type": "image", "title": "Product screenshot", "image": "screenshot.png", "caption": "Use verified assets only"},
{"type": "two_column", "title": "Options", "left": ["Option A"], "right": ["Option B"]}
]
}
Quality Bar
- Use concise slide titles with a claim, not just a topic label.
- Keep bullets short; move dense material into an appendix or document.
- Avoid invented logos, marks, screenshots, or metrics. Use verified assets or
omit them.
- Use
native_chart when the deck needs a real editable PowerPoint chart
object; use chart only for quick drawn proof-object slides.
- Preserve source-deck style when the user asks for edits to an existing deck;
use
patch_pptx.py for text-only edits and minimal local changes rather
than rebuilding from scratch.
- When duplicating, dropping, or reordering slides, preserve non-slide
presentation relationships such as slide masters, layouts, themes, and view
properties; do not rebuild
presentation.xml.rels from slides only.
- Run the layout audit (
layout_audit.py) before delivery; fix blank slides,
missing titles, dense text, and out-of-bounds shapes. Preserve source-deck
style for template and targeted-edit work.
- If preview rendering fails because LibreOffice or a PDF-to-PNG renderer is
missing, state exactly which verification passed; do not imply visual QA
passed.
1---
2name: office-pptx
3description: "Use when the user asks to create, inspect, verify, polish, or deliver PowerPoint `.pptx` decks, Google Slides-targeted deck artifacts, strategy narratives, operating reviews, pitch decks, teaching decks, section slides, bullet slides, or source-to-PPTX transformations."
4requires:
5 bins: [python3]
6install:
7 - kind: brew
8 formula: python
9 bins: [python3]
10 label: "Install Python 3 via Homebrew"
11 os: [darwin]
12allowed-tools:
13 - read
14 - write
15 - edit
16 - apply_patch
17 - exec
18 - ls
19 - grep
20 - pdf
21 - web_search
22 - web_fetch
23 - image_generate
24 - send_attachment
25---
26
27# Office PPTX
28
29Use the bundled scripts in this skill package to produce editable `.pptx`
30decks. The builder writes editable text boxes, image placements, metric cards,
31tables, timelines, drawn proof charts, and native PowerPoint chart objects. The
32skill activation metadata includes `Skill directory`; treat that as `SKILL_DIR`
33and run scripts from `SKILL_DIR/scripts/`.
34
35## Story First
36
37Before building slides, identify:
38
39- Audience and decision context.
40- Claim spine: what each slide proves.
41- Required proof objects: table, metric, comparison, workflow, timeline, or
42 narrative slide.
43- Visual rhythm: title, section, bullets, two-column, and appendix slides.
44
45Every slide should have one job.
46
47## Workflow
48
491. Draft the slide list and title-level claims.
502. For explicit control, convert each slide into a structured slide object and
51 run:
52
53```bash
54python3 "$SKILL_DIR/scripts/check_env.py"
55python3 "$SKILL_DIR/scripts/build_pptx.py" --spec spec.json --out output.pptx
56python3 "$SKILL_DIR/scripts/inspect_pptx.py" --verify output.pptx
57python3 "$SKILL_DIR/scripts/layout_audit.py" output.pptx
58```
59
603. For a Markdown outline, use `# Deck title`, `## Slide title`, `## Section:
61 Name`, and bullet lists, then run:
62
63```bash
64python3 "$SKILL_DIR/scripts/outline_to_pptx.py" --outline outline.md --out output.pptx
65python3 "$SKILL_DIR/scripts/inspect_pptx.py" --verify output.pptx
66```
67
684. If visual QA matters and LibreOffice is available, run:
69
70```bash
71python3 "$SKILL_DIR/scripts/render_preview.py" output.pptx
72```
73
745. To append slides to an existing deck without rebuilding it:
75
76```bash
77python3 "$SKILL_DIR/scripts/append_pptx.py" --input existing.pptx --spec append.json --out output.pptx
78python3 "$SKILL_DIR/scripts/inspect_pptx.py" --verify output.pptx
79python3 "$SKILL_DIR/scripts/layout_audit.py" output.pptx --reference existing.pptx
80```
81
826. For targeted edits to an existing deck, patch text in place to preserve the
83 source package, theme, layouts, media, and animations:
84
85```bash
86python3 "$SKILL_DIR/scripts/patch_pptx.py" --input existing.pptx --patch patch.json --out output.pptx
87python3 "$SKILL_DIR/scripts/layout_audit.py" output.pptx --reference existing.pptx
88```
89
90Patch shape:
91
92```json
93{"replace_text": [{"old": "Old title", "new": "New title"}]}
94```
95
967. For template-following or source-deck workflows, duplicate, drop, or reorder
97 source slides without rebuilding their XML:
98
99```bash
100python3 "$SKILL_DIR/scripts/duplicate_slide.py" --input template.pptx --slide 2 --out duplicated.pptx
101python3 "$SKILL_DIR/scripts/deck_reorder.py" --input duplicated.pptx --order '[2,1,3]' --out reordered.pptx
102python3 "$SKILL_DIR/scripts/layout_audit.py" reordered.pptx --reference template.pptx
103```
104
1058. After rendering previews, create a contact sheet when reviewing slide rhythm:
106
107```bash
108python3 "$SKILL_DIR/scripts/make_contact_sheet.py" --images preview/page-*.png --out contact-sheet.html
109```
110
1119. Deliver the `.pptx` path or attach it with `send_attachment`.
112
113## Spec Shape
114
115```json
116{
117 "title": "Deck title",
118 "slides": [
119 {"type": "title", "title": "Board Update", "subtitle": "Q2"},
120 {"type": "section", "title": "What changed"},
121 {"type": "bullets", "title": "Retention improved", "bullets": ["Activation rose", "Churn fell"]},
122 {"type": "metrics", "title": "Operating pulse", "metrics": [{"label": "ARR", "value": "$12M", "delta": "+18%"}]},
123 {"type": "table", "title": "Options", "headers": ["Option", "Pros", "Risks"], "rows": [["A", "Fast", "Low moat"]]},
124 {"type": "timeline", "title": "Launch path", "items": [{"date": "Q1", "label": "Pilot"}, {"date": "Q2", "label": "GA"}]},
125 {"type": "chart", "title": "Segment mix", "data": [{"label": "SMB", "value": 42}, {"label": "Enterprise", "value": 58}]},
126 {"type": "native_chart", "title": "Native segment mix", "chart_type": "pie", "data": [{"label": "SMB", "value": 42}, {"label": "Enterprise", "value": 58}]},
127 {"type": "image", "title": "Product screenshot", "image": "screenshot.png", "caption": "Use verified assets only"},
128 {"type": "two_column", "title": "Options", "left": ["Option A"], "right": ["Option B"]}
129 ]
130}
131```
132
133## Quality Bar
134
135- Use concise slide titles with a claim, not just a topic label.
136- Keep bullets short; move dense material into an appendix or document.
137- Avoid invented logos, marks, screenshots, or metrics. Use verified assets or
138 omit them.
139- Use `native_chart` when the deck needs a real editable PowerPoint chart
140 object; use `chart` only for quick drawn proof-object slides.
141- Preserve source-deck style when the user asks for edits to an existing deck;
142 use `patch_pptx.py` for text-only edits and minimal local changes rather
143 than rebuilding from scratch.
144- When duplicating, dropping, or reordering slides, preserve non-slide
145 presentation relationships such as slide masters, layouts, themes, and view
146 properties; do not rebuild `presentation.xml.rels` from slides only.
147- Run the layout audit (`layout_audit.py`) before delivery; fix blank slides,
148 missing titles, dense text, and out-of-bounds shapes. Preserve source-deck
149 style for template and targeted-edit work.
150- If preview rendering fails because LibreOffice or a PDF-to-PNG renderer is
151 missing, state exactly which verification passed; do not imply visual QA
152 passed.