Skip to content
Back to skills

Deckcraft

ASecurity

DeckCraft is an open-source, pure-Rust desktop presentation app (macOS, Windows, Linux, FreeBSD + web; a clean-room reimplementation of Microsoft PowerPoint) that opens and saves PowerPoint .pptx and native .deckcraft files, exports PDF/PNG/JPEG/outline, and is fully scriptable through commands, a CLI, a JSON control channel and an MCP server. Trigger this skill whenever the user mentions DeckCraft, or asks to create, edit, convert, inspect, render, present, automate or troubleshoot a present...

  • 11 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 16, 2026
ai-agentsrustgotestinggit

Works with

  • cli
  • mcp

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 16, 2026

npx -y skills add midasmatterhorn/artcraft-skills --skill deckcraft --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Deckcraft?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Deckcraft
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/midasmatterhorn-deckcraft/badge)](https://www.skillsdirectory.com/skills/midasmatterhorn-deckcraft)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: deckcraft
description: DeckCraft is an open-source, pure-Rust desktop presentation app (macOS, Windows, Linux, FreeBSD + web; a clean-room reimplementation of Microsoft PowerPoint) that opens and saves PowerPoint .pptx and native .deckcraft files, exports PDF/PNG/JPEG/outline, and is fully scriptable through commands, a CLI, a JSON control channel and an MCP server. Trigger this skill whenever the user mentions DeckCraft, or asks to create, edit, convert, inspect, render, present, automate or troubleshoot a presentation, deck, slideshow or slide file (.pptx, .potx, .ppsx, .deckcraft), wants slides exported to PDF/images, wants assets prepared for a deck, asks what DeckCraft can or cannot do or which formats it supports — even when they don't name the app but describe its job ("open this pptx", "build me a deck", "export these slides to PDF", "script slide editing"). Use it before assuming any PowerPoint feature exists in DeckCraft.
---

# DeckCraft

## Overview

DeckCraft is presentations and slide-show software: an open-source, clean-room reimplementation of
Microsoft PowerPoint, written from scratch in pure Rust (README.md:13). Source:
https://github.com/storytold/deckcraft (GitHub org `storytold`), dual-licensed MIT OR Apache-2.0.
It is in **alpha**: 79% of PowerPoint's feature breadth measured, ~55% ready for real work estimated
(ROADMAP.md:17-19). HEAD inspected is version 0.7.0, 117k lines in 23 crates (docs/architecture.md:7).
One engine backs the GUI (egui/eframe), the headless CLI, a JSON control channel, an MCP server and a
WASM build, and every action is a command, so humans and agents use the same verbs
(docs/architecture.md:40-47). Crashes are guarded: `Session::execute` runs every command inside a
panic guard that keeps the document as it was (crates/engine/src/guard.rs:1-60).

The installed `/Applications/DeckCraft.app` is **0.6.1** (Contents/Info.plist) while this skill
describes HEAD 0.7.0 — verify against your installed version.

## Capabilities (verified)

Tier labels: **[impl]** implemented and wired; **[partial]** works but visibly incomplete;
**[none]** absent.

### Decks, masters, themes, layouts
- **[impl]** New/open/save/close/export documents from one `file.*` command family, plus
  AutoRecover (crates/engine/src/cmd/file.rs:9-45).
- **[impl]** 8 built-in themes (DeckCraft, Harbor, Ember, Meadow, Nocturne, Paper, Coral Reef,
  Slate; crates/model/src/theme.rs:153-225), 11 layouts (crates/model/src/defaults.rs:299-461),
  slide masters and layout editing (`master.*`, `view.slideMaster`, `view.closeMaster`;
  crates/engine/src/cmd/design.rs, crates/engine/src/cmd/slide.rs).
- **[impl]** Sections (`section.add/rename/move/removeAll`), notes (`slide.notes`), hiding slides
  (`slide.hide`), custom slide size and header/footer (`design.slideSize`, `design.headerFooter`;
  crates/engine/src/cmd/slide.rs:37-49, crates/engine/src/cmd/design.rs).
- **[impl]** `slide.new` with layout name/kind, title and body; `slide.fromOutline` builds slides
  from outline text (crates/engine/src/cmd/slide.rs:14-26, :50).

### Drawing and shapes
- **[impl]** `shape.insert` preset shapes; `shape.presets` returns the gallery: 183 catalog entries
  at HEAD (crates/engine/src/cmd/insert.rs:183-187, crates/geom/src/preset.rs:147+); adjust handles
  (`shape.adjust`), change shape, rotate/flip, move/resize/set bounds (crates/engine/src/cmd/shape.rs:33-39).
- **[impl]** Connectors glued to shapes (`shape.connect`, `shape.sites`), freeform/curve (smooth)
  and merge ops `union|combine|fragment|intersect|subtract` (crates/engine/src/cmd/shape.rs:14-32,
  crates/engine/src/cmd/merge.rs:147).
- **[impl]** Fills (solid, gradient, picture, pattern), outlines with dashes and arrowheads, shadow,
  glow, soft edges, reflection, alt text, rename, visibility (crates/engine/src/cmd/shape.rs:40+).

### Text
- **[impl]** In-place editing and text ops through `text.edit`, `text.insert`, `text.delete`,
  `text.select*`, `text.get`, `text.commit`, `text.exit` (crates/engine/src/cmd/text.rs); formatting
  through `format.*`: bold/italic/underline, font, size, alignment, indent/outdent, columns,
  autofit, caps, highlight, wrap, subscript/superscript (crates/engine/src/cmd/format.rs:12+).
- **[impl]** WordArt text warp (`insert.wordArt`), fields and hyperlinks (`insert.hyperlink`,
  `Cmd+K`), symbols, slide numbers, date fields (crates/engine/src/cmd/insert.rs:46-60).

### Content
- **[impl]** Pictures from file or base64 (`insert.picture`) with crop/reset (crates/engine/src/cmd/insert.rs:27-35;
  image types accepted: png/jpeg/gif/webp/bmp/tiff, crates/engine/src/cmd/insert.rs:237-250).
- **[impl]** Tables (`insert.table`, merge/split, rows/columns, widths; crates/engine/src/cmd/table.rs),
  charts (`insert.chart`, `chart.type`, `chart.data`, `chart.options`; column/bar/line/pie/doughnut/
  area/scatter/stacked…; crates/model/src/chart.rs:11-70, crates/engine/src/cmd/insert.rs:37-79).
- **[impl]** SmartArt basics (`insert.smartArt` kinds list|process|cycle|hierarchy|pyramid|matrix as
  pre-drawn shapes; crates/engine/src/cmd/insert.rs:80-88; see limitations).
- **[impl]** Audio/video from file (`insert.audio`, `insert.video`) and playback commands
  (`media.play/pause/stop/seek/toggle/info`, GIF play; crates/engine/src/cmd/media.rs:13-38).
  Decodable media: MP3, AAC/M4A, ALAC, WAV, AIFF, CAF, FLAC, Ogg Vorbis, Opus; H.264/HEVC in MP4/MOV;
  VP9/AV1 in WebM/MKV (docs/file-format-parity.md:43-47).
- **[impl]** Action buttons and hyperlinks/actions (`insert.actionButton`, `insert.hyperlink`;
  crates/engine/src/cmd/insert.rs:52-97).

### Presenting
- **[impl]** 48/48 PowerPoint transitions including Morph with Words-and-Characters, measured frame
  by frame against PowerPoint (docs/animation-parity.md:9-48; model list in crates/model/src/anim.rs);
  64 animation effects with start/duration/delay/triggers/by-paragraph builds and Animation Painter
  (docs/animation-parity.md:50-78; crates/engine/src/cmd/animation.rs:13-63).
- **[impl]** Full-screen show (`show.fromStart` Cmd+Shift+Enter, `show.fromCurrent` Cmd+Enter;
  crates/engine/src/cmd/review.rs:20-21), presenter view, custom shows, Set Up Show (`show.setup`,
  `show.customShow`; crates/engine/src/cmd/review.rs:25-40), rehearse timings, pen in the show
  (docs/slideshow-parity.md:11-56).
- **[impl]** Comments with replies/resolve (`comment.*` Cmd+Alt+M), accessibility check,
  spelling against a small built-in list (`review.spelling` F7; crates/engine/src/cmd/review.rs:13-19).

### Files
- **[impl] Open**: `.deckcraft` (native) and legacy `.slidecraft`, `.pptx`, `.potx`, `.ppsx`
  (OOXML sniff), `.txt`/`.md` outlines (crates/engine/src/cmd/file.rs:67-87; crates/format/src/lib.rs:85-87;
  crates/pptx/src/lib.rs:40-55).
- **[impl] Save**: `.deckcraft` by default, `.pptx` when the extension says so; writes go to a
  temp sibling then rename, so a failed save never truncates the old file (crates/engine/src/cmd/file.rs:185-200,
  :216-226). `file.saveBytes`/`file.openBytes` move base64 data (browser-safe).
- **[impl] Export** (`file.export`): PNG and JPEG (scale in px/pt, JPEG quality 92), PPTX,
  DeckCraft, outline `.txt`/`.md`, and PDF with layouts slides|notes|handouts (1-9 per page), dpi
  36-600, real text layer, links/bookmarks, slide ranges like `"1-3, 5"`, hidden slides and framing
  (crates/engine/src/cmd/file.rs:18, :130-178, :272-319; crates/pdf/src/lib.rs:1-6,45-65).
- **[impl]** Native `.deckcraft` format: zip holding `mimetype`
  (`application/vnd.storyteller.deckcraft+zip`, stored), `presentation.json` (deflated model) and
  `media/<id>` entries; readers ignore unknown fields; a `repair()` pass fixes missing layouts, ids
  and sizes on load (crates/format/src/lib.rs:1-20, :43-73, :117-148).
- **[impl]** AutoRecover: `file.recovery.list/open/save/discard`; entries are `<uid>.deckcraft` +
  `<uid>.json` in `~/Library/Application Support/DeckCraft/Recovery` on macOS, opened at app start
  (crates/engine/src/recovery.rs:1-30; apps/deckcraft/src/main.rs:201-210).

### Automation surface
- **[impl]** 233 command specs registered at HEAD via the `cmd!` macro (`command_specs()`;
  crates/engine/src/cmd/mod.rs:111-147) plus 36 UI-only commands such as `view.sorter`,
  `app.print`, `show.start` F5 (crates/ui-egui/src/lib.rs:136-179). Each has id, label, menu path,
  shortcut, params doc and an `enabled` reason — list them live with `deckcraft-cli commands`.
- **[impl]** `deckcraft-cli` headless: `info`, `render`, `render-transition`, `convert`, `run`,
  `commands`, `describe`, `app`, `mcp`, `links`, `--version` (apps/deckcraft-cli/src/main.rs:36-45).
- **[impl]** JSON control channel: `deckcraft --control <port>` (or `DECKCRAFT_CONTROL_PORT`),
  bound to 127.0.0.1 only, one JSON request/reply per line (apps/deckcraft/src/control_server.rs:14-21;
  docs/control-protocol.md).
- **[impl]** MCP server over stdio: `deckcraft-cli mcp` (headless) or `--connect PORT` (drives a
  running app); JSON-RPC 2.0 (crates/mcp/src/lib.rs:3-14; tool list crates/mcp/src/tools.rs:65-279).

### Platform
- **[impl]** Native macOS/Windows/Linux/FreeBSD desktop builds, plus a WebAssembly web build that
  shares the same UI (apps/deckcraft-web/src/main.rs:1-16; README.md:164-222). Web differences: no
  TCP control channel, no persisted preferences, Save/Export are browser downloads
  (apps/deckcraft-web/src/main.rs:7-16).

## Known limitations and not-implemented

Comprehensive, ranked gap list: `docs/gaps.md` (reviewed 2026-10-13). The items an agent is most
likely to trip over:

### Formats
- **[none]** No import of legacy `.ppt`/`.pot`/`.pps` (97-2003), no `.odp`, no `.thmx`, no
  `.pptm`/`.potm`/`.ppsm` (docs/file-format-parity.md:22-25; docs/gaps.md:95-105).
- **[partial]** `.potx`/`.ppsx` open as plain presentations and are always **written as plain
  `.pptx`** content type (`file.saveTemplate` is Save As under another name; docs/file-format-parity.md:20-21,
  docs/gaps.md:87-93).
- **[none]** Writing `.pptx` only (plus PDF/PNG/JPEG/outline above). No video MP4/MOV export, no
  animated GIF, no TIFF/BMP/GIF slide images (docs/file-format-parity.md:29-32).
- **[none]** No printing: Print routes through a PDF opened in the system viewer (docs/ui-parity.md:50;
  docs/gaps.md:113-116).
- **[none]** Embedded fonts are neither read nor written (docs/file-format-parity.md:52,87).
- **[none]** SVG pictures do not render; a PPTX SVG shows only its raster fallback
  (docs/gaps.md:78-85). EMF/WMF draw as vectors but without clip regions/EMF+ records (same entry).
- **[partial]** PPTX has **never been tested against a corpus of real-world decks** — fidelity on
  corporate templates, SmartArt, chartex charts, embedded fonts is unknown (docs/gaps.md:61-69).
- **[partial]** PPTX round trip loses comment threads (written as legacy comments), media playback
  options and animation rewind (#70/#74/#77; docs/gaps.md:71-76).

### Feature depth
- **[partial]** Fonts: only Regular, Bold and Italic faces — Light/Medium/Semibold render wrong
  (docs/gaps.md:131-134).
- **[partial]** Animations: 64 of ~190 effects; Animation Pane has no editable timeline
  (docs/animation-parity.md:50-78).
- **[partial]** Charts: data-grid editing and chart elements are partial; `chartex` types
  (waterfall, funnel, treemap, sunburst, histogram, box & whisker) are not read (docs/gaps.md:146-151).
- **[partial]** SmartArt is pre-drawn shapes only; text pane and layout switching are absent, and
  editing a SmartArt from PowerPoint breaks it (docs/gaps.md:153-157).
- **[partial]** 3-D: bevel/camera/lighting render approximately; no extrusion, no command or pane to
  apply 3-D; text warps render all 40 presets but there is no gallery, command or adjust handles
  (docs/gaps.md:167-175).
- **[partial]** Ink from PPTX becomes freeform shapes on save — PowerPoint sees shapes, not ink
  (docs/file-format-parity.md:80).
- **[partial]** Proofing: spelling checks a small built-in list; no dictionaries, thesaurus or
  AutoCorrect (docs/gaps.md:177-180).
- **[partial]** Presenter view opens wherever the OS puts it (not the second display automatically);
  show has no laser pointer, no highlighter, no "See All Slides", no zoom, no record slide show
  (docs/slideshow-parity.md:25-56).
- **[partial]** Tab inside a text box ends text entry (#78; docs/gaps.md:141-144).
- **[none]** No localization: English-only UI, no string catalog (ROADMAP.md:85-106).
- **[none]** No AI/cloud features (Designer, Copilot, Translate, live subtitles) and no add-ins or
  VBA — by policy; MCP/CLI automation is the alternative (docs/gaps.md:243-253).
- **[none]** No native macOS menu bar; menu tree exists in code but is not installed
  (docs/gaps.md:197-198).
- **[none]** No multiple windows: one window holds the open presentations (docs/ui-parity.md:26).

### Stability and platform
- **[partial]** Recorded issues: Close via the raw `file.close` command discards without asking
  (the UI prompts; docs/gaps.md:38-41), startup crashes on some Windows GPUs (#40/#59), image paste
  fails on Windows/Linux (#53), no soak testing (docs/gaps.md:43-55).
- **[partial]** CPU rasterization only (`vello_cpu`), software video decode, no pen pressure or
  trackpad gestures (docs/gaps.md:210-220).

### Conflicting or uncertain
- docs/gaps.md:38-41 says `file.close` does not prompt, while docs/ui-parity.md:53 and
  crates/ui-egui/src/lib.rs:341 show the UI prompting around the command — treat the command itself
  as unsafe on a dirty document. Uncertain — see docs/gaps.md.
- Command count: docs/architecture.md:23 says 226 commands; 233 `cmd!` registrations exist at HEAD.
  Uncertain which is canonical — see crates/engine/src/cmd/mod.rs:124-147 (also `deckcraft-cli commands`).
- Claimed in README/docs but not directly code-verified in this pass: rehearse timings and Set Up Show
  options (README.md:76; docs/slideshow-parity.md:31,53) and the presenter-view window
  (docs/slideshow-parity.md:34-45; crates/ui-egui/src/show.rs exists). Uncertain — see those files.

## How to operate

### Launch (macOS)
- GUI: `open -a DeckCraft` or `open -a DeckCraft file.pptx` (file arguments open; apps/deckcraft/src/main.rs:155,219-223).
  Binary: `/Applications/DeckCraft.app/Contents/MacOS/DeckCraft`. Never launch it just to inspect a
  file — use the CLI/MCP instead.
- Desktop flags: `deckcraft [--control <port>] [--sample] [--show] [files…]`; `--version` prints and
  exits (apps/deckcraft/src/main.rs:3-4,145-157). `--sample` opens the built-in "Northern Lights"
  deck (crates/engine/src/sample.rs:17-22); `--show` starts the slide show from slide 0.
- The app bundle contains **only the GUI binary**; `deckcraft-cli` is a separate signed download
  (`deckcraft-cli-<ver>-macos-universal.zip`; README.md:193-198) or `cargo run --release -p deckcraft-cli -- …`.
  Check `which deckcraft-cli` before scripting; fall back to `cargo run` from a checkout.
- Environment: `DECKCRAFT_CONTROL_PORT` (same as `--control`), `DECKCRAFT_NO_PREFS`,
  `DECKCRAFT_NO_RECOVERY`, `DECKCRAFT_NO_AUDIO` (apps/deckcraft/src/main.rs:60-127), `RUST_LOG`
  directives for stderr and the log file (README.md:136-141).
- Paths on macOS: settings `~/Library/Application Support/DeckCraft/` with `ui.json`, `prefs.json`,
  `logs/deckcraft.log` (rotated to `deckcraft.1.log`/`.2.log`, 16 MiB cap) and `Recovery/`
  (apps/deckcraft/src/main.rs:42-53; crates/engine/src/recovery.rs:17-26; README.md:125-134).

### CLI (exact usage)
```
deckcraft-cli info FILE
deckcraft-cli render (FILE | --sample) [--slide N | --all] [--scale S] [--edit] OUT
deckcraft-cli render-transition FILE --slide N --t T[,T...] [--width PX] OUT.png
deckcraft-cli convert IN OUT
deckcraft-cli run [--in FILE | --sample] [--cmd ID[=JSON]]... [--save OUT] [--export OUT] [--print]
deckcraft-cli commands [FILTER]
deckcraft-cli describe COMMAND
deckcraft-cli app [--port PORT] COMMAND [JSON] | --method METHOD [JSON]
deckcraft-cli mcp [--connect PORT] [--sample]
deckcraft-cli links | --version
```
Verified in apps/deckcraft-cli/src/main.rs:36-45. Notes: `render --all` becomes `<out>/slide-NN.png`;
`--cmd` takes `ID` or `ID={JSON}`; `convert` exports slide 0 for png/jpeg and Save-As otherwise;
`deckcraft-cli app` defaults to port 7979 (crates/mcp/src/lib.rs:29) and talks to a running app
started with `deckcraft --control 7979`.

### Driving the running app (control channel)
`deckcraft --control 7990` then send one JSON object per line to `127.0.0.1:7990`:
```json
{"id":1,"method":"engine.execute","params":{"command":"slide.new","params":{"layout":"titleOnly","title":"Hello"}}}
{"id":2,"method":"ui.screenshot","params":{"path":"/tmp/shot.png"}}
```
Methods include `engine.execute`/`ui.menu.invoke`/`command`, `engine.commands`, `document.inspect`,
`ui.inspect`, `ui.tool.select`, `ui.pointer`, `ui.key`/`ui.text`/`ui.ime`,
`ui.move`/`ui.click`/`ui.drag`, `ui.set`, `ui.dialog.open/close`, `ui.screenshot`, `ui.render`,
`ui.resize`/`ui.focus`, `show.start`/`show.end`, `app.open/save/export/quit`
(docs/control-protocol.md:11-31; implemented in crates/ui-egui/src/control.rs:109-320).
Coordinates are slide points (1/72 inch; 16:9 = 960×540).

### MCP
`deckcraft-cli mcp` serves tools over stdio; `--connect PORT` attaches to the running app so an
agent and a person share the same deck (docs/mcp.md:1-14). Tools: `list_commands`, `run_command`,
`batch`, `new_presentation`, `open_presentation`, `save_presentation`, `export`, `inspect_document`,
`inspect_slide`, `render_slide`, `add_slide`, `go_to_slide`, `add_shape`, `add_text_box`, `set_text`,
`insert_picture`, `insert_table`, `insert_chart`, `select`, `pointer`, `select_tool`, `key`,
`type_text`, plus app-only `screenshot` and `call_app` (crates/mcp/src/tools.rs:65-279).

### Document model and workflow
One window; several presentations can be open at once (switch with `window.next`, Cmd+`); there is
no multi-window arrangement (crates/engine/src/cmd/file.rs:44; docs/ui-parity.md:26). Paths:
File ▸ New/Open/Save/Save As/Export/Print/Close via the Backstage (Alt+F), ribbon tabs Home, Insert,
Draw, Design, Transitions, Animations, Slide Show, Record, Review, View (docs/ui-parity.md:19-23).
Open: recent list, Browse, Recover Unsaved Presentations (`file.recovery.open`). Save As types offered:
PowerPoint, DeckCraft, PDF, Outline, PNG, JPEG (docs/ui-parity.md:49). The canonical workflow for an
agent is: `deckcraft-cli run --in x.pptx --cmd … --save out.pptx` or MCP `run_command` + `render_slide`
to look at results.

Caution: `file.save`/`file.export` decide the format from the output **extension**
(`format_for_path`, crates/engine/src/cmd/file.rs:185-200); any unknown extension silently writes
native `.deckcraft` bytes under that name. Always use the real extension.

## Working with an AI agent

### Legitimate agent work
- **Build and edit decks headlessly** with `deckcraft-cli run` or MCP: `slide.new`, `shape.insert`,
  `text.edit`/`insert`, `format.*`, `insert.picture/table/chart`, `transition.set`, `animation.add`,
  then `--save`/`export`. Verify structure with `document.inspect`/`slide.inspect`/`shape.inspect`
  (crates/engine/src/cmd/inspect.rs:12-15) and looks with `render_slide`/`ui.render` or
  `deckcraft-cli render`.
- **Prepare importable assets**: images as PNG/JPEG/GIF/WebP/BMP/TIFF (crates/engine/src/cmd/insert.rs:237-250;
  `image` 0.25 with those features, Cargo.toml:59); audio/video in the decodable formats above;
  outlines as `.txt`/`.md` — one slide per unindented line, tab-indented lines become body bullets
  (crates/format/src/lib.rs:150-188).
- **Interpret or repair native `.deckcraft` files**: they are plain zip + JSON (format documented in
  crates/format/src/lib.rs:1-20); `load()` runs `repair()` for missing layouts/ids/sizes, and unknown
  JSON fields are ignored by readers — but for real fixes prefer commands over hand-editing JSON, and
  never rewrite the zip with entries missing (`presentation.json` is required).
- **Verify exports**: read the produced PNG/JPEG; open the PDF's text (text layer is real, with
  links and bookmarks); re-open a saved `.pptx`/`.deckcraft` with `deckcraft-cli info` to confirm
  slides survive. Check the CLI's printed `path (W×H)` lines — output is quiet on success otherwise.
- **Drive the live app's UI when needed** through the documented control methods (`ui.*`), including
  `ui.screenshot` for evidence. That is the supported path — not OS-level automation.
- **Troubleshoot via logs**: the app logs to stderr and `~/Library/Application Support/DeckCraft/logs/deckcraft.log`;
  the crash guard and import skips are logged there (README.md:125-141; crates/engine/src/guard.rs:1-9).

### Do not attempt
- Do not assume any format not listed reads: `.ppt`, `.odp`, `.pptm`/macro formats, `.thmx` fail or
  are unrecognized (docs/file-format-parity.md:22-25).
- Do not "save as .potx/.ppsx" expecting template/show semantics — the writer emits a plain
  presentation (docs/gaps.md:87-93).
- Do not promise fidelity for arbitrary PowerPoint-authored decks (never corpus-tested), SVG icons,
  embedded fonts, chartex charts, comment threads or macro content (docs/gaps.md:61-105).
- Do not print expecting a printer dialog: printing exists only as PDF export (docs/gaps.md:113-116).
  Do not export video/GIF, and do not expect a native macOS menu bar.
- Do not issue `file.close` (or quit) on a dirty document from automation — save first; the command
  itself discards (crates/engine/src/cmd/file.rs:342-347; docs/gaps.md:38-41).
- Do not hand-edit `.pptx` zip internals; use the model/commands (unknown PPTX parts do round-trip
  through `Opaque`/`raw_ext`, but only when edited through the app; docs/architecture.md:63-65).
- Do not drive the GUI blindly by coordinates as a substitute for commands: commands are stable,
  pixel positions are not (docs/architecture.md:40-47). And never launch the GUI in a CI/headless
  context — use `deckcraft-cli`/MCP.

## Verification protocol

Alpha-software discipline; a silent bad export is the failure mode to design against.

1. **Throwaway round trip** before trusting any pipeline: create → edit → save → export → reopen.
   ```sh
   deckcraft-cli run --cmd 'file.new={}' --cmd 'slide.new={"layout":"titleAndContent","title":"T"}' --save /tmp/rt.deckcraft
   deckcraft-cli info /tmp/rt.deckcraft
   deckcraft-cli render /tmp/rt.deckcraft --all --scale 1 /tmp/rt-out/
   deckcraft-cli convert /tmp/rt.deckcraft /tmp/rt.pptx && deckcraft-cli info /tmp/rt.pptx
   ```
   Inspect one PNG visually; confirm `info` shows the expected slide count, theme and fonts (the
   `file.open` result also reports `missingFonts`; crates/engine/src/cmd/file.rs:105).
2. **Never trust a silent export**: check exit status, that the file exists and is non-empty, then
   re-read it (`info`, reopen in DeckCraft or PowerPoint). Remember `file.save` falls back to the
   native format for unknown extensions (crates/engine/src/cmd/file.rs:185-200).
3. **Version and back up per session**: copy `.deckcraft`/`.pptx` sources before batch edits. Saving
   deletes the AutoRecover entry for that document (`mark_saved`, crates/engine/src/cmd/file.rs:202-214),
   so recovery protects only unsaved work — it is not a backup. PPTX round trips lose comment
   threads, media options and rewind (docs/gaps.md:71-76): keep the original when fidelity matters.
4. **Update the app only between projects**: the installed bundle was 0.6.1 vs HEAD 0.7.0 at the time
   of writing, and the launcher auto-updates — re-check `deckcraft --version` and re-run the
   round-trip before relying on a newly landed behaviour.
5. **When something breaks**, capture `~/Library/Application Support/DeckCraft/logs/deckcraft.log`
   (plus `.1`/`.2`) and `RUST_LOG=debug` output before filing; the panic report is written there
   (README.md:125-141).

## Sources & evidence

- Repo: https://github.com/storytold/deckcraft — inspected at HEAD
  `d78e657e4cb1e490ceb5445785c052d9cf5ad963` ("Release 0.7.0"), 2026-10-14. Working tree clean.
- Installed app: `/Applications/DeckCraft.app`, CFBundleIdentifier `ai.storyteller.deckcraft`,
  version 0.6.1, exports UTType `ai.storyteller.deckcraft.presentation` (Contents/Info.plist).
- Key files read: README.md; Cargo.toml; AGENTS.md; ROADMAP.md; docs/{architecture,gaps,file-format-parity,
  animation-parity,slideshow-parity,ui-parity,control-protocol,mcp,roadmap}.md;
  apps/deckcraft/src/main.rs; apps/deckcraft-cli/src/main.rs; apps/deckcraft-web/src/main.rs;
  crates/engine/src/cmd/{mod,file,insert,inspect,slide,shape,merge,arrange,review,media,animation,transition,table,format,design}.rs;
  crates/engine/src/{guard,recovery,keys,sample}.rs; crates/format/src/lib.rs; crates/pptx/src/lib.rs;
  crates/pdf/src/lib.rs; crates/mcp/src/{lib,tools}.rs; crates/ui-egui/src/{lib,control,ribbon,dialogs}.rs;
  crates/model/src/{theme,defaults,chart}.rs; crates/geom/src/preset.rs; crates/anim/src/transition_fx.rs.
- Deeper detail (CLI/control/MCP tables, shortcuts, paths) in `references/commands-and-formats.md`
  next to this file.

Files in this skill

  • SKILL.md24.6 KB
  • agents/openai.yaml149 B
  • evidence.md5.4 KB
  • references/commands-and-formats.md12 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.