Six-skill presentation system: ingest talks into a rhetoric vault, run interactive clarification, generate a speaker profile, create presentations that match your documented patterns, produce the deck illustrations + thumbnail visual layer, and publish talk pages to a Jekyll shownotes site. Includes a 102-entry Presentation Patterns taxonomy (91 observable, 11 unobservable go-live items) for scoring, brainstorming, and go-live preparation.
78
91%
Does it follow best practices?
Impact
77%
1.18xAverage score across 27 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 outline.yamlThe 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
outline.yaml. 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.
.tessl-plugin
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
rules
skills
illustrations
presentation-creator
references
patterns
build
deliver
prepare
shownotes-publisher
vault-clarification
vault-ingress
vault-profile