with one click
Create, modify, and manage PowerPoint presentations.
npx skills add https://github.com/aws-samples/sample-strands-agent-with-agentcore --skill powerpoint-presentationsCopy and paste this command into Claude Code to install the skill
Create, modify, and manage PowerPoint presentations.
npx skills add https://github.com/aws-samples/sample-strands-agent-with-agentcore --skill powerpoint-presentationsCopy and paste this command into Claude Code to install the skill
Deep research with structured reports and charts. ONLY use when the user explicitly requests research/analysis, or needs data visualization with charts, or quantitative/comparative analysis across multiple sources. Do NOT use for simple questions or quick lookups.
Search the web and fetch content from URLs for current information, news, and research topics.
Web browser automation for tasks requiring UI interaction, login-protected pages, or human-like browsing when APIs are insufficient.
Autonomous coding agent. Delegate any task that involves understanding, writing, or running code — from a GitHub issue, a bug report, or a user request. It explores, implements, and verifies on its own.
Create hand-drawn style diagrams and flowcharts using Excalidraw
Create, modify, and manage Excel spreadsheets.
| name | powerpoint-presentations |
| description | Create, modify, and manage PowerPoint presentations. |
| Task | How |
|---|---|
| Create from scratch | get_slide_design_reference → create_presentation (PptxGenJS). Read pptxgenjs.md. |
| Create from template | get_presentation_layouts → delete_slides (strip content) → add_slide → update_slide_content. Do NOT use create_presentation. |
| Edit existing | analyze_presentation → update_slide_content. Read editing-guide.md. |
| Verify | preview_presentation_slides after every change |
Don't create boring slides. Plain bullets on a white background won't impress anyone.
Choose colors that match your topic — don't default to generic blue.
| Theme | Primary | Secondary | Accent |
|---|---|---|---|
| Midnight Executive | 1E2761 (navy) | CADCFC (ice blue) | FFFFFF (white) |
| Teal Trust | 028090 (teal) | 00A896 (seafoam) | 02C39A (mint) |
| Forest & Moss | 2C5F2D (forest) | 97BC62 (moss) | F5F5F5 (cream) |
| Berry & Cream | 6D2E46 (berry) | A26769 (dusty rose) | ECE2D0 (cream) |
| Coral Energy | F96167 (coral) | F9E795 (gold) | 2F3C7E (navy) |
| Ocean Gradient | 065A82 (ocean) | 1C7293 (teal) | 21295C (midnight) |
| Charcoal Minimal | 36454F (charcoal) | F2F2F2 (off-white) | 212121 (black) |
| Cherry Bold | 990011 (cherry) | FCF6F5 (off-white) | 2F3C7E (navy) |
| Sage Calm | 84B59F (sage) | 69A297 (eucalyptus) | 50808E (slate) |
| Warm Terracotta | B85042 (terracotta) | E7E8D1 (sand) | A7BEAE (sage) |
Every slide needs a visual element — image, chart, icon, or shape. Text-only slides are forgettable.
Layout options:
Data display:
Visual polish:
| Header Font | Body Font |
|---|---|
| Georgia | Calibri |
| Arial Black | Arial |
| Calibri Bold | Calibri Light |
| Cambria | Calibri |
| Trebuchet MS | Calibri |
| Element | Size |
|---|---|
| Slide title | 36-44pt bold |
| Section header | 20-24pt bold |
| Body text | 14-16pt |
| Captions | 10-12pt muted |
Font pairings: Georgia + Calibri (classic), Arial Black + Arial (modern), Calibri Bold + Calibri Light (corporate). Left-align body text; center only titles and stats.
margin: 0 when aligning text with shapes at same x-positionSee design-guide.md for visual element code patterns (accent bars, icon circles, side stripes, cards).
get_slide_design_reference for palette and layout ideascreate_presentation with slides parameter (PptxGenJS). Read pptxgenjs.md for the full API.Do NOT use create_presentation — that ignores the template entirely and recreates from scratch.
Instead, use the template file as the base:
get_presentation_layouts("template-name") — see available layout namespreview_presentation_slides — inspect visual style (colors, logo, footer, chrome elements)delete_slides("template-name", [indices of all content slides], "working-name") — strip example content, keep masters/layoutsadd_slide("working-name", layout_name, position, "working-name-v2") — add slides using the template's own layouts (inherits background, logo, footer automatically)update_slide_content(...) — fill in text and imagesThis preserves the template's slide master, theme, logo, footer, and background — things create_presentation cannot replicate.
Read editing-guide.md for detailed workflows. Then: analyze_presentation → identify element IDs → update_slide_content.
Call preview_presentation_slides after any modification. Assume there are problems — inspect carefully.
When continuing a deck across conversation turns: Do NOT re-preview existing slides just to check the design system. The palette, fonts, and layout decisions from the previous turn are already in the conversation history — use that. Only re-preview if you need to verify the visual state after a modification.
update_slide_content call. Parallel calls cause data loss.output_name must differ from presentation_name.preview_presentation_slides which uses 1-based slide_numbers.Assume there are problems. Your job is to find them.
Your first render is almost never perfect. Approach QA as a bug hunt, not a confirmation step.
Call preview_presentation_slides and visually inspect the screenshots. Look for:
preview_presentation_slides → inspect screenshotsupdate_slide_contentDo not declare success until you've completed at least one fix-and-verify cycle.
Get design guidelines, color palettes, typography rules, and layout patterns.
| Parameter | Type | Required | Description |
|---|---|---|---|
topic | str | No (default "all") | "colors", "typography", "layouts", "pitfalls", "all" |
Create a new presentation with custom-designed slides (16:9 widescreen).
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name | str | Yes | Filename without extension (letters, numbers, hyphens only) |
slides | list or null | Yes | List of {"custom_code": "..."} dicts, or null for blank |
Example tool_input:
{
"presentation_name": "my-deck",
"slides": [
{"custom_code": "let slide = pres.addSlide();\nslide.background = { color: '1E2761' };\nslide.addText('Welcome', { x: 0.6, y: 2.5, w: 10, h: 1.5, fontSize: 44, bold: true, color: 'FFFFFF', align: 'center' });"}
]
}
IMPORTANT: custom_code uses pres in scope. Create slides with pres.addSlide(). Colors are 6-digit hex WITHOUT '#'. Do NOT reuse option objects across multiple addText/addShape calls. See pptxgenjs.md for full API.
Analyze structure with element IDs and positions for editing.
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name | str | Yes | Presentation to analyze |
slide_index | int | No | Analyze a specific slide only |
include_notes | bool | No (default false) | Include speaker notes |
Update one or more slides with operations in a single call.
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name | str | Yes | Source file |
slide_updates | list | Yes | List of update operations |
output_name | str | Yes | Output filename (MUST differ from source) |
Supported actions per operation: set_text, replace_text, replace_image. See editing-guide.md for details.
Add a new blank slide at a specific position.
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name | str | Yes | Source presentation |
layout_name | str | Yes | Layout name from get_presentation_layouts |
position | int | Yes | 0-based index (-1 to append at end) |
output_name | str | Yes | Output filename |
After adding, populate content with update_slide_content.
| Parameter | Type | Required |
|---|---|---|
presentation_name | str | Yes |
slide_indices | list[int] | Yes (0-based) |
output_name | str | Yes |
| Parameter | Type | Required |
|---|---|---|
presentation_name | str | Yes |
from_index | int | Yes (0-based) |
to_index | int | Yes (0-based) |
output_name | str | Yes |
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name | str | Yes | |
source_index | int | Yes (0-based) | Slide to duplicate |
output_name | str | Yes | |
insert_position | int | No (default -1) | Where to insert copy; -1 appends after source |
| Parameter | Type | Required |
|---|---|---|
presentation_name | str | Yes |
slide_index | int | Yes (0-based) |
notes_text | str | Yes |
output_name | str | Yes |
List all presentations in workspace. No parameters needed.
Get available slide layouts from a presentation.
| Parameter | Type | Required |
|---|---|---|
presentation_name | str | Yes |
Get slide screenshots for visual inspection.
| Parameter | Type | Required | Description |
|---|---|---|---|
presentation_name | str | Yes | Presentation to preview |
slide_numbers | list[int] | Yes | 1-based slide numbers (not 0-based) |
Creating New Presentations:
pres in scope; create slides with pres.addSlide()Editing Existing Presentations:
Design Philosophy (MANDATORY for new presentations):
Typography:
Spacing:
Anti-Patterns (AVOID):
QA: Always use preview_presentation_slides after creation to verify appearance.
Rules: