agent4ppt — Parse PPTX templates into markdown, generate PPTX from markdown, and interactively revise slides.
npx claudepluginhub jinwangmok/agent4pptParse PPTX templates into markdown templates, generate PPTX from markdown, and interactively revise slides via three skills: parse-ppt-template, generate-ppt, and revise-ppt.
A Claude Code plugin that parses PPTX templates into markdown templates, generates editable PPTX files from markdown, and supports interactive slide revision — all without image-based rendering. Markdown is the single source of truth.
<!-- ph:idx type:TYPE -->)ko) and English (en) guide comments via LANG env variableagent4ppt is a Claude Code / OpenClaw plugin that solves a common problem for researchers, engineers, and presenters: maintaining a PPTX slide deck through iterations is tedious and error-prone when the content lives inside binary files.
agent4ppt introduces a three-skill pipeline where a human-readable markdown file is the single source of truth for all slide content:
PPTX Template → /parse-ppt-template → Markdown Template
↓ (edit content)
Markdown Content
↓
/generate-ppt → PPTX Output (editable)
/revise-ppt → Interactive revision loop
| Principle | Description |
|---|---|
| No image rendering | All PPTX objects are created via python-pptx native API. Output is always fully editable in PowerPoint / LibreOffice Impress. |
| Markdown as truth | Slide content, layout metadata, and revision history all live in a .md file. The PPTX template is referenced only, never modified. |
| Stable placeholder identity | Placeholders are identified by idx (the python-pptx integer index), making round-trips and re-ordering slides safe. |
| Bilingual by design | All user-facing strings (guide comments, prompts, error messages) support Korean and English via the LANG environment variable. |
| Graceful degradation | Optional LibreOffice previews enhance the revision workflow but are never required; the core pipeline runs with Python alone. When a body placeholder is missing from the layout, content is inserted via a textbox fallback (or image fallback for image content). |