CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/speaker-toolkit

Five-skill presentation system: ingest talks into a rhetoric vault, run interactive clarification, generate a speaker profile, create presentations that match your documented patterns, and produce the deck illustrations + thumbnail visual layer. Includes a 102-entry Presentation Patterns taxonomy (91 observable, 11 unobservable go-live items) for scoring, brainstorming, and go-live preparation.

95

1.20x
Quality

96%

Does it follow best practices?

Impact

95%

1.20x

Average score across 32 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

SKILL.mdskills/presentation-creator/

name:
presentation-creator
description:
Creates new presentations grounded in the speaker's documented rhetoric patterns, using a personal rhetoric-knowledge-vault as a constitutional style guide. Follows an interactive, spec-driven process: distill intent from the user's prompt, jointly select rhetorical instruments from the vault catalog, architect the talk structure, develop content with speaker notes, run guardrail checks, generate a .pptx deck, and publish per the speaker's workflow. Use this skill whenever the user wants to create a new presentation, build a talk, write a conference submission, design a slide deck, prepare for a speaking engagement, or mentions "presentation" or "talk" in the context of content creation. Also trigger when the user describes a topic they want to present on, asks to adapt an existing talk for a new audience, or wants to develop a CFP abstract. Not a generic slide-deck tool — requires a populated rhetoric-knowledge-vault and follows the speaker's established style.
user_invocable:
Yes

Presentation Creator

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.

Before You Start: Load the Vault

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.

Workflow Overview

PhaseWhat happensGate
0: IntakeLoad vault, gather contextTopic and context captured
1: Intent DistillationClarifying questions → Presentation SpecAuthor confirms spec
2: Rhetorical ArchitectureJoint instrument selection from vault catalogAuthor approves architecture
3: Content DevelopmentSection-by-section outline with speaker notesDraft delivered
4: Revision & GuardrailsIterate on feedback, run guardrail checksAuthor declares outline done
5: Slide GenerationBuild .pptx from template, iterate with authorAuthor declares slides done
6: PublishingExport, shownotes, QR per speaker's workflowPublished and ready
7: Post-EventYouTube thumbnail, video to shownotesThumbnail approved, video linked

Do not skip phases. Do not write content before Phase 3. Phase 2 is joint, not autonomous.

Late Entry (single-task requests)

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 patterns
  • secrets.json — API keys for shorteners and Gemini
  • presentation-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.

Phase 0: Intake & Context Loading

  1. Load vault documents (see above).
  2. Capture what the user has shared — topic, conference, audience, time slot.
  3. Read any provided CFP description, conference website, or existing talk to adapt.
  4. Report what you know and what you still need.

Phase 1: Intent Distillation

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 publishing_process.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.

Phase 2: Rhetorical Architecture

The instrument menu comes from the vault, not from a static file. Read the summary (sections 2-13) and profile instrument_catalog for options.

11 Decisions to make together:

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. Delegate to Skill(skill: "illustrations") for the full collaboration (style proposals grounded in vault visual_style_history, format vocabulary, model choice, visual continuity devices). The skill writes the approved STYLE ANCHOR block back into the outline header.

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:

DurationMax slidesSlides/min
20 min301.5
30 min451.5
45 min701.5
60 min901.5
75 min1101.5

Gate: Author approves the architecture.

Phase 3: Content Development

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

Phase 4: Revision & Guardrails

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.

Phase 5: Slide Generation & Interactive Iteration

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_slidepopulate_placeholdermanage_image for each slide. For non-illustrated slides and EXCEPTION-format slides, handle inline as normal (the [IMAGE NN] placeholder resolves to a real asset). For FULL and IMG+TXT slides, build the slide structure (layout, title, footer) and omit manage_image — the slide is left without a picture shape. The illustrations skill handles insertion in the post-walk apply pass: apply-illustrations-to-deck.py's swap_or_insert_picture adds a full-bleed picture when the slide has none, or swaps the existing one when the template seeded a picture placeholder.

After the structural walk completes, if the outline has an Illustration Style Anchor, delegate to Skill(skill: "illustrations") to generate illustrations, generate any progressive-reveal builds, and apply them to the deck (the illustrations skill inserts/swaps images, repositions titles into Safe zones, inserts build sequences, and handles IMG+TXT positioning).

Inject speaker notes via python-pptx batch after the illustrations skill returns.

Key rules from profile:

  • design_rules.background_color_strategy — how to pick background colors
  • design_rules.footer — pattern, position, font, color adaptation
  • design_rules.slide_numbers — typically "never"
  • infrastructure.template_layouts[] — layout index + placeholder mapping

Phase 6: Publishing

Read 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)

  1. Export — run export_method / export_script (see references/phase5-slides.md)
  2. Shownotes — if publishing_process.shownotes.enabled, use curated resources from Step 6.0
  3. QR Code — if qr_code.enabled, generate and insert per profile
  4. Additional steps — execute each additional_steps[] entry
  5. Go-live checklist — surface unobservable patterns from references/patterns/_index.md as a delivery preparation reminder (see references/phase6-publishing.md Step 6.5)

Gate: Author confirms published and ready to deliver.

Phase 7: Post-Event

Triggered separately — days or weeks after delivery. Not part of the linear Phase 0-6 flow. The talk has been given and recorded.

  1. YouTube Thumbnail — delegate to Skill(skill: "illustrations") (the skill handles slide selection, speaker-photo resolution, aesthetic precedence, composition via Gemini, and speaker iteration).
  2. Video to Shownotes — add video embed/link to existing shownotes page.

Read references/phase7-post-event.md for the pre-flight checklist and Step 7.2 (Video to Shownotes). Step 7.1 detail lives in skills/illustrations/references/thumbnails.md.


Adapting Existing Talks

  1. Check if the talk has been ingested by the vault. If not, process it first.
  2. Read the original talk's analysis from {vault_root}/analyses/
  3. Copy the previous deck as starting point — do NOT start from fresh template.
  4. Start at Phase 1 with the original spec pre-filled, modify as needed.
  5. Auto-generate adaptation checklist: footer, shownotes slug, time-sensitive content, slide budget, profanity register, locale references, commercial intent.

CFP Abstract Writing

  1. Complete Phase 0-1 (lighter touch)
  2. Skip Phase 2 (not needed for an abstract)
  3. Write: title, abstract (200-300 words), key takeaways (3-5 bullets), speaker bio
  4. Phase 4 revision as normal
  5. Save approved materials to the Sessions Catalog (see below)

Sessions Catalog

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.

What goes in the catalog

Each entry contains:

  • Title (including subtitle if any)
  • Abstract (submission-ready, anti-pattern-checked)
  • Outline (with section descriptions and time allocations)
  • Small Print (notes for the Program Committee — positioning, scope clarifications, or anything the PC should know; internal, not public-facing)

Catalog maintenance

  • Save approved title, abstract, and outline after CFP abstract writing (step 5) and after Phase 4 if no entry exists yet. Remove or archive entries when a talk is retired.
  • The catalog reflects the latest approved version — full history lives in the tracking database and analysis files.
  • Run an anti-pattern check on entries before saving (use the blog-writer skill's ai-anti-patterns.md if installed). Keep the "Last updated" date current.
  • Entries are separated by --- horizontal rules for easy scanning.

skills

presentation-creator

SKILL.md

README.md

tile.json