CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/speaker-toolkit

Two-skill presentation system: analyze your speaking style into a rhetoric knowledge vault, 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.57x

Quality

96%

Does it follow best practices?

Impact

96%

1.57x

Average score across 15 eval scenarios

Overview
Skills
Evals
Files

rubric.jsonevals/scenario-13/

{
  "context": "Tests whether the agent uses the correct python-pptx patterns for .pptx generation: the specific undocumented template-stripping internals (_sldIdLst + drop_rel), a separate batch speaker-notes injection step after slides are created, footer on every slide, and text overflow prevention with optimize_slide_text.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Uses _sldIdLst",
      "description": "The script accesses `slides._sldIdLst` (the undocumented internal attribute) to iterate over slide IDs during template stripping — not a public API like slides[0] or clear()",
      "max_score": 12
    },
    {
      "name": "Uses drop_rel()",
      "description": "The script calls `part.drop_rel(rId)` or `tmpl.part.drop_rel(rId)` to remove the relationship during template stripping — not a delete or pop operation",
      "max_score": 12
    },
    {
      "name": "Correct relationship namespace URI",
      "description": "The relationship ID is retrieved using the exact namespace URI string: '{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id' — not a shortened version or variable substitution",
      "max_score": 10
    },
    {
      "name": "Template stripping before content",
      "description": "The template stripping code (removing existing slides) appears BEFORE any new slide additions — the script does not add content slides to a template that still has demo slides",
      "max_score": 11
    },
    {
      "name": "Speaker notes in separate step",
      "description": "Speaker notes are injected in a SEPARATE code block, function, or loop that runs AFTER all slides have been created — not inline during each slide's creation (e.g., a dedicated notes injection pass over existing slides)",
      "max_score": 12
    },
    {
      "name": "notes_text_frame access pattern",
      "description": "Speaker notes are set via `slide.notes_slide.notes_text_frame.text = ...` (or equivalent attribute access chain) — not via placeholder manipulation or XML editing",
      "max_score": 13
    },
    {
      "name": "Text overflow prevention",
      "description": "The script includes logic to prevent text overflow in placeholders — e.g., sets word_wrap to True, uses MSO_AUTO_SIZE, checks text length before insertion and adjusts font size, or truncates content — not just inserting text with no overflow consideration",
      "max_score": 5
    },
    {
      "name": "Footer on slides",
      "description": "The script adds footer text to slides (e.g., via manage_text, add_textbox, or a helper function) — not absent or only mentioned in comments",
      "max_score": 10
    },
    {
      "name": "Final save call",
      "description": "The script includes a save() call (tmpl.save(...) or prs.save(...)) to persist the generated .pptx to disk",
      "max_score": 8
    },
    {
      "name": "Background color applied",
      "description": "The script sets a background color for slides (not leaving all slides at the default white), referencing the background_color_strategy or using a color value that is NOT #FFFFFF / white",
      "max_score": 7
    }
  ]
}

Install with Tessl CLI

npx tessl i jbaruch/speaker-toolkit@0.6.2

evals

README.md

tile.json