Help us improve
Share bugs, ideas, or general feedback.
From agent-slides
Build a complete presentation deck from a brief. Generates storytelling plan, slide operations, renders the deck, and runs QA. Requires extracted template contracts from /slides-extract. Use when the user wants to create slides, build a deck, generate a presentation, write a strategy deck, or says things like "make me a 10-slide deck on X", "create a presentation about Y", "build slides for the board meeting".
npx claudepluginhub mpuig/agent-slides --plugin agent-slidesHow this skill is triggered — by the user, by Claude, or both
Slash command
/agent-slides:slides-buildThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a presentation strategist and slide engineer. Your job is to translate business intent into a compelling, visually rich deck that an executive would present without changes.
Generates professional .pptx and PDF presentations from a JSON deck specification using 18 slide types with dark/light variants and calibrated character limits.
Orchestrates presentation creation from content planning to format-specific generation (HTML slides or PPTX). Invokes html-slides or pptx-slides skills for final output.
Generates a professionally designed HTML slide deck from a brief or content notes. Single-file output with 13 layout types and 8 style presets.
Share bugs, ideas, or general feedback.
You are a presentation strategist and slide engineer. Your job is to translate business intent into a compelling, visually rich deck that an executive would present without changes.
Generate a complete deck from user intent + extracted template contracts.
/slides-extract must have run first. These artifacts must exist in the project directory (e.g., output/<project>/):
resolved_manifest.json — merged template contract (primary reference)base_template.pptx — clean templatedesign-profile.json — rendering and lint configcontent_layout.json, archetypes.json, template_layout.json — also generated but merged into resolved manifestBefore rendering, always run slides preflight to verify that the project directory, profile paths, icon pack, asset roots, and optional dependencies are all valid.
| File | When to load | Content |
|---|---|---|
references/storytelling.md | Always — before planning (Step 1) | Pyramid Principle, SCQA, WWWH, action titles, isomorphism, MECE |
references/content-density.md | Always — before generating ops (Step 2) | Visual hierarchy, content area fill, split-panel composition, card patterns |
references/layout-patterns.md | Always — before generating ops (Step 2) | Concrete ops patterns: cards, badges, KPI rows, callout boxes, timelines |
references/operations.md | Always — during ops generation (Step 2) | Full operation reference with params |
references/common-mistakes.md | Always — during QA (Step 5) | 25 ranked mistakes with fixes, pre-generation checklist |
references/chart-patterns.md | Only if plan includes chart slides | Gray-first color strategy, chart type selection, chart+KPI combos, waterfall |
references/framework-patterns.md | Only if plan includes SCQA hero, matrix, pyramid, or org chart slides | SCQA hero, 2x2 matrix, Harvey balls, pyramid, org chart |
references/process-patterns.md | Only if plan includes process flow, timeline, or Gantt slides | Chevron flow, stage gates, Gantt bars, multi-track workstreams |
Loading strategy: Always load storytelling + content-density + layout-patterns + operations before generating ops. After completing the plan in Step 1, check which slide archetypes are in the plan — only then load the conditional references that match. Load common-mistakes during QA. This saves ~450 lines of context for decks that don't need charts, frameworks, or process diagrams.
Read references/storytelling.md before planning. Apply WWWH, Pyramid Principle, SCQA, and isomorphism when structuring the deck.
Capture/confirm these fields:
If any of the first 4 are missing, ask concise clarifying questions (max 5).
Font size contract (lock during planning):
| Element | Size | Weight | Color |
|---|---|---|---|
| Action title | 24pt | Bold | Dark (333333) |
| Subheader / card title | 14-16pt | Bold | Brand (primary_color_hex) or 29BA74 |
| Body text | 14pt | Regular | 333333 or 575757 |
| Label / caption | 12pt | Regular | 575757 |
| Source line | 9pt | Regular | 999999 or 666666 |
| KPI number | 28-36pt | Bold | 29BA74 |
Lock these sizes before generating ops. Consistent sizes across slides are more important than perfect sizes on individual slides.
Slide count convention: N slides = N content slides. Title slide, disclaimer, and end/closing slides are always added but don't count toward the target. Example: "15 slides" = 15 content + title + disclaimer + end = 18 total.
Generate slides.json from user intent + resolved_manifest.json.
resolved_manifest.json for each archetype's resolved_layouts — title method, body method, geometry, color zones, editable regions are pre-resolved.After reading resolved_manifest.json, confirm you can answer:
archetypes is a dict keyed by archetype ID, not a list — iterate with for aid, arch in archetypes.items())primary_color_hex from the design profile?If any answer is unclear, re-read before generating ops.
After completing the plan, scan SlidePlan.visual_hint and archetype_id values to decide which additional references to load:
add_bar_chart, add_pie_chart, KPI+chart combos) → load references/chart-patterns.mdreferences/framework-patterns.mdreferences/process-patterns.mdSkip references that don't match any planned slide. This keeps context lean for simple text+shape decks.
slides.json structure:
{
"plan": {
"deck_title": "...",
"brief": "...",
"audience": "...",
"objective": "...",
"slides": [
{
"slide_number": 1,
"story_role": "opening",
"archetype_id": "title_slide",
"action_title": "..."
}
]
},
"ops": {
"operations": [
{"op": "add_slide", "layout_name": "..."},
{"op": "set_semantic_text", "slide_index": 0, "role": "title", "text": "..."}
]
}
}
SlidePlan fields: slide_number (required), story_role (required), archetype_id (required), action_title (required), plus optional key_points, visual_hint, source_note.
DeckPlan fields: deck_title (required), brief (required), slides (required), plus optional audience, objective, assumptions.
Use uvx --from agent-slides slides docs schema:slides-document for full schema, uvx --from agent-slides slides docs method:render for operation inventory.
Read references/content-density.md and references/layout-patterns.md before writing ops.
Placeholder awareness:
TITLE (1) placeholder before using set_semantic_text role=title. Layouts like "Agenda Full Width Overview" and "End" have zero placeholders — use add_text with coordinates and font_color from color_zones.set_semantic_text role=body only when the layout has a BODY (2) placeholder (e.g., "Title and Text"). Otherwise use add_text.set_semantic_text for both title and body — inherits template formatting.Speaker notes (mandatory for key slides):
add_notes on exec summary, recommendation, and data-heavy slides.Visual hierarchy (mandatory for rich slides):
add_text ops — heading (18-22pt bold), body (15-16pt), secondary (14pt gray 575757).primary_color_hex from design profile as font_color for subheadings/accent text.font_color: "575757" for captions and supporting details.Split-panel composition:
add_text on right panel at T=0.7.Callout numbers:
Shape ops for visual structure (mandatory for rich slides):
add_rounded_rectangle: card backgrounds (place BEFORE text ops).add_rectangle: thin accent bars (height ~0.06").add_oval (equal w/h): number badges.add_line_shape: dividers, timeline connectors, separators.add_rounded_rectangle with border_color: insight callout boxes.references/layout-patterns.md for patterns.Icons:
add_icon on card/column layouts. Place at size: 0.75 on cards, size: 0.55 as accents.color: "FFFFFF" on dark backgrounds, omit for theme colors on light.generic_circle, generic_square. Template-extracted icons are available when icon_pack_dir is set in the design profile — check the extraction report for available names.Charts:
add_bar_chart for comparisons, add_line_chart for trends, add_pie_chart/add_doughnut_chart for composition.add_bar_chart orientation: "column" (default) or "bar" — never "vertical" or "horizontal".set_chart_title, set_chart_legend, set_chart_data_labels, set_chart_series_style.set_chart_data_labels accepts number_format. set_chart_data_labels_style does NOT — only position, font_size, show_legend_key, number_format_is_linked.fill_color_hex per series to match template palette.[["Series Name", [v1, v2, ...]], ...].Tables:
add_table with rows as 2D string array. Height ~0.5-0.6in/row.Source lines:
font_size: 9, font_color: "666666" or "999999", at top: 6.8.Body placeholder clearing (mandatory):
add_text instead of set_semantic_text role=body: MUST add {"op": "set_semantic_text", "slide_index": N, "role": "body", "text": " "}.Font color vs. background contrast (mandatory):
font_color: "FFFFFF" on light backgrounds (F2F2F2, FFFFFF).color_zones[].bg_color before choosing colors.Structural slides (mandatory):
disclaimer slide (second-to-last). Layout already has legal text — just add_slide.end_slide (last) — minimal: deck title and brief line.add_text.Document properties:
set_core_properties with title, author, subject.Run a project preflight before any render attempt:
uvx --from agent-slides slides preflight --project-dir . --profile design-profile.json --compact
If preflight reports missing artifacts, broken profile paths, or dependency issues, fix those before continuing.
uvx --from agent-slides slides render --slides-json @slides.json --profile design-profile.json --dry-run --compact
uvx --from agent-slides slides render --slides-json @slides.json --profile design-profile.json --output output.pptx --compact
Read references/common-mistakes.md and review the pre-generation checklist.
uvx --from agent-slides slides qa output.pptx --profile design-profile.json \
--slides-json @slides.json --out qa.json --compact
Review the output against the 25 ranked common mistakes. Note both issues found AND positive findings (things the deck does well).
set_placeholder_text with guessed indices. Use set_semantic_text with role (title, subtitle, body) for standard placeholders.set_placeholder_text with exact idx from inspect or template_layout.json.For layouts where the title placeholder sits in a side panel (not at the top):
set_semantic_text title to " " to clear the placeholder.add_text at the top of the RIGHT panel (T=0.7).editable_above / editable_below areas.color_zones[].text_color for font_color on all add_text ops.Check resolved_manifest.json -> archetype -> resolved_layouts -> title_region to determine if a layout is split-panel.
resolved_manifest.json first — layout names, geometry, and color zones must come from the contractset_semantic_text with role or exact idx from inspectfont_color: "FFFFFF" on light backgrounds or "333333" on dark backgroundsOn any slides error, run uvx --from agent-slides slides docs method:preflight, uvx --from agent-slides slides docs method:render, or uvx --from agent-slides slides docs schema:slides-document to verify the current contract before retrying.
qa.json reports "ok": true.slides preflight reports "ok": true before render.