Build Slides
Research a topic, draft executive slide content for user approval, then insert slide(s) into an existing Google Slides deck the user provides.
Prerequisites
- Run refresh-connections for
gwsbefore gathering. - Required scopes:
drive,documents,presentations,gmail,calendar. If auth fails:gws auth login. - Read
ME.mdandTEAM.mdat the project root (if present) for voice and program framing.
Workflow
Build Slides:
- [ ] Step 0: Intake — topic, deck, placement, layout, sources
- [ ] Step 1: Gather context
- [ ] Step 2: Synthesize and get user approval
- [ ] Step 3: Resolve images (if any)
- [ ] Step 4: Insert slides
- [ ] Step 5: Confirm with deck link and sources
Step 0 — Intake
Gather before any API writes. Use AskQuestion when available; otherwise ask in one message.
| Area | Questions |
|---|---|
| Topic | What is the slide about? What decision or narrative does it support? |
| Deck | Google Slides URL or presentation ID (required) |
| Placement | Append at end, insert after slide N, or replace slide N |
| Layout | Duplicate slide #X from this deck or use standard Title + Body layout |
| Scope | 1 executive slide (default) or 2–3 slides if topic is broad |
| Sources | Google Docs, Gmail, meeting notes, web (multi-select) |
| Meeting | If meetings: title and approximate date |
| Specific files | Optional Doc/Slide URLs to prioritize |
| Audience | Executive leadership, internal team, customer-facing |
| Images | Include images? Prefer source-doc images, web diagrams, or none |
Gate: Do not gather or write until deck URL and topic are confirmed.
Step 1 — Gather context
Parse the deck ID from the URL (see reference.md), then run:
python3 ~/.cursor/skills/build-slides/scripts/gather_slide_context.py \
--topic "<TOPIC>" \
--deck-id "<PRESENTATION_ID>" \
[--days 30] \
[--meeting-title "<TITLE>" --meeting-date YYYY-MM-DD] \
[--doc-ids "id1,id2"] \
--format json
Web (agent-driven): If the user enabled web sources, run WebSearch for recent relevant articles. Cite URLs in the summary. Do not invent facts.
If the script fails, follow the manual fallback in reference.md.
Step 2 — Synthesize and approve
Present in chat before writing to Slides:
- Proposed slide title(s)
- 3–5 executive bullets per slide (decision-oriented, no jargon padding)
- Optional speaker notes (1–2 sentences)
- Image suggestions with source (doc embed, web URL, or skip)
- Slide count (1 vs 2–3) with rationale
- Sources consulted with links
Ask: "Approve this content, or tell me what to change?"
Do not call insert_slides.py until the user approves.
Step 3 — Resolve images
Slides API createImage requires a publicly fetchable URL. See reference.md for upload steps.
- Prefer images from source docs or linked materials.
- For web images: download, upload to Drive with
anyoneWithLinkpermission, usewebContentLink. - Skip if no suitable image or user declined images.
Step 4 — Insert slides
Write approved content to a spec file, then run:
python3 ~/.cursor/skills/build-slides/scripts/insert_slides.py \
--deck-id "<PRESENTATION_ID>" \
--spec /tmp/slide-spec.json \
--layout duplicate \
--template-slide-index 3 \
--insert-after 5
slide-spec.json shape:
{
"slides": [
{
"title": "Topic — Executive Summary",
"bullets": ["Outcome-focused bullet", "Another bullet"],
"speakerNotes": "Optional notes for presenter.",
"images": [{ "url": "https://...", "alt": "Diagram" }]
}
]
}
Layout flags:
--layout duplicate— copy--template-slide-index(1-based) or--template-slide-id--layout standard— Title + Body layout from deck masters--insert-after N— 0 = beginning; omit to append at end--replace-slide N— replace existing slide (only when user explicitly chose this)
Step 5 — Confirm
- Link to the deck (include slide index when known)
- List sources used
- Note any
[needs input]gaps or image fallbacks - Offer to revise content or add another slide
Quality rules
- Facts trace to gathered sources only; mark gaps
[needs input] - Executive tone: short title, outcome-focused bullets, no filler
- Use
ME.md/TEAM.mdfor framing only; do not invent program details - Never overwrite existing slides unless user explicitly chose "replace slide N"
- Images must be relevant; skip rather than use decorative stock
Example prompts
- "Build a slide about SUSE Pre-emptive in my working deck from recent emails and docs"
- "Add an executive summary slide after slide 2 in [deck URL] from yesterday's FLT meeting notes"
- "Create a customer-facing slide on Mythos security using our strategy doc and web research"
Additional resources
- reference.md — gws commands, deck parsing, batchUpdate patterns, image upload, manual fallback