Seven-skill presentation system: ingest talks into a rhetoric vault, run interactive clarification, generate a speaker profile, create presentations that match your documented patterns, produce the deck illustrations + thumbnail visual layer, create and publish talk-content Agent Skills with talk pages to a Jekyll shownotes site, and verify a recorded screencast against its storyboard. Includes a 113-entry Presentation Patterns taxonomy (83 observable: 64 patterns + 19 antipatterns; 30 unobservable: 21 patterns + 9 antipatterns) for scoring, brainstorming, and go-live preparation.
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Slide structure is created by the real PowerPoint app via the BuildDeck macro
(scripts/build-deck.sh), driven by a flat op sequence — never python-pptx, never
the MCP PPT server. The agent emits the ops; BuildDeck executes them. Op
vocabulary and state rules: skills/presentation-creator/references/deckops-spec.md.
Speaker notes MUST be injected as a separate step AFTER all slides are created,
never inline during slide creation. Inject them with the SetSpeakerNotes macro
(scripts/inject-notes.sh) — see Keynote Compatibility below.
The clean deck retains only the template's layout definitions, no demo/sample
slides. BuildDeck deletes the template's demo slides before creating content,
so stripping is not a separate step.
Keynote uses a stricter OOXML parser than PowerPoint. The rules below
prevent generated .pptx files from being rejected on import.
Inject notes via the real PowerPoint app (scripts/inject-notes.sh →
SetSpeakerNotes); it writes the required <p:notesMasterIdLst> element
natively. No manual patch — the python-pptx pass that omitted-then-patched it
is retired. See rules/deck-editing-rules.md.
Connectors emit <p:cxnSp> elements that Keynote's parser may reject. For a
decorative line, emit a thin SHAPE op with a rectangle msoAutoShapeType (a
small height makes it read as a line) — never a connector.
This applies to any residual python-pptx editing of a deck (e.g. the scrim /
title apply pass). Do not create a shape through python-pptx and then delete it
with element.getparent().remove(element) in the same flow — python-pptx's
internal state diverges from the serialized XML and strict parsers (Keynote)
reject the result. If a shape is not needed, do not create it. Narrowly scoped
XML cleanup utilities that remove pre-existing elements are fine — they operate
on elements not managed by python-pptx's in-memory state.
.tessl-plugin
rules
skills
illustrations
presentation-creator
references
patterns
build
deliver
prepare
scripts
screencast-recorder
shownotes-publisher
vault-clarification
vault-ingress
references
scripts
vault-profile