Agent skill
presentation-transformation
Use when transforming presentations from basic to professional quality - employs parallel multi-agent execution, research-driven design, and McKinsey/BCG/Deloitte best practices to create executive-ready decks
Install this agent skill to your Project
npx add-skill https://github.com/blurphanatic/claude-skills/tree/main/presentation-transformation
SKILL.md
Presentation Transformation
Overview
Transform basic presentations into professional, executive-ready decks using parallel multi-agent execution, comprehensive research, and corporate design best practices.
Core principle: Research → Design → Parallel Execution → Iteration → Polish
Announce at start: "I'm using the presentation-transformation skill to elevate your deck to professional quality."
Quick Reference
| Phase | Key Activities | Tool Usage | Output |
|---|---|---|---|
| 1. Analysis | Extract content, gather requirements | Brainstorming skill, AskUserQuestion | Requirements document |
| 2. Research | Market data, case studies, best practices | WebSearch (3+ searches) | Research markdown |
| 3. Design | Define color palette, typography, layouts | Design system constants | Style guide |
| 4. Parallel Build | Launch 3 agents simultaneously | Task tool (multiple) | Generator + content + charts |
| 5. Iteration | Fix formatting, spacing, bullets | Python-expert agent | Polished presentation |
| 6. Documentation | Create reusable skill/templates | Write skill file | Future reusability |
The Process
Phase 1: Analysis & Requirements
CRITICAL: Start with brainstorming skill to understand requirements.
1. Extract Current Content
For PowerPoint files (.pptx):
# Extract as ZIP
cd "path/to/presentations"
unzip -q -o presentation.pptx -d extracted/
# Parse slide content
find extracted/ppt/slides -name "slide*.xml" | sort | while read slide; do
slidenum=$(echo $slide | grep -o '[0-9]\+')
echo "=== SLIDE $slidenum ==="
grep -o '<a:t>[^<]*</a:t>' $slide | sed 's/<a:t>//g; s/<\/a:t>//g'
done
Document findings:
- Total slide count
- Content quality (basic, intermediate, advanced)
- Design issues (overlaps, spacing, fonts)
- Missing elements (data, case studies, visuals)
2. Gather Requirements (use AskUserQuestion)
Ask about:
- Primary goal: Sponsors, education, recruitment, multi-purpose
- Design style: Modern tech, corporate professional, environmental, blended
- Content approach: Problem-led, data-driven, case studies
- Specific fixes: What user dislikes about current version
3. Research Context (3-5 WebSearch queries)
Essential searches:
- Topic-specific market data and statistics
- Real-world case studies with quantified results
- Industry trends and projections (with years)
- Competitor/alternative approaches
- Presentation design best practices (current year)
Phase 2: Design System Definition
Corporate Professional Standards:
# Color Palette
NAVY = RGBColor(26, 43, 74) # #1A2B4A - trust, stability
TEAL = RGBColor(0, 167, 160) # #00A7A0 - innovation
GOLD = RGBColor(212, 167, 106) # #D4A76A - premium value
LIGHT_GRAY = RGBColor(240, 240, 240)
DARK_GRAY = RGBColor(68, 68, 68)
# Typography Hierarchy
FONT_TITLE = 44 # Main titles (not 54, causes overflow)
FONT_HEADING = 34 # Section headings
FONT_SUBHEADING = 24 # Subheadings
FONT_BODY = 15 # Body text & bullets (not 18, too large)
FONT_CAPTION = 14 # Captions, labels
# Font Families
FONT_HEADER = "Montserrat" # Bold, modern, readable
FONT_BODY_TEXT = "Open Sans" # Clean, professional
# Spacing Rules (CRITICAL for avoiding overlap)
MARGIN = Inches(0.5)
CONTENT_TOP = Inches(2.0) # Room for titles
TITLE_TO_SUBTITLE = 0.7 # Minimum gap (inches)
ELEMENT_TO_ELEMENT = 0.3 # Between major elements
BULLET_SPACE_BEFORE = Pt(8) # Vertical spacing
BULLET_SPACE_AFTER = Pt(8)
LINE_SPACING = 1.2 # Body text line height
# Layout
SLIDE_WIDTH = Inches(10) # Standard widescreen
SLIDE_HEIGHT = Inches(7.5)
CONTENT_WIDTH = Inches(8.5) # Maximum content width
TITLE_WIDTH = Inches(8.0) # Prevents overflow
Alternative Palettes:
Startup Modern:
- Primary: #0066FF (electric blue)
- Secondary: #FF3366 (vibrant pink)
- Accent: #00CC88 (fresh green)
Environmental:
- Primary: #2C5F2D (forest green)
- Secondary: #97BC62 (sage)
- Accent: #F4A259 (earth orange)
Phase 3: Parallel Multi-Agent Execution
CRITICAL: Launch all 3 agents in SINGLE message for true parallelism.
# Agent 1: Presentation Generator
Task(
subagent_type="python-expert:python-expert",
description="Build presentation generator",
prompt="""Create complete python-pptx script:
ENVIRONMENT:
- Directory: /path/to/presentations
- Venv: pptx_env (already created with python-pptx, pillow installed)
DESIGN SYSTEM:
[Paste color palette and typography specs]
STRUCTURE:
- Create generate_presentation.py
- Include DesignSystem class with constants
- Helper functions: add_background_shape, add_title_with_accent, add_bullet_list, add_stat_box
- Slide generators: create_slide_01_title(), create_slide_02_team(), etc.
- Main function: generate_presentation(output_path)
CRITICAL Z-ORDER:
1. Backgrounds FIRST
2. Accent bars/decorative elements
3. Text boxes LAST
(This prevents overlapping)
BULLET LISTS MUST USE:
p.level = 0 # Enables actual bullets
p.space_before = Pt(8)
p.space_after = Pt(8)
p.line_spacing = 1.2
Return: "AGENT 1 COMPLETE - presentation generator created"
"""
)
# Agent 2: Content Researcher
Task(
subagent_type="general-purpose",
description="Research case studies",
prompt="""Research and compile:
CASE STUDY 1: [Topic-specific example]
- Real examples with company names
- Statistical impact (percentages, dollar amounts)
- Specific timeline and results
- How problem manifested
CASE STUDY 2: [Second example]
[Same structure]
CASE STUDY 3: [Third example]
[Same structure]
For each case study provide:
- Title (concise, compelling)
- 2-3 bullet points with data/facts
- Key takeaway
- Source citations
Create: case_studies_content.md with all details
Return: Complete markdown with 3+ detailed case studies
"""
)
# Agent 3: Data Visualization
Task(
subagent_type="general-purpose",
description="Generate chart images",
prompt="""Create matplotlib/seaborn charts:
ENVIRONMENT:
- Directory: /path/to/presentations
- Venv: pptx_env
- Install: matplotlib, seaborn if needed
CREATE: generate_charts.py producing PNGs:
CHART 1: Market Growth
- Bar chart showing current → future projections
- Color gradient matching palette
- 300 DPI, professional styling
CHART 2: Problem Statistics
- Pie chart showing fraud/problem percentages
- Red for problem, green for solution
- Clear percentage labels
CHART 3: Trend Over Time
- Line chart with smooth curve
- Milestone annotations
- Data points marked
All charts MUST:
- Use corporate colors: #1A2B4A, #00A7A0, #D4A76A
- High DPI (300) for print quality
- No default matplotlib styling
- Proper titles and labels
- Save to charts/ directory
Run script and return: "AGENT 3 COMPLETE - All charts in charts/"
"""
)
Launch all 3 in parallel:
- Single message with 3 Task invocations
- Agents complete simultaneously (~same time as 1)
- 3x speed improvement
Phase 4: Python Environment Setup
Virtual Environment Required:
cd "/path/to/presentations"
python3 -m venv pptx_env
source pptx_env/bin/activate
pip install python-pptx pillow matplotlib seaborn
Why venv? macOS has externally-managed-environment protection, pip3 install fails globally.
Phase 5: Key python-pptx Patterns
Background Shapes (Z-Order Layer 1):
def add_background_shape(slide, color, height_fraction=0.3):
"""Add colored background - RENDER FIRST"""
shape = slide.shapes.add_shape(
MSO_SHAPE.RECTANGLE,
0, 0,
Inches(10), Inches(7.5 * height_fraction)
)
shape.fill.solid()
shape.fill.fore_color.rgb = color
shape.line.fill.background() # No border
return shape
Title with Accent Bar (Z-Order Layer 2-3):
def add_title_with_accent(slide, title_text, subtitle_text=None):
"""Add title with teal accent bar"""
# Accent bar (Layer 2)
add_accent_bar(slide, TEAL, Inches(0.5), Inches(0.9),
Inches(0.15), Inches(0.7))
# Title (Layer 3)
title_box = slide.shapes.add_textbox(
Inches(0.8), Inches(0.9), # After accent bar
Inches(8.0), Inches(1.0) # Max width to prevent overflow
)
title_frame = title_box.text_frame
title_frame.text = title_text
title_frame.word_wrap = True # CRITICAL for long titles
# Style
for p in title_frame.paragraphs:
p.font.name = "Montserrat"
p.font.size = Pt(34)
p.font.color.rgb = NAVY
p.font.bold = True
# Subtitle (if provided)
if subtitle_text:
subtitle_box = slide.shapes.add_textbox(
Inches(0.8), Inches(1.7), # 0.7" gap from title
Inches(8.0), Inches(0.6)
)
subtitle_frame = subtitle_box.text_frame
subtitle_frame.text = subtitle_text
subtitle_frame.word_wrap = True
for p in subtitle_frame.paragraphs:
p.font.name = "Open Sans"
p.font.size = Pt(18)
p.font.color.rgb = DARK_GRAY
Bullet Lists (ACTUAL BULLETS):
def add_bullet_list(slide, items, left, top, width, height):
"""Add formatted bullet list - NOT plain text"""
textbox = slide.shapes.add_textbox(left, top, width, height)
text_frame = textbox.text_frame
text_frame.word_wrap = True
for i, item in enumerate(items):
# Create paragraph
if i == 0:
p = text_frame.paragraphs[0]
else:
p = text_frame.add_paragraph()
# CRITICAL: This enables actual bullets
p.text = item
p.level = 0 # Level 0 = bullet, Level 1 = sub-bullet
# Styling
p.font.name = "Open Sans"
p.font.size = Pt(15) # Not 18, too large
p.font.color.rgb = DARK_GRAY
# Spacing (McKinsey best practice)
p.space_before = Pt(8)
p.space_after = Pt(8)
p.line_spacing = 1.2 # 20% more than single-space
Stat Boxes:
def add_stat_box(slide, stat, label, left, top,
width=Inches(2.5), height=Inches(1.5)):
"""Statistics box with number + label"""
# Background
shape = slide.shapes.add_shape(
MSO_SHAPE.ROUNDED_RECTANGLE,
left, top, width, height
)
shape.fill.solid()
shape.fill.fore_color.rgb = LIGHT_GRAY
shape.line.fill.background()
# Large number
stat_box = slide.shapes.add_textbox(
left, top + Inches(0.25), # Padding from top
width, Inches(0.7)
)
stat_frame = stat_box.text_frame
stat_frame.text = stat
for p in stat_frame.paragraphs:
p.alignment = PP_ALIGN.CENTER
p.font.name = "Montserrat"
p.font.size = Pt(48)
p.font.color.rgb = TEAL
p.font.bold = True
# Label
label_box = slide.shapes.add_textbox(
left, top + Inches(0.95), # Below number
width, Inches(0.5)
)
label_frame = label_box.text_frame
label_frame.text = label
label_frame.word_wrap = True
for p in label_frame.paragraphs:
p.alignment = PP_ALIGN.CENTER
p.font.name = "Open Sans"
p.font.size = Pt(14)
p.font.color.rgb = DARK_GRAY
Phase 6: Design Best Practices (Research-Backed)
From McKinsey/BCG/Deloitte Analysis:
1. 6×6 Rule for Bullets
- Maximum 6 bullets per slide
- Maximum 6-8 words per bullet
- Condense verbose text aggressively
Before: "No Universal Standards: Fragmented markets lack unified verification protocols" After: "Fragmented markets lack unified verification standards" (7 words)
2. Visual Hierarchy
- Clear size differences: Title > Heading > Subhead > Body
- Minimum 1.5x size ratio between levels
- Use color to reinforce importance
3. Whitespace is King
- Generous margins prevent cramped feeling
- Better to split into 2 slides than cram 1
- Empty space signals professionalism
4. Typography Rules
- Sans-serif for screens (Arial, Calibri, Open Sans)
- Line spacing: 1.15-1.5 for body text
- Never below 14pt font size (readability)
5. Data Visualization
- Use charts for numbers, not text bullets
- Color-code for instant comprehension
- Professional styling (customize matplotlib defaults)
6. Consistency Throughout
- Same fonts, colors, spacing across all slides
- Reusable helper functions enforce this
- Predictable layouts aid comprehension
Phase 7: Common Issues & Fixes
Issue: Text Overflow / Titles Running Off
Symptoms:
- Titles cut off at right edge
- Text disappearing
Fix:
# Reduce title width
title_box = slide.shapes.add_textbox(
Inches(0.8), Inches(0.9),
Inches(8.0), Inches(1.0) # Was 8.5, now 8.0
)
# Enable word wrap
title_frame.word_wrap = True
# Reduce font if still too large
p.font.size = Pt(34) # Was 44
Issue: Overlapping Elements
Symptoms:
- Accent bars on top of text
- Backgrounds covering content
Fix:
# CORRECT Z-ORDER:
# 1. Backgrounds first
add_background_shape(slide, NAVY, 0.5)
# 2. Accent bars second
add_accent_bar(slide, GOLD, ...)
# 3. Text boxes last
title_box = slide.shapes.add_textbox(...)
Issue: Poor Readability
Symptoms:
- Text feels cramped
- Hard to scan quickly
Fix:
# Reduce body text size
p.font.size = Pt(15) # Not 18
# Increase line spacing
p.line_spacing = 1.2
# Add vertical spacing
p.space_before = Pt(8)
p.space_after = Pt(8)
Issue: Cramped Layouts
Symptoms:
- Elements touching each other
- No breathing room
Fix:
# Increase top margin
CONTENT_TOP = Inches(2.0) # Was 1.8
# Add spacing between elements
stat_top = CONTENT_TOP + Inches(0.3)
bullet_top = stat_top + Inches(2.0) + Inches(0.3) # 0.3" gap
Debugging Process:
- User reports formatting issues
- Read current generate script
- Launch python-expert agent with specific fixes
- Regenerate presentation
- Open in PowerPoint and verify
- Repeat until beautiful
Phase 8: Modular Architecture
Structure for Flexibility:
Core Pitch Deck (10 slides):
- Slide 1: Title / Hook
- Slide 2: Team
- Slide 3: Problem
- Slide 4: Market Opportunity
- Slide 5: Solution
- Slide 6: Proof (case study)
- Slide 7: Why Now
- Slide 8: Governance / How It Works
- Slide 9: Timeline / Roadmap
- Slide 10: Contact / CTA
Module A: Market Deep-Dive (3-5 slides):
- Detailed market analysis
- Competitive landscape
- Regulatory environment
Module B: Case Studies (3-5 slides):
- Detailed case study 1
- Detailed case study 2
- ROI analysis
Module C: Technical Details (3-5 slides):
- Architecture overview
- Integration pathways
- Security model
Module D: Commercial (2-3 slides):
- Pricing / Membership tiers
- Benefits breakdown
- Next steps
Benefits:
- Customize for audience (exec vs. technical)
- Remove/include modules as needed
- Easy to update individual sections
Phase 9: Iteration Protocol
First Generation:
- Expect issues (overlaps, overflow, spacing)
- Normal - first draft is never final
User Feedback:
- Listen for specific issues
- "Overlapping elements" → z-order fix
- "Titles running off" → width/font fix
- "No bullets" → p.level = 0 fix
- "Cramped" → spacing increase
Fix Pattern:
- Identify specific problem
- Launch python-expert agent with fix instructions
- Regenerate
- Verify in PowerPoint
- Repeat 2-3 times typically
Quality Bar:
- No overlapping elements ✓
- No text overflow ✓
- Consistent spacing ✓
- Professional color usage ✓
- Actual bullets (not plain text) ✓
- Research-backed content ✓
- Clear narrative flow ✓
Research Checklist
Before designing, web search for:
- Topic-specific market data with years
- Real case studies with company names and results
- Industry trends and growth projections
- Competitive/alternative approaches
- Regulatory landscape and timeline
- Presentation design best practices (current year)
- Typography and spacing recommendations
- Color psychology for corporate presentations
Tools & Technologies
Required:
- python-pptx (PowerPoint generation)
- pillow (Image handling)
Optional but Recommended:
- matplotlib (Charts)
- seaborn (Statistical visualizations)
- pandas (Data for charts)
Environment:
- Python 3.8+
- Virtual environment (required on macOS)
- Works on macOS, Linux, Windows
Success Metrics
Visual Quality:
- No overlapping elements
- No text overflow
- Consistent spacing throughout
- Professional color usage
- Proper bullet formatting
Content Quality:
- Research-backed statistics
- Real case studies with results
- Clear narrative flow
- Actionable takeaways
- Quantified benefits
Technical Quality:
- Clean, readable code
- Reusable helper functions
- Fast generation (<30 seconds)
- Easy to modify/extend
Files Generated
Typical output:
generate_presentation.py- Main generatorcase_studies_content.md- Researchgenerate_charts.py- Chart generatorcharts/*.png- Visualization imagesFinal_Presentation.pptx- Output deck
Reusability Pattern
To adapt for other presentations:
-
Clone structure
- Copy generate_presentation.py template
- Update DesignSystem colors/fonts
- Modify slide generator functions
-
Research phase
- Web search for new topic
- Gather statistics, case studies
- Create content markdown
-
Generate charts
- Topic-specific visualizations
- Match color palette
- Export as PNG
-
Customize slides
- Update slide functions
- Keep helpers (generic)
- Maintain consistency
-
Test & iterate
- Generate → Review → Fix
- User feedback loop
- Polish until professional
Anti-Patterns
❌ Don't skip research - Generic content looks amateur ❌ Don't overcrowd slides - Violates 6×6 rule ❌ Don't use default colors - Creates amateur look ❌ Don't ignore z-order - Causes overlaps ❌ Don't use tiny fonts - Minimum 14pt ❌ Don't skip iteration - First draft never final ❌ Don't work sequentially - Use parallel agents
Key Learnings
Speed: Parallel agents = 3x faster than sequential Quality: Research-driven content >> guessing Design: Follow proven rules (6×6, hierarchy) Iteration: Expect 2-3 rounds of fixes Documentation: Capture process for reuse
Example Session Flow
1. User: "Transform presentation from zero to hero"
2. Extract current slides (unzip .pptx)
3. Ask requirements (AskUserQuestion)
4. Research topic (3-5 WebSearch queries)
5. Launch 3 parallel agents (single message)
6. Agents complete simultaneously
7. Generate initial presentation
8. User: "Overlapping elements, text overflow"
9. Fix formatting (python-expert agent)
10. Regenerate
11. User: "Better but bullets need work"
12. Research typography best practices
13. Fix bullets + spacing
14. Regenerate
15. User satisfied
16. Document as skill
This skill transforms good presentations into HERO-LEVEL decks through systematic research, parallel execution, and professional design principles.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
api-client-generator
Use when creating REST API clients, SDK wrappers, or HTTP service integrations. Generates type-safe client code with retry logic, error handling, rate limiting, and comprehensive tests. Triggered by requests to integrate external APIs, build SDK clients, or create service wrappers.
skill-lifecycle-manager
Use when creating, testing, iterating, or managing Claude Code skills. Handles skill scaffolding, git versioning, symlink management, auto-discovery testing, and quality assurance. Triggered by requests to create new skills, improve existing skills, test skill loading, or manage skill infrastructure.
edit-article
Edit and improve articles by restructuring sections, improving clarity, and tightening prose. Use when user wants to edit, revise, or improve an article draft.
handoff
Compact the current conversation into a handoff document for another agent to pick up.
obsidian-vault
Search, create, and manage notes in the Obsidian vault with wikilinks and index notes. Use when user wants to find, create, or organize notes in Obsidian.
setup-pre-commit
Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing.
Didn't find tool you were looking for?