CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/speaker-toolkit

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 111-entry Presentation Patterns taxonomy (81 observable: 62 patterns + 19 antipatterns; 30 unobservable: 21 patterns + 9 antipatterns) for scoring, brainstorming, and go-live preparation.

91

1.30x
Quality

94%

Does it follow best practices?

Impact

91%

1.30x

Average score across 27 eval scenarios

SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-26/

{
  "context": "Tests whether the agent generates a schema-v5 speaker profile by preserving the profile loader's opaque catalog outputs, not importing legacy catalog rows, and retaining independently grounded non-pattern data.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Schema-v5 top-level contract",
      "description": "speaker-profile.json uses schema_version 5 and contains the required speaker, infrastructure, presentation_modes, rhetoric_defaults, instrument_catalog, guardrail_sources, pacing, pattern_profile, confirmed_intents, and badges lanes",
      "max_score": 10
    },
    {
      "name": "Speaker fields from config",
      "description": "The speaker object contains name ('Taylor Okonkwo') and handle ('@t_okonkwo') matching the tracking DB config — not left empty or populated with placeholder values",
      "max_score": 8
    },
    {
      "name": "Non-pattern badges only",
      "description": "The top-level badges array contains independently grounded achievements and every entry declares source_lane 'non_pattern'; no badge is derived from pattern IDs, scores, mastery, absence, or frequency",
      "max_score": 10
    },
    {
      "name": "Loader-selected catalog cohort is copied",
      "description": "pattern_profile copies the pattern_baseline and pattern_opportunities objects emitted by load-vault.py for the supplied fixture without changing counts, identities, rows, rates, or sentinels. Legacy IDs, scores, and ordinary Section 15 prose are not imported by hand",
      "max_score": 18
    },
    {
      "name": "Classifier output is copied unchanged",
      "description": "pattern_profile contains every field of the pattern_classification object emitted by load-vault.py for the supplied fixture unchanged, including its policy stamp, semantic digest, availability, exhaustive classification rows, trend audit, and derived projections. No domain verdict, absence label, or projection is guessed from raw rows or prose",
      "max_score": 15
    },
    {
      "name": "guardrail_sources.slide_budgets is array",
      "description": "guardrail_sources.slide_budgets is a JSON array of objects (not a single flat object or a number), where each entry has at minimum: duration_min and max_slides fields",
      "max_score": 8
    },
    {
      "name": "instrument_catalog populated",
      "description": "instrument_catalog contains at minimum two sub-keys: opening_patterns and narrative_structures, each with at least one entry derived from the vault analyses",
      "max_score": 8
    },
    {
      "name": "confirmed_intents carried over",
      "description": "rhetoric_defaults or a confirmed_intents key at the top level contains at least one confirmed intent from the tracking DB (specifically the 'delayed_intro' intent about not using a traditional opening bio)",
      "max_score": 10
    },
    {
      "name": "Pacing honors the instrumentation cohort",
      "description": "The pacing object uses only current_instrumentation_talks emitted by load-vault.py. Because this fixture has no current instrumentation talks, it preserves the empty zero/null state and does not manufacture numeric pacing from stale talks or narrative prose",
      "max_score": 8
    },
    {
      "name": "Catalog history stays in its sole lane",
      "description": "Legacy pattern claims are not copied into rhetoric_defaults, recurring_issues, or badges; guardrail_sources.recurring_issues contains only entries explicitly marked source_lane 'non_pattern'",
      "max_score": 5
    }
  ]
}

README.md

tile.json