Creates Slidev markdown presentations for developers. Activates for: slides with code highlighting, technical talks, conference presentations, workshop materials, live coding decks, or markdown-based slides. Not for PowerPoint/Google Slides or non-presentation documents.
/plugin marketplace add clearfunction/cf-devtools/plugin install cf-devtools@cf-devtoolsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
assets/example-team-update.mdassets/example-technical-talk.mdassets/example-tutorial.mdreferences/advanced-features.mdreferences/layouts-guide.mdreferences/multi-file-organization.mdreferences/slidev-quick-reference.mdreferences/themes.mdGenerate professional, browser-based presentations using Slidev - the presentation framework for developers.
Activate when the user requests:
These prompts should activate this skill:
Do NOT activate for:
Follow the plan-first approach for quality presentations:
1. Gather Context → 2. Create Plan → 3. Review Plan → 4. Generate Slides
| Scenario | Command | Output |
|---|---|---|
| New presentation on a topic | /slidev:plan [topic] then /slidev:from-plan | Plan + Slides |
| Presentation about a codebase | /slidev:from-codebase [path] | Plan + Slides |
| Quick slides (skip planning) | /slidev:new [topic] | Slides only |
| Generate from existing plan | /slidev:from-plan [plan-file] | Slides only |
A presentation plan includes:
When creating a plan, gather:
See the assets/ directory for complete example presentations:
example-technical-talk.md - Conference-style deep dive (Kubernetes)example-tutorial.md - Workshop format with exercises (TypeScript)example-team-update.md - Internal team presentation (Q4 update)See the references/ directory for detailed documentation:
If the user doesn't have Slidev installed, provide these commands:
# Create new presentation (recommended)
npm init slidev@latest
# Or with pnpm
pnpm create slidev
# Or add to existing project
npm install @slidev/cli @slidev/theme-default
Slidev's multi-frontmatter syntax conflicts with standard markdown linters. Always ensure a .markdownlint.json exists in the presentation directory before generating slides.
Slidev uses --- separators with per-slide frontmatter:
---
layout: section
---
Standard markdownlint interprets layout: section + --- as a setext-style heading and "fixes" it to ## layout: section, corrupting the presentation.
Create .markdownlint.json in the presentation directory:
{
"MD003": false,
"MD024": false,
"MD025": false,
"MD026": false,
"MD033": false,
"MD041": false
}
| Rule | Why Disabled |
|---|---|
| MD003 | Prevents setext→ATX conversion that corrupts frontmatter |
| MD024 | Slides often have repeated headings across slides |
| MD025 | Each slide can have its own H1 |
| MD026 | Slide titles may end with punctuation |
| MD033 | Slidev uses inline HTML for layouts and animations |
| MD041 | First line is YAML frontmatter, not a heading |
All /slidev:* commands should check for and create this config file before writing slides.md. If modifying an existing presentation, verify the config exists first.
Run the presentation:
# Development mode with hot reload
npx slidev
# Build for production
npx slidev build
# Export to PDF (requires playwright-chromium)
npx slidev export
# Export to PPTX
npx slidev export --format pptx
Generate a complete slides.md file that can be run directly with Slidev.
For full syntax details, see references/slidev-quick-reference.md.
---
theme: default
title: My Presentation
transition: slide-left
mdc: true
---
# First Slide
Content here
---
# Second Slide
More content
| Layout | Use Case |
|---|---|
cover | Title slide |
center | Centered content |
section | Section divider |
two-cols | Side-by-side content |
two-cols-header | Header + two columns |
image-right | Image right, content left |
fact | Highlight a statistic |
---
layout: two-cols-header
---
# Header
::left::
Left content
::right::
Right content
```typescript {2,3}
function add(a: number, b: number) {
const sum = a + b // highlighted
return sum // highlighted
}
```
```typescript {1|2|3|all}
const a = 1 // click 1
const b = 2 // click 2
const c = 3 // click 3
```
<!-- Reveal items one-by-one -->
<v-clicks>
- First item (click 1)
- Second item (click 2)
</v-clicks>
<!-- Single element reveal -->
<div v-click>Appears on click</div>
# Slide Title
Content
<!--
Speaker notes here (presenter mode only)
-->
```mermaid
graph TD
A[Start] --> B{Decision}
B -->|Yes| C[Action]
B -->|No| D[End]
```
For advanced functionality, see references/advanced-features.md:
{monaco}, {monaco-run})For large presentations (30+ slides), split across multiple files. See references/multi-file-organization.md.
Quick example:
---
src: ./slides/01-intro.md
---
---
src: ./slides/02-content.md
---
Benefits: No linting conflicts, easier reorganization, better version control.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.