Installation
npx -y @deepseek-ai/dsh plugin --profile web add github:literaf/dsh-slidesThis installation command is an unverified starting point generated from the GitHub repository address.
README
Maintainer-authored documentation snapshot.
dsh-slides
Slides for DeepSeek Harness
English | 中文
Give the agent a make_slides tool and it writes a talk to one self-contained HTML file — opens in any browser, presents fullscreen, keeps your speaker notes off the screen, and prints to PDF with Ctrl+P. Ask for formats: ["html", "pptx"] and it writes an editable PowerPoint file alongside it, speaker notes included.
The file loads nothing at presentation time. No CDN, no webfont, no image host. A deck that needs the network is a deck that can fail in the room you are presenting in.

Install
dsh plugin --profile web add dsh-slides
dsh web
Then just ask: "turn these results into a 10-minute talk".
What the agent gets
One tool, make_slides, taking a deck as structured data rather than markdown the user has to convert:
| Layout | Holds |
|---|---|
title | Deck title, subtitle, presenter. Generated for you from the deck fields — do not write one |
section | A divider between parts of the talk |
bullets | A claim as the heading, points beneath it, optionally a figure alongside |
image | A figure with a caption, filling the slide |
quote | A pulled quote with an attribution |
Omit layout and it is inferred from the fields you filled in.
Every slide takes notes — the speaker notes. They never appear on the slide; the presenter reveals them with S during the talk. This is the point of the tool: the claim goes on the slide, the talking goes in the notes, and the agent is told so in its guidance.
Bullets support **bold**, *italic* and `code`. Everything is escaped before formatting is applied, so content can never inject markup into the deck.
Formats
formats defaults to ["html"]. Add "pptx" when the deck has to be edited by a co-author or uploaded to a conference system:
| HTML | PPTX | |
|---|---|---|
| Presents offline | Yes, nothing is fetched | Yes |
| Speaker notes | S during the talk | In PowerPoint's notes pane |
| Prints to PDF | Ctrl+P, one slide per page | Through PowerPoint |
| Editable by a co-author | Not really | Yes |
| Images | Embed as data: URIs to stay self-contained | data: URIs are embedded; URLs stay links |
Both come from the same deck and the same inline-markup parse, so they cannot drift apart.
Presenting
| Key | |
|---|---|
→ ← Space | Next / previous slide |
S | Show and hide speaker notes |
F | Fullscreen |
Home End | First / last slide |
Ctrl+P | Print — one slide per page, chrome hidden, straight to PDF |
Clicking works too: the left third goes back, the rest goes forward. The URL carries the slide number, so a link can point at a specific slide.
Themes
Five finished looks rather than a knob per property. Pick one; do not assemble one.
| Theme | |
|---|---|
plain | White ground, sans-serif, thin accent rules. The default; disappears behind the content |
ink | Warm paper ground with a serif face. Reads like a printed paper; suits a seminar or a defense |
midnight | Deep blue ground, light type. Holds up in a bright room where a white deck washes out |
slate | Neutral greys, no colour accent. For decks whose figures carry all the colour |
sunrise | Off-white ground with a warm accent. A lighter register for a talk meant to persuade |

Font stacks name system faces only, for the same reason the deck loads nothing else.
Configuration
The bundle inserts one row (id: slides). Override it from your profile's cordis.patch.yml (a patch replaces the whole config, so restate every key you keep):
- id: slides
config:
outputDir: slides/ # where decks are written, relative to the workspace
defaultTheme: plain # plain | ink | midnight | slate | sunrise
promptGuidance: true # register the deck-writing guidance
promptOrder: 150
Notes
- Decks are written through
ctx.fs, so a sandboxing filesystem backend fences the write like any other tool. The tool is therefore registered only where a filesystem provider is composed — with none, neither the tool nor its guidance appears, instead of offering a call that always fails. ctx.fsexposes text writes only, and a sandboxing backend fences exactly those. So the pptx write asks for the path through the sanctionedwriteTextfirst: the backend applies its real policy and refuses withFS_SANDBOX_DENIEDbefore any bytes exist, and only a path it allowed is then filled in. Resolving a path and writing to it directly would go around the fence, becauseresolveis not one of the fenced operations.- Images are yours to supply. A
data:URI keeps the deck self-contained; anhttpsURL works but makes the deck depend on that host at presentation time. - This package renders decks and knows nothing about where the content came from. Packages that do —
dsh-paper-slidesfor academic talks — compose beside it and drivemake_slides.
Known limitations
- No incremental reveal. A slide appears whole. Builds and transitions are the kind of thing that reads as generated when an agent picks them.
- The pptx is a clean deck, not a designed one. It carries your content, theme colours, fonts, bullets and notes into PowerPoint; it does not reproduce the HTML deck pixel for pixel, and it uses no master slides or animations.
License
MIT
Project files and signals
Shown items are public repository signals detected in the directory snapshot.
Repository information
- Language
- TypeScript
- License
- MIT
- Last updated
- Aug 17, 2026, 1:13 AM
Install deliberately
Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.