<Use_When>
- User asks to create slides or a presentation about a topic
- User provides sources (URLs, PDFs, repos, vault notes) and wants slides
- User wants to edit an existing HTML or pptx slide deck
- User uses /slides or /slide-maker </Use_When>
<Do_Not_Use_When>
- User wants a research note, not slides (use /research)
- User just wants to read/extract text from a pptx (use pptx skill directly) </Do_Not_Use_When>
Create workspace + output directories at the start of every session:
mkdir -p temp/slides/research temp/slides/images notes/slides
Final output always goes to notes/slides/<presentation-name>.html (or
.pptx). Images used by the presentation are copied to
notes/slides/images/. The temp/slides/ workspace is for intermediate files
only.
</Workspace>
Stage 1: PARSE — Classify Inputs
Parse $ARGUMENTS and any user context. Classify each input:
| Input type | Detection | Strategy |
|---|---|---|
| URL | starts with http(s):// | WebFetch + download images |
| Git repo | github.com or git URL | clone to temp, read key files |
| .pdf extension | Read tool (for local) or download | |
| Vault note | (Type) Name or [[wikilink]] | Read via MCP or Read tool |
| Existing slides (.html) | .html extension | Editing mode |
| Existing slides (.pptx) | .pptx extension | Delegate to pptx skill |
| Raw topic | none of the above | WebSearch + WebFetch |
Auto-detect research depth:
- Quick mode: 1-2 simple sources or a short topic → inline research, no subagents
- Thorough mode: 3+ sources, complex topic, or broad request → parallel research agents
Present what was detected:
Detected sources:
1. [URL] blog post — will fetch + extract
2. [URL] paper PDF — will download and read
3. "transformer architecture" — will web search
Mode: thorough (3 sources → parallel research)
Proceeding to research...
Don't wait for confirmation unless something is ambiguous.
Stage 2: DISCOVER — Understand the Goal
Before researching, understand what the user actually needs. Ask up to 5 focused questions in a single message. Adapt questions to what's already known — skip anything the user already specified.
Questions to consider (pick the ones that aren't already answered):
- Goal & context — What's this presentation for? (class lecture, team meeting, conference talk, pitch, self-study, sharing with a friend?)
- Audience — Who's watching? (technical experts, general audience, exec stakeholders, students?) What do they already know?
- Language — What language should the slides be in? (Don't assume English — the user may want slides in their native language or a mix)
- Angle & emphasis — What's the ONE thing the audience should walk away with? Any specific aspects to emphasize or skip?
- Vibe & format — Formal or casual? Dense/technical or visual/storytelling? Any color or style preferences? Dark or light theme?
How to ask — be conversational, not interrogation-style:
Before I start researching, a few quick questions so I build the right deck:
1. What's this for — conference talk, team meeting, class?
2. Who's the audience? What do they already know about [topic]?
3. What language should the slides be in?
4. Any specific angle — what should the audience walk away remembering?
5. Style preference — formal/minimal, bold/visual, dark/light theme?
(Skip any that don't apply — I'll use sensible defaults)
After the user responds, synthesize their answers into a creative brief
that guides all downstream stages. Save it to temp/slides/brief.md:
# Creative Brief
**Topic**: [topic]
**Goal**: [what this presentation accomplishes]
**Audience**: [who, what they know, what they care about]
**Language**: [language for slide content]
**Key takeaway**: [the ONE thing the audience should remember]
**Tone**: [formal / casual / technical / storytelling / provocative]
**Style direction**: [dark/light, color mood, density level]
**Emphasis**: [specific aspects to highlight]
**Skip**: [anything the user explicitly wants to avoid]
**Format**: [reveal.js HTML / pptx]
**Duration**: [if mentioned — affects slide count]
Palette selection: Based on the brief, choose a palette from the Design Principles table (or craft a custom one). The palette should feel designed for THIS topic and THIS audience — not generic. Include your palette choice and reasoning in the brief.
Skip this stage when:
- Editing an existing deck (the design decisions are already made)
- The user explicitly says "just do it" or provides all context upfront
Then proceed to research with the brief guiding what to look for.
Stage 3: RESEARCH — Gather Information
Thorough mode (3+ sources or complex topic)
Read the agent definition:
Read("${CLAUDE_SKILL_DIR}/agents/source-researcher.md")
Spawn one source-researcher agent per source, all in parallel in a single
message. Each agent:
- Receives: one source, its output file path, images directory
- Writes structured research to
temp/slides/research/source-NN-slug.md - Downloads relevant images to
temp/slides/images/ - Returns a 3-5 sentence summary (keeps orchestrator context small)
- Uses sonnet model
Agent(
model="sonnet",
prompt="You are Source Researcher. Follow these instructions:
[INSERT FULL CONTENT OF agents/source-researcher.md]
SOURCE: [url/path/topic]
SOURCE_NUMBER: [NN]
OUTPUT_FILE: temp/slides/research/source-NN-slug.md
IMAGES_DIR: temp/slides/images/
Research this source and write findings to the output file.
Return only a 3-5 sentence summary."
)
If a source fails, continue with what succeeded — note the failure.
For raw topics with no other sources, spawn one agent that does WebSearch (2-3 queries) + WebFetch (top 3 results).
Quick mode (1-2 simple sources)
Skip agents. Do inline research:
- WebFetch each URL (or Read each file)
- For raw topics: WebSearch + WebFetch top 2-3 results
- Download key images to
temp/slides/images/ - Write a single research file to
temp/slides/research/source-01-topic.md
Image handling
During research (both modes), download diagrams, charts, and screenshots that
could enhance slides. Skip decorative/stock images. Save to
temp/slides/images/ with descriptive names.
curl -sL "IMAGE_URL" -o temp/slides/images/descriptive-name.png
Stage 4: OUTLINE — Synthesize + User Approval (MANDATORY)
Read all research files from disk:
Glob(pattern="temp/slides/research/*.md")
# Then Read each file
Read the creative brief from temp/slides/brief.md — use it to guide content
selection, ordering, emphasis, language, and tone.
Build a slide outline. Present it to the user:
## Slide Outline
**Title**: [Presentation Title — in the brief's language]
**Audience**: [from brief]
**Language**: [from brief]
**Tone**: [from brief]
**Palette**: [from brief — name + hex values]
**Key takeaway**: [the ONE thing from the brief]
**Slides**: ~[N] slides
---
1. **Title Slide** — [title + subtitle]
2. **[Insight headline, not label]** — [2-3 key points] | Layout: [type]
3. **[Insight headline]** — [key points] | Image: [image-name.png]
4. ...
N. **Closing / Key Takeaways** — [summary points]
**Headline