agentleFS
tuan3wtuan3w/obsidian-vault-agent/skills/slide-maker/SKILL.md

slide-maker

Skill39 starsChanged 8 months agoMITView on GitHub

Create slide presentations from topics, URLs, PDFs, git repos, or vault notes. Use this skill when the user asks to make slides, create a presentation, build a deck, or says "slides about X". Handles research, synthesis, outline, and creation. Default output is reveal.js HTML; pptx available on request. Also handles editing existing slide decks (HTML or pptx). Triggers on /slides, /slide-maker, or any request involving presentation creation.

2 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions2 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 2

    1. addsumtech/slides_maker★ 656same name
    2. bmad-labs/skills★ 19same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository13 other files it gives its agents.

The file

Show its rules and text

We split this skill into the rules it gives an agent

31 rules. About 0 are common, 26 are distinctive, and 5 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈26

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    All intermediate files go in temp/slides/ (gitignored).

    line 34
  2. Distinctive:

    Create workspace + output directories at the start of every session:

    line 43
  3. Very specific:

    Final output: always goes to notes/slides/<presentation-name>.html (or .pptx).

    line 48
  4. Distinctive:

    Don't wait for confirmation unless something is ambiguous.

    line 85
  5. Distinctive:

    Before researching, understand what the user actually needs.

    line 89
  6. Distinctive:

    Read the agent definition:

    line 154
  7. Distinctive:

    If a source fails, continue with what succeeded — note the failure.

    line 184
  8. Very specific:

    Write a single research file to temp/slides/research/source-01-topic.md

    line 195
  9. Distinctive:

    Read all research files from disk:

    line 209
  10. Very specific:

    Read the creative brief from temp/slides/brief.md — use it to guide content selection, ordering, emphasis, language, and tone.

    line 215
  11. Distinctive:

    Headline rule: every slide headline should be an insight ("Attention is $O(n^2)$ — that's the bottleneck"), not a label ("Attention …

    line 240
  12. Distinctive:

    Add/remove slides → adjust

    line 248
  13. Distinctive:

    Read the agent definition and template:

    line 256
  14. Distinctive:

    Read the existing HTML file

    line 311
  15. Distinctive:

    After the slide-writer agent finishes:

    line 321
  16. Distinctive:

    Use Google Fonts for variety (loaded via CDN in template)

    line 377
  17. Distinctive:

    Don't repeat the same layout across slides

    line 384
  18. Distinctive:

    Don't center body text — left-align.

    line 385
  19. Distinctive:

    Don't use low-contrast text

    line 386
  20. Distinctive:

    Don't create text-only slides — add visual elements

    line 387
  21. Distinctive:

    Don't default to blue — match the topic

    line 388
  22. Distinctive:

    NEVER use accent lines under titles — hallmark of AI slides

    line 389
  23. Distinctive:

    Don't cram too much on one slide — fewer points, more slides </Design_Principles>

    line 390
  24. Distinctive:

    Read/Glob: Read local files, vault notes, research files

    line 396
  25. Distinctive:

    Write: Create output HTML file, research files

    line 398
  26. Very specific:

    Create → reveal.js HTML, dark Ocean Gradient, diagrams embedded, speaker notes

    line 414
  27. Distinctive:

    Create → slide-writer produces Thai HTML with Coral Energy palette </Good>

    line 426
  28. Distinctive:

    Not downloading available images during research phase

    line 435
  29. Distinctive:

    Too many sources (>8): Ask user to prioritize top 5-6

    line 441
  30. Distinctive:

    Ambiguous topic: Ask one clarifying question about audience/angle

    line 444
  31. Distinctive:

    Existing deck format unclear: Ask user to confirm format </Escalation_And_Stop_Conditions>

    line 445

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md
<Purpose> End-to-end slide creation: from raw sources or a topic to a polished presentation. Handles research, synthesis, outlining, and slide generation. Produces self-contained reveal.js HTML by default (easy to edit, preview in any browser). Can delegate to pptx skill when PowerPoint output is requested. </Purpose>

<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>
<Workspace> All intermediate files go in `temp/slides/` (gitignored). Structure: ``` temp/slides/ ├── research/ # Source research files (one per source) ├── images/ # Downloaded images (diagrams, charts, screenshots) ├── outline.md # Approved outline └── output.html # Draft before copying to notes/slides/ ```

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>

<Steps>

Stage 1: PARSE — Classify Inputs

Parse $ARGUMENTS and any user context. Classify each input:

Input typeDetectionStrategy
URLstarts with http(s)://WebFetch + download images
Git repogithub.com or git URLclone to temp, read key files
PDF.pdf extensionRead tool (for local) or download
Vault note(Type) Name or [[wikilink]]Read via MCP or Read tool
Existing slides (.html).html extensionEditing mode
Existing slides (.pptx).pptx extensionDelegate to pptx skill
Raw topicnone of the aboveWebSearch + 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):

  1. Goal & context — What's this presentation for? (class lecture, team meeting, conference talk, pitch, self-study, sharing with a friend?)
  2. Audience — Who's watching? (technical experts, general audience, exec stakeholders, students?) What do they already know?
  3. Language — What language should the slides be in? (Don't assume English — the user may want slides in their native language or a mix)
  4. Angle & emphasis — What's the ONE thing the audience should walk away with? Any specific aspects to emphasize or skip?
  5. 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:

  1. WebFetch each URL (or Read each file)
  2. For raw topics: WebSearch + WebFetch top 2-3 results
  3. Download key images to temp/slides/images/
  4. 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 rule: every slide headline should be an insight ("Attention is $O(n^2)$ — that's the bottleneck"), not a label ("Attention Mechanism").

ALWAYS wait for user approval before proceeding to Stage 4.

The user may:

  • Approve as-is → proceed
  • Request changes → revise and re-present
  • Add/remove slides → adjust

Save the approved outline to temp/slides/outline.md.

Stage 5: CREATE or EDIT

Path A: New reveal.js HTML deck (default)

Read the agent definition and template:

Read("${CLAUDE_SKILL_DIR}/agents/slide-writer.md")
Read("${CLAUDE_SKILL_DIR}/references/reveal-template.html")

Launch the slide-writer agent:

Agent(
  model="sonnet",
  prompt="You are Slide Writer. Follow these instructions:

  [INSERT FULL CONTENT OF agents/slide-writer.md]

  CREATIVE BRIEF:
  [content of temp/slides/brief.md]

  OUTLINE:
  [approved outline from temp/slides/outline.md]

  RESEARCH FILES (read each for detailed content):
  [list of temp/slides/research/*.md paths]

  IMAGE FILES AVAILABLE:
  [list of temp/slides/images/* paths]

  TEMPLATE:
  [reveal-template.html content]

  OUTPUT_FILE: temp/slides/output.html

  Build the presentation following the brief's language, tone, palette,
  and audience direction. Write the HTML to the output file."
)

Path B: New pptx deck (when user explicitly requests PowerPoint)

Option 1 — Convert from HTML (preferred, faster): First create the reveal.js HTML (Path A), then convert to pptx:

npx --yes -p pptxgenjs node "${CLAUDE_SKILL_DIR}/scripts/html2pptx.js" notes/slides/name.html notes/slides/name.pptx

This preserves palette, layouts, and content from the HTML. Review the output and fix any issues.

Option 2 — Direct pptx creation (for complex cases): Delegate to the pptx skill at .agents/skills/pptx/. Pass:

  • Approved outline
  • Research file paths
  • Image paths
  • Design choices from outline (palette, tone)

Path C: Edit existing HTML slides

  1. Read the existing HTML file
  2. Apply requested changes using the Edit tool (HTML is plain text — trivial)
  3. For structural changes (add/remove slides): read, modify section, write back

Path D: Edit existing pptx

Delegate to pptx skill's unpack/edit/pack workflow.

Stage 6: PREVIEW + ITERATE

After the slide-writer agent finishes:

  1. Copy the HTML + images to their final location:
# Generate a slug from the presentation title
SLUG="presentation-name"  # kebab-case from title
cp temp/slides/output.html "notes/slides/${SLUG}.html"
# Copy any images referenced by the presentation
cp -r temp/slides/images/ "notes/slides/images/" 2>/dev/null || true
  1. Tell the user:
Presentation created: notes/slides/[name].html

Open in your browser to preview (File → Open or drag into browser).
Let me know if you'd like any changes — I can edit individual slides,
adjust colors, reorder, add/remove content.

Need PowerPoint? I can export to .pptx too.

For iteration:

  • HTML edits use the Edit tool directly on notes/slides/[name].html
  • Fast — no rebuild needed, HTML is plain text
  • Track which slides the user wants changed
  • Apply targeted edits, not full regeneration
</Steps>

<Design_Principles> Borrowed from the pptx skill — apply to ALL slide formats.

Color Palettes

Pick a palette that matches the topic. Don't default to generic blue.

ThemePrimarySecondaryAccent
Midnight Executive#1E2761 (navy)#CADCFC (ice blue)#FFFFFF (white)
Forest & Moss#2C5F2D (forest)#97BC62 (moss)#F5F5F5 (cream)
Coral Energy#F96167 (coral)#F9E795 (gold)#2F3C7E (navy)
Warm Terracotta#B85042 (terracotta)#E7E8D1 (sand)#A7BEAE (sage)
Ocean Gradient#065A82 (deep blue)#1C7293 (teal)#21295C (midnight)
Charcoal Minimal#36454F (charcoal)#F2F2F2 (off-white)#212121 (black)
Teal Trust#028090 (teal)#00A896 (seafoam)#02C39A (mint)
Berry & Cream#6D2E46 (berry)#A26769 (dusty rose)#ECE2D0 (cream)
Cherry Bold#990011 (cherry)#FCF6F5 (off-white)#2F3C7E (navy)

Layout Rules

  • Every slide needs a visual element — image, chart, diagram, large number, or shape
  • Vary layouts — don't repeat the same structure across slides
  • Dominance over equality — one color dominates (60-70%), others support
  • Dark/light contrast — dark backgrounds for title + closing, light for content
  • Layout options: two-column, icon+text rows, grids, half-bleed images, stat callouts, timelines

Typography (for reveal.js)

  • Use Google Fonts for variety (loaded via CDN in template)
  • Title slides: 2.5-3em bold
  • Slide headlines: 1.5-2em
  • Body text: 0.9-1.1em
  • Size contrast matters — headlines must visually dominate body text

Avoid (Common Mistakes)

  • Don't repeat the same layout across slides
  • Don't center body text — left-align; center only titles
  • Don't use low-contrast text
  • Don't create text-only slides — add visual elements
  • Don't default to blue — match the topic
  • NEVER use accent lines under titles — hallmark of AI slides
  • Don't cram too much on one slide — fewer points, more slides </Design_Principles>

<Tool_Usage>

  • WebSearch: Find sources for raw topics
  • WebFetch: Fetch URL content, extract insights
  • Read/Glob: Read local files, vault notes, research files
  • Agent: Parallel source-researcher agents (sonnet), slide-writer agent (sonnet)
  • Write: Create output HTML file, research files
  • Edit: Iterate on existing HTML slides
  • Bash: mkdir, curl (image downloads), file operations </Tool_Usage>
<Examples> <Good> User: /slides about transformer architecture 1. Parse → raw topic, quick mode 2. Discover → asks: who's the audience? language? what angle? → user says "ML study group, English, focus on why attention replaced RNNs, dark theme" 3. Brief → audience: ML practitioners, key takeaway: attention enables parallelism, palette: Ocean Gradient (matches deep learning vibe), tone: technical but visual 4. Research → WebSearch 3 queries, fetch top results, download architecture diagram 5. Outline → 10 slides ordered around the "why attention wins" narrative 6. User approves with minor reorder 7. Create → reveal.js HTML, dark Ocean Gradient, diagrams embedded, speaker notes 8. Preview → user asks to add flash attention slide → Edit tool, done

User: ทำสไลด์จาก [url1] [url2] [url3] กับ (Paper) Scaling Laws

  1. Parse → 3 URLs + 1 vault note, thorough mode
  2. Discover → asks: ภาษาอะไร? กลุ่มเป้าหมาย? → user says "Thai slides, for team meeting, casual tone, bright colors"
  3. Brief → language: Thai, audience: engineering team, palette: Coral Energy, tone: casual/visual
  4. Research → 4 parallel agents, each writes research file
  5. Outline → 12 Thai-language slides synthesizing across all sources
  6. User approves
  7. Create → slide-writer produces Thai HTML with Coral Energy palette</Good>
<Bad> - Skipping DISCOVER and assuming English, formal, blue theme - Skipping the outline checkpoint and going straight to slides - Putting all research content in agent prompts instead of writing to disk - Creating text-only slides with no visual elements - Using the same two-column layout for every slide - Not downloading available images during research phase - Ignoring user's language preference in the final slides </Bad> </Examples>

<Escalation_And_Stop_Conditions>

  • Too many sources (>8): Ask user to prioritize top 5-6
  • Source fetch fails: Note failure, continue with remaining sources
  • User wants pptx: Delegate to pptx skill after outline approval
  • Ambiguous topic: Ask one clarifying question about audience/angle
  • Existing deck format unclear: Ask user to confirm format </Escalation_And_Stop_Conditions>

$ARGUMENTS

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.