From markdown-html-skills
Converts a markdown deck (slides separated by `---` HR boundaries or by `# ` H1 headings, with optional `<!-- notes: ... -->` presenter notes blocks) into a single-file HTML presentation with arrow-key / space / PgDn / PgUp / Home / End / P / Esc keyboard navigation, presenter mode (split view with current slide + speaker notes + clock + next-slide preview), URL-hash deep linking, and `@media print` page-per-slide for PDF export. Triggers when the markdown-html-orchestrator classifies an input as SLIDES, or when invoked directly via /cs:md-slides. Reuses md-document's markdown parser for slide-body rendering and reads design-system tokens via config_loader.py. Refuses if input has no clear slide boundaries, produces a 1-slide deck, or `--strict-notes` is on with < 50% notes coverage. Use after orchestrator routing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/markdown-html-skills:md-slidesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The slide-deck converter. Reads a markdown deck (HR or H1 boundaries, optional presenter notes), emits a single-file HTML presentation that runs in any browser with keyboard navigation, presenter mode, and print-to-PDF.
The slide-deck converter. Reads a markdown deck (HR or H1 boundaries, optional presenter notes), emits a single-file HTML presentation that runs in any browser with keyboard navigation, presenter mode, and print-to-PDF.
Three stdlib tools pipeline together:
slide_splitter.py → presenter_notes_parser.py → deck_html_renderer.py
(md → ordered (extract <!-- notes: (slides + design-system
slides with --> blocks, attach tokens → single-file
titles) per slide) HTML with keyboard nav)
| Symptom | Action |
|---|---|
markdown-html-orchestrator routes input as SLIDES | Invoke this skill |
User runs /cs:md-slides <path>.md directly | Invoke this skill |
Input has 3+ --- HR lines OR 5+ H1 headings with short bodies | Invoke this skill |
| Input is a long-form spec | Route to md-document instead |
| Input is a code review | Route to md-review instead |
| Input has no clear slide boundaries | Refuse, route to md-document |
| Input would produce 1 slide | Refuse (it's a poster) |
# 1. Split slides on --- or H1 (auto-detect by default)
python3 markdown-html/skills/md-slides/scripts/slide_splitter.py \
--input <path>.md --output /tmp/slides.json
# 2. Extract <!-- notes: ... --> blocks from each slide
python3 markdown-html/skills/md-slides/scripts/presenter_notes_parser.py \
--slides /tmp/slides.json --output /tmp/deck.json
# 3. Render single-file HTML deck
python3 markdown-html/skills/md-slides/scripts/deck_html_renderer.py \
--slides /tmp/deck.json --title "My Talk" --output deck.html
<section class="slide"> — one visible at a time, controlled by JS→ / Space / PgDn advance; ← / PgUp previous; Home/End jump; P presenter mode; Esc exits presenter#3 jumps to slide 3; browser back/forward walks slides; share deck.html#5 to send someone directly thereCmd+P produces a PDF with one slide per page@media (prefers-reduced-motion: reduce) honored--strict-notes refuses < 50% notes coverage. A deck where most slides have no notes isn't set up for presenter mode. Exit 7.--syntax.---) or H1 boundaries? Recommended: HR for typical decks; H1 for outline-driven decks. Canon: Marp / reveal.js / pandoc convergence.--syntax needed? Recommended: only for decks with substantial code blocks. Default off. Canon: single-file shareability discipline.md-document — that's one continuous document. This is N discrete slides.md-review — that renders diff hunks + annotations. This renders prose slides.marketing/landing/ — that's a landing page, not a deck.{default_output_dir}/deck-{slug}.html (path resolved by orchestrator's output_path_resolver.py; collision suffix -2, -3, … by default).
references/ for full citations (presentation_ux, keyboard_nav_patterns, single_file_deck_conventions)npx claudepluginhub ai-integr8tor/alirezarezvani-claude-skills --plugin markdown-html-skillsSets up isolated workspaces using native worktree tools or git worktree fallback. Use before starting feature work to protect the current branch.
3plugins reuse this skill
First indexed Jun 30, 2026