deckcraft
Skill36 starsChanged 9 days agoMITView on GitHub
Presentations with DeckCraft (PowerPoint-style): build and edit slide decks — pitch decks, reports, lectures, briefings. Slides from layouts, bullets, pictures, charts, tables, shapes, SmartArt and icons, themes and backgrounds, speaker notes, transitions, animations and motion paths, reusing slides from other decks. Open and save .pptx, export PDF (slides, notes, handouts), PNG (also transparent), animated GIF and RTF/text outlines.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- midasmatterhorn/artcraft-skillstheir own version, first seen Oct 17, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- midasmatterhorn/artcraft-skills★ 66same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository18 other files it gives its agents.
- cadcraftSkill
- craft-anythingSkill
- designcraftSkill
- effectcraftSkill
- figcraftSkill
- filmcraftSkill
- gridcraftSkill
- lightcraftSkill
- materialcraftSkill
- pdfcraftSkill
- photocraftSkill
- solidcraftSkill
- soundcraftSkill
- storytold-installSkill
- storytoldSkill
- texturecraftSkill
- vectorcraftSkill
- wordcraftSkill
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 1 is distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 22
Use it for slides:
- Very specific: line 40
If tools named mcp_deckcraft_* are available, use them.
- Very specific: line 60
Shape ids are numbers: Every creating tool returns {id}.
- Very specific: line 68
Every action is a command (331).
- Very specific: line 277
Placeholders you don't fill stay on the slide: Delete unused ones (edit.delete {ids}) after putting a picture or chart in their place, or …
- Very specific: line 290
Check ids with inspect_slide.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
DeckCraft
DeckCraft is a free, open-source clean-room take on Microsoft PowerPoint (storytold Crafting Apps). An agent
drives it through an MCP server (deckcraft-cli mcp) or one-shot CLI commands. It opens and saves .pptx,
and exports PDF (slides, notes pages, handouts), PNG/JPEG, animated GIF and text or RTF outlines. This skill is tested against DeckCraft 0.15.1.
When to Use
Use it for slides:
- pitch decks, quarterly reviews, lectures, training, status briefings, kickoff decks
- turning an outline or report into a deck, with charts, tables and speaker notes
- editing an existing
.pptx: retheme, fix text, add notes/transitions, export PDF handouts or slide PNGs
Pick a different Crafting App when:
| The job is… | Use |
| A written document, report or letter (flowing text) | wordcraft |
| The numbers themselves: spreadsheets, models, data cleaning | gridcraft |
| A logo, icon or custom illustration to put on a slide | vectorcraft (export PNG/SVG, then insert it) |
| Retouching a photo before it goes on a slide | photocraft |
| Print layouts: brochures, posters, magazines | designcraft |
Setup
- If tools named
mcp_deckcraft_*are available, use them. This is the preferred way. - Otherwise check for the CLI with
deckcraft-cli --version. If it's missing, load thestorytold-installskill and run itssetup deckcraft. Then ask the user to start a new session or run/reload-mcp. - Until the MCP tools appear, use the CLI one-shots (see CLI).
The server is headless by default (in-process engine, no window). Everything works except screenshot and the
ui.* methods of call_app. For the user to watch live: deckcraft --control 7990, then deckcraft-cli mcp --connect 7990
(a port or host:port). --sample starts on the built-in sample deck. Optional --automation-read-root DIR /
--automation-write-root DIR confine every file the server reads and writes (paths stay absolute; outside them you get
automation path rejected: outside the write roots <DIR>, <DIR>: <path>). Repeat either flag to allow more folders. A root
left out grants none of that access, and they conflict with --connect. Bare mcp is unconfined. The server also exposes two MCP resources: document (same as
inspect_document) and commands (the full command list).
Mental Model
- Slides are built from layouts (
title,titleAndContent,sectionHeader,twoContent,comparison,titleOnly,blank,contentWithCaption,pictureWithCaption). A layout gives placeholders (title, bodyobj, subtitle…) that inherit the theme's fonts and positions. Fill them withset_text {id, text}. - Coordinates are points, y down. A 16:9 slide is 960 × 540. Boxes are
[x, y, w, h]. Title placeholders sit at about[60, 29, 840, 104], the body at[60, 144, 840, 343]; keep free-placed content insidey ≥ 140. - Shape ids are numbers. Every creating tool returns
{id};inspect_slidelists every shape's id, kind, placeholder type, box and text. Formatting commands act on the selection (select {ids}) or onids. A wrong id inidsis refused (invalid parameters for `shape.fill`: no such shape); it no longer falls back to the selection. - Tool arguments are checked (
add_shape: unknown argument "rect" (expected: fill, h, line, preset, text, w, x, y)), but unknown keys insiderun_commandparams are still ignored silently. - There's a current slide.
add_slideinserts after it and makes the new slide current;go_to_slide {index}switches. Shape tools (add_shape,insert_chart…) act on the current slide. Slide indexes are 0-based. - Theme colours (
accent1..accent6,tx1,bg1) work anywhere a colour does, so a retheme recolours them. - Every action is a command (331).
run_command {command, params}runs one,batchruns several.
Tools (Hermes names them mcp_deckcraft_<tool>)
| Tool | Use it for |
new_presentation {theme?, blank?} | New deck with one empty title slide (in a fresh session its title/subtitle are ids 258/259; confirm with inspect_slide), or none with blank: true |
open_presentation {path} / save_presentation {path} | .pptx or .deckcraft (native), picked by extension; open also reads an .rtf outline. Open returns missingFonts (drawn with a substitute), lostSlides and damagedMedia (parts it couldn't read) |
add_slide {layout, title?, body?} | New slide after the current one. body: one paragraph per line |
set_text {id, text} | Replace a shape's text. Leading tabs set bullet levels |
add_shape {preset, x, y, w, h, fill?, line?, text?} | Preset shapes (references/catalogs.md); fill #RRGGBB or accent1..6 |
add_text_box {x, y, w, text, size?, color?, align?} | Free text; height grows to fit |
insert_picture {path, x?, y?, w?, h?} | Image from file (or data base64) |
insert_table {rows, cols, data?, x?, y?, w?, h?} | Table, first row styled as header |
insert_chart {type, categories, series:[{name, values}], title?, x?, y?, w?, h?} | Native chart. Give the box: without it the chart lands over the title (see Pitfalls) |
inspect_document / inspect_slide {index?} | Deck structure / one slide's shapes, notes, transition, animations |
render_slide {slide?, scale?, edit?} | PNG of a slide so you can look at it (scale: 0.6 is enough to check; edit shows placeholder prompts) |
export {path, format?, all?, slide?, scale?} | png/jpeg (one or all slides), pptx, deckcraft, outline, rtf (outline as RTF), pdf, gif. Format defaults to the extension. A PNG with no background: run_command file.export {path, slide, transparentBackground:true} (the export tool refuses that key) |
export {path, format:"pdf", layout?, perPage?, slides?, dpi?, includeHidden?, textLayer?, frame?} | PDF: layout slides/notes/handouts, perPage 1/2/3/4/6/9. slides: [0,1,3] (0-based) or "1-2,4" (1-based, like the print dialog). Notes/handouts: paper letter/a4/legal/a3, orientation |
export {path, format:"gif", width?, secondsPerSlide?, loop?, slides?} | Animated GIF, one frame per slide. width px or small 640/medium 960/large 1280/extraLarge 1920 |
select {ids}, go_to_slide {index} | Selection and current slide |
list_commands {filter} / run_command / batch | Everything else |
pointer, select_tool, key, type_text | Mouse/keyboard emulation (rarely needed) |
screenshot, call_app {method, params} | Desktop app (--connect). Headless, screenshot and most ui.* methods fail; engine methods (document.inspect) work |
Commands you'll use most
- Start:
file.new {template}opens a 5-slide starter deck (Briefing,Lesson,Pitch,Field Notes,Quarterly,Evening Talk;file.templateslists them).slide.reuseList {path}lists another deck's slides;slide.reuse {path, slides?}copies them in. - Slides:
slide.notes {text, index?},slide.layout {layout},slide.duplicate,slide.move {from, to},slide.delete {index},slide.hide,slide.fromOutline {text},section.add {name, at},slide.actions {index?}(lists click/hover actions and links without running them). - Design:
design.theme {name},design.colors {name | colors},design.fonts {name | major, minor},design.background {color | gradient | style, index?, all?},design.headerFooter {slideNumber, footer, footerText, hideOnTitle},design.slideSize {preset | w, h, orientation?},design.effects {name},design.variant {index}. - Text (on selection):
format.size {size},format.bold,format.color {color},format.font {family},format.align {align},format.bullets {on, char?},format.numbering {on, scheme?},format.paragraph {spaceAfter…},format.autofit {mode}. - Shapes:
shape.fill {color | gradient | transparency | background:true}(a group formats its members),shape.line {color, width, dash, tail},shape.effects {shadow: "outer"},shape.setBounds {x, y, w, h, ids},shape.connect {from, to, preset?},arrange.align {edge, to?},arrange.distribute,arrange.group. - SmartArt & icons:
insert.smartArt {kind, items}(items with leading tabs are sub-points) →{id};smartArt.layout {kind},smartArt.style {style},smartArt.colors {colors},smartArt.nodes/smartArt.setNodes,smartArt.fromText/toText.insert.icon {name, rect?}adds a Lucide icon as stroked shapes (shape.linerecolours it). - Charts & tables:
chart.options {title, legend, dataLabels, gridlines, textColor},chart.data,chart.type,table.style {style: "medium2-accent1"…},table.options {headerRow, bandedRows…},table.cellFill {color, cells},table.merge,table.borders {which, color?, width?},table.cellAlign {anchor?, align?}(vertical and horizontal). - Motion:
transition.set {kind, option?, duration?},transition.applyAll,animation.add {effect, ids, start?},animation.options {textBuild: "byParagraph", index},animation.painter {id}+animation.painterApply {ids}(copy a sequence). Motion path of your own:animation.add {effect:"customPath", path:[[0,0],[200,-60],[400,0]], ids}(points are offsets from the shape, in pt). - Files:
file.export {path, format: "pdf", layout?: slides|notes|handouts, perPage?}(same as theexporttool),file.properties {title, author…},file.info(path, format, dirty, slide/hidden/section counts, properties). - Selection Pane:
selection.select {ids}(reaches into groups),selection.hideAll/selection.showAll,shape.visible {visible, ids},shape.lock {locked?, ids}(nolocked= toggle),arrange.reorder {id, index}. - Text across the deck:
text.find {text}→ matches,text.replace {text, with}→{replaced}(slides, tables, notes),font.replace {from, to}. - Pictures:
picture.removeBackground,picture.style {style},picture.recolor {preset},picture.crop,picture.compress. - Other:
insert.hyperlink {url | slide, text?},shape.action {action, slide? | url?},insert.zoom {kind},format.rtl {on}(right-to-left paragraphs),media.gifPlay {id, play?}(animated GIFs play in the show),review.accessibility,review.spelling(Hunspell when installed),review.compare {path}+review.accept/review.reject,format.languageAll {lang}(proofing language of every text).
Procedure
- Plan one message per slide, the layout for each, and where charts/tables/pictures go. Pick a theme
(
DeckCraft,Harbor,Ember,Meadow,Nocturne,Paper,Coral Reef,Slate). - Build slide by slide:
add_slide {layout, title}→inspect_slidefor the placeholder ids →set_text/insert_*→slide.notes. - Style with theme colours, then transitions (
transition.set+transition.applyAll) and a few animations. - Look:
render_slideevery slide. Check overlap with the title, overflow, contrast, empty placeholders. - Save
.pptx, then export PDF/PNGs. Absolute paths; the PNG output folder must exist.
Recipe: 5-slide review deck (tested)
new_presentation {theme:"Harbor"}
set_text {id:258, text:"Northwind Q3 Review"} · set_text {id:259, text:"Leadership update - October 2026"}
run_command design.background {color:"#12384D", index:0}
select {ids:[258,259]} → run_command format.color {color:"#FFFFFF"}
run_command slide.notes {text:"Welcome. Twenty minutes, questions at the end.", index:0}
add_slide {layout:"titleAndContent", title:"Highlights"} → inspect_slide → body placeholder id (here 262)
set_text {id:262, text:"Revenue up 12% quarter on quarter\nTwo new markets\n\tPorto\n\tWarsaw\nChurn down to 2.1%"}
run_command animation.add {effect:"fade", ids:[262]} → run_command animation.options {textBuild:"byParagraph", index:0}
add_slide {layout:"titleOnly", title:"Revenue by region"}
run_command insert.chart {type:"column", rect:[80,140,800,370], categories:["North","South","East"],
series:[{name:"Q2", values:[420,310,280]}, {name:"Q3", values:[470,355,300]}]}
(same with the tool: insert_chart {type, categories, series, x:80, y:140, w:800, h:370})
run_command chart.options {title:null, dataLabels:true, legend:"b"}
add_slide {layout:"titleOnly", title:"Team"}
insert_table {rows:3, cols:2, x:80, y:150, w:800, h:150, data:[["Name","Role"],["Ana","Lead"],["Raj","QA"]]}
run_command table.style {style:"medium2-accent2"}
add_slide {layout:"twoContent", title:"Product snapshot"} → placeholders 271 (left), 272 (right)
set_text {id:271, text:"Faster sync engine\nOffline mode\n\tiOS and Android"}
insert_picture {path:"/abs/chart.png", x:488, y:170, w:412, h:206} → run_command edit.delete {ids:[272]}
run_command design.headerFooter {slideNumber:true, footer:true, footerText:"Northwind - Confidential", hideOnTitle:true}
run_command transition.set {kind:"fade", duration:600} → run_command transition.applyAll
render_slide {slide:i, scale:0.6} for each slide → look, fix
save_presentation {path:"/abs/deck.pptx"}
export {path:"/abs/deck.pdf"} (format from the extension)
export {path:"/abs/deck-notes.pdf", format:"pdf", layout:"notes"} (or layout:"handouts", perPage:6)
export {path:"/abs/png/slide.png", format:"png", all:true, scale:1} → png/slide1.png … (folder must exist)
export {path:"/abs/deck.gif", width:"small", secondsPerSlide:2} → {frames, width, height}
export {path:"/abs/deck.rtf"} (outline as RTF; .txt with format:"outline")Recipe: diagram slide with shapes (tested)
add_slide {layout:"blank"}
add_shape {preset:"roundRect", x:60, y:60, w:260, h:140, fill:"accent1", line:"none", text:"Plan"}
add_shape {preset:"roundRect", x:350, y:60, w:260, h:140, fill:"accent2", line:"none", text:"Build"}
add_shape {preset:"roundRect", x:640, y:60, w:260, h:140, fill:"#F78154", line:"none", text:"Ship"}
add_text_box {x:60, y:300, w:840, text:"Three phases, one team.", size:40, align:"center", color:"#12384D"}
select {ids:[<the three ids>]} → run_command format.size {size:28} → run_command format.bold
run_command shape.connect {from:<id A>, to:<id B>, preset:"straightConnector1"} ← glued connector → {id}
run_command shape.line {color:"tx1", width:2.5, tail:"triangle", ids:[<connector id>]} (default line is thin and pale)
select {ids:[…]} → run_command shape.effects {shadow:"outer"}
render_slide {scale:0.6} (moving a box later drags its connector along)Recipe: process diagram with SmartArt and an icon (tested)
add_slide {layout:"titleOnly", title:"How it works"}
run_command insert.smartArt {kind:"process", items:["Sign up","Connect","\tBank","\tCards","Save"]} → {id}
run_command smartArt.nodes → [{text, level}]: Bank and Cards are level 1 under Connect
run_command smartArt.style {style:"polished"} · smartArt.colors {colors:"colorful"} · smartArt.layout {kind:"chevron"}
run_command insert.icon {name:"lightbulb", rect:[860,30,60,60]} → shape.line {color:"accent1", width:3}
render_slide {scale:0.6}Recipe: edit an existing deck (tested)
open_presentation {path:"/abs/deck.pptx"} → inspect_document (slide titles, notes, transitions)
run_command slide.notes {text:"…", index:0} · go_to_slide {index:1} → inspect_slide → set_text {id, text}
run_command design.theme {name:"Slate"} (accent fills and fonts follow; hex colours stay)
save_presentation {path:"/abs/deck-v2.pptx"} (notes, animations, transitions survive)Recipe: morph between two slides (tested)
Morph animates shapes that share a name between a slide and the one before it. Duplicate, then change.
add_slide {layout:"blank"} → add_shape {preset:"ellipse", x:80, y:200, w:140, h:140, fill:"accent1", line:"none"}
add_text_box {x:80, y:40, w:800, text:"Step 1: start small", size:40}
run_command slide.duplicate → the copy becomes current; its shapes get new ids, same names (inspect_slide)
run_command shape.setBounds {x:600, y:160, w:280, h:280, ids:[<copied ellipse>]} · shape.fill {color:"accent2", ids:[…]}
set_text {id:<copied text box>, text:"Step 2: grow"}
run_command transition.set {kind:"morph", option:"objects", index:<copy index>} (words / characters morph text)
save_presentation {path:"/abs/morph.pptx"} (writes p159:morph with a fade fallback for old viewers)render_slide shows the end states only. To see the motion headlessly, render frames of the transition into a slide
(--slide is 0-based, --t is 0..1 of the duration): deckcraft-cli render-transition /abs/morph.pptx --slide 1 --t 0.25,0.5,0.75 --width 480 /abs/m.png
→ m-t0.250.png … (tested: the circle sits halfway, colour blended).
Recipe: reuse slides and add a motion path (tested)
new_presentation {}
run_command slide.reuseList {path:"/abs/deck.pptx"} → {name, slides:[{index, title, hidden}]}
run_command slide.reuse {path:"/abs/deck.pptx", slides:[2,3]} → {ids, slides:2} (they take this deck's theme)
go_to_slide {index:1} → inspect_slide → the shape to move
run_command animation.add {effect:"customPath", path:[[0,0],[200,-60],[400,0]], ids:[<id>]}
→ {count, path:"M 0 0 L 0.208333 -0.111111 L 0.416667 0 E"}Formats
- Open: .pptx .deckcraft, and an
.rtfoutline (one slide per top-level paragraph). Save: .pptx .deckcraft. Export: PDF (slides,notes,handoutswithperPage1/2/3/4/6/9), PNG/JPEG (one slide or all; PNG optionally without the background), animated GIF, outline as text (format: "outline";.txt/.mdfrom the CLI) or RTF (.rtf). - PDF has a selectable text layer (
textLayer: falseturns it off);dpi(36-600, default 200) sets the resolution of slide artwork.deckcraft-cli convert deck.pptx deck.pdfdoes it without MCP. - From PowerPoint files DeckCraft draws WMF/EMF/EMF+ pictures, WordArt warps and combo charts, and since 0.8.0 Office 2016 charts (waterfall, funnel, treemap, sunburst, histogram, box and whisker), trendlines, error bars, SmartArt and 3-D effects. Comments, embedded fonts and sections survive a .pptx round trip (per the release notes).
CLI (no MCP needed)
deckcraft-cli info deck.pptx # JSON: slides, layouts, theme, notes
deckcraft-cli render deck.pptx /abs/outdir --all --scale 0.5 # outdir/slide-01.png … (OUT is a folder with --all)
deckcraft-cli render deck.pptx slide3.png --slide 2 # --slide is 0-based; --edit shows placeholder prompts
deckcraft-cli render deck.pptx logo.png --slide 2 --transparent # RGBA, slide background left out
deckcraft-cli convert deck.pptx deck.pdf # or .pptx .deckcraft .md/.txt/.rtf (outline) .png .gif; others refused
deckcraft-cli run --cmd 'file.new={"theme":"Ember"}' \
--cmd 'slide.fromOutline={"text":"Agenda\n\tWhy now\n\tPlan\nRisks\n\tBudget"}' --save /abs/o.pptx --export /abs/o.pdf
deckcraft-cli commands [FILTER] · deckcraft-cli describe shape.fill # one command's params
deckcraft-cli render --sample /abs/sample.png --slide 1 # built-in sample deck, handy for a test picture
deckcraft-cli render-transition deck.pptx --slide 1 --t 0,0.5,1 --width 480 /abs/tr.png # tr-t0.000.png … frames of the transition into slide 1
deckcraft-cli run --in deck.pptx --export /abs/d.gif --export-params '{"width":"small","secondsPerSlide":3}'
deckcraft-cli run --cmd-file cmds.txt --save /abs/o.pptx --print # one `id={json}` per line, # comments; no shell quoting
deckcraft-cli app [--port PORT] COMMAND [JSON] # run a command in a running desktop app
deckcraft-cli help [SUBCOMMAND] # usage for one subcommand (also SUBCOMMAND --help)Pitfalls
- A chart without a box lands over the title:
insert_chartwith nox, y, w, h(andinsert.chartwith norect) puts it at[144, 81, 672, 378], even on a content layout (it doesn't fill the placeholder). Always pass the box, or move it withshape.setBounds {x, y, w, h, ids}. - A chart without
titleshows "Chart Title". Passtitle, orchart.options {title:null}to remove it. - An unknown chart
typeis not an error:insert_chart {type:"bogus"}makes a clustered column chart. Use the names ininsert.chart(column,bar,line,pie,doughnut,area,scatter,stackedColumn…) and check withinspect_slide. - Placeholders you don't fill stay on the slide. Delete unused ones (
edit.delete {ids}) after putting a picture or chart in their place, or usetitleOnly/blanklayouts. animation.optionswithoutindexfails:invalid parameters for `animation`: no animation to change (select an animated object or give `index`).animation.add {ids}doesn't select the shape. Useindex(0-based on the current slide) orselectfirst.export {all:true}writes<stem>1.png,<stem>2.png… and fails if the folder doesn't exist:…/slide1.png: No such file or directory (os error 2)(Windows:The system cannot find the path specified. (os error 3)).- The
exporttool refusestransparentBackground(export: unknown argument "transparentBackground" (expected: all, dpi, …)); userun_command file.export {path, slide, transparentBackground:true}ordeckcraft-cli render … --transparent. - The outline (
format:"outline",.rtf,.md) also lists footer text and the slide-number field (‹#›) under each slide that shows them. - (seen in 0.8.0, not re-checked)
pdftotextreads a slide-number field as<and joins bullet lines (Revenue up 12% quarter on quarter Two new markets) in DeckCraft PDFs. The visible PDF is fine. For a text check useexport {format:"outline"}orinspect_document. shape.connectwith a wrong id saysboth shapes need connection sites (lines and groups have none)rather than "not found". Check ids withinspect_slide.exportto a path with an unknown extension and noformatsilently writes a native.deckcraft(zip) under that name. Giveformator a known extension. (A badformatis refused:unknown format `tiff`.)- SmartArt text sits centred in its boxes, but after a
.pptxsave and reopen it sits at the top of each box. deckcraft-cli run --cmd file.newmakes a second document ({"document":1}; the run starts with one); the active (new) one is saved.slide.fromOutlineappends after the existing empty title slide; add--cmd 'slide.delete={"index":0}'.- Text inside
add_shapeshapes comes out small; size it withselect+format.size. - Use theme colours (
accent1..accent6) for anything that should follow a retheme. Hex fills and text colours stay put when you rundesign.theme(andinspect_slidereports both as resolved hex, so you can't tell them apart later). - Errors are explicit, e.g.
unknown command `shape.fil`,invalid parameters for `slide.layout`: no layout "bogus",invalid parameters for `slide.go`: no slide 99(go_to_slidetoo),invalid parameters for `shape.fill`: no such shape. Look ids up withlist_commands {filter}ordeckcraft-cli describe ID; don't invent them. - UI-only tools fail headless:
screenshot: it needs the desktop app: start `deckcraft --control 7979` and run the MCP server with `deckcraft-cli mcp --connect 7979`. Use render_slide to see a slide headlessly.call_app ui.click(and other UI actions) fail withui.click: it needs the desktop app: …;call_app ui.inspectanswers{headless: true, tool}.
Verification
inspect_document: slide count, titles, layouts,notes,transition,animationsper slide.render_slideevery slide and look before reporting done.deckcraft-cli info out.pptxreopens the saved file;export {format:"outline"}gives a quick text check.
References
Grep these rather than reading them whole:
${HERMES_SKILL_DIR}/references/commands.md: all 331 commands with params, menu place and shortcut (grep -n 'chart[.]' ${HERMES_SKILL_DIR}/references/commands.md).${HERMES_SKILL_DIR}/references/catalogs.md: themes, colour/font/effect schemes, starter decks, 183 shape presets, 49 transitions, 107 animation effects, 70 icons, picture styles (grep -n 'morph' ${HERMES_SKILL_DIR}/references/catalogs.md).- Upstream docs: https://github.com/storytold/deckcraft/tree/main/docs (
mcp.md,control-protocol.md).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

