Skip to content
Automation
Skill

/presentation-generator

Create, read, or edit PowerPoint .pptx files: slide decks from scratch, content extraction, templates, speaker notes, combining or splitting decks. Not for posters, images, or social graphics.

From plugin
xagent
3079 skills

Claude Code

$ npx -y skills add xorbitsai/xagent --skill presentation-generator --agent claude-code

SKILL.md

presentation-generator.SKILL.md
name: presentation
description: |
  Create, read, or edit PowerPoint .pptx files: slide decks from scratch,
  content extraction, templates, speaker notes, combining or splitting decks.
  Not for posters, images, or social graphics.
when_to_use: |
  The user asks for a deck, slides, a presentation, Google Slides, PPT/PPTX,
  or names a .pptx file. Use pptx-editorial instead when magazine-grade
  editorial styling is wanted.

Presentation Generator

Generate PowerPoint presentations using JavaScript code with the pptxgenjs library.

Google Slides output

When the requested output is Google Slides, this skill is the local deck creation step, not the final delivery step:

1. Generate and inspect the designed local PPTX in the workspace. 2. Call `google_slides_import_pptx` with that PPTX path to convert it into an editable native Google Slides presentation. Treat `validation_failed` as a failed delivery; it means the conversion changed the slide count, dropped text, or left a blank slide. 3. Call `google_slides_get_presentation` to verify slide count and text before returning the Google Slides link.

Do not build a new outlined deck with repeated `google_slides_create_presentation` and `google_slides_add_slide` calls. Those tools are for explicitly requested simple text/layout edits and do not preserve visual design.

For simple Google Slides layout edits, when `google_slides_create_presentation` returns a `default_slide_id` (it is `null` when there is no default page to replace), pass it to the first `google_slides_add_slide` call. Unless the user specified a different first slide, make that first slide the cover (`layout="TITLE"` with the deck title). Calls may run in separate MCP processes; without the id the connector only removes a sole page that has no elements at all, so a default page with placeholders stays as the first slide. `google_slides_create_presentation` writes the deck title into that page when it can, so it then reads as a title-only cover: do not add a second cover in that case. An empty page in a multi-page deck is preserved. Pass `preserve_blank_slide=true` when that sole page is intentional. `google_slides_add_slide` only supports layouts with title/body placeholders; use `google_slides_batch_update` directly for blank/custom slides.

When using `google_slides_batch_update` after `google_slides_create_presentation`, the connector cannot infer the default page across MCP processes. Include a `deleteObject` request for the returned `default_slide_id`, when one is returned, after creating the first content page, or use `google_slides_add_slide` with that ID.

⚠️ 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,

Read more
@xorbitsai
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.

Stars on GitHub

Momentum

stars in total
307
Star history of xorbitsai/xagent on GitHub, a chart by star-history.com

Other skills on xagent.

agent-builder

agent-builder

Expert AI Agent Builder skill. Helps users dynamically create, configure, and build custom AI agents with specific capabilities,…

@xorbitsai@xorbitsaiInstall Skill
docx-report-editorial

docx-report-editorial

A native .docx styled as an editorial report: "Word report", "Word 文档", "memo", "proposal", "研究报告". Opens cleanly in Word /…

@xorbitsai@xorbitsaiInstall Skill
evidence-based-rag

evidence-based-rag

Evidence-first retrieval over a specified knowledge base: cited evidence, conflict detection, and an explicit sufficiency,…

@xorbitsai@xorbitsaiInstall Skill
html-deck-editorial

html-deck-editorial

One self-contained HTML slide deck with magazine-grade editorial styling: "html deck", "editorial slides", "美观 PPT", "网页版幻灯片".…

@xorbitsai@xorbitsaiInstall Skill
pdf-report-editorial

pdf-report-editorial

An editorial-styled PDF report rendered from HTML via the browser: "PDF report", "whitepaper", "executive brief", "research…

@xorbitsai@xorbitsaiInstall Skill
pptx-editorial

pptx-editorial

A native .pptx deck with magazine-grade editorial styling: "pitch deck", "投资人路演 PPT", "美观 PPT", board review, product launch.…

@xorbitsai@xorbitsaiInstall Skill

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n11d209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about presentation-generator.

Which coding agents can use presentation-generator?
presentation-generator installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.