Slides
Create whitespace-led, hand-built HTML decks that work without a framework or build step. Decks must remain readable source files that an agent can edit directly.
Use cases
Create a deck
Trigger: the user asks for slides or a presentation from a prompt, README, or document.
- Read the source material.
- Ask for a style only when the prompt does not signal one. Offer
dwmkerr.com, conference, or QuantumBlack-inspired.
- Copy the closest template from
themes/ or references/ into the user's requested directory.
- Write one central idea per slide and keep the slide separate from its script.
- Preserve the keyboard and editing conventions below.
- Verify every slide at 16:9 with available rendering or browser tooling.
- Unless the prompt asks to preview, show, open, serve, present, or edit the deck, report its path without launching a browser or leaving a server running.
- When that intent is explicit or clear from context, follow Preview, serve, or edit with the user.
Result: a dependency-free HTML deck plus any local images and speaker notes it needs.
Create a conference talk
Trigger: the user says "conference talk", "conference deck", "speaker notes", "teleprompter", or asks for the hand-built dark style.
- Read Conference decks.
- Copy
themes/conference/template/ into the chosen deck directory.
- Edit
presentation.html for slides and presentation.md for the talk track.
- Keep
notes.html as the phone-readable teleprompter view.
- Verify navigation, reveals, notes, and fullscreen. Serve and open the deck only when the user asks to preview, present, rehearse, serve, or edit it.
Result: a complete conference deck with separate speaker notes.
Preview, serve, or edit with the user
Trigger: the user asks to preview, show, open, present, or rehearse a deck; "serve the slides"; "make the slides editable"; edit in the browser; save changes live; or comment on slides.
- Resolve
bin/slides.js relative to this SKILL.md and run node <skill-directory>/bin/slides.js serve <deck-path> --open in a long-running process.
- Give the user the printed local URL, not the implementation command.
- Keep the process running until the user asks to stop or the presentation/editing session is finished. Comments are printed there as they arrive.
- For machine-readable events, query
GET /__slides/comments or watch GET /__slides/events as Server-Sent Events.
- Apply requested changes to the source and tell the user when a browser refresh is needed.
Result: browser edits save to the served HTML file and comments reach the agent without a sidecar file.
Present or print in the browser
Trigger: the user asks to present a deck, print the current slide, print the complete deck, or save numbered pages through the browser.
- Open or serve the deck as requested.
- Move into the bottom 20% or use normal
Tab navigation to reveal the auto-hiding toolbar. It flashes briefly on load and when entering fullscreen.
- Use Print for the current slide or Export for the complete deck.
- Both actions open the browser's print dialog; choose Save as PDF when a file is needed.
- For numbered selections such as
1,3-5, print all and enter the range in the browser's Pages field.
- Use the CLI export flow below for stable
data-name values or reordered selections.
Result: clean 16:9 print pages with progressive content revealed and presentation controls removed.
Check a deck
Trigger: the user asks to validate, preflight, or check a deck for problems.
- Resolve
bin/slides.js relative to this SKILL.md.
- Run
node <skill-directory>/bin/slides.js check <deck-path>.
- Report errors for missing or duplicate
data-name values, persisted editor state, and broken local assets.
- Report slide-overflow warnings with the affected stable slide name.
Result: an evidence-based structural and 16:9 browser check without changing the deck.
Export slides
Trigger: the user asks for a PDF, selected slides, or an export of a deck.
- Resolve
bin/slides.js relative to this SKILL.md.
- Run
node <skill-directory>/bin/slides.js export <deck-path> --output <file.pdf>.
- Add
--slides 1,3-5 for numeric selection or --slides title,community for stable data-name selection.
- Preserve the requested order and report the output path and page count.
Result: a 16:9 PDF with one page per selected slide, progressive content fully revealed, and editor controls excluded.
Styles
- dwmkerr.com: off-white, terminal details, mono typography, restrained amber. Read dwmkerr.com style.
- Conference: dark, typographic, progressive reveals, notes, and teleprompter. Read Conference decks.
- QuantumBlack-inspired: a public-material-only approximation for dark technical slides. Read QuantumBlack-inspired style.
If the user explicitly requests another presentation format, use a more suitable installed tool or skill when one is available.
Deck conventions
- Use
<section class="slide" data-name="unique-id"> for every slide.
- Use unique, stable
data-name values so navigation, notes, and comments can identify slides.
- Mark editable content with
data-editable or use the standard heading, paragraph, list, table, and blockquote elements.
- Mark progressive fragments with
class="revealable".
- Keep headings and leads free of full stops.
- Use regular hyphens, not em dashes.
- Keep one central idea per slide and favour whitespace over dense copy.
- Put images beside the deck and use relative paths.
- Include
runtime/slides-editor.js as slides-editor.js beside the deck.
Keyboard conventions
| Key |
Action |
| Right / Space / PageDown |
Reveal or move forward |
| Left / PageUp |
Undo a reveal or move back |
E |
Enter edit mode |
Esc |
Leave edit mode or close a dialog |
Cmd/Ctrl+Enter |
Save now while editing |
C |
Comment on the current slide |
F |
Toggle fullscreen |
| Home / End |
First / last slide |
Do not intercept Tab; native focus reveals the toolbar through :focus-within. Do not intercept Cmd/Ctrl+S; it belongs to the browser. The bottom toolbar must auto-hide when idle, reappear only in the bottom 20%, flash briefly on load and fullscreen, remain visible while focused or editing, and provide navigation, edit, save, print, and export actions.
Live editing rules
- The editor pings
/__slides/ping when edit mode starts.
- The server injects its current editor runtime into the served response without changing the source file.
- When the local server is detected, edits save automatically after a short debounce.
- Every page receives the revision of the exact source it loaded. Saves use that revision and stop with a reconcile warning if the source changed externally.
- Browser-generated paste markup is reduced to plain text. Existing semantic markup and deliberate styling remain intact.
- Saving reapplies editable content to a clean copy of the loaded source so navigation, reveal, viewport, and editor-owned state are not persisted.
- When it is not detected, do not claim that changes are saved. Show:
Live editing is disconnected. Tell your agent: "Serve the slides."
- Comments exist in server memory only. They are available through HTTP and SSE, and disappear when the server exits.
- Never add the analytics tag to user-generated decks. Analytics belongs only to this repository's public gallery and demos.
Quality check
Before finishing:
- For ordinary creation, validate without launching the user's browser or leaving a server running. When preview, presentation, serving, or editing is requested, serve the deck and keep the process running.
- Check first/last navigation, fragment reveals, edit mode, comment mode, fullscreen, and the counter.
- Confirm live-save works when the server is present and warns when it is absent.
- Run
node <skill-directory>/bin/slides.js check <deck-path> to check stable names, local assets, persisted state, and overflow at a 16:9 desktop viewport.
- Check that all assets use relative paths and no confidential content is included.
Attribution
The QuantumBlack-inspired style is unofficial and based only on publicly available material. It is not a brand guide or endorsement. Do not include internal, confidential, client, or proprietary content in examples.
1---2name: slides-23description: Creates, previews, serves, checks, exports, and collaboratively edits hand-built HTML slide decks, conference presentations, and speaker notes. Use when the user asks to "create slides", "make a presentation", "build a slide deck", use the "dwmkerr.com style", create a conference talk, preview or open a deck, "serve the slides", "make the slides editable", check a deck, or export slides to PDF. Produces dependency-free HTML with browser editing, conflict-safe live-save, comments, preflight checks, and selected-slide export.4license: MIT5---67# Slides89Create whitespace-led, hand-built HTML decks that work without a framework or build step. Decks must remain readable source files that an agent can edit directly.1011## Use cases1213### Create a deck1415Trigger: the user asks for slides or a presentation from a prompt, README, or document.16171. Read the source material.182. Ask for a style only when the prompt does not signal one. Offer `dwmkerr.com`, `conference`, or `QuantumBlack-inspired`.193. Copy the closest template from `themes/` or `references/` into the user's requested directory.204. Write one central idea per slide and keep the slide separate from its script.215. Preserve the keyboard and editing conventions below.226. Verify every slide at 16:9 with available rendering or browser tooling.237. Unless the prompt asks to preview, show, open, serve, present, or edit the deck, report its path without launching a browser or leaving a server running.248. When that intent is explicit or clear from context, follow **Preview, serve, or edit with the user**.2526Result: a dependency-free HTML deck plus any local images and speaker notes it needs.2728### Create a conference talk2930Trigger: the user says "conference talk", "conference deck", "speaker notes", "teleprompter", or asks for the hand-built dark style.31321. Read [Conference decks](references/conference-decks.md).332. Copy `themes/conference/template/` into the chosen deck directory.343. Edit `presentation.html` for slides and `presentation.md` for the talk track.354. Keep `notes.html` as the phone-readable teleprompter view.365. Verify navigation, reveals, notes, and fullscreen. Serve and open the deck only when the user asks to preview, present, rehearse, serve, or edit it.3738Result: a complete conference deck with separate speaker notes.3940### Preview, serve, or edit with the user4142Trigger: the user asks to preview, show, open, present, or rehearse a deck; "serve the slides"; "make the slides editable"; edit in the browser; save changes live; or comment on slides.43441. Resolve `bin/slides.js` relative to this `SKILL.md` and run `node <skill-directory>/bin/slides.js serve <deck-path> --open` in a long-running process.452. Give the user the printed local URL, not the implementation command.463. Keep the process running until the user asks to stop or the presentation/editing session is finished. Comments are printed there as they arrive.474. For machine-readable events, query `GET /__slides/comments` or watch `GET /__slides/events` as Server-Sent Events.485. Apply requested changes to the source and tell the user when a browser refresh is needed.4950Result: browser edits save to the served HTML file and comments reach the agent without a sidecar file.5152### Present or print in the browser5354Trigger: the user asks to present a deck, print the current slide, print the complete deck, or save numbered pages through the browser.55561. Open or serve the deck as requested.572. Move into the bottom 20% or use normal `Tab` navigation to reveal the auto-hiding toolbar. It flashes briefly on load and when entering fullscreen.583. Use **Print** for the current slide or **Export** for the complete deck.594. Both actions open the browser's print dialog; choose Save as PDF when a file is needed.605. For numbered selections such as `1,3-5`, print all and enter the range in the browser's Pages field.616. Use the CLI export flow below for stable `data-name` values or reordered selections.6263Result: clean 16:9 print pages with progressive content revealed and presentation controls removed.6465### Check a deck6667Trigger: the user asks to validate, preflight, or check a deck for problems.68691. Resolve `bin/slides.js` relative to this `SKILL.md`.702. Run `node <skill-directory>/bin/slides.js check <deck-path>`.713. Report errors for missing or duplicate `data-name` values, persisted editor state, and broken local assets.724. Report slide-overflow warnings with the affected stable slide name.7374Result: an evidence-based structural and 16:9 browser check without changing the deck.7576### Export slides7778Trigger: the user asks for a PDF, selected slides, or an export of a deck.79801. Resolve `bin/slides.js` relative to this `SKILL.md`.812. Run `node <skill-directory>/bin/slides.js export <deck-path> --output <file.pdf>`.823. Add `--slides 1,3-5` for numeric selection or `--slides title,community` for stable `data-name` selection.834. Preserve the requested order and report the output path and page count.8485Result: a 16:9 PDF with one page per selected slide, progressive content fully revealed, and editor controls excluded.8687## Styles8889- **dwmkerr.com**: off-white, terminal details, mono typography, restrained amber. Read [dwmkerr.com style](references/dwmkerr-style.md).90- **Conference**: dark, typographic, progressive reveals, notes, and teleprompter. Read [Conference decks](references/conference-decks.md).91- **QuantumBlack-inspired**: a public-material-only approximation for dark technical slides. Read [QuantumBlack-inspired style](references/quantumblack-style.md).9293If the user explicitly requests another presentation format, use a more suitable installed tool or skill when one is available.9495## Deck conventions9697- Use `<section class="slide" data-name="unique-id">` for every slide.98- Use unique, stable `data-name` values so navigation, notes, and comments can identify slides.99- Mark editable content with `data-editable` or use the standard heading, paragraph, list, table, and blockquote elements.100- Mark progressive fragments with `class="revealable"`.101- Keep headings and leads free of full stops.102- Use regular hyphens, not em dashes.103- Keep one central idea per slide and favour whitespace over dense copy.104- Put images beside the deck and use relative paths.105- Include `runtime/slides-editor.js` as `slides-editor.js` beside the deck.106107## Keyboard conventions108109| Key | Action |110|---|---|111| Right / Space / PageDown | Reveal or move forward |112| Left / PageUp | Undo a reveal or move back |113| `E` | Enter edit mode |114| `Esc` | Leave edit mode or close a dialog |115| `Cmd/Ctrl+Enter` | Save now while editing |116| `C` | Comment on the current slide |117| `F` | Toggle fullscreen |118| Home / End | First / last slide |119120Do not intercept `Tab`; native focus reveals the toolbar through `:focus-within`. Do not intercept `Cmd/Ctrl+S`; it belongs to the browser. The bottom toolbar must auto-hide when idle, reappear only in the bottom 20%, flash briefly on load and fullscreen, remain visible while focused or editing, and provide navigation, edit, save, print, and export actions.121122## Live editing rules123124- The editor pings `/__slides/ping` when edit mode starts.125- The server injects its current editor runtime into the served response without changing the source file.126- When the local server is detected, edits save automatically after a short debounce.127- Every page receives the revision of the exact source it loaded. Saves use that revision and stop with a reconcile warning if the source changed externally.128- Browser-generated paste markup is reduced to plain text. Existing semantic markup and deliberate styling remain intact.129- Saving reapplies editable content to a clean copy of the loaded source so navigation, reveal, viewport, and editor-owned state are not persisted.130- When it is not detected, do not claim that changes are saved. Show: `Live editing is disconnected. Tell your agent: "Serve the slides."`131- Comments exist in server memory only. They are available through HTTP and SSE, and disappear when the server exits.132- Never add the analytics tag to user-generated decks. Analytics belongs only to this repository's public gallery and demos.133134## Quality check135136Before finishing:1371381. For ordinary creation, validate without launching the user's browser or leaving a server running. When preview, presentation, serving, or editing is requested, serve the deck and keep the process running.1392. Check first/last navigation, fragment reveals, edit mode, comment mode, fullscreen, and the counter.1403. Confirm live-save works when the server is present and warns when it is absent.1414. Run `node <skill-directory>/bin/slides.js check <deck-path>` to check stable names, local assets, persisted state, and overflow at a 16:9 desktop viewport.1425. Check that all assets use relative paths and no confidential content is included.143144## Attribution145146The QuantumBlack-inspired style is unofficial and based only on publicly available material. It is not a brand guide or endorsement. Do not include internal, confidential, client, or proprietary content in examples.