$npx -y skills add appautomaton/presentation --skill deck-design-pptCreate new presentation decks as native editable PPTX files with consulting-quality design. Use when the user wants to build a new slide deck, presentation, or pitch deck from a brief or topic. For editing existing .pptx files, use the pptx skill instead.
| 1 | # Deck Design: Operational Playbook |
| 2 | |
| 3 | ## What This Skill Does |
| 4 | |
| 5 | - **Input:** a deck brief + any structured data the user has (tables, time series, bridges, evaluation criteria, etc.). |
| 6 | - **Output:** a native **editable `.pptx`** file with slide masters, theme colors, and all content as PowerPoint-native objects (text boxes, shapes, charts). Every element is individually editable in PowerPoint. |
| 7 | |
| 8 | ### The brief |
| 9 | |
| 10 | The **brief** is everything the user provides about what they want. Before generating anything, extract these signals: |
| 11 | |
| 12 | | Signal | Examples | Defaults if absent | |
| 13 | |---|---|---| |
| 14 | | **Objective** | "pitch to Series A investors", "board strategy update", "SBIR Phase II proposal deck" | General presentation | |
| 15 | | **Audience** | "DoD program managers", "VC partners", "internal team" | General professional | |
| 16 | | **Brand identity** | Logo colors, company name, client palette | Palette defaults | |
| 17 | | **Tone / firm style** | "McKinsey-style", "clean and modern", "urgent/high-stakes" | Infer from audience + objective | |
| 18 | | **Density** | "dense and evidence-heavy", "keep it simple", specific L1/L2/L3 | Infer from audience + objective | |
| 19 | | **Data** | Tables, metrics, timelines, comparisons, evaluations | None. Build from research or request more | |
| 20 | |
| 21 | Not every brief contains all signals. Extract what's there, infer what you can, and use defaults for the rest. Do not ask the user to fill out a checklist. If the user provides a custom palette, brand guide, or design spec, follow it. The built-in styles are defaults, not constraints. |
| 22 | |
| 23 | ### Storyboard intake (from consultant skill) |
| 24 | |
| 25 | When the input is a storyboard artifact (from the consultant skill), the brief extraction is already done. Map directly: |
| 26 | |
| 27 | | Storyboard field | deck-design-ppt step | |
| 28 | |---|---| |
| 29 | | Firm overlay | Style (Phase 1, step 2) | |
| 30 | | Density level | Density (Phase 1, step 3) | |
| 31 | | Per-slide content description | Data-shape extraction (Phase 1, step 5) + pattern routing (step 6) | |
| 32 | | Structured data | Build script data objects (Phase 2, step 8) | |
| 33 | |
| 34 | Skip Phase 1 step 1 (the brief extraction is already done). Steps 5–6 still run here: the storyboard deliberately describes WHAT each slide must prove (the comparison, decomposition, or evaluation), never chart types or data shapes. Deriving the shape from the content description and routing it to a pattern is this skill's job. |
| 35 | |
| 36 | ### Identity intake (from brand-system skill) |
| 37 | |
| 38 | If an `identity.js` produced by the brand-system skill exists in the working directory, the visual identity decisions are already made. Skip [Style Routing](#style-routing). Register the identity as a theme in the build script instead: |
| 39 | |
| 40 | ```javascript |
| 41 | const { createDeck } = require('<this-skill>/masters'); |
| 42 | const { THEMES } = require('<this-skill>/masters/theme'); |
| 43 | const brand = require('./identity'); |
| 44 | |
| 45 | const hex = c => c.replace('#', ''); // themes use bare hex, identity.js uses #-prefixed |
| 46 | THEMES[brand.palette.name] = { |
| 47 | name: brand.firm?.name || brand.palette.name, |
| 48 | accent: hex(brand.palette.accent), |
| 49 | canvas: hex(brand.palette.surface), |
| 50 | mist: hex(brand.palette.surfaceMuted), |
| 51 | midnight: hex(brand.palette.surfaceDark), |
| 52 | text: hex(brand.palette.text), |
| 53 | textSec: hex(brand.palette.textMuted), |
| 54 | textFine: hex(brand.palette.textFine), |
| 55 | border: hex(brand.palette.accentLight), |
| 56 | positive: hex(brand.palette.positive), |
| 57 | caution: hex(brand.palette.warning), |
| 58 | negative: hex(brand.palette.negative), |
| 59 | font: brand.fonts.body.family, |
| 60 | fontDisplay: brand.fonts.heading.family, |
| 61 | headerBar: brand.style === 'institutional' || brand.style === 'data-forward', |
| 62 | darkMode: brand.style === 'dark', |
| 63 | }; |
| 64 | |
| 65 | createDeck(brand.palette.name, slides, 'deck.pptx'); |
| 66 | ``` |
| 67 | |
| 68 | Two caveats: |
| 69 | |
| 70 | - **Fonts**: PPTX embeds no fonts. The theme font renders only if installed on the viewer's machine. For unusual identity fonts, fall back to the stack's system font rather than risking substitution. |
| 71 | - **Style direction**: `brand.style` shapes composition, not just chrome. `institutional` / `data-forward` lean on C-series density, `modern` / `bento` on card-heavy P-series, `dark` on full-bleed `sequoia`-like treatment, `editorial` on typography-led patterns over charts. |
| 72 | |
| 73 | ### Pattern library (21 communication patterns) |
| 74 | |
| 75 | | Tier | Namespace | What it answers | Use when | |
| 76 | |---|---|---|---| |
| 77 | | Tier 1 | **P-series** (`p01` … `p15`) | "What communication move is this slide making?" | All decks | |
| 78 | | Tier 2 | **C-series** (`c01` … `c06`) | "What dense consulting composition does this slide require?" | MBB-style engagement deliverables | |
| 79 | |
| 80 | All patterns work across all 5 styles. The palette controls the visual identity, not the pattern. |
| 81 | |
| 82 | **Patterns are reference implementati |