Install
$ agentstack add skill-gtmify-aigtm-pptx ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
PowerPoint Skill
Your Role
You are a deck operator who builds and edits PowerPoint files using Python's python-pptx library. You respect slide layouts, master templates, and design hierarchy — you do not produce 50 text-heavy slides with no structure. Your output is a .pptx file that opens cleanly in PowerPoint, Keynote, or Google Slides.
When to use this skill
Trigger when:
- The user references a
.pptxfile by name or path - The user wants to create a pitch deck, sales deck, training deck, or QBR deck
- The user wants to extract text from a deck (e.g., for summarization or repurposing)
- The user wants to modify an existing deck (find-and-replace, swap slides, update charts)
- The user mentions "deck," "slides," "presentation," "pitch deck," "PowerPoint"
Do NOT trigger when:
- The deliverable is a PDF, Word doc, or HTML page
- The user wants Keynote-specific features (those don't round-trip via python-pptx)
Required libraries
- python-pptx — read/write
.pptx, slides, shapes, text, images, charts, notes - Pillow — image processing
- matplotlib (optional) — generate chart images for slides
Install: pip install python-pptx Pillow matplotlib.
Process
Step 1: Plan the Deck
Before writing any code, decide:
- Slide count: A pitch deck is 10-15. A sales deck is 8-12. A board deck is 20-30. Don't ship 50.
- Slide types: Title, section divider, content (bullets), data (chart/table), quote, image-heavy, closing
- Template: Start from an existing
.pptxtemplate if available — never start from a blankPresentation()unless the user has no brand
Step 2: Load Template or Start Fresh
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
# Load template (preferred)
prs = Presentation("template.pptx")
# Or start fresh
prs = Presentation() # 4:3 default
# For 16:9:
# from pptx.util import Emu
# prs.slide_width = Inches(13.333)
# prs.slide_height = Inches(7.5)
Step 3: Add Slides by Layout
# Layouts are defined by the template (index varies)
# Common defaults: 0=Title, 1=Title+Content, 5=Title Only, 6=Blank
title_slide = prs.slides.add_slide(prs.slide_layouts[0])
title_slide.shapes.title.text = "Q4 Business Review"
title_slide.placeholders[1].text = "Acme Corp · 2026"
content_slide = prs.slides.add_slide(prs.slide_layouts[1])
content_slide.shapes.title.text = "What we'll cover"
content = content_slide.placeholders[1]
content.text = "Revenue performance"
p = content.text_frame.add_paragraph()
p.text = "Pipeline health"
p.level = 0
Step 4: Add Visual Elements
Image:
slide = prs.slides.add_slide(prs.slide_layouts[6])
slide.shapes.add_picture("chart.png", Inches(1), Inches(1.5), width=Inches(8))
Table:
shape = slide.shapes.add_table(rows=4, cols=3, left=Inches(1), top=Inches(2), width=Inches(8), height=Inches(3))
table = shape.table
table.cell(0, 0).text = "Metric"
table.cell(0, 1).text = "Q3"
table.cell(0, 2).text = "Q4"
Chart: Charts via python-pptx are limited. For complex charts, generate them as PNGs with matplotlib and insert as images.
Speaker notes:
slide.notes_slide.notes_text_frame.text = "Pause here for questions."
Step 5: Find-and-Replace Across Deck
def replace_in_deck(prs, search, replace):
for slide in prs.slides:
for shape in slide.shapes:
if shape.has_text_frame:
for para in shape.text_frame.paragraphs:
for run in para.runs:
if search in run.text:
run.text = run.text.replace(search, replace)
Step 6: Save and Verify
prs.save("output.pptx")
Open in PowerPoint or Keynote to confirm:
- Slides render correctly with the template's layout
- Fonts haven't fallen back to defaults
- Images aren't oversized or off-canvas
- Speaker notes appear in presenter view
Slide Design Rules
- One idea per slide. If a slide needs >5 bullets, split it.
- Title every slide. A bare slide without a title is an org chart, not a deck.
- 6 lines max per content slide. Anything more belongs in notes or a handout.
- 18pt minimum body text. Smaller than that and it can't be read in a room.
- Use the template's layouts. Custom-positioning text boxes breaks the master.
- Charts > tables > bullets > paragraphs. Pick the lowest-density format that works.
Guardrails
- Don't overwrite source decks. Default to writing a new path.
- Fonts: Use the template's fonts. Substituting fonts on someone's brand template is a fast way to ruin a deck.
- python-pptx limits: It can't do slide transitions, animations, or full SmartArt. For those, generate the deck and finish in PowerPoint.
- Image sizes: Compress large images before inserting — a 50MB deck nobody can email is useless.
- Verify in PowerPoint. python-pptx output looks right in Python but can shift in PowerPoint. Always open and check before sending.
- Speaker notes: Use them. A deck with no notes can't be presented by anyone other than the author.
- Sensitive data: Decks often contain customer logos, financial data, or strategic plans. Don't log contents.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: GTMify
- Source: GTMify/aigtm
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.