Generate enterprise-quality PPTX presentations. Use when the user asks to create a presentation, make slides, generate a PowerPoint, build a deck, create a pitch deck, or mentions making professional presentations, board decks, strategy presentations, or slide generation.
Generate professional, enterprise-quality PowerPoint presentations from user-provided context. Output is a .pptx file created programmatically using Python and python-pptx, with visual styles derived from a library of real enterprise presentation designs.
Follow these steps exactly:
Collect all available information before generating the specification:
$ARGUMENTS: The topic, title, or context provided with the /slides command--mood professional, --output path.pptx), structural hints ("compare X and Y", "timeline for..."), or explicit data points (metrics, KPIs, dates)If the user provided files or data earlier in the conversation, incorporate that content into the slides. Do not ask for information that has already been provided.
Create a JSON specification using semantic intents -- describe WHAT the content is, not HOW to lay it out. The rendering engine determines visual layout automatically.
See references/semantic-content-model.md for the full schema and references/intent-reference.md for all 15 intents with examples.
Top-level structure:
{
"metadata": {
"title": "Presentation Title",
"subtitle": "Optional subtitle",
"author": "Author Name",
"company": "Company Name",
"date": "April 2026",
"confidentiality": "Confidential",
"style": {
"mood": "professional"
}
},
"slides": [
{"intent": "open", "title": "...", "subtitle": "..."},
{"intent": "explain", "title": "...", "points": [...]},
{"intent": "close", "title": "Thank You"}
]
}
Available intents:
open -- Cover/opening slideclose -- Thank you/ending slideoutline -- Table of contents with numbered itemsdivide -- Section break with number and titleexplain -- Standard bullet points with optional sub-bulletscompare -- Side-by-side comparison (2 sides)categorize -- 3+ parallel categoriesmeasure -- KPI/metric dashboard (3-4 cards)visualize -- Chart (column, bar, line, pie, area, doughnut)tabulate -- Data table with optional conditional highlightingevaluate -- Pros/cons analysis with advantages and challengessequence -- Timeline/roadmap with milestonesemphasize -- Big number or notable quoteillustrate -- Image + textsummarize -- Key takeaways with optional call-to-actionopen, end with summarize or closeoutline after open + divide before each sectionmeasure when 3-4 KPIs are availablevisualize when time-series or categorical data is presentevaluate when presenting options/alternativesemphasize for a single standout statistic or notable quoteDetermine the output path. Default is ./presentation.pptx unless the user specifies otherwise.
Write the JSON specification next to the output file using the Write tool. If the output is ./presentation.pptx, write the spec to ./presentation.spec.json. This keeps them together for iteration and avoids /tmp being cleared on reboot.
Write the JSON to ./<name>.spec.json
python3 -c "import pptx" 2>/dev/null || pip3 install python-pptx
SKILL_DIR="$(find ~/.claude/skills . -path '*/slides/scripts/generate_pptx.py' -print -quit 2>/dev/null | xargs dirname)"
python3 "$SKILL_DIR/generate_pptx.py" --input ./<name>.spec.json --output ./<name>.pptx
If the find command fails, try the project-local path:
python3 slides/scripts/generate_pptx.py --input ./<name>.spec.json --output ./<name>.pptx
After successful generation:
If generation fails, read the error output, fix the JSON specification, and re-run.
User says: /slides quarterly business review for Acme Corp, revenue $142M +18% YoY
Step 1: Topic is "quarterly business review", company is "Acme Corp", data: revenue $142M, +18% YoY.
Step 3: Generate this JSON and write to ./acme_q3_review.spec.json:
{
"metadata": {
"title": "Quarterly Business Review",
"company": "Acme Corp",
"date": "Q3 2026",
"confidentiality": "Confidential",
"style": {"mood": "professional"}
},
"slides": [
{"intent": "open", "title": "Q3 2026 Business Review", "subtitle": "Acme Corp"},
{"intent": "outline", "title": "Agenda", "items": [
{"text": "Financial Performance", "detail": "Revenue and key metrics"},
{"text": "Market Analysis", "detail": "Trends and competition"},
{"text": "Outlook", "detail": "Next steps and recommendations"}
]},
{"intent": "divide", "title": "Financial Performance", "section_number": 1},
{"intent": "measure", "title": "Key Metrics", "metrics": [
{"label": "Revenue", "value": "$142M", "change": "+18%", "trend": "up"},
{"label": "Growth", "value": "18%", "change": "+3pp", "trend": "up"},
{"label": "Margin", "value": "72%", "change": "+2pp", "trend": "up"}
]},
{"intent": "visualize", "title": "Revenue Trend", "chart": {
"type": "column_clustered",
"categories": ["Q1", "Q2", "Q3"],
"series": [{"name": "Revenue ($M)", "values": [118, 130, 142]}]
}},
{"intent": "divide", "title": "Market Analysis", "section_number": 2},
{"intent": "explain", "title": "Market Trends", "points": [
{"text": "Enterprise segment driving growth", "subpoints": ["65% of new revenue"]},
{"text": "Competitive landscape shifting"},
{"text": "Regulatory changes ahead in H2"}
]},
{"intent": "divide", "title": "Outlook", "section_number": 3},
{"intent": "summarize", "title": "Key Takeaways", "takeaways": [
"Revenue at $142M, up 18% YoY -- strong quarter",
"Enterprise segment is the growth engine",
"Need to address emerging competitive threats"
], "action": "Approve Q4 growth investment plan"},
{"intent": "close", "title": "Thank You", "subtitle": "Questions?"}
]
}
Step 5: Run generation:
python3 slides/scripts/generate_pptx.py --input ./acme_q3_review.spec.json --output ./acme_q3_review.pptx
Step 6: "Generated acme_q3_review.pptx with 10 slides: cover, agenda, 3 sections (KPIs, chart, market analysis), takeaways, closing. No warnings."
The rendering engine uses a style library extracted from real enterprise presentations. Style can be specified via the metadata.style object:
{"mood": "professional"} -- conservative, clean design (default){"mood": "bold"} -- high-contrast, vibrant accents{"mood": "warm"} -- earth tones, approachable feel{"mood": "minimal"} -- lots of white space, understated{"palette": "palette-01-professional"} -- exact palette ID{"font": "Calibri"} -- match by font familySee references/style-guide.md for available palettes and typography patterns.
The generation pipeline includes automatic quality assurance:
You do not need to worry about content overflow. The engine handles it. Focus on generating good content with appropriate intents.
When the user asks to modify the presentation:
Read ./<name>.spec.json (the spec file next to the PPTX)intent and fieldsevaluate slide at the right positionsequence slidemetadata.style.moodtitle field.spec.json pathFor bulk changes (completely different topic or structure), regenerate the full spec instead of patching.