Workflows¶
Starting Point A — New Presentation¶
1. presentation(action: "create", filePath: "C:\Decks\q4.pptx") → sessionId
2. ... build slides (see deck-builder.md) ...
3. export(action: "export-slide-to-image"/"export-all-slides-to-images", ...) → verify visually
4. presentation(action: "close", sessionId: ..., save: true)
Starting Point B — Existing Presentation¶
1. presentation(action: "open", filePath: "C:\Decks\q4.pptx") → sessionId
2. slide(action: "get-count", session_id: sessionId) → know the current range
3. ... read/modify slides ...
4. export(action: "export-slide-to-image"/"export-all-slides-to-images", ...) → verify visually
5. presentation(action: "close", sessionId: ..., save: true)
Session Management¶
- One session per file, for the duration of the task. Open/create once, do all the work, save and close once.
- Do not create then open the same file again.
presentation(action: "create", ...)already returns a live session. - Multiple presentations at once: each
presentation(action: "open", ...)orpresentation(action: "create", ...)call returns an independentsessionId; pass the right one to each tool call when working across files. - Discover instead of asking:
presentation(action: "list")tells you every open session and its file path. - Always close what you open. An unclosed session leaves a
POWERPNT.exeprocess running.
Batch Efficiency¶
- Plan before executing. For a multi-slide deck, decide the layout and content for every slide before calling
slide(action: "add-blank", ...). - Read once, act many times. Call
slide(action: "get-count", ...)/shape(action: "get-count", ...)once to establish the current state, then perform the planned sequence of writes. - Batch text + formatting per shape. For a given shape, call
textframe(action: "set-text", ...), thenset-font-size/set-bold/set-font-coloras needed. - Choose save behavior at close. There is no standalone save action; render and inspect the finished work, then close once with
save: trueor discard withsave: false.
The Discovery Actions¶
| Tool | Action | Use to discover |
|---|---|---|
presentation | list | Which files are currently open, and their sessionId values |
slide | get-count | How many slides exist before adding/deleting |
shape | get-count | How many shapes are on a slide before adding/deleting/positioning |
textframe | get-text | Current text of a shape before editing it |
layout | get-layout | Current layout of a slide |
pagesetup | get-settings / get-footer | Slide size, first slide number, and footer state |
shape | list-placeholders | Placeholder indexes, types, bounds, and content state |
slide | list-comments | Legacy comments exposed by native PowerPoint COM |
accessibility | audit / get-reading-order | Deterministic accessibility issues and current reading order |
table | get-cell-text | Current content of a table cell |
chart | get-chart-data | Category/series counts of an existing chart |
notes | get-notes-text | Current speaker notes for a slide |
Use these instead of asking the user for information you can look up yourself (see behavioral-rules.md).
Full Example: 3-Slide Deck From Scratch¶
presentation(action: "create", filePath: "C:\Decks\q4.pptx") → sessionId
## Slide 1: title
slide(action: "add-blank", session_id: sessionId) → slideIndex=1
layout(action: "set-layout", session_id: sessionId, slide_index: 1, layout_name: "ppLayoutTitle")
shape(action: "add-text-box", session_id: sessionId, slide_index: 1, left: 50, top: 50, width: 600, height: 80, text: "Q4 Results")
textframe(action: "set-font-size", session_id: sessionId, slide_index: 1, shape_index: 1, font_size: 36)
textframe(action: "set-bold", session_id: sessionId, slide_index: 1, shape_index: 1, bold: true)
notes(action: "set-notes-text", session_id: sessionId, slide_index: 1, text: "Welcome the audience and set the scope for Q4 review.")
## Slide 2: chart
slide(action: "add-blank", session_id: sessionId) → slideIndex=2
chart(action: "add-chart", session_id: sessionId, slide_index: 2, chart_type: "bar", left: 50, top: 100, width: 500, height: 300,
categories: ["Q1","Q2","Q3","Q4"], series_name: "Revenue", values: [120,150,170,210])
notes(action: "set-notes-text", session_id: sessionId, slide_index: 2, text: "Revenue grew steadily each quarter, accelerating in Q4.")
## Slide 3: table
slide(action: "add-blank", session_id: sessionId) → slideIndex=3
table(action: "add-table", session_id: sessionId, slide_index: 3, rows: 3, columns: 2, left: 50, top: 100, width: 400, height: 200)
table(action: "set-cell-text", session_id: sessionId, slide_index: 3, shape_index: 1, row: 1, column: 1, text: "Region")
table(action: "set-cell-text", session_id: sessionId, slide_index: 3, shape_index: 1, row: 1, column: 2, text: "Growth")
## ... remaining cells ...
## Verify
export(action: "export-all-slides-to-images", session_id: sessionId, output_directory: "C:\Decks\preview")
accessibility(action: "audit", session_id: sessionId)
export(action: "export-to-pdf", session_id: sessionId, output_path: "C:\Decks\q4.pdf")
presentation(action: "close", sessionId: sessionId, save: true)