Two-skill presentation system: analyze your speaking style into a rhetoric knowledge vault, then create new presentations that match your documented patterns. Includes an 88-entry Presentation Patterns taxonomy for scoring, brainstorming, and go-live preparation.
Overall
score
95%
Does it follow best practices?
Validation for skill structure
Build presentations that match the speaker's documented rhetoric and style patterns. The rhetoric-knowledge-vault is this skill's constitution. Every presentation is a joint effort — the skill brings rhetoric knowledge, the author brings topic expertise.
This skill defines PROCESS. The vault provides CONTENT. All instruments, thresholds, voice patterns, and design rules come from the vault at runtime.
If the vault root path is unknown, ask via AskUserQuestion.
Load from vault root: rhetoric-style-summary.md (constitution — all patterns),
slide-design-spec.md (visual rules), speaker-profile.json (structured data).
Then load local references: references/process.md, references/guardrails.md,
references/patterns/_index.md.
Checks: Warn if profile.generated_date < summary."Last updated" (stale profile).
Warn if schema_version > 1. If profile doesn't exist (<10 talks), run in
summary-only mode — read instruments from summary prose, use default guardrail
thresholds (1.5 slides/min, 45% Act 1 cap), ask for template/publishing interactively.
| Phase | What happens | Gate |
|---|---|---|
| 0: Intake | Load vault, gather context | Topic and context captured |
| 1: Intent Distillation | Clarifying questions → Presentation Spec | Author confirms spec |
| 2: Rhetorical Architecture | Joint instrument selection from vault catalog | Author approves architecture |
| 3: Content Development | Section-by-section outline with speaker notes | Draft delivered |
| 4: Revision & Guardrails | Iterate on feedback, run guardrail checks | Author declares outline done |
| 5: Slide Generation | Build .pptx from template, iterate with author | Author declares slides done |
| 6: Publishing | Export, shownotes, QR per speaker's workflow | Published and ready |
Do not skip phases. Do not write content before Phase 3. Phase 2 is joint, not autonomous.
Ask about what's missing; skip what's known. See references/process.md for the full
question set. Produce the Presentation Spec:
PRESENTATION SPEC
=================
Title: [working title]
Thesis: [one sentence]
Audience: [who]
Venue: [conference, slot, format]
Mode: [from profile presentation_modes — present options]
Commercial intent: [none / subtle / direct]
Must-include: [list]
Must-avoid: [list]
Co-presenter: [none | name + handle + role split]
Profanity register:[from profile rhetoric_defaults]
Duration target: [from profile rhetoric_defaults.default_duration_minutes]
Shownotes slug: [from profile speaker.shownotes_url_pattern]Gate: Author confirms or edits the spec.
The instrument menu comes from the vault, not from a static file. Read the summary
(sections 2-13) and profile instrument_catalog for options.
Mode, Opening, Narrative, Humor, Audience Interaction, Closing, Slide Design,
Persuasion, Template Patterns, Pattern Strategy. Each reads from the matching
instrument_catalog entry + summary section. Decision #10 uses the 4-tier Pattern
Strategy from references/patterns/_index.md + profile → pattern_profile (see
references/process.md for the full tier logic).
For each: present options, recommend based on spec, let author choose.
If co-presented, add role split and voice differentiation — see references/process.md.
Slide budget — read from profile → guardrail_sources.slide_budgets at runtime.
If the profile is unavailable (summary-only mode), use these defaults:
| Duration | Max slides | Slides/min |
|---|---|---|
| 20 min | 30 | 1.5 |
| 30 min | 45 | 1.5 |
| 45 min | 70 | 1.5 |
| 60 min | 90 | 1.5 |
| 75 min | 110 | 1.5 |
Gate: Author approves the architecture.
Write the talk as a section-by-section outline. See references/process.md for the full
outline format, voice calibration, callback identification, and placeholder types.
Outline structure (abbreviated — full format in references/process.md):
# [Talk Title]
**Spec:** [mode] | [duration] | [venue]
**Slide budget:** [N slides]
## Opening Sequence [3 min, slides 1-5]
### Slide 1: Title Slide
- Visual: [description]
- Speaker: [no notes — visual only]
### Slide 2: [Opening hook]
- Visual: [description]
- Speaker: "[opening lines in the speaker's voice]"
## Act 1: [Title] [N min, slides X-Y]
...
## [CUT LINE: drop below here for short version]
...
## Closing Sequence [3 min, slides N-end]Placeholders use typed, independent numbering:
[AUTHOR 01], [DEMO 01], [DATA 01], [SCREENSHOT 01], [MEME 01]
Save to: {presentations-dir}/{conference}/{year}/{talk-slug}/presentation-outline.md
Run guardrail checks from references/guardrails.md with thresholds from the profile.
GUARDRAIL CHECK — {talk title}
================================================
[PASS/FAIL] Slide budget: {actual}/{max} for {duration}-min slot
[PASS/WARN] Act 1 ratio: {%} (limit: {max}% — 40% for 20-30min, 45% for 45min, 50% for 60+min)
[PASS/FAIL] Branding: footer elements for {conference}
[PASS/FAIL] Profanity: {register} applied, {N} on-slide
[PASS/FAIL] Data attribution: {N} slides checked, {M} missing sources
[PASS/FAIL] Time-sensitive: {count} items
[PASS/FAIL] Closing: summary={y/n} CTA={y/n} social={y/n}
[PASS/FAIL] Cut lines: {present/missing}
[INFO] Anti-patterns: {flags from profile recurring_issues}
[INFO] Pattern score projection: {estimated score based on architecture decisions}
[RECURRING/CONTEXTUAL] Presentation Patterns: {taxonomy-based antipattern flags}
================================================Iterate on author feedback. Apply changes first, guardrail second. Flag but don't block
intentionally overridden guardrails. See references/process.md for iteration protocol.
Build the .pptx deck from the finalized outline. See references/slide-generation.md
for the full technical reference.
Setup:
from pptx import Presentation
# Strip demo slides from template, keep layouts only
tmpl = Presentation(profile["infrastructure"]["template_pptx_path"])
xml_slides = tmpl.slides._sldIdLst
for sldId in list(xml_slides):
rId = sldId.get('{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id')
tmpl.part.drop_rel(rId)
xml_slides.remove(sldId)
tmpl.save(output_path)Then open with MCP open_presentation and walk the outline: add_slide → populate_placeholder
→ manage_image for each slide. Inject speaker notes via python-pptx batch after MCP generation.
Key rules from profile:
design_rules.background_color_strategy — how to pick background colorsdesign_rules.footer — pattern, position, font, color adaptationdesign_rules.slide_numbers — typically "never"infrastructure.template_layouts[] — layout index + placeholder mappingRead publishing_process from speaker-profile.json. Each speaker's workflow differs.
If publishing_process is missing or empty, ask the author interactively.
Execute the steps from the profile:
export_method / export_script (see references/slide-generation.md)shownotes_publishing.enabled, follow the described methodqr_code.enabled, generate and insert per profileadditional_steps[] entryreferences/patterns/_index.md
as a delivery preparation reminder (see references/process.md Step 6.5)Gate: Author confirms published and ready to deliver.
{vault_root}/analyses/Install with Tessl CLI
npx tessl i jbaruch/speaker-toolkitevals
scenario-0
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
skills
presentation-creator
references
patterns
build
deliver
prepare
rhetoric-knowledge-vault