From sdpm
Rapidly generates slide decks from source materials like URLs, papers, transcripts, or pasted text with minimal interaction. Useful for creating PowerPoint presentations quickly.
How this skill is triggered — by the user, by Claude, or both
Slash command
/sdpm:sdpm-vibeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You orchestrate **rapid, material-based** slide generation through the **sdpm local MCP
You orchestrate rapid, material-based slide generation through the sdpm local MCP
server (its tools are exposed as mcp__plugin_sdpm_sdpm__* when installed as a plugin, or
mcp__sdpm__* if the server is added directly). This file is the behavior layer for
VIBE mode: the user already has source material and wants slides fast, without a full
hearing and without per-step approval. You run Phase 1 autonomously, then delegate Phase 2
to parallel composer sub-agents.
Ported from the ACP
vibe-agent.md. Only Claude Code reads this file. The shared workflows underskill/references/are unchanged and shared with the CLI / MCP / ACP entry points — do not edit them.
sdpm-spec) — dialogue-driven. The user wants to shape requirements,
structure, and design with a real hearing and approval at each step.Scope of this skill: VIBE mode focuses on creating a NEW deck from source material.
If the user instead wants to edit an existing PPTX (B), sync hand edits (C), or build a reusable
style (D), use SPEC mode (sdpm-spec), which carries those workflows.
If the user has no source material and wants to think the deck through, switch to SPEC mode.
sdpm MCP server is connected (its tools are callable). When installed as a plugin the
tool names are prefixed: mcp__plugin_sdpm_sdpm__<tool> (e.g. mcp__plugin_sdpm_sdpm__run_python),
not the bare read_workflows / run_python. If the tools are missing, tell the user to run
/plugin install sdpm@sdpm (and /reload-plugins), and that uv must be on PATH.deck.json + specs/ + slides/. The deck path is the
deck_id used by most tools.brief.md, outline.md, art-direction.html) in the user's language.| Workflow CLI command | Call this MCP tool instead |
|---|---|
pptx_builder.py init {name} | init_presentation(name=...) |
pptx_builder.py workflows {name} | read_workflows(["{name}"]) |
pptx_builder.py guides {name} | read_guides(["{name}"]) |
pptx_builder.py examples {name} | read_examples(["{name}"]) |
pptx_builder.py list-templates | list_templates() |
pptx_builder.py analyze-template {pptx} | analyze_template(...) |
(choose a style) apply_style | list_styles() then apply_style(deck_id, style) |
pptx_builder.py measure {json} -p {n} | run_python(purpose=..., deck_id=<path>, save=True, measure_slides=["{slug}"]) |
pptx_builder.py generate {json} -o output.pptx | generate_pptx(...) |
pptx_builder.py image-size {path} --width {px} | no MCP tool — compute proportional size in run_python (new_h = round(orig_h * target_w / orig_w)) |
reading local deck files (read_text / read_json) | run_python(purpose=..., code="...", deck_id=<path>) sandbox functions |
| fetching a URL the user gave | CC-native WebFetch (the MCP has no web_fetch) |
| importing an uploaded file / remote image into the deck | import_attachment(source, deck_id) |
run_python's first argument purpose is required. Inside the sandbox use
read_json / write_json / read_text / write_text / list_files (paths relative to
the deck); open(), import, and network are blocked. There is no start_presentation tool
on the Claude Code MCP server — you do not need to call any "start" tool.
CRITICAL: You MUST complete Steps 1–5 IN ORDER before Step 6. Delegating to composers
before specs/brief.md and specs/outline.md exist will FAIL — the composer reads specs/
and has no other source of information. There are no shortcuts. Execute steps sequentially
without waiting for user input.
Read everything the user provided: URLs via CC-native WebFetch, uploaded files (bring them
in via import_attachment(source, deck_id) once the deck exists, or read inline text). For
long documents, paginate to read the full content — do not stop at the first page.
Call init_presentation(name) to create the working directory (deck.json, specs/, slides/).
specs/brief.md (MANDATORY)The composer cannot work without this file. Write it via
run_python(purpose=..., deck_id=<path>, code='write_text("specs/brief.md", content)').
Include all data points, numbers, quotes, facts, technical details, and references
extracted from the source — with citations. This file is the composer's only source of truth.
Recommended sections: Presentation Goal / Audience / Format / Tone & Style / Constraints &
Requests / Materials / Source Material.
specs/outline.md (MANDATORY)Write it via run_python(purpose=..., deck_id=<path>, code='write_text("specs/outline.md", content)').
Derive a logical slide structure from the brief. Each line = 1 slide = 1 message:
- [slug] What it changes in the audience and how
Rules: aim for 5–15 slides unless the material demands more; use shared slug prefixes
for slides that build on the same visual base (e.g. demo-1, demo-2); each slide has exactly
one message.
list_styles() to see available styles.apply_style(deck_id, style) to set art direction.specs/art-direction.html via run_python (read_text("specs/art-direction.html")),
extract the :root CSS variables, then update deck.json via write_json:
{
"template": "{template}.pptx",
"fonts": {"fullwidth": "{fullwidth font}", "halfwidth": "{halfwidth font}"},
"defaultTextColor": "{--color-text value}"
}
After Step 5, specs/art-direction.html and deck.json are FROZEN.
Prerequisite: Steps 2–5 complete. Split slides into groups and dispatch sdpm:sdpm-composer
sub-agents in parallel.
Group assignment (small groups, keep design-coupled slides together):
demo-1, demo-2) → same group (required), even if larger than 2; slides the
user asked to unify → same group.Dispatch: invoke one sdpm:sdpm-composer per group, all in a single message (up to 10)
so they run in parallel. Per-group prompt template:
deck_id=<ABSOLUTE deck path>.
Your assigned slugs: <slug-a>[, <slug-b>].
First load references (read_workflows(["create-new-2-compose","slide-json-spec"]),
read_guides(["grid"]), read_examples(["components/all","patterns"])), then read
specs/brief.md, specs/outline.md, specs/art-direction.html for context.
Compose ONLY your assigned slugs, one at a time, via run_python's write_json, and use the
preview_files (PNG) returned by run_python(save=True, measure_slides=[slug]) as the source
of truth. Do NOT touch other slides, deck.json, or specs/. art-direction is FROZEN. Do NOT
advance to Phase 3. Return a summary plus any warnings.
Keep prompts ASCII-clean. Each prompt MUST include: deck_id (absolute path), the exact
assigned slugs (usually 1–2), and the pointer to specs/.
Only when composers complete successfully:
preview_files (PNG) the composers returned.read_workflows(["create-new-3-review"]), build via
generate_pptx, render previews via run_python(save=True, measure_slides=[...]).If a composer fails or is cancelled, do not retry automatically. Relay the error/status to the user in plain text and ask how to proceed (resume / adjust scope / abandon). Skip the after-compose steps entirely when a composer did not complete successfully.
run_python so save=True's lint_and_sanitize stays the single writer (no Write/Edit).npx claudepluginhub aws-samples/sample-spec-driven-presentation-maker --plugin sdpmGenerates slide deck presentations from briefs with optional research, outline approval, and PPTX export.
Guides spec-driven PowerPoint creation with step-by-step hearing and approval. Use for collaborative deck design requiring thorough requirements and iterative confirmation.
Creates slide presentations from topics, URLs, PDFs, git repos, or vault notes. Handles research, synthesis, outlining, and editing existing decks. Default output is reveal.js HTML; pptx available on request.