slideshot — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited slideshot (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Slideshot converts HTML with .slide elements into pixel-perfect slide images and documents.
| Task | Tool | When to use |
|---|---|---|
| Start any slide request | discover_themes | MANDATORY first. Resets the discovery gate. Returns themes, orientation/format/token-mode catalog, and persisted user preferences. |
| List themes mid-conversation | list_themes | Idempotent — does NOT advance the workflow. Use when the user asks "what other themes are there?" |
| Create slides (full HTML) | create_slides mode=default | AI writes complete HTML. More creative control, more tokens. |
| Create slides (JSON data) | create_slides mode=token_saver | AI sends structured JSON slides[]. Server uses built-in templates. Fewer tokens, lighter styling. |
| Iterate on saved deck | edit_slides | Token-efficient partial edits — replace_slide, patch_css, swap_token, patch_class. Use INSTEAD of regenerating the whole deck for small changes. |
| Render to files | render_slides | ONLY after user confirms preview. Requires discover + create first. |
| Diagnose failures | health_check | Render fails or Chromium won't launch. |
{
"mcpServers": {
"slideshot": {
"command": "npx",
"args": ["-y", "slideshot-mcp"]
}
}
}Add to Claude Desktop config or .cursor/mcp.json.
discover_themes to get themes, orientations, token modes, and format optionscreate_slides with mode=default, theme, orientation (no html) to get CSS prompt. Generate HTML. Call again with html= to save.create_slides with mode=token_saver, theme, orientation, slides=[structured JSON]render_slides with htmlPath and chosen formatsServer-enforced gates: render_slides will REJECT the call if discover_themes or create_slides hasn't been called first.
| Mode | Tokens | Control | How it works |
|---|---|---|---|
default | ~6,000-9,000 per deck | Full | AI writes complete HTML+CSS. Maximum flexibility. Use this unless the user explicitly chose token_saver. |
token_saver | ~1,500-3,000 per deck | Limited | AI sends a structured slides[] JSON array. Server assembles HTML from per-theme templates that cover all 11 slide types (cover, content, stats, list, steps, comparison, quote, code, cta, timeline, team). Lighter styling and less creative control. |
edit_slides over re-running create_slides.{
"mode": "token_saver",
"theme": "branded",
"orientation": "linkedin",
"slides": [
{ "type": "cover", "headline": "Title", "subtitle": "Subtitle" },
{ "type": "stats", "title": "Highlights", "cards": [{ "value": "10x", "label": "faster" }] },
{ "type": "cta", "headline": "Follow", "action": "@ketan-chavan" }
]
}Each slide type has its own required fields — see discover_themes output for the full schema.
| Operation | Required args | What it does |
|---|---|---|
replace_slide | slideIndex, payload=<div class="slide">...</div> HTML string | Swaps one slide block, leaves the rest byte-identical. |
patch_css | payload=CSS rules string | Appends rules to the document's last <style> block. |
swap_token | payload={ "--var": "value" } | Replaces a CSS variable's declared value (root-level token swap). |
patch_class | slideIndex, payload={ add?: "x", remove?: "y" } | Toggles a class on a specific slide. |
Always show the returned htmlPath as a code-preview artifact and STOP — wait for user confirmation before calling render_slides.
discover_themes returns three presets via presets[] and a usePreset selector:
linkedin-default → branded theme, 4:5, PDFinstagram-square → terminal-editorial theme, 1:1, PNG+WebPpitch-deck-landscape → pitch-deck theme, 16:9, PDF+PPTXIf the user picks one, skip the per-question selectors and go straight to topic + outline confirm.
~/.slideshot/preferences.json stores lastTheme, lastOrientation, lastFormats, brandName, lastTokenMode. Each successful create_slides and render_slides call updates them. The next session's discover_themes surfaces them as default on the matching selectors.
| Variant | Name | Style |
|---|---|---|
generic | Clean Minimal | Inter font, white cards, flexible layout |
branded | Ketan Slides | Space Mono monospace, teal/coral accents |
instagram-carousel | Terminal Editorial | Inter 900 + JetBrains Mono, cream + rust, terminal cards |
infographic | Infographic | Data-heavy, DM Sans, stat cards |
pitch-deck | Pitch Deck | Professional, DM Sans, KPI cards |
dark-modern | Dark Modern | Neon accents, glassmorphism, Inter |
editorial | Editorial | Magazine serif, Playfair Display, gold |
browser-shell | Browser Shell | Browser window chrome, Bebas Neue + DM Sans |
| Preset | Dimensions | Use case |
|---|---|---|
| portrait | 540x675 | Default social/LinkedIn |
| landscape | 1920x1080 | Presentations (16:9) |
| 540x675 | LinkedIn carousel PDF | |
| 1080x1080 | Square posts/carousel | |
| a4 | 595x842 | Document/print format |
| custom | user-specified | Any size |
| Format | Best for |
|---|---|
| LinkedIn carousels, sharing, printing | |
| WebP | Lightweight web/social images |
| PNG | High-quality images, universal compatibility |
cover, content, stats, list, steps, comparison, quote, code, cta, timeline, team
<div class="slide" style="width: 540px; height: 675px;">
<h1>Slide Title</h1>
<p>Content here</p>
</div>Use Google Fonts via <link> tags. Each .slide becomes one output page/image.
npx slideshot ./slides.html --formats png,webp,pdf --scale 4 --out ./outputPaste HTML and export at slideshot.vercel.app.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.