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 a 102-entry Presentation Patterns taxonomy (91 observable, 11 unobservable go-live items) for scoring, brainstorming, and go-live preparation.
97
94%
Does it follow best practices?
Impact
98%
1.24xAverage score across 30 eval scenarios
Advisory
Suggest reviewing before use
Generate or update speaker-profile.json from vault data. This profile is the
structured bridge between the vault and the presentation-creator skill.
The vault lives at ~/.claude/rhetoric-knowledge-vault/ (may be a symlink).
Read tracking-database.json from there to get vault_root.
| File / Reference | Purpose |
|---|---|
tracking-database.json | Source of truth — talks, config, confirmed intents |
rhetoric-style-summary.md | Running rhetoric & style narrative |
slide-design-spec.md | Visual design rules from PDF + PPTX analysis |
speaker-profile.json | Output — machine-readable profile |
| references/speaker-profile-schema.md | Profile JSON schema |
| references/schemas-config.md | Config fields + confirmed intents schema |
scripts/load-vault.py | Read vault sources, emit JSON payload to stdout |
scripts/validate-profile.py | Validate profile required keys + schema_version |
config.clarification_sessions_completed >= 1.Process the steps below in order; each step's output (vault payload, aggregated data, validated profile) feeds the next. Do not skip ahead.
Run scripts/load-vault.py to read tracking-database.json, rhetoric-style-summary.md, and slide-design-spec.md from the vault root. The script emits a single JSON payload on stdout.
python3 skills/vault-profile/scripts/load-vault.py > /tmp/vault-payload.jsonI/O contract:
~/.claude/rhetoric-knowledge-vault.{vault_root, config, confirmed_intents, talks, processed_talks, summary, design_spec}.tracking-database.json or rhetoric-style-summary.md are missing or malformed.If the script aborts on missing rhetoric-style-summary.md, run vault-ingress first. If slide-design-spec.md is missing, design_spec is "" and the design-spec section of the profile remains empty — continue without aborting.
Proceed immediately to Step 2.
Aggregate structured_data from processed_talks in the Step 1 payload. Skip talks with empty structured_data; for those, fall back to prose extraction from summary (the rhetoric-style-summary.md contents) for the matching dimensions.
If all processed talks have empty structured_data, warn the speaker and fall back entirely to prose extraction. Continue.
Proceed immediately to Step 3.
If config.template_pptx_path is set, call the vault-ingress PPTX extraction script:
python3 skills/vault-ingress/scripts/pptx-extraction.py "$TEMPLATE_PPTX_PATH" > /tmp/template-layouts.jsonI/O contract (defined in vault-ingress; see skills/vault-ingress/scripts/pptx-extraction.py):
.pptx file.template_layouts key. Each layout entry has {index, master_index, name, placeholders: [{idx, type}]}..pptx.Merge the resulting layouts list into infrastructure.template_layouts in the profile being constructed. The script emits structural fields (index, master_index, name, placeholders); the use_for field is speaker-curated and is not emitted. When merging, key by the (master_index, name) pair — PowerPoint allows the same layout name to appear under different slide masters, so name alone is insufficient. For each fresh layout, copy any existing use_for value from the prior profile's matching (master_index, name) entry. Layouts present in the prior profile but absent from the fresh extraction are dropped — the script is the source of truth for layout existence. If template_pptx_path is not set, leave template_layouts as an empty list and continue.
Proceed immediately to Step 4.
Construct the speaker-profile.json dict per references/speaker-profile-schema.md. Map vault sources to profile sections:
| Profile section | Source |
|---|---|
speaker / infrastructure | config (from Step 1 payload) |
presentation_modes / instrument_catalog | summary sections (from Step 1 payload) |
rhetoric_defaults | confirmed_intents (from Step 1 payload) |
pacing / guardrail_sources | aggregated structured_data (from Step 2) |
pattern_profile | pattern_observations across processed_talks |
visual_style_history | dimension 13f observations from summary |
Top-level keys (full nested schema in references/speaker-profile-schema.md):
schema_version, generated_date, talks_analyzed, speaker, infrastructure,
presentation_modes, instrument_catalog, rhetoric_defaults, confirmed_intents,
guardrail_sources, pacing, pattern_profile, visual_style_history,
publishing_process, design_rules, badgesSet schema_version to 1 and generated_date to today's date in YYYY-MM-DD form.
Proceed immediately to Step 5.
Pipe the constructed profile dict through scripts/validate-profile.py to verify all required top-level keys exist and schema_version is 1.
echo "$PROFILE_JSON" | python3 skills/vault-profile/scripts/validate-profile.pyI/O contract:
{valid, schema_version, missing_keys}.0 on valid, 1 on invalid.If exit code is 1, list every missing key from the script output and abort without writing. Fix the offending fields in Step 4 and rerun this step.
Proceed immediately to Step 6.
If {vault_root}/speaker-profile.json already exists, diff the new profile against it. Report to the speaker:
instrument_catalogguardrail_sourcesrecurring_issuesIf no prior profile exists, skip this step and proceed.
Proceed immediately to Step 7.
Write the validated profile to {vault_root}/speaker-profile.json with 2-space indentation. Confirm: "speaker-profile.json written — {N} talks, {M} confirmed intents."
Proceed immediately to Step 8.
Generate fun, self-deprecating achievements grounded in real vault data (e.g., "Narrative Arc Master 22/24", "Pattern Polyglot 12+ patterns"). The badge tone matters: badges should sound like the speaker's own voice, not corporate gamification. Append the resulting array to the profile's badges field and re-save.
Finish here.
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