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
Steering rules for Phase 6 Step 6.0 — extracting and curating resource links from a presentation outline.
ALWAYS use extract-resources.py for initial resource extraction. Do not
manually scan the outline first — the script handles URL detection, repo
matching, book patterns, RFC citations, and tool mentions consistently.
Manual scanning misses items and introduces inconsistency.
python3 skills/presentation-creator/scripts/extract-resources.py \
presentation-outline.md --spec presentation-spec.mdThe extracted list is candidates, not the final resource list. The speaker MUST review, approve, edit, or remove items before any publishing step uses them. Never auto-publish extracted resources without explicit speaker approval.
Present the extracted resources in a formatted, reviewable list grouped by type. The speaker may:
approved: true)Resources from Coda slides (closing/further-reading sections) are the most intentional — the speaker deliberately chose to surface them. Sort these higher in the review list and flag them as "from Coda section."
resources.json lives in the talk working directory alongside
presentation-outline.md and presentation-spec.md. It is talk-specific,
not vault-level. Path:
{presentations-dir}/{conference}/{year}/{talk-slug}/resources.jsonWhen shownotes are enabled (Step 6.1), the shownotes generation step reads
resources.json for the resource links section. Only approved: true items
are included. If resources.json doesn't exist or has no approved items,
the resource links section is omitted from shownotes.
The script deduplicates URLs and repos. If a GitHub repo URL appears as both a full URL and a repo reference, keep only the URL entry. When the speaker adds resources manually, check for duplicates before appending.
After resources are approved, update tracking-database.json with a
resources[] entry:
{
"talk_slug": "...",
"resources_json_path": "...",
"item_count": 12,
"categories": {"urls": 5, "repos": 1, "tools": 3, "books": 2, "rfcs": 1},
"created_at": "..."
}The publishing destination for shownotes MUST be discoverable from the speaker profile — agents should never guess, search the web, or grep local files to find where shownotes are published.
Read from speaker-profile.json → publishing_process.shownotes:
url.base (e.g., https://speaking.jbaru.ch)url.template (e.g., /talks/{slug}/,
/{yyyy}-{mm}-{dd}-{slug}/) — reflects the SSG's actual deployed URL
structure, not a flat {slug} substitutionWhen checking talk metadata (video status, slide links, resource lists):
url.base + the result of substituting {slug}
and date variables ({yyyy}, {mm}, {dd}) into url.templateSupported template variables:
| Variable | Meaning |
|---|---|
{slug} | Talk slug from Presentation Spec |
{yyyy} / {yy} | Year from talk date |
{mm} / {dd} | Month / day |
{venue} | Slugified venue name |
If publishing_process.shownotes is absent or incomplete, ask the speaker
during vault-clarification (Step 4 infrastructure capture) — the config
object, not the individual legacy fields.
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