CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/speaker-toolkit

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 an 88-entry Presentation Patterns taxonomy for scoring, brainstorming, and go-live preparation.

96

1.21x
Quality

93%

Does it follow best practices?

Impact

97%

1.21x

Average score across 30 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-21/

{
  "context": "Tests the complete QR generation workflow: slug from spec, bitly with custom back-half (not random hash), QR encodes bitly URL (decoupling layer), and generate-qr.py used (not ad-hoc). Every failure mode from the field-test post-mortem is covered by a criterion.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Talk slug read from Presentation Spec",
      "description": "The talk slug '2026-04-16-devnexus-robocoders-judgment-day' is read from presentation-spec.md. The agent does not invent, abbreviate, or rephrase the slug. Any reference to --talk-slug uses this exact value",
      "max_score": 15
    },
    {
      "name": "Shownotes URL constructed from pattern + spec slug",
      "description": "The shownotes URL is exactly 'https://jbaru.ch/2026-04-16-devnexus-robocoders-judgment-day', constructed by substituting the spec slug into the profile's shownotes_url_pattern. Not a made-up URL",
      "max_score": 10
    },
    {
      "name": "Bitly custom back-half is the talk slug",
      "description": "The planned bitly link uses the talk slug as the custom back-half: bit.ly/2026-04-16-devnexus-robocoders-judgment-day. NOT a random hash like bit.ly/a3xK9f. The plan explicitly references the slug being used as the back-half",
      "max_score": 15
    },
    {
      "name": "QR encodes bitly URL, not raw shownotes URL",
      "description": "The QR code is planned to encode the bitly URL (https://bit.ly/2026-04-16-devnexus-robocoders-judgment-day), not the raw shownotes URL. The plan explains the decoupling rationale: if shownotes URL changes, update bitly target, printed QR stays valid",
      "max_score": 15
    },
    {
      "name": "generate-qr.py used, not qrcode library directly",
      "description": "The plan references generate-qr.py as the script to use. The agent does not write its own QR generation code or call the qrcode library directly. The command includes proper arguments: --talk-slug, --shownotes-url, and vault path",
      "max_score": 15
    },
    {
      "name": "Command uses --shownotes-url (not --short-url)",
      "description": "The generate-qr.py command uses --shownotes-url (letting the script handle bitly shortening), not --short-url. The script manages the shortener API call, custom back-half, and tracking DB update",
      "max_score": 10
    },
    {
      "name": "Tracking DB update mentioned",
      "description": "The plan acknowledges that generate-qr.py will update the tracking database with qr_codes[] metadata including the talk slug, bitly URL, and link ID",
      "max_score": 5
    },
    {
      "name": "No silent degradation to raw URL",
      "description": "The plan does not fall back to encoding the raw shownotes URL. Since shortener is configured as 'bitly' and secrets.json has the API token, there is no reason to fall back. Any mention of raw URL fallback without justification = zero points",
      "max_score": 10
    }
  ]
}

evals

README.md

tile.json