Four-skill presentation system: ingest talks into a rhetoric vault, run interactive clarification, generate a speaker profile, then create new presentations that match your documented patterns. Includes an 88-entry Presentation Patterns taxonomy for scoring, brainstorming, and go-live preparation.
96
93%
Does it follow best practices?
Impact
97%
1.21xAverage score across 30 eval scenarios
Advisory
Suggest reviewing before use
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.
The vault lives at ~/.claude/rhetoric-knowledge-vault/ (may be a symlink to a custom
location). Read tracking-database.json from there to get config.vault_root.
Load from vault root: rhetoric-style-summary.md (constitution — all patterns),
slide-design-spec.md (visual rules), speaker-profile.json (structured data).
The interaction-rules steering rule (one-question-at-a-time, applies to all phases)
is loaded automatically via tile steering — do not treat it as a vault-root document.
Then load local references per phase:
references/phase0-intake.md,
references/phase1-intent.md,
references/phase2-architecture.md,
references/phase3-content.md,
references/phase4-guardrails.md,
references/phase5-slides.md,
references/phase6-publishing.md,
references/phase7-post-event.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 |
| 7: Post-Event | YouTube thumbnail, video to shownotes | Thumbnail approved, video linked |
Do not skip phases. Do not write content before Phase 3. Phase 2 is joint, not autonomous.
Even when the user asks for a single task (QR code, export, shownotes), vault loading is mandatory. Do not jump straight to the action. Minimum context before ANY Phase 6 action:
speaker-profile.json — publishing config, shortener, URL patternssecrets.json — API keys for shorteners and Geminipresentation-spec.md — talk slug, metadata (source of truth)presentation-outline.md — the outline (slide references, shownotes URL)If any file is missing, STOP and ask. Do not guess values that should come from files. Never hand-write code when a script exists — if the script isn't working, diagnose why (wrong args, missing config, missing secrets) and fix the inputs.
Phase 7 late entry requires the same 4 files plus a YouTube video URL from the speaker. If shownotes don't exist and Step 7.2 is requested, STOP and ask — either run Phase 6 Step 6.1 first or get the shownotes URL manually.
Ask about what's missing; skip what's known. See references/phase1-intent.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: [generated per profile shownotes_slug_convention — see phase1-intent.md]Gate: Author confirms or edits the spec.
Save to: {presentations-dir}/{conference}/{year}/{talk-slug}/presentation-spec.md
This file is the source of truth for the talk slug, duration, mode, and other metadata. Later phases (especially Phase 6 publishing) read it — do not rely on conversation context for these values.
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, Illustration 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.
Decision #11 (Illustration Strategy) is optional — only when the author wants
AI-generated illustrations; covers style proposals, format vocabulary, model choice,
and visual continuity devices (see references/phase2-architecture.md for full workflow).
For each: present options, recommend based on spec, let author choose. If co-presented, add role split and voice differentiation — see references/phase1-intent.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/phase3-content.md for the full outline format, voice calibration, callback identification, and placeholder types.
Outline structure (abbreviated):
# [Talk Title]
**Spec:** [mode] | [duration] | [venue]
**Slide budget:** [N slides]
## Illustration Style Anchor ← only when illustration strategy is defined
**Model:** `model-name`
### STYLE ANCHOR (FULL — Landscape 1920×1080)
> [anchor paragraph]
## Opening Sequence [3 min, slides 1-5]
### Slide 1: Title Slide
- Format: **FULL** ← only when illustration strategy is defined
- Illustration: [visual concept]
- Image prompt: `[STYLE ANCHOR]. [generation prompt]`
- Visual: [description]
- Speaker: [no notes — visual only]
### Slide 2: [Opening hook]
...
## Act 1: [Title] [N min, slides X-Y]
...
## [CUT LINE: drop below here for short version]
...
## Closing Sequence [3 min, slides N-end]When an illustration strategy is defined, each slide gets Format, Illustration, and
Image prompt fields. The [STYLE ANCHOR] token in prompts references the header
anchors. Talks without illustration strategy use the standard - Visual: field only.
Placeholders — use typed, independent numbering (each type starts at 01):
[AUTHOR 01], [DEMO 01], [DATA 01], [SCREENSHOT 01], [IMAGE 01], [MEME 01]
Every placeholder requiring author input MUST use one of these typed tags — never use
generic [TODO] or [TBD]. Meme placeholders MUST include a structured brief:
[MEME 01]
Template: [meme template name]
Search query: "[search terms to find the template image]"
Overlay text: [specific text to apply]
Rhetorical function: [what argument this meme serves]See references/phase3-content.md for full placeholder type definitions.
Save to: {presentations-dir}/{conference}/{year}/{talk-slug}/presentation-outline.md
Start by running scripts/guardrail-check.py <outline.md> <speaker-profile.json> for the
computable checks (slide budget, Act 1 ratio, closing, cut lines, data attribution, profanity).
Then add the remaining checks manually per references/phase4-guardrails.md.
All 10 checks are mandatory — run every one, never skip a category:
GUARDRAIL CHECK — {talk title}
================================================
[PASS/FAIL] Slide budget: {actual}/{max} for {duration}-min slot
[PASS/WARN] Act 1 ratio: {%} (limit: {max}% — WARN within 5%)
[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 (expired dates, stale versions, dead memes)
[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}
[RECURRING/CONTEXTUAL] Presentation Patterns: {taxonomy-based antipattern flags}
[PASS/FAIL/SKIP] Illustrations: {coverage} | {format tags} | {prompt quality}
================================================Illustrations line shows [SKIP] when the outline has no Illustration Style Anchor.
Iterate on author feedback. Apply changes first, guardrail second. Flag but don't block intentionally overridden guardrails. See references/phase4-guardrails.md for iteration protocol.
Build the .pptx deck from the finalized outline. See references/phase5-slides.md for the full technical reference.
Setup:
python3 scripts/strip-template.py "{template_pptx_path}" "{output_path}"Then open with MCP open_presentation and walk the outline: add_slide → populate_placeholder
→ manage_image for each slide. When the outline has an Illustration Style Anchor,
generate illustrations first (generate-illustrations.py), then generate builds for
progressive-reveal slides (generate-illustrations.py --build), and use
illustration-format-aware insertion (FULL → full-bleed, IMG+TXT → image + text,
EXCEPTION → real asset). Build slides are inserted as sequential full-bleed images.
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:
0. Resources — extract and curate resource list from outline (extract-resources.py)
export_method / export_script (see references/phase5-slides.md)shownotes_publishing.enabled, use curated resources from Step 6.0qr_code.enabled, generate and insert per profileadditional_steps[] entryGate: Author confirms published and ready to deliver.
Triggered separately — days or weeks after delivery. Not part of the linear Phase 0-6 flow. The talk has been given and recorded.
generate-thumbnail.py), iterate with speakerRead references/phase7-post-event.md for the full workflow including pre-flight checklist, slide selection criteria, prompt strategy, and tracking database updates.
{vault_root}/analyses/The sessions catalog ({vault_root}/sessions-catalog.md) is the single source of
submission-ready materials for active talks. Load it during Phase 0 to know the active
rotation and flag overlapping territory. Pull an existing entry before starting a new
CFP; adapt rather than rewrite.
Each entry contains:
ai-anti-patterns.md if installed). Keep the "Last updated" date current.--- horizontal rules for easy scanning.evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10
scenario-11
scenario-12
scenario-13
scenario-14
scenario-15
scenario-16
scenario-17
scenario-18
scenario-19
scenario-20
scenario-21
scenario-22
scenario-23
scenario-24
scenario-25
scenario-26
scenario-27
scenario-28
scenario-29
scenario-30
rules
skills
presentation-creator
references
patterns
build
deliver
prepare
scripts
vault-clarification
vault-ingress
vault-profile