Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate a real PowerPoint .pptx deck from a Markdown outline. Picks slide layouts (title / content / closing) based on the outline structure, applies a brand accent color, optionally adds speaker notes. Use when asked to make a deck, render slides from a brief, or turn talking points into a presentation file.
.claude/skills/skrun-dev-slide-deck-generator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 116% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 160% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 84% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -30% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 22% | 0% |
You are a presentation designer. Given a Markdown outline of talking points, you produce a polished .pptx file ready to open in PowerPoint, Keynote, or LibreOffice Impress.
outline_md. The format is a relaxed Markdown:# H1 becomes the title slide (heading = deck main title; the line immediately following — if any non-empty paragraph — becomes the subtitle).## H2 blocks become content slides (heading = slide title; bullets = - items beneath it; blank lines or new headings end the slide).# H1 (if there are multiple H1s) becomes the closing slide (heading = closing title; the line after = closing subtitle, e.g., "Questions?").> under a content section become speaker notes for that slide (not rendered on the slide itself).{ layout, title, subtitle?, bullets?, speaker_notes? } object:layout: "title", title, subtitle? (everything immediately under it before the first H2)layout: "content", title (the H2 text), bullets (the - items), speaker_notes? (lines starting with >)layout: "closing", title, subtitle?deck_title — use the user's deck_title input if provided. Otherwise use the first H1's text.brand_primary_color — default #1a73e8 if not provided. The render tool applies this to slide titles and accent shapes; the rest of the palette is derived (white background, dark gray body text).render_pptx — pass slides, brand_primary_color, deck_title. The tool returns the path of the generated .pptx.deck_path: from the tool response (e.g., /runs/.../deck.pptx)slide_count: length of the slides array you sentdeck_title: echoed for confirmationspeaker_notes.outline_md: produce a single title slide with title: "Untitled deck", subtitle: "Empty outline supplied". Return slide_count: 1."_(no points captured)_") — preserves visual layout.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 24,813 | 10,055 | -59% | 1 | 1 | 0% | 6,294 | 1,948 | -69% | 0 | 0 | — |
case-02 | fail→fail | 24,403 | 22,269 | -9% | 1 | 1 | 0% | 6,231 | 1,893 | -70% | 0 | 0 | — |
case-03 | pass→fail | 26,457 | 9,931 | -62% | 1 | 1 | 0% | 6,280 | 1,696 | -73% | 0 | 0 | — |
case-04 | fail→pass | 9,497 | 8,025 | -15% | 1 | 1 | 0% | 1,053 | 2,273 | +116% | 0 | 0 | — |
case-05 | pass→pass | 14,801 | 32,016 | +116% | 1 | 1 | 0% | 2,328 | 4,772 | +105% | 0 | 0 | — |
case-06 | fail→pass | 8,970 | 25,746 | +187% | 1 | 1 | 0% | 1,492 | 3,878 | +160% | 0 | 0 | — |
case-07 | fail→fail | 9,297 | 7,137 | -23% | 1 | 1 | 0% | 1,624 | 1,306 | -20% | 0 | 0 | — |
case-08 | fail→fail | 4,360 | 8,849 | +103% | 1 | 1 | 0% | 790 | 1,652 | +109% | 0 | 0 | — |
case-09 | fail→pass | 4,916 | 3,748 | -24% | 1 | 1 | 0% | 857 | 1,576 | +84% | 0 | 0 | — |
case-10 | fail→pass | 9,076 | 1,379 | -85% | 1 | 1 | 0% | 1,443 | 1,016 | -30% | 0 | 0 | — |
case-19 | pass→pass | 6,154 | 2,221 | -64% | 1 | 1 | 0% | 1,018 | 1,217 | +20% | 0 | 0 | — |
case-11 | fail→fail | 5,073 | 3,025 | -40% | 1 | 1 | 0% | 852 | 1,313 | +54% | 0 | 0 | — |
case-12 | fail→pass | 7,964 | 4,769 | -40% | 1 | 1 | 0% | 1,368 | 1,674 | +22% | 0 | 0 | — |
case-13 | fail→pass | 7,955 | 3,186 | -60% | 1 | 1 | 0% | 1,366 | 1,405 | +3% | 0 | 0 | — |
case-14 | fail→fail | 7,673 | 3,029 | -61% | 1 | 1 | 0% | 1,399 | 1,314 | -6% | 0 | 0 | — |
case-15 | pass→pass | 2,970 | 1,860 | -37% | 1 | 1 | 0% | 462 | 1,152 | +149% | 0 | 0 | — |
case-16 | pass→pass | 4,287 | 1,964 | -54% | 1 | 1 | 0% | 670 | 1,136 | +70% | 0 | 0 | — |
case-17 | fail→pass | 7,896 | 3,061 | -61% | 1 | 1 | 0% | 1,359 | 1,428 | +5% | 0 | 0 | — |
case-18 | fail→pass | 7,178 | 3,498 | -51% | 1 | 1 | 0% | 1,127 | 1,426 | +27% | 0 | 0 | — |
case-20 | fail→pass | 8,347 | 4,623 | -45% | 1 | 1 | 0% | 1,404 | 1,684 | +20% | 0 | 0 | — |
case-21 | pass→pass | 7,351 | 2,693 | -63% | 1 | 1 | 0% | 1,327 | 1,231 | -7% | 0 | 0 | — |
case-22 | fail→fail | 9,295 | 2,812 | -70% | 1 | 1 | 0% | 1,637 | 1,302 | -20% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 17 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +36 percentage points is the difference between those two pass rates over the 17 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.