Skip to content
Automation
Skill

/presentation-generator

Generate and edit PowerPoint presentations (.pptx). Use for: creating slide decks, pitch decks, or presentations from scratch; reading, parsing, or extracting content from .pptx files; editing, modifying, or updating existing presentations; combining or splitting slide files;

From plugin
xagent
2788 skills
Install
$ npx -y skills add xorbitsai/xagent --skill presentation-generator --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/presentation-generator

Context preview

The summary Claude sees to decide when to auto-load this skill.

Generate and edit PowerPoint presentations (.pptx). Use for: creating slide decks, pitch decks, or presentations from scratch; reading, parsing, or extracting content from .pptx files; editing, modifying, or updating existing presentations; combining or splitting slide files;

SKILL.md

presentation-generator.SKILL.md
name: presentation
description: "Generate and edit PowerPoint presentations (.pptx). Use for: creating slide decks, pitch decks, or presentations from scratch; reading, parsing, or extracting content from .pptx files; editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates, layouts, speaker notes, or comments. Trigger only when the user explicitly asks for a deck, slides, presentation, PPT/PPTX, or references a .pptx filename. Do not use for standalone posters, images, banners, illustrations, or social graphics unless the requested deliverable is a presentation file."

Presentation Generator

Generate PowerPoint presentations using JavaScript code with the pptxgenjs library.

⚠️ CRITICAL REQUIREMENTS - READ FIRST

**YOU MUST FOLLOW THESE RULES - NO EXCEPTIONS:**

1. **ONLY use the 4 predefined themes below** (NOVA, ORBIT, PULSE, MINIMA) 2. **NEVER create custom color variables** like `const colorAccent = "0078D7"` 3. **NEVER use hardcoded hex values** in your code - always reference `theme.xxx` 4. **ALWAYS include the `#` prefix** in hex colors (e.g., `#EF4444` not `EF4444`) 5. **Slide 0 (first slide) MUST also be created via `const slide = pres.addSlide()`** and use `theme.cover` - first slide is the cover with dark/high-contrast background 6. **Slides 1+ MUST use `theme.content`** - all other slides use light/readable background

**WRONG:**

const colorAccent = "0078D7";  // ❌ WRONG - custom color
slide1.addText("Title", { color: "363636" });  // ❌ WRONG - hardcoded hex
const slide1 = pres.addSlide();
slide1.background = { color: theme.cover.background };  // ❌ WRONG - cover on non-first slide

**CORRECT:**

const theme = {
  cover: {
    background: '#0A0F1C',
    title: '#FFFFFF',
    subtitle: '#94A3B8',
    accent: '#7C3AED'
  },
  content: {
    background: '#F6F7FB',
    primary: '#0A0F1C',
    secondary: '#5B6475',
    accent: '#7C3AED',
    text: '#0A0F1C'
  }
};
// Slide 0 (cover) — pptxgenjs requires addSlide() for the FIRST slide too
const slide1 = pres.addSlide();
slide1.background = { color: theme.cover.background };
slide1.addText("Title", { color: theme.cover.title });

// Slide 1+ — call pres.addSlide() to get each new slide
const slide2 = pres.addSlide();
slide2.background = { color: theme.content.background };
slide2.addText("Content", { color: theme.content.primary });

---

Execution Rules

**CRITICAL: MANDATORY constraints for stable presentation generation:**

1. **USE PREDEFINED THEMES ONLY**: You MUST use one of the 4 predefined themes (NOVA, ORBIT, PULSE, MINIMA) from the "Predefined Themes" section below. NEVER define custom colors or use hardcoded hex values like `"003366"` or `color: "FF0000"`.

2. **Theme Object Format**: Always define theme as:

   const theme = {
     background: '#XXXXXX',
     primary: '#XXXXXX',
     secondary: '#XXXXXX',
     accent: '#XXXXXX',
     text: '#XXXXXX'
   };

Then reference colors as `theme.background`, `theme.primary`, etc.

3. **Slide Creation**: ALWAYS call `pres.addSlide()` before adding content to ANY slide, including the FIRST one. Capture its return value: `const slide = pres.addSlide();` then call `slide.addText(...)`, `slide.background = {...}`, `slide.addImage(...)`, etc. Calling `pres.addText(...)` or setting `pres.background` directly on the presentation object will throw `pres.addText is not a function`.

4. **Font Consistency**: Keep font sizes consistent: titles 40-56pt, subtitles 24-32pt, body text 16-20pt

5. **Slide Bounds**: Never position elements outside 10 x 7.5 inch slide area (x: 0-10, y: 0-7.5)

6. **Layout Simplicity**: Prefer clean, simple layouts over dense or decorative designs

7. **Theme Selection**: Choose theme based on presentation context (see Theme Selection Guide below)

8. **Visual Hierarchy**: Slides must follow clear visual hierarchy: Title → Section Heading → Body → Accent Highlight. Avoid mixing too many font sizes on a single slide.

9. **Image Sizing**: ALWAYS specify both width AND height, or use sizing to ensure images stay within bounds:

  • Use `w` and `h` together to control exact dimensions
  • Or use `sizing: { type: 'contain', w: 8, h: 5 }` to fit within bounds while maintaining aspect ratio
  • NEVER use only `w` or only `h` without the other - image may overflow
  • Keep images within content area: x: 0-10, y: 0-7.5 inches

10. **Handle Execution Failures Honestly**: `execute_javascript_code` returns `{ success, output, error }`. When `success` is `false` (or `error` is non-empty), the script aborted before `writeFile` and **no .pptx was created**. You MUST:

  • Tell the user the generation failed and quote the `error` message.
  • NOT claim the presentation was generated. NOT emit a `[name.pptx]()`

link to a file that does not exist.

  • Fix the JavaScript and retry (most failures are validation errors from

pptxgenjs — `addTable` row shape, missing slide handle, malformed options object — see "Data Table" below for the table pattern).

Layout Zones

For consistent slide layouts:

| Zone | X/Y Range | Purpose | |------|-----------|---------| | Safe content area | x: 0.5-9.5, y: 0.5-7 | Main content, images, data | | Title area | y: 0.5 - 1.5 | Slide titles and headings | | Content area | y: 1.5 - 5.5 | Main content, bullets, data | | Footer area | y: 6.0 - 7.0 | Footer text, page numbers, notes |

**Note**: Title slides may use vertically centered positioning (y ≈ 3). All other slides must follow layout zones.

Theme Selection Guide

| Context | Recommended Theme | Why | |---------|------------------|-----| | Strategy / AI narrative / Investor deck | **NOVA** | Large titles, generous whitespace, authoritative feel | | Technical deep dive / Architecture / Dev | **ORBIT** | Dark background, strong contrast, clean technical aesthetic | | Metrics-heavy / Growth / Business performance | **PULSE**

Read more
Ships withxagent

Start with a personal agent. Scale into an AI workforce. Xagent helps individuals complete real tasks, teams publish reusable agents, and enterprises run agent systems with their own tools, models, knowledge, and infrastructure — without brittle workflows.

Get the whole plugin

Other skills on xagent.