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.
86
92%
Does it follow best practices?
Impact
86%
1.24xAverage score across 26 eval scenarios
Advisory
Suggest reviewing before use
candidates.json is the input the agent writes during Phase 2 style strategy
and generate-illustrations.py --style-explore reads to render the
exploration grid.
generate-illustrations.py --style-explorestyle-explore/candidates.json in the talk working directory{
"schema_version": 1,
"slides": { "FULL": 7, "IMG+TXT": 12 },
"models": ["gemini-3-pro-image-preview", "gemini-3.1-flash-image-preview"],
"styles": [
{
"name": "Blueprint Schematic",
"anchors": {
"FULL": "Full-bleed style anchor paragraph for this style.",
"IMG+TXT": "Portrait anchor paragraph for this style."
}
}
]
}schema_version — integer, must be 1. The reader rejects other values.slides — maps each format to one representative slide number from the
outline. The render pulls that slide's scene prompt and substitutes each
style's anchor for the [STYLE ANCHOR] token. A format whose slide has no
image prompt in the outline is skipped with a warning.models — the shortlisted model ids (from model_registry.py --shortlist),
best-first. Each is rendered for every style × format. Codenames resolve via
the registry alias map before dispatch.styles — candidate styles. Each needs a name and an anchors map of
format → anchor text. A style that omits a format is skipped for that format.The render writes style-explore/<style-slug>/<format-slug>/<model>.<ext> per
cell plus style-explore/index.md, a contact sheet grouped by style linking
each rendered image.
Only schema_version 1 is accepted today — the reader rejects any other value.
candidates.json is a transient per-talk input, not a persisted record, so
there is no on-read migration. A future schema change bumps the version and
teaches the reader to handle the new shape.
.github
eval-resources
humor-postmortem-blind-spots
qr-bitly-slug-from-outline
qr-missing-shortener-detection
shownotes-publisher-omit-placeholder
shownotes-publisher-publish-no-date
shownotes-publisher-publish-with-date
shownotes-publisher-update-add-video
video-extraction-diagnostics
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
rules
scripts
skills
illustrations
presentation-creator
references
patterns
build
deliver
prepare
scripts
shownotes-publisher
vault-clarification
vault-ingress
vault-profile
tests