vela Get started

Testing PowerPoint Automation with 11 AI Sub‑Agents: What Ac

July 22, 20265 min read

Key takeaways

  • Claude excels at generating slide text, outlines, and high‑level content.
  • Use JSON for chart data and CSV for tables to ensure reliable code generation.
  • Image embedding requires a temporary file step; direct base64 insertion corrupts PPTX files.
  • Complex animations are still beyond the current `python-pptx` API and need manual tweaking.
  • A post‑run validation layer catches missing assets, oversized notes, and formatting glitches.

When I first heard that Claude could be used to generate and edit PowerPoint files, I imagined a seamless workflow: feed a prompt, get a polished deck, and be done. Reality, however, proved more nuanced. To separate hype from capability, I assembled eleven AI sub‑agents, each tuned for a specific PPTX skill—ranging from simple text insertion to complex chart generation. Over three weeks they tackled a 30‑slide test deck, and the results were eye‑opening.

> TL;DR – Claude excels at content creation and layout suggestions, but low‑level binary manipulation still requires a hybrid approach with Python libraries like python-pptx.

The Experiment Setup

| Sub‑Agent | Primary Skill | Prompt Style | Success Metric | |-----------|---------------|--------------|----------------| | Text‑Bot | Insert, format, and style text blocks | "Add a bullet list about AI ethics" | Correct hierarchy & styling | | Image‑Bot | Place and size images | "Insert a 4:3 PNG of a neural network" | Image appears, not corrupted | | Chart‑Bot | Create bar, line, and pie charts | "Generate a bar chart of Q1 sales" | Accurate data, proper axis | | Table‑Bot | Build tables from CSV strings | "Create a table from the following CSV…" | Table renders, headers aligned | | Theme‑Bot | Apply slide master themes | "Use the "Corporate Blue" theme" | Theme applied consistently | | Transition‑Bot | Add slide transitions | "Add fade transition to all slides" | Transitions visible in slideshow | | Speaker‑Notes‑Bot | Populate speaker notes | "Add speaker notes summarizing each slide" | Notes appear, no truncation | | Hyperlink‑Bot | Insert hyperlinks and action buttons | "Link the first bullet to https://example.com" | Links clickable | | Animation‑Bot | Add object animations | "Animate the chart to appear on click" | Animation works | | Export‑Bot | Convert PPTX to PDF/HTML | "Export the deck as a PDF" | File opens, layout preserved | | Debug‑Bot | Detect and fix broken elements | "Find any corrupted slides" | Issues reported & fixed |

All agents shared a common Claude‑code wrapper that translated natural‑language prompts into Python snippets using the python-pptx library. The wrapper also performed sanity checks (e.g., file size limits, supported image formats).

What Worked

1. High‑Level Content Generation

Claude’s language model shines when asked to draft slide copy. Text‑Bot consistently produced well‑structured bullet points, headings, and even persuasive taglines. The model understood hierarchy cues (##, -, *) and translated them into proper PowerPoint styles without additional scripting.

2. Data‑Driven Charts

Chart‑Bot succeeded when the data was supplied as a JSON array. Claude generated a concise python-pptx snippet that:

`python chart = slide.shapes.add_chart( XL_CHART_TYPE.COLUMN_CLUSTERED, left, top, width, height, chart_data ).chart `

The resulting charts matched the source numbers, and axis labels were automatically inferred from the JSON keys.

3. Table Construction from CSV

When fed a CSV string, Table‑Bot used csv.reader to parse rows and then iterated over slide.shapes.add_table. The agent correctly handled empty cells and applied a default table style, saving hours of manual formatting.

4. Theme and Master Slide Application

Theme‑Bot proved reliable when the target theme existed in the template file. Claude identified the correct SlideMaster index and applied it across all slides with a single call:

`python for s in prs.slides: s.slide_layout = prs.slide_master.slide_layouts[2] `

5. Speaker Notes Automation

Populating speaker notes is a classic pain point. Speaker‑Notes‑Bot generated concise notes that fit within the PowerPoint notes pane, avoiding the truncation bug that often occurs when notes exceed 2 KB.

What Didn’t Work (And Why)

1. Direct Image Embedding

Claude attempted to embed base64‑encoded PNGs directly into the PPTX XML, which resulted in corrupted slides. The workaround was to let the wrapper download the image to a temporary file and then use slide.shapes.add_picture. This extra I/O step restored reliability.

2. Complex Animations

Animation‑Bot struggled with multi‑step animations (e.g., fade‑in then grow). The python-pptx API only supports basic entrance/exit effects, and Claude’s generated code often referenced unsupported properties, causing runtime errors. For now, manual post‑processing in PowerPoint remains the safest route.

3. Hyperlink Validation

Hyperlink‑Bot inserted URLs correctly but failed to verify link reachability. A malformed URL would still appear as a clickable object, leading to broken user experiences. Adding a requests.head check in the wrapper solved this, but it added latency.

4. Export Consistency

Export‑Bot’s PDF conversion occasionally shifted text boxes off‑center, a known limitation of the python-pptx‑to‑PDF pipeline. Using Microsoft’s Office Interop via a cloud‑based Windows VM produced perfect PDFs but introduced licensing considerations.

Practical Recommendations

1. Leverage Claude for high‑level language tasks (copywriting, outline creation). Let the model stay in its comfort zone of text generation. 2. Delegate binary‑heavy operations (image handling, PDF export) to a thin Python wrapper that performs file‑system I/O and validation. 3. Standardize input formats—JSON for charts, CSV for tables, and absolute URLs for images. This reduces ambiguity in the generated code. 4. Implement a post‑run validator that opens the PPTX with python-pptx and checks for missing assets, oversized notes, or empty slides. 5. Cache reusable assets (logos, brand palettes) in a shared directory. Claude can reference them by name, avoiding repeated uploads.

Future Directions

The experiment highlighted a promising hybrid model: LLM‑driven orchestration + deterministic libraries for low‑level operations. As Claude’s code‑generation capabilities mature, we can expect tighter integration with libraries like pptx‑genjs for web‑based editing, and eventually native support for animations.

For teams looking to automate deck creation at scale, the key is to define clear contracts between the language model and the execution environment. When the contract is respected, Claude becomes a powerful co‑author that can dramatically accelerate slide production.

---

Author’s note: All test decks were created from scratch; no proprietary client data was used.

Sources: https://www.bulaev.net/p/i-had-11-ai-subagents-test-every

More field notes

Start smaller than feels respectable.