| Writes natural, first-person spoken presenter scripts (talk tracks) for the slides in a PowerPoint deck, from slide images, or from pasted slide text. Treats existing speaker notes as AUTHORITATIVE when they contradict slide text. Produces one spoken script per slide with delivery cues, calibrated to a target duration and speaking pace, plus a timing table. Use when the user says "write a script for these slides", "I'm presenting slides X-Y, what should I say", "create a presenter script", "turn my speaker notes into a talk track", or "make a 6-minute script for these slides". Do NOT use to create or edit the visible content of slides, to summarize a recorded meeting or transcript, or for general document writing.
npx skills add https://github.com/microsoft/cat-agent-skills --skill presentation-talk-track-builder
This skill turns slides into a spoken talk track. For each requested slide it
writes a first-person script the presenter can read aloud, grounded in the
slide's content and — above all — its speaker notes. It calibrates the
script length to a target time and speaking pace and returns a timing table
so the presenter knows whether they will land on time.
Core rule: the speaker notes are the source of truth. When notes and
slide text disagree, the script follows the notes and silently drops the
contradicted slide text. This is what the author intended to say.
Works across Scout, Copilot Studio, and Cowork. The user can attach a
.pptx, provide slide images, paste slide text, or provide an outline.
speaker."
themselves.
User: "I'm presenting slides 8-11, write a script for each. If the notes
contradict the slides, follow the notes. Target ~6 minutes, business
audience."
1. Capture inputs — audience & goals, slide content, optional supporting
context.
2. Extract BOTH slide text AND speaker notes for the requested slides.
3. Reconcile: where notes contradict slides, follow the notes.
4. Calibrate: target minutes × pace (words/min) = word budget; split by
slide.
5. Write a first-person script per slide with delivery cues + a handoff line.
6. Return the scripts + a per-slide timing table (words → spoken minutes).
7. Offer to save as speaker notes back into a copy of the deck, or as a doc.
Before writing anything, capture:
technical depth, familiarity with the topic.
panel, webinar.
*do* after the presentation?
If the user hasn't provided these, ask once. If they decline, use the
defaults below and label them as assumptions in the output:
.pptx/.pptm is attached or on disk, use it. Check the user'slikely input folders first (Downloads, current workspace) even when the
user does not name a path.
the user there were no speaker notes to follow.
specific slides, cover the whole deck.
the narration (but not into the slides themselves): a product one-pager,
a prior version of the talk, a customer brief, an FAQ, source links, or
presenter background notes. This is especially useful when the existing
speaker notes are thin or missing.
helper:
python scripts/pptx_talk_track.py extract <deck>.pptx <slides>.json
The output JSON contains title, visibleText, and existingNotes per
slide. Both fields matter.
slide.notes_slide.notes_text_frame.text to read notes.
different figure, name, framing, date, or emphasis), write the script to
match the notes and drop the contradicted slide text.
sparse, lean on the slide content and any supporting context to fill the
spoken narrative — never invent.
scripts, so the presenter knows why the script diverges from what's on
screen.
user says they "speak fast", use a brisk pace; otherwise default to
average.
| Pace | WPM | Use when |
|------|-----|----------|
| Deliberate | 110-130 | Technical/dense content, non-native audience |
| Average | 130-150 | Default |
| Brisk / "I speak fast" | 165-185 | User says they rush or speak quickly |
weight (slides with denser notes get more words). Compute totals and
per-slide times with a code tool — never estimate arithmetic by hand.
the target (e.g. write to ~6:15 for a 6:00 goal) and add [pause] cues,
which both reinforce key points and naturally slow a fast speaker.
## Slide N — <short title>.this matters…"). Contractions on. Short sentences. No bulleted
fragments — full spoken prose.
diagram)*, *(click to reveal)*, *(hand off)*.
the last covered slide with a handoff line to the next presenter or to
Q&A if relevant.
with a total and the estimated overall minutes at the chosen pace.
any slide to a specific per-slide time.
using:
python scripts/pptx_talk_track.py apply <deck>.pptx <notes>.json <output>.pptx
The helper writes speaker notes only. It never changes visible slide
content, order, formatting, images, charts, or animations.
where relevant.
and a one-line note of any note-vs-slide contradiction resolved.
See references/tone-examples.md for target voice samples.
follow the notes and drop the contradicted slide content — this is the
whole point of the skill.
images, charts, and animations must stay unchanged. If notes are written
back to a .pptx, only speaker notes in a copied file are updated.
quotes that aren't in the slides, notes, or supporting context. Mark
genuine gaps as [confirm: …] rather than guessing.
confidentiality label or sensitivity marking (for example
"Confidential", "Internal Only", "Restricted", or an enterprise
information-protection label), or contain unreleased figures,
customer or partner identifiers, or names that aren't public yet,
flag them and confirm with the user before including that content in
the spoken script. Never add PII or customer identifiers the source
material doesn't already contain.
so the presenter can recalibrate.
preserve their order. If the user asks for "the whole deck", cover
every slide.
images; paraphrase into the presenter's own spoken words.
and ask the user to re-attach it — do not substitute placeholder slide
content.
scripts/pptx_talk_track.py uses only the Python standard library.
extract <deck>.pptx <slides>.json — read slide titles, visible text,and existing speaker notes.
template <deck>.pptx <notes>.json — write an empty notes JSON templatewith one entry per slide, ready to fill in with generated scripts.
apply <deck>.pptx <notes>.json <output>.pptx — write the generatedscripts into a copied deck as speaker notes. Never overwrites the
original.
If a deck has no notes master, open and save it once in PowerPoint (or add
a note to one slide) before rerunning the helper.
Runtime note: the helper needs Python 3 available in the runtime.
Scout, Copilot Studio, and Cowork all support this, so the extract /
template / apply commands work on all three platforms. If the
runtime doesn't have Python for any reason, the skill still works —
paste slide text, an outline, or slide images, and the model writes
the talk track and timing table inline. In that case, users who want
the scripts embedded back into a .pptx as speaker notes can run the
helper locally with Python 3 installed.
references/tone-examples.md — short excerpts of the targetfirst-person, spoken voice with delivery cues.
assets/example-notes.json — example of the notes JSON shape theapply command consumes.
Convert Markdown files to HTML similar to `marked.js`, `pandoc`, `gomarkdown/markdown`, or similar tools; or writing custom script to convert markdown to html and/or working on web template systems like `jekyll/jekyll`, `gohugoio/hugo`, or similar web templating systems that utilize markdown documents, converting them to html. Use when asked to "convert markdown to html", "transform md to html", "render markdown", "generate html from markdown", or when working with .md files and/or web a templating system that converts markdown to HTML output. Supports CLI and Node.js workflows with GFM, CommonMark, and standard Markdown flavors.
Write and maintain technical documentation. Trigger with "write docs for", "document this", "create a README", "write a runbook", "onboarding guide", or when the user needs help with any form of technical writing — API docs, architecture docs, or operational runbooks.
Translate visa application documents (images) to English and create a bilingual PDF with original and translation
Write, review, and edit documentation files with consistent structure, tone, and technical accuracy. Use when creating docs, reviewing markdown files, writing READMEs, updating `/docs` directories, or when user says "write documentation", "review this doc", "improve this README", "create a guide", or "edit markdown". Do NOT use for code comments, inline JSDoc, or API reference generation.
Real-time Constitution compliance checker for devflow documents. Blocks partial implementations and hardcoded secrets during file editing.
Write self-documenting code with minimal, evergreen comments that explain complex logic without describing recent changes or temporary fixes. Use this skill when writing code comments, documentation strings, explaining complex algorithms, clarifying business logic, or deciding whether code needs comments. Apply when working with any source code files where comments or documentation might be added, ensuring comments remain relevant, helpful, and focused on explaining why rather than what the code does, while preferring clear code structure and naming over excessive commenting.
Use when writing technical documentation that needs to be readable by both humans and AI models, converting existing docs to HADS format, validating a HADS document, or optimizing documentation for token-efficient AI consumption.
Draft a structured investment committee memo for PE deal approval. Synthesizes due diligence findings, financial analysis, and deal terms into a professional IC-ready document. Use when preparing for investment committee, writing up a deal, or creating a formal recommendation. Triggers on "write IC memo", "investment committee memo", "deal write-up", "prepare IC materials", or "recommendation memo".
Take microsoft/presentation-talk-track-builder from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.