Claude Code Migration Notes
This skill was migrated from the local Codex skill registry for Claude Code. Use it as a Claude Code SKILL.md skill. Some source text may name Codex-only tools or channels; in Claude Code, use the closest available Claude Code tool, shell command, MCP/plugin integration, or local helper script. Keep secrets in Keychain, environment variables, or authenticated CLIs only.
Presentations
Presentations is for serious, high-polish presentation work where "clean" is
not enough. The target is an editable PowerPoint deck that feels like a strong
editor, a strong analyst, and a strong designer built it together.
Use this skill for analytics narratives, investor/operating reviews, strategy
stories, product/business performance decks, and any PPTX task where the user
asks to beat a reference deck.
Operating Contract
Use artifact-tool presentation JSX only. The bundled Codex runtime provides
@oai/artifact-tool version 2.7.3 or newer and exposes
@oai/artifact-tool/presentation-jsx.
Do not require or import a separate presentation runtime package. PPTX
export/render behavior must be accessed through artifact-tool.
For template-following exact clone/edit mode, the production PPTX boundary is
artifact-tool import of the duplicated starter PPTX and
PresentationFile.exportPptx(presentation). Do not use Python, direct OOXML
package edits, LibreOffice save-as, or fresh-slide rebuilds to mutate the final
template-following deck.
For generated raster images or reference comps, use the Codex imagegen tool.
Bundled scripts may write imagegen prompt files, but must not call external
image APIs or read API keys.
Thread-scoped paths:
SKILL_DIR=<absolute path to the installed Presentations skill>
THREAD_ID=${CODEX_THREAD_ID:-manual-<timestamp-or-short-random-suffix>}
WORKSPACE=$PWD/outputs/$THREAD_ID/presentations/<task-slug>
SLIDES_DIR=$WORKSPACE/slides
PREVIEW_DIR=$WORKSPACE/preview
LAYOUT_DIR=$WORKSPACE/layout
ASSET_DIR=$WORKSPACE/assets
QA_DIR=$WORKSPACE/qa
OUTPUT_DIR=<user-provided output dir if any, otherwise $WORKSPACE/output>
FINAL_PPTX=$OUTPUT_DIR/<relevant-deck-title-slug>.pptx
Use absolute paths in commands and handoffs. Keep all generated planning text
notes, preview PNGs, contact sheets, layout JSON, imagegen prompt files,
temporary reference images, and other scratch files inside this thread-scoped
$WORKSPACE. Keep only final deliverables in $OUTPUT_DIR. If the user
provides an external output directory, write or copy only final deliverables
there; generated .txt plans, contact sheets, previews, layout files, prompt
files, and generated scripts must still stay under $WORKSPACE.
Name the final PPTX with a short, relevant title derived from the deck topic or
requested deliverable. Do not use generic filenames such as output.pptx,
deck.pptx, or deck.final.pptx.
Never use OS temp folders, a shared scratch folder such as
.presentation_workspaces, presentation-workspaces,
presentation_workspaces, out, or a bare repo-local deck slug unless the path
is under outputs/$THREAD_ID/presentations/. If CODEX_THREAD_ID is
unavailable, generate a manual id with timestamp plus a short random suffix.
North Star
The deck must win the contact-sheet test. At thumbnail size, it should show a
coherent visual system, distinct slide rhythms, and evidence-led storytelling.
At readable size, every slide should have a claim, a proof object, and no filler.
This skill rejects "serviceable" output. A deck can pass layout checks and still
fail. If it looks like a generic SaaS dashboard, consulting card grid, or
autogenerated template after replacing the company name, keep iterating.
Mandatory Workflow
- Confirm the task mode.
- Extract the source story.
- Write the claim spine.
- Lock the design system.
- Plan the contact sheet.
- Build editable artifact-tool slides. For template-following, import and edit
the duplicated starter PPTX instead of rebuilding mapped slides from blank
JSX; the starter script validates
template-frame-map.json before
duplication.
- Render previews and layout JSON.
- For non-template modes, score against the comeback rubric.
- For non-template modes, iterate the weakest slides. For
template-following, use the template-following QA loop in
$SKILL_DIR/profiles/template-and-edit.md.
- Export the final PPTX only after the rendered deck meets its task-specific
QA gate. For
template-following, the gate is source-slide fidelity, not
reference beating, and includes the template fidelity guard in
$SKILL_DIR/profiles/template-and-edit.md.
- Clean up generated planning text notes, QA scratch files, contact sheets,
preview images, generated slide modules/scripts, layout JSON, manifests,
prompt text files, and other temporary images before the final response.
Task Modes
template-following: user supplied a source/template deck whose slide
skeletons and visual system must be inherited through exact clone/edit. Any
attached PPTX clearly or implicitly presented as a template routes here
create: no deck/template is supplied; build from prompt and sources.
targeted-edit: small changes to an existing deck.
For template-following, preserve the source deck's typography, palette,
spacing, layout, and brand chrome unless the user explicitly asks to restyle.
For targeted-edit, preserve the existing deck's visual system; use readability
guidance only as a QA check for newly added or edited content.
When both a source deck and a better reference deck exist, separate them:
- source deck: content, required sections, facts, existing material.
- reference deck: quality bar, rhythm, taste, and proof that a stronger output
is possible.
Template-like phrasing includes template, follow this, use this style,
same layout, corporate template, source deck, or a filename/context that
indicates a reusable template. Do not treat a template-like PPTX as a loose
quality reference.
For a non-template quality reference, do not blindly clone the reference. Beat it
by improving story precision, composition variety, chart clarity, whitespace,
and final render quality.
Deck Profile Router
After task mode, choose exactly one primary deck-profile. This is a hard
routing step, not a labeling exercise. The profile determines which proof
objects, source rules, visual density, asset rules, and QA gates are blocking.
Profiles:
finance-ir: earnings, investor relations, operating reviews, financial
analysis. Requires exact reported figures, unit discipline, source footnotes,
bridges, tables, and disclosure logic.
product-platform: SaaS/platform/product narratives. Requires architecture
maps, workflow diagrams, adoption proof, product-to-financial linkage, and
no generic feature-card grids.
gtm-growth: GTM, marketing, consumer growth, subscription ecosystems,
mobility, customer engagement. Requires a visible growth loop, segment or
cohort proof, monetization bridge, and brand-aware rhythm.
engineering-platform: developer, AI, infrastructure, data, security, and
technical platform decks. Requires accurate system diagrams, technical labels
that survive executive simplification, and metrics tied to the architecture.
strategy-leadership: investor-day, board, transformation, and market
strategy decks. Requires chapter discipline, market framing, strategic bets,
and transition slides that carry the thesis.
consumer-retail: lookbooks, clienteling, luxury, consumer-brand, campaign,
travel, lifestyle, food, fashion, beauty, people, places, animals, sports,
playful/kids visual storytelling, and other image-led decks where the audience
needs to visually inspect the subject. Requires real assets or explicit asset
provenance, image quality, editorial hierarchy, and client-ready copy.
template-following: user supplied a template/source PPTX whose slides must
be treated as the canonical editable starting point. This is exact clone/edit
only: inspect the source slide inventory, map every output slide to a source
slide, duplicate mapped slides, edit copied elements in place, and export via
artifact-tool. Requires template-audit.txt, template-frame-map.json, and
deviation-log.txt; follow template-and-edit.md.
targeted-edit-data: add or edit a data/comparison slide. Requires exact
calculations before visual work and a native-looking insertion into the
existing deck.
targeted-edit-media: add headshots, logos, screenshots, or other media.
Requires identity/source verification, consistent crops, and preservation of
the source deck layout grammar.
appendix-heavy: dense appendix, tables, disclosures, or source packs.
Requires index/page markers, readable small-type thresholds, table grammar,
and explicit source-density rules.
If task mode is template-following, the execution path is always
template-and-edit.md; add domain-specific profile gates such as finance-ir
or consumer-retail as secondary constraints in the claim spine. For
non-template tasks, if more than one profile applies, pick the profile that
creates the highest delivery risk as primary, then list secondary gates in the
claim spine.
When a profile is selected, read its corresponding file under
$SKILL_DIR/profiles/ if the task is substantial or unfamiliar:
finance-ir.md
product-platform.md
gtm-growth.md
engineering-platform.md
consumer-retail.md
template-and-edit.md
appendix-heavy.md
Create $WORKSPACE/profile-plan.txt with:
- task mode
- primary deck-profile
- secondary profile gates, if any
- required proof objects
- source/asset requirements
- brand authenticity constraints for logos, icons, mascots, screenshots, and
other identity assets
- profile-specific QA gates
- known missing inputs
Phase 0: Source And Reference Read
For every source or reference deck:
- Render it to PNGs or PDF pages.
- Make a contact sheet.
- Extract slide text.
- Identify which slides are content sources, which are visual targets, and
which patterns are anti-patterns.
For source links:
- Browse or otherwise retrieve the actual source page.
- For finance/product narratives, exhaust official linked materials such as
earnings decks, supplements, filings, and IR PDFs before omitting customer,
cohort, module, bookings, retention, guidance, or mix metrics.
- Extract exact metrics and source dates.
- Keep links in source notes and in a quiet deck footer or appendix.
- Never invent missing metrics to make a chart prettier.
Brand authenticity gate:
- Treat logos, mascots, app icons, product UI, character marks, badges, partner
marks, and customer marks as identity assets.
- Do not draw, trace, approximate, or stylize a company logo, mascot, app icon,
or signature brand mark from scratch unless the user explicitly asks for an
unofficial concept.
- Use a verified source asset with provenance, use a user-provided asset, or
omit the identity asset entirely.
- When an official asset cannot be verified or embedded cleanly, rely on color,
typography, layout, product language, and reported metrics as brand cues
instead of inventing a pseudo-logo or decorative icon.
- Record every identity asset in
$WORKSPACE/source-notes.txt with source,
provenance, and why it belongs in the deck.
- For template-following and source-deck tasks, inspect which identity assets
are official in the source. Preserve or borrow only verified assets; do not
create lookalike marks to fill visual gaps.
Create:
$WORKSPACE/source-notes.txt
$WORKSPACE/reference-audit.txt
$WORKSPACE/data.json when metrics/charts are used
$WORKSPACE/template-audit.txt for template-following or targeted-edit modes
$WORKSPACE/template-frame-map.json for template-following or targeted-edit
modes
$WORKSPACE/deviation-log.txt when inheriting a source deck visual system
$WORKSPACE/template-starter.pptx when using a template PPTX as a starting
point
For template-following and targeted-edit modes, template-audit.txt must
include:
- preserve: visual rules that must survive
- improve: weak spots that can be upgraded
- do not imitate: source artifacts that should not be copied
- brand/assets: logos, colors, imagery, type, and crop language
- exact clone: typography, spacing, inherited placeholders, and source slide
skeletons that must remain unchanged
- insertion contract: how new slides or objects join the existing deck
For template-following source slide inventory, duplicate-first starter deck
creation, in-place copied-slide editing, and template QA blockers, follow
$SKILL_DIR/profiles/template-and-edit.md. Do not use template codegen,
generated template registries, source-PPTX visual-following rebuilds, or
theme-matched fresh layouts for template-following.
Phase 1: Narrative Spine
Before designing, write the story as slide claims. This is binding.
Every non-appendix slide must have:
- a kicker: 1-3 words that names the role, e.g.
EXPANSION DRIVERS
- a claim title: a conclusion, not a topic label
- a proof object: one chart, table, timeline, diagram, or visual comparison
- a support note: concise, factual, and source-backed
For finance/product narratives, a slide with only one thin chart usually fails.
Prefer one dominant proof object plus a compact context rail, variance table, or
callout stack when it improves the argument. Reject proof objects whose metric
movement is too small to carry the claim unless they support a larger bridge.
Product maps must show product-to-business linkage: module or workflow,
adoption signal, expansion/monetization logic, or efficiency impact.
Bad title: Revenue and margin trends
Good title: Growth slowed, but the margin engine kept expanding.
Bad title: Expansion drivers
Good title: Backlog is compounding faster than revenue.
If a title can be used after swapping the company name, sharpen it.
Create $WORKSPACE/claim-spine.txt with:
- thesis
- audience
- one-line arc
- slide list with claim, proof object, source, and omission notes
Phase 2: Design System Lock
Create $WORKSPACE/design-system.txt before writing slide modules.
The design system must define:
- slide size, usually
1280x720
- background system
- typography pair using installed fonts only
- color palette with usage rules
- chart grammar
- diagram grammar
- connector grammar
- container / box grammar
- source/footer grammar
- page marker grammar
- title/kicker grammar
- data-label grammar
- brand asset policy and identity-asset provenance
- allowed brand cues versus forbidden logo/icon/mascot approximations
- allowed layout families
- banned motifs
For create / from-scratch decks only, default to readable typography ranges:
title 34-52px, cover or section claims 56-72px, body copy 18-26px,
chart/table labels and captions 12-16px, and source/footer text 9-11px only
when it is not part of the core read. Define a three-color working palette:
neutral/base, main accent, and secondary/support. Prefer monochrome plus accent
or analogous plus contrast palettes over unrelated color collections.
For template-following and targeted-edit, do not impose fresh typography or
palette ranges. Record the inherited system and preserve it unless the user asks
for restyling.
For premium analytics decks, prefer:
- warm paper or deep ink backgrounds, not default pale dashboards
- a display serif or refined display face for claims
- a utilitarian sans for labels
- hairline rules instead of box outlines
- open composition instead of repeated cards
- direct labels on charts instead of heavy legends
- fewer objects with stronger hierarchy
- Kickers must align as one optical unit: marker center and label center share the
same y-axis, and letter-spaced all-caps labels must be vertically centered in a
box with enough breathing room to avoid low-looking baselines.
- Use a canonical kicker construction rather than hand-tuning each slide:
- marker and label must be named as a pair, e.g.
kicker-marker and
kicker-label, or kicker-01-marker and kicker-01-label
- marker and label boxes should share the same vertical center within
<= 1px
- the label box must use middle vertical alignment and enough height to avoid
low-looking glyphs after render/export
- if multiple kicker rows appear on a slide, suffix the pair names consistently
so QA can verify each row
Do not use a one-note palette. Do not let teal, navy, beige, purple, or gray
dominate without a deliberate secondary contrast.
Phase 3: Contact-Sheet Plan
Before building slides, create $WORKSPACE/contact-sheet-plan.txt.
For a 10-slide deck, use at least 5 distinct macro-layout families, such as:
- cover with metric rail
- editorial product map
- horizontal bar proof with margin notes
- donut or mix proof with ranked evidence table
- line chart with right-side KPI stack
- sequential bar chart with side summary rail
- two-series cash chart with margin callout
- roadmap timeline
- dense appendix table
- dark appendix/source page
Hard gates:
- no more than 2 card-grid slides in a 10-slide deck
- no 3 consecutive slides may share the same macro layout
- no repeated
title + subtitle + boxed panel grid cadence
- no rounded card default unless the data relationship requires containment
- no decorative boxes around prose
The contact sheet must look authored before details are read.
Phase 4: Editable Build
For template-following mode, do not create fresh slides that imitate the source
deck. Use the imported starter PPTX as the editable artifact-tool deck, mutate
the duplicated source slides in place, then export the edited presentation:
const presentation = await PresentationFile.importPptx(await FileBlob.load(starterPptx));
// edit copied slides, shapes, tables, charts, images, and placeholders in place
const pptx = await PresentationFile.exportPptx(presentation);
await pptx.save(finalPptx);
Only use new slide modules and presentation.slides.add() for create /
non-template work. A template-following output slide must come from a
duplicated source slide; if no source slide can support the request, report the
blocker and closest source slide options.
Build one ESM slide module per slide in $SLIDES_DIR, exporting numbered
functions such as:
export async function slide01(presentation, ctx) {
const slide = presentation.slides.add();
// editable artifact-tool presentation JSX content
return slide;
}
Prefer native editable shapes, lines, text, tables, and chart-like constructs.
For charts, native chart helpers are allowed, but authored editable chart
systems built from shapes are acceptable when they give better label placement
and visual polish.
Structured Visual Precision Contract
Charts, diagrams, connectors, boxes, tables, and flows are high-risk proof
objects. Treat them as geometry systems, not decoration.
Do not introduce new decorative custom SVGs, blobs, badges, ornaments, or
icon-like shape stacks that do not encode data, hierarchy, or verified brand
identity. In template-following or targeted-edit, do not strip inherited
source-deck decoration solely because it is decorative.
Before authoring any structured visual, define:
- what the visual must prove
- the primary reading order
- each node / mark / series and what it means
- each edge / connector and what relationship it encodes
- each container / box and what grouping or containment it means
- the intended alignment, spacing, and label attachment rules
Hard build rules:
- Connected series must be rendered as one continuous editable path or as a
verified native chart series. Do not fake a line with separately rotated
rectangles, disconnected strokes, floating slashes, or decorative arrows.
- Every connected series must pass through its intended markers and preserve
the correct point order after render/export.
- In diagrams, connectors must visibly attach to the correct source and target,
follow the intended direction, avoid unrelated objects, and terminate cleanly
without ambiguous crossings. In JSX, use connector attachment props such as
fromElement, toElement, fromSide, and toSide; in the shape API, use
slide.shapes.connect(from, to, ...) rather than disconnected line segments.
- Do not use arrows unless directionality matters. If direction matters, arrow
heads must be consistent, legible, and semantically meaningful.
- Boxes must imply a real grouping, comparison, lane, stage, or containment
relationship. Remove containers that only decorate prose.
- Equal-role boxes must share exact height, alignment, padding, border logic,
and text treatment unless the hierarchy intentionally differs.
- Text inside boxes must have enough padding and never sit against edges,
collide with rules, or rely on shrink-to-fit as the default.
- Use a minimum
12px vertical interior padding for boxed prose / callouts and
16px when the box carries 2+ lines or dark-background copy. If a box only
looks correct with near-zero bottom room, enlarge the box or shorten the copy.
Map this to the authoring surface: JSX layout boxes can use padding;
imported or shape text should use shape.text.insets; paragraph spacing
should use spaceBefore / spaceAfter, not manual spacer shapes.
- Any text that starts inside a filled callout / metric container and spills
past that container edge is a hard failure, even if the overflowed line is no
longer classified as an in-box child by a layout script.
- Labels must anchor to the mark, series, box, or connector they describe. A
viewer should never need to guess which label belongs to which object.
- Repeated metric rails / KPI stacks must preserve their full grammar on every
item: if the pattern is
value + label + context, every item must visibly
render all three pieces with adequate contrast against its background.
- Preview-visible defects override layout-script silence: orphan labels, missing
values in a repeated metric pattern, markers sitting on top of copy, or any
object that looks obviously accidental at full size must be treated as a build
failure even when export and layout checks succeed.
- Tables and matrices must preserve row/column grammar under thumbnail review:
headers, baselines, alignment, and emphasis must remain visually consistent.
- If a chart or diagram requires too many exceptions to remain clear, rebuild
it with a simpler visual rather than patching around geometry defects.
artifact-tool presentation JSX chart caveat:
- Try native
slide.charts.add(...) when the API can represent the chart.
- Do not style
chart.yAxis.majorGridlines unless freshly
verified; it can fail export with this[#h].toProto is not a function.
- Do not fake per-point bar colors by adding zero-valued helper series. If
native charts cannot express the visual cleanly, rebuild the chart with
editable shapes and direct labels.
- For line, trend, or connected-series visuals, prefer a verified native line
chart when the API can express the chart cleanly. If authored with
primitives, draw the series as one continuous editable custom path / polyline
through the data points.
- Do not construct a line series from individually rotated rectangles or short
segment shapes; these can export as detached slashes or broken pseudo-arrows.
- Record the choice in
$WORKSPACE/qa/comeback-scorecard.txt.
Use helper scripts copied with this skill:
node "$SKILL_DIR/scripts/render_artifact_slide.mjs" \
--workspace "$WORKSPACE" \
--slide-module "$SLIDES_DIR/slide-01.mjs" \
--output "$PREVIEW_DIR/slide-01.png" \
--layout "$LAYOUT_DIR/slide-01.layout.json"
node "$SKILL_DIR/scripts/build_artifact_deck.mjs" \
--workspace "$WORKSPACE" \
--slides-dir "$SLIDES_DIR" \
--out "$FINAL_PPTX" \
--preview-dir "$PREVIEW_DIR" \
--layout-dir "$LAYOUT_DIR/final" \
--contact-sheet "$PREVIEW_DIR/contact-sheet.png" \
--slide-count <n>
Presentation JSX source must resolve through artifact-tool. Do not bypass the
bundled runtime with unrelated package imports.
Editable primitives are encouraged for charts, diagrams, and abstract product
flows. They are not a license to fabricate brand marks. Do not create
brand-like icons, mascots, app marks, partner marks, or pseudo-logos as
decoration or to fill whitespace. If the asset is not verified, solve the slide
with stronger hierarchy, data, copy, or abstract shapes instead.
Phase 5: Comeback Rubric
If task mode is template-following, skip the comeback rubric and follow
$SKILL_DIR/profiles/template-and-edit.md for QA. The rest of this section
applies only to non-template modes.
Score the rendered contact sheet and full-size slides in
$WORKSPACE/qa/comeback-scorecard.txt.
Each dimension is 0-5:
story: titles are claims; sequence has a real arc
specificity: deck would fail the noun-swap test
rhythm: contact sheet has varied macro layouts
whitespace: slides breathe without feeling empty
chart clarity: charts prove one sentence, labels are direct, and geometry is
continuous / correctly attached
typography: type feels intentional, not default
restraint: no filler boxes, badges, or decorative clutter
precision: metrics and source notes are exact
coherence: one visual system across the deck
reference delta: visibly better than the target reference, when supplied
Required minimum before delivery:
- total score >= 44 / 50 when a reference is supplied; otherwise >= 40 / 45
- no dimension below 4
reference delta >= 4 when a reference is supplied; otherwise mark it n/a
and do not claim reference-beating
Profile gates are pass/fail and sit above the numeric rubric. A deck fails even
with a high visual score if the profile gate fails. Common profile blockers:
finance-ir: invented or unsupported metrics, mixed units, missing footnotes,
or charts that look good but do not reconcile to sources.
product-platform: generic feature cards, architecture boxes that say
nothing, module lists without adoption or monetization proof, or missing
adoption/business linkage.
gtm-growth: funnel labels without progression logic, weak brand fit,
fabricated brand marks, or monetization claims unsupported by proof.
engineering-platform: technically vague diagrams, labels stripped of real
meaning, or developer details that overwhelm the executive story.
strategy-leadership: chapter dividers without thesis movement or a market
frame that never returns in the operating plan.
consumer-retail: stock-looking imagery, weak crop quality, unverified asset
provenance, or client outreach copy that feels generic.
targeted-edit-data: calculation mistakes, wrong ranking, or a new slide
that looks pasted in.
targeted-edit-media: unverified identities, inconsistent headshot crops, or
local layout damage.
appendix-heavy: unreadable tables, missing index, or source density that
hides the answer.
brand authenticity: fabricated logo, mascot, app icon, signature mark,
unverified product UI, or pseudo-official mark used as decoration.
If a reference deck is supplied, write a blunt slide-by-slide comparison:
- where this deck beats the reference
- where the reference still wins
- what changed after iteration
Phase 6: Mechanical Verification
Before final delivery:
- Confirm the final PPTX exists and is non-empty.
- Confirm the expected slide count in the package.
- Confirm no empty media files.
- Confirm chart package parts when native charts are required, or document why
authored editable chart primitives were used instead.
- Render every final slide to PNG through artifact-tool.
- Inspect the artifact-tool contact sheet at thumbnail size and the
full-size PNG renders for visual errors.
- During full-size render review, explicitly verify repeated UI grammars such as
KPI rails, step sequences, legends, and forecast strips for completeness and
contrast: no blank value slots, no same-color-on-background text, and no
decorative marks that collide with the reading path.
- For every chart, diagram, matrix, connector system, and box system, inspect
the rendered slide at full size and verify the intended geometry:
- connected lines are continuous and pass through the correct markers
- bars / dots / labels align to the same baseline or axis logic
- arrows and connectors attach to the intended objects and do not float
- arrows point in the intended reading direction
- boxes that share a role line up, carry equivalent padding, and do not clip
or crowd text
- kickers / eyebrow rows align optically: icon, rule, and label sit on one
centerline rather than a low or drifting text baseline
- Use the kicker naming convention so layout QA can verify centerline alignment;
un-named kicker rows are a QA gap, not a pass.
- boxed prose and callouts keep visible top/bottom breathing room, especially on
dark fills and multi-line statements
- grouped objects read as a coherent system at thumbnail size
- Inspect the contact sheet and full-size renders for unofficial logos, app
icons, mascots, product UI, partner marks, and customer marks. Confirm each
identity asset is verified in source notes or remove it.
- Do not require, bundle, or assume LibreOffice or any other external renderer.
If a compatible renderer is already available and the user asks for it, it may
be used as non-blocking extra QA only.
- Run layout checks and fix all errors. Warnings may remain only when they are
known false positives from intentional table/axis/label construction and the
rendered slide is clean.
- Deficient box padding and text overflow out of filled callouts are errors, not
acceptable warnings.
Phase 7: Final QA Ledger
Create $WORKSPACE/qa/comeback-scorecard.txt with:
- final score by rubric dimension
- primary deck-profile and profile gate pass/fail
- reference-deck comparison
- tool/runtime caveats
- package checks
- render checks
- accepted warnings or tradeoffs
Do not leave the scorecard as vague praise. It should name the remaining weak
spots if any exist.
Blocking Anti-Patterns
Fix these before delivery:
- title states a topic instead of a conclusion
- slide uses more than one dominant evidence object
- chart has a legend when direct labels would work better
- chart displays data but does not prove the title
- connected-series chart is rendered as detached strokes, floating slashes,
pseudo-arrows, or a path that misses its markers
- line or connector geometry changes meaning after render / export
- connector floats, attaches to the wrong object, crosses unrelated structure,
or points in an ambiguous direction
- arrows are decorative rather than semantic
- box system implies grouping that the content does not support
- equal-role boxes are visibly misaligned, inconsistently padded, or styled as
if they have different meanings
- label appears visually detached from the mark, series, connector, or box it
describes
- a repeated KPI / metric rail omits a required value, label, or context line on
any item
- a marker, node, glyph, or accent shape visibly sits on top of readable copy
- a value is technically present but visually lost because it has insufficient
contrast against the background
- table or matrix loses its row / column grammar at thumbnail size
- proof object is too thin to carry the claim
- product or architecture diagram lacks adoption, monetization, expansion, or
efficiency linkage
- visible containers are louder than the content
- rounded cards are used as default scaffolding
- three slides in a row share the same composition
- contact sheet reads as a template pack
- contact sheet has clean slides but weak information architecture
- body copy exists only to fill space
- appendix is clean but unreadable
- artifact-tool render has obvious wrapped labels, collisions, awkward vertical
text, or cramped callouts
- footer/source/page marker changes style
- kicker icon and label are not optically centered on the same row
- kicker rows are hand-built without named marker/label pairs, preventing QA
from verifying their alignment
- boxed prose appears pinned to the bottom edge or lacks visible vertical
breathing room
- typography falls back to default without intent
- low-resolution logo or rough image crop
- fabricated or approximated official logo, mascot, app icon, product UI, or
signature brand mark
- brand-like icon used just to fill whitespace
- unprovenanced partner/customer logos, product screenshots, or brand badges
- unsupported metric or vague source label
- output only matches the reference instead of beating it
Iteration Rule
This iteration rule applies only to non-template modes. For
template-following, use $SKILL_DIR/profiles/template-and-edit.md QA instead.
Do not stop after the first export unless the comeback rubric passes. Iterate
the weakest 2-4 slides first, then rerender the full deck. Prefer a bold rebuild
of a weak slide over cosmetic nudge work.
If a model or tool cannot reach the reference quality, say exactly why and name
the remaining weakest slides. Do not call the deck done because a PPTX exists.
Subagents
Subagents are allowed when the user explicitly asks for them. Use them for:
- source metric extraction
- reference deck critique
- final QA inspection / scoring
- appendix implementation from a fixed spec
- alternate prototype generation in a separate workspace
The main agent owns final story, visual system, integration, and QA. Never ship
a raw stitched deck from independent slide workers.
Final Delivery
After the final PPTX is exported and verified, run the cleanup helper:
node "$SKILL_DIR/scripts/cleanup_presentation_workspace.mjs" \
--workspace "$WORKSPACE" \
--output-dir "$OUTPUT_DIR"
The cleanup helper preserves final .pptx deliverables in $OUTPUT_DIR and
deletes scratch artifacts from the current thread-scoped $WORKSPACE:
- Delete generated planning and QA text notes such as
profile-plan.txt,
source-notes.txt, reference-audit.txt, claim-spine.txt,
design-system.txt, contact-sheet-plan.txt, and $WORKSPACE/qa/*.txt.
- Delete generated reference/imagegen prompt text files such as
*.imagegen.txt and reference-imagegen-prompts.txt.
- Delete rendered review artifacts such as
contact-sheet.png, preview PNGs,
temporary reference PNGs, and other temporary images that are not deliberately
embedded in the final deck.
- Delete generated per-run scripts and slide modules, including files under
$SLIDES_DIR. Do not delete the installed skill helper scripts under
$SKILL_DIR/scripts.
- Delete generated layout JSON, build manifests, and other per-run scratch
metadata.
- Do not delete user-provided source files, source decks, or assets that are
intentionally embedded in or required to regenerate the final deck.
- If the user explicitly asks for QA artifacts, keep only the requested
artifacts and mention that they were retained.
- Never delete sibling folders under
outputs/$THREAD_ID/presentations/ or any
other thread's workspace.
If $OUTPUT_DIR is outside $WORKSPACE, the cleanup helper deletes
$WORKSPACE and does not clean the external output directory. That external
directory must contain only final deliverables, not scratch artifacts.
Do not attach or link contact-sheet.png, preview PNGs, generated scripts,
planning docs, JSON manifests, layout JSON, imagegen prompt files, or temporary
images unless the user explicitly asks for QA artifacts.
Do not mention that scratch or QA artifacts were cleaned up in the final
response; the final response should focus on the user-facing deck only.
Deliver:
- final
.pptx with a relevant deck-title filename, not a generic name such
as output.pptx or deck.final.pptx
- brief scorecard summary
- note any residual gap against the reference
The final response should be short and artifact-focused.
1---2name: presentations-23description: Build PowerPoint PPTX decks with artifact-tool presentation JSX4---567## Claude Code Migration Notes89This skill was migrated from the local Codex skill registry for Claude Code. Use it as a Claude Code `SKILL.md` skill. Some source text may name Codex-only tools or channels; in Claude Code, use the closest available Claude Code tool, shell command, MCP/plugin integration, or local helper script. Keep secrets in Keychain, environment variables, or authenticated CLIs only.1011# Presentations1213`Presentations` is for serious, high-polish presentation work where "clean" is14not enough. The target is an editable PowerPoint deck that feels like a strong15editor, a strong analyst, and a strong designer built it together.1617Use this skill for analytics narratives, investor/operating reviews, strategy18stories, product/business performance decks, and any PPTX task where the user19asks to beat a reference deck.2021## Operating Contract2223Use artifact-tool presentation JSX only. The bundled Codex runtime provides24`@oai/artifact-tool` version 2.7.3 or newer and exposes25`@oai/artifact-tool/presentation-jsx`.2627Do not require or import a separate presentation runtime package. PPTX28export/render behavior must be accessed through artifact-tool.29For template-following exact clone/edit mode, the production PPTX boundary is30artifact-tool import of the duplicated starter PPTX and31`PresentationFile.exportPptx(presentation)`. Do not use Python, direct OOXML32package edits, LibreOffice save-as, or fresh-slide rebuilds to mutate the final33template-following deck.3435For generated raster images or reference comps, use the Codex imagegen tool.36Bundled scripts may write imagegen prompt files, but must not call external37image APIs or read API keys.3839Thread-scoped paths:4041- `SKILL_DIR=<absolute path to the installed Presentations skill>`42- `THREAD_ID=${CODEX_THREAD_ID:-manual-<timestamp-or-short-random-suffix>}`43- `WORKSPACE=$PWD/outputs/$THREAD_ID/presentations/<task-slug>`44- `SLIDES_DIR=$WORKSPACE/slides`45- `PREVIEW_DIR=$WORKSPACE/preview`46- `LAYOUT_DIR=$WORKSPACE/layout`47- `ASSET_DIR=$WORKSPACE/assets`48- `QA_DIR=$WORKSPACE/qa`49- `OUTPUT_DIR=<user-provided output dir if any, otherwise $WORKSPACE/output>`50- `FINAL_PPTX=$OUTPUT_DIR/<relevant-deck-title-slug>.pptx`5152Use absolute paths in commands and handoffs. Keep all generated planning text53notes, preview PNGs, contact sheets, layout JSON, imagegen prompt files,54temporary reference images, and other scratch files inside this thread-scoped55`$WORKSPACE`. Keep only final deliverables in `$OUTPUT_DIR`. If the user56provides an external output directory, write or copy only final deliverables57there; generated `.txt` plans, contact sheets, previews, layout files, prompt58files, and generated scripts must still stay under `$WORKSPACE`.59Name the final PPTX with a short, relevant title derived from the deck topic or60requested deliverable. Do not use generic filenames such as `output.pptx`,61`deck.pptx`, or `deck.final.pptx`.6263Never use OS temp folders, a shared scratch folder such as64`.presentation_workspaces`, `presentation-workspaces`,65`presentation_workspaces`, `out`, or a bare repo-local deck slug unless the path66is under `outputs/$THREAD_ID/presentations/`. If `CODEX_THREAD_ID` is67unavailable, generate a manual id with timestamp plus a short random suffix.6869## North Star7071The deck must win the contact-sheet test. At thumbnail size, it should show a72coherent visual system, distinct slide rhythms, and evidence-led storytelling.73At readable size, every slide should have a claim, a proof object, and no filler.7475This skill rejects "serviceable" output. A deck can pass layout checks and still76fail. If it looks like a generic SaaS dashboard, consulting card grid, or77autogenerated template after replacing the company name, keep iterating.7879## Mandatory Workflow80811. Confirm the task mode.822. Extract the source story.833. Write the claim spine.844. Lock the design system.855. Plan the contact sheet.866. Build editable artifact-tool slides. For template-following, import and edit87 the duplicated starter PPTX instead of rebuilding mapped slides from blank88 JSX; the starter script validates `template-frame-map.json` before89 duplication.907. Render previews and layout JSON.918. For non-template modes, score against the comeback rubric.929. For non-template modes, iterate the weakest slides. For93 `template-following`, use the template-following QA loop in94 `$SKILL_DIR/profiles/template-and-edit.md`.9510. Export the final PPTX only after the rendered deck meets its task-specific96 QA gate. For `template-following`, the gate is source-slide fidelity, not97 reference beating, and includes the template fidelity guard in98 `$SKILL_DIR/profiles/template-and-edit.md`.9911. Clean up generated planning text notes, QA scratch files, contact sheets,100 preview images, generated slide modules/scripts, layout JSON, manifests,101 prompt text files, and other temporary images before the final response.102103### Task Modes104105- `template-following`: user supplied a source/template deck whose slide106 skeletons and visual system must be inherited through exact clone/edit. Any107 attached PPTX clearly or implicitly presented as a template routes here108- `create`: no deck/template is supplied; build from prompt and sources.109- `targeted-edit`: small changes to an existing deck.110111For `template-following`, preserve the source deck's typography, palette,112spacing, layout, and brand chrome unless the user explicitly asks to restyle.113For `targeted-edit`, preserve the existing deck's visual system; use readability114guidance only as a QA check for newly added or edited content.115116When both a source deck and a better reference deck exist, separate them:117118- source deck: content, required sections, facts, existing material.119- reference deck: quality bar, rhythm, taste, and proof that a stronger output120 is possible.121122Template-like phrasing includes `template`, `follow this`, `use this style`,123`same layout`, `corporate template`, `source deck`, or a filename/context that124indicates a reusable template. Do not treat a template-like PPTX as a loose125quality reference.126127For a non-template quality reference, do not blindly clone the reference. Beat it128by improving story precision, composition variety, chart clarity, whitespace,129and final render quality.130131### Deck Profile Router132133After task mode, choose exactly one primary `deck-profile`. This is a hard134routing step, not a labeling exercise. The profile determines which proof135objects, source rules, visual density, asset rules, and QA gates are blocking.136137Profiles:138139- `finance-ir`: earnings, investor relations, operating reviews, financial140 analysis. Requires exact reported figures, unit discipline, source footnotes,141 bridges, tables, and disclosure logic.142- `product-platform`: SaaS/platform/product narratives. Requires architecture143 maps, workflow diagrams, adoption proof, product-to-financial linkage, and144 no generic feature-card grids.145- `gtm-growth`: GTM, marketing, consumer growth, subscription ecosystems,146 mobility, customer engagement. Requires a visible growth loop, segment or147 cohort proof, monetization bridge, and brand-aware rhythm.148- `engineering-platform`: developer, AI, infrastructure, data, security, and149 technical platform decks. Requires accurate system diagrams, technical labels150 that survive executive simplification, and metrics tied to the architecture.151- `strategy-leadership`: investor-day, board, transformation, and market152 strategy decks. Requires chapter discipline, market framing, strategic bets,153 and transition slides that carry the thesis.154- `consumer-retail`: lookbooks, clienteling, luxury, consumer-brand, campaign,155 travel, lifestyle, food, fashion, beauty, people, places, animals, sports,156 playful/kids visual storytelling, and other image-led decks where the audience157 needs to visually inspect the subject. Requires real assets or explicit asset158 provenance, image quality, editorial hierarchy, and client-ready copy.159- `template-following`: user supplied a template/source PPTX whose slides must160 be treated as the canonical editable starting point. This is exact clone/edit161 only: inspect the source slide inventory, map every output slide to a source162 slide, duplicate mapped slides, edit copied elements in place, and export via163 artifact-tool. Requires `template-audit.txt`, `template-frame-map.json`, and164 `deviation-log.txt`; follow `template-and-edit.md`.165- `targeted-edit-data`: add or edit a data/comparison slide. Requires exact166 calculations before visual work and a native-looking insertion into the167 existing deck.168- `targeted-edit-media`: add headshots, logos, screenshots, or other media.169 Requires identity/source verification, consistent crops, and preservation of170 the source deck layout grammar.171- `appendix-heavy`: dense appendix, tables, disclosures, or source packs.172 Requires index/page markers, readable small-type thresholds, table grammar,173 and explicit source-density rules.174175If task mode is `template-following`, the execution path is always176`template-and-edit.md`; add domain-specific profile gates such as `finance-ir`177or `consumer-retail` as secondary constraints in the claim spine. For178non-template tasks, if more than one profile applies, pick the profile that179creates the highest delivery risk as primary, then list secondary gates in the180claim spine.181182When a profile is selected, read its corresponding file under183`$SKILL_DIR/profiles/` if the task is substantial or unfamiliar:184185- `finance-ir.md`186- `product-platform.md`187- `gtm-growth.md`188- `engineering-platform.md`189- `consumer-retail.md`190- `template-and-edit.md`191- `appendix-heavy.md`192193Create `$WORKSPACE/profile-plan.txt` with:194195- task mode196- primary deck-profile197- secondary profile gates, if any198- required proof objects199- source/asset requirements200- brand authenticity constraints for logos, icons, mascots, screenshots, and201 other identity assets202- profile-specific QA gates203- known missing inputs204205## Phase 0: Source And Reference Read206207For every source or reference deck:208209- Render it to PNGs or PDF pages.210- Make a contact sheet.211- Extract slide text.212- Identify which slides are content sources, which are visual targets, and213 which patterns are anti-patterns.214215For source links:216217- Browse or otherwise retrieve the actual source page.218- For finance/product narratives, exhaust official linked materials such as219 earnings decks, supplements, filings, and IR PDFs before omitting customer,220 cohort, module, bookings, retention, guidance, or mix metrics.221- Extract exact metrics and source dates.222- Keep links in source notes and in a quiet deck footer or appendix.223- Never invent missing metrics to make a chart prettier.224225Brand authenticity gate:226227- Treat logos, mascots, app icons, product UI, character marks, badges, partner228 marks, and customer marks as identity assets.229- Do not draw, trace, approximate, or stylize a company logo, mascot, app icon,230 or signature brand mark from scratch unless the user explicitly asks for an231 unofficial concept.232- Use a verified source asset with provenance, use a user-provided asset, or233 omit the identity asset entirely.234- When an official asset cannot be verified or embedded cleanly, rely on color,235 typography, layout, product language, and reported metrics as brand cues236 instead of inventing a pseudo-logo or decorative icon.237- Record every identity asset in `$WORKSPACE/source-notes.txt` with source,238 provenance, and why it belongs in the deck.239- For template-following and source-deck tasks, inspect which identity assets240 are official in the source. Preserve or borrow only verified assets; do not241 create lookalike marks to fill visual gaps.242243Create:244245- `$WORKSPACE/source-notes.txt`246- `$WORKSPACE/reference-audit.txt`247- `$WORKSPACE/data.json` when metrics/charts are used248- `$WORKSPACE/template-audit.txt` for template-following or targeted-edit modes249- `$WORKSPACE/template-frame-map.json` for template-following or targeted-edit250 modes251- `$WORKSPACE/deviation-log.txt` when inheriting a source deck visual system252- `$WORKSPACE/template-starter.pptx` when using a template PPTX as a starting253 point254255For template-following and targeted-edit modes, `template-audit.txt` must256include:257258- preserve: visual rules that must survive259- improve: weak spots that can be upgraded260- do not imitate: source artifacts that should not be copied261- brand/assets: logos, colors, imagery, type, and crop language262- exact clone: typography, spacing, inherited placeholders, and source slide263 skeletons that must remain unchanged264- insertion contract: how new slides or objects join the existing deck265266For template-following source slide inventory, duplicate-first starter deck267creation, in-place copied-slide editing, and template QA blockers, follow268`$SKILL_DIR/profiles/template-and-edit.md`. Do not use template codegen,269generated template registries, source-PPTX visual-following rebuilds, or270theme-matched fresh layouts for `template-following`.271272## Phase 1: Narrative Spine273274Before designing, write the story as slide claims. This is binding.275276Every non-appendix slide must have:277278- a kicker: 1-3 words that names the role, e.g. `EXPANSION DRIVERS`279- a claim title: a conclusion, not a topic label280- a proof object: one chart, table, timeline, diagram, or visual comparison281- a support note: concise, factual, and source-backed282283For finance/product narratives, a slide with only one thin chart usually fails.284Prefer one dominant proof object plus a compact context rail, variance table, or285callout stack when it improves the argument. Reject proof objects whose metric286movement is too small to carry the claim unless they support a larger bridge.287Product maps must show product-to-business linkage: module or workflow,288adoption signal, expansion/monetization logic, or efficiency impact.289290Bad title: `Revenue and margin trends`291292Good title: `Growth slowed, but the margin engine kept expanding.`293294Bad title: `Expansion drivers`295296Good title: `Backlog is compounding faster than revenue.`297298If a title can be used after swapping the company name, sharpen it.299300Create `$WORKSPACE/claim-spine.txt` with:301302- thesis303- audience304- one-line arc305- slide list with claim, proof object, source, and omission notes306307## Phase 2: Design System Lock308309Create `$WORKSPACE/design-system.txt` before writing slide modules.310311The design system must define:312313- slide size, usually `1280x720`314- background system315- typography pair using installed fonts only316- color palette with usage rules317- chart grammar318- diagram grammar319- connector grammar320- container / box grammar321- source/footer grammar322- page marker grammar323- title/kicker grammar324- data-label grammar325- brand asset policy and identity-asset provenance326- allowed brand cues versus forbidden logo/icon/mascot approximations327- allowed layout families328- banned motifs329330For `create` / from-scratch decks only, default to readable typography ranges:331title `34-52px`, cover or section claims `56-72px`, body copy `18-26px`,332chart/table labels and captions `12-16px`, and source/footer text `9-11px` only333when it is not part of the core read. Define a three-color working palette:334neutral/base, main accent, and secondary/support. Prefer monochrome plus accent335or analogous plus contrast palettes over unrelated color collections.336337For `template-following` and `targeted-edit`, do not impose fresh typography or338palette ranges. Record the inherited system and preserve it unless the user asks339for restyling.340341For premium analytics decks, prefer:342343- warm paper or deep ink backgrounds, not default pale dashboards344- a display serif or refined display face for claims345- a utilitarian sans for labels346- hairline rules instead of box outlines347- open composition instead of repeated cards348- direct labels on charts instead of heavy legends349- fewer objects with stronger hierarchy350- Kickers must align as one optical unit: marker center and label center share the351 same y-axis, and letter-spaced all-caps labels must be vertically centered in a352 box with enough breathing room to avoid low-looking baselines.353- Use a canonical kicker construction rather than hand-tuning each slide:354 - marker and label must be named as a pair, e.g. `kicker-marker` and355 `kicker-label`, or `kicker-01-marker` and `kicker-01-label`356 - marker and label boxes should share the same vertical center within `<= 1px`357 - the label box must use middle vertical alignment and enough height to avoid358 low-looking glyphs after render/export359 - if multiple kicker rows appear on a slide, suffix the pair names consistently360 so QA can verify each row361362Do not use a one-note palette. Do not let teal, navy, beige, purple, or gray363dominate without a deliberate secondary contrast.364365## Phase 3: Contact-Sheet Plan366367Before building slides, create `$WORKSPACE/contact-sheet-plan.txt`.368369For a 10-slide deck, use at least 5 distinct macro-layout families, such as:370371- cover with metric rail372- editorial product map373- horizontal bar proof with margin notes374- donut or mix proof with ranked evidence table375- line chart with right-side KPI stack376- sequential bar chart with side summary rail377- two-series cash chart with margin callout378- roadmap timeline379- dense appendix table380- dark appendix/source page381382Hard gates:383384- no more than 2 card-grid slides in a 10-slide deck385- no 3 consecutive slides may share the same macro layout386- no repeated `title + subtitle + boxed panel grid` cadence387- no rounded card default unless the data relationship requires containment388- no decorative boxes around prose389390The contact sheet must look authored before details are read.391392## Phase 4: Editable Build393394For template-following mode, do not create fresh slides that imitate the source395deck. Use the imported starter PPTX as the editable artifact-tool deck, mutate396the duplicated source slides in place, then export the edited presentation:397398```js399const presentation = await PresentationFile.importPptx(await FileBlob.load(starterPptx));400// edit copied slides, shapes, tables, charts, images, and placeholders in place401const pptx = await PresentationFile.exportPptx(presentation);402await pptx.save(finalPptx);403```404405Only use new slide modules and `presentation.slides.add()` for create /406non-template work. A template-following output slide must come from a407duplicated source slide; if no source slide can support the request, report the408blocker and closest source slide options.409410Build one ESM slide module per slide in `$SLIDES_DIR`, exporting numbered411functions such as:412413```js414export async function slide01(presentation, ctx) {415 const slide = presentation.slides.add();416 // editable artifact-tool presentation JSX content417 return slide;418}419```420421Prefer native editable shapes, lines, text, tables, and chart-like constructs.422For charts, native chart helpers are allowed, but authored editable chart423systems built from shapes are acceptable when they give better label placement424and visual polish.425426### Structured Visual Precision Contract427428Charts, diagrams, connectors, boxes, tables, and flows are high-risk proof429objects. Treat them as geometry systems, not decoration.430431Do not introduce new decorative custom SVGs, blobs, badges, ornaments, or432icon-like shape stacks that do not encode data, hierarchy, or verified brand433identity. In `template-following` or `targeted-edit`, do not strip inherited434source-deck decoration solely because it is decorative.435436Before authoring any structured visual, define:437438- what the visual must prove439- the primary reading order440- each node / mark / series and what it means441- each edge / connector and what relationship it encodes442- each container / box and what grouping or containment it means443- the intended alignment, spacing, and label attachment rules444445Hard build rules:446447- Connected series must be rendered as one continuous editable path or as a448 verified native chart series. Do not fake a line with separately rotated449 rectangles, disconnected strokes, floating slashes, or decorative arrows.450- Every connected series must pass through its intended markers and preserve451 the correct point order after render/export.452- In diagrams, connectors must visibly attach to the correct source and target,453 follow the intended direction, avoid unrelated objects, and terminate cleanly454 without ambiguous crossings. In JSX, use connector attachment props such as455 `fromElement`, `toElement`, `fromSide`, and `toSide`; in the shape API, use456 `slide.shapes.connect(from, to, ...)` rather than disconnected line segments.457- Do not use arrows unless directionality matters. If direction matters, arrow458 heads must be consistent, legible, and semantically meaningful.459- Boxes must imply a real grouping, comparison, lane, stage, or containment460 relationship. Remove containers that only decorate prose.461- Equal-role boxes must share exact height, alignment, padding, border logic,462 and text treatment unless the hierarchy intentionally differs.463- Text inside boxes must have enough padding and never sit against edges,464 collide with rules, or rely on shrink-to-fit as the default.465- Use a minimum `12px` vertical interior padding for boxed prose / callouts and466 `16px` when the box carries 2+ lines or dark-background copy. If a box only467 looks correct with near-zero bottom room, enlarge the box or shorten the copy.468 Map this to the authoring surface: JSX layout boxes can use `padding`;469 imported or shape text should use `shape.text.insets`; paragraph spacing470 should use `spaceBefore` / `spaceAfter`, not manual spacer shapes.471- Any text that starts inside a filled callout / metric container and spills472 past that container edge is a hard failure, even if the overflowed line is no473 longer classified as an in-box child by a layout script.474- Labels must anchor to the mark, series, box, or connector they describe. A475 viewer should never need to guess which label belongs to which object.476- Repeated metric rails / KPI stacks must preserve their full grammar on every477 item: if the pattern is `value + label + context`, every item must visibly478 render all three pieces with adequate contrast against its background.479- Preview-visible defects override layout-script silence: orphan labels, missing480 values in a repeated metric pattern, markers sitting on top of copy, or any481 object that looks obviously accidental at full size must be treated as a build482 failure even when export and layout checks succeed.483- Tables and matrices must preserve row/column grammar under thumbnail review:484 headers, baselines, alignment, and emphasis must remain visually consistent.485- If a chart or diagram requires too many exceptions to remain clear, rebuild486 it with a simpler visual rather than patching around geometry defects.487488artifact-tool presentation JSX chart caveat:489490- Try native `slide.charts.add(...)` when the API can represent the chart.491- Do not style `chart.yAxis.majorGridlines` unless freshly492 verified; it can fail export with `this[#h].toProto is not a function`.493- Do not fake per-point bar colors by adding zero-valued helper series. If494 native charts cannot express the visual cleanly, rebuild the chart with495 editable shapes and direct labels.496- For line, trend, or connected-series visuals, prefer a verified native line497 chart when the API can express the chart cleanly. If authored with498 primitives, draw the series as one continuous editable custom path / polyline499 through the data points.500- Do not construct a line series from individually rotated rectangles or short501 segment shapes; these can export as detached slashes or broken pseudo-arrows.502- Record the choice in `$WORKSPACE/qa/comeback-scorecard.txt`.503504Use helper scripts copied with this skill:505506```bash507node "$SKILL_DIR/scripts/render_artifact_slide.mjs" \508 --workspace "$WORKSPACE" \509 --slide-module "$SLIDES_DIR/slide-01.mjs" \510 --output "$PREVIEW_DIR/slide-01.png" \511 --layout "$LAYOUT_DIR/slide-01.layout.json"512513node "$SKILL_DIR/scripts/build_artifact_deck.mjs" \514 --workspace "$WORKSPACE" \515 --slides-dir "$SLIDES_DIR" \516 --out "$FINAL_PPTX" \517 --preview-dir "$PREVIEW_DIR" \518 --layout-dir "$LAYOUT_DIR/final" \519 --contact-sheet "$PREVIEW_DIR/contact-sheet.png" \520 --slide-count <n>521```522523Presentation JSX source must resolve through artifact-tool. Do not bypass the524bundled runtime with unrelated package imports.525526Editable primitives are encouraged for charts, diagrams, and abstract product527flows. They are not a license to fabricate brand marks. Do not create528brand-like icons, mascots, app marks, partner marks, or pseudo-logos as529decoration or to fill whitespace. If the asset is not verified, solve the slide530with stronger hierarchy, data, copy, or abstract shapes instead.531532## Phase 5: Comeback Rubric533534If task mode is `template-following`, skip the comeback rubric and follow535`$SKILL_DIR/profiles/template-and-edit.md` for QA. The rest of this section536applies only to non-template modes.537538Score the rendered contact sheet and full-size slides in539`$WORKSPACE/qa/comeback-scorecard.txt`.540541Each dimension is 0-5:542543- `story`: titles are claims; sequence has a real arc544- `specificity`: deck would fail the noun-swap test545- `rhythm`: contact sheet has varied macro layouts546- `whitespace`: slides breathe without feeling empty547- `chart clarity`: charts prove one sentence, labels are direct, and geometry is548 continuous / correctly attached549- `typography`: type feels intentional, not default550- `restraint`: no filler boxes, badges, or decorative clutter551- `precision`: metrics and source notes are exact552- `coherence`: one visual system across the deck553- `reference delta`: visibly better than the target reference, when supplied554555Required minimum before delivery:556557- total score >= 44 / 50 when a reference is supplied; otherwise >= 40 / 45558- no dimension below 4559- `reference delta` >= 4 when a reference is supplied; otherwise mark it `n/a`560 and do not claim reference-beating561562Profile gates are pass/fail and sit above the numeric rubric. A deck fails even563with a high visual score if the profile gate fails. Common profile blockers:564565- `finance-ir`: invented or unsupported metrics, mixed units, missing footnotes,566 or charts that look good but do not reconcile to sources.567- `product-platform`: generic feature cards, architecture boxes that say568 nothing, module lists without adoption or monetization proof, or missing569 adoption/business linkage.570- `gtm-growth`: funnel labels without progression logic, weak brand fit,571 fabricated brand marks, or monetization claims unsupported by proof.572- `engineering-platform`: technically vague diagrams, labels stripped of real573 meaning, or developer details that overwhelm the executive story.574- `strategy-leadership`: chapter dividers without thesis movement or a market575 frame that never returns in the operating plan.576- `consumer-retail`: stock-looking imagery, weak crop quality, unverified asset577 provenance, or client outreach copy that feels generic.578- `targeted-edit-data`: calculation mistakes, wrong ranking, or a new slide579 that looks pasted in.580- `targeted-edit-media`: unverified identities, inconsistent headshot crops, or581 local layout damage.582- `appendix-heavy`: unreadable tables, missing index, or source density that583 hides the answer.584- `brand authenticity`: fabricated logo, mascot, app icon, signature mark,585 unverified product UI, or pseudo-official mark used as decoration.586587If a reference deck is supplied, write a blunt slide-by-slide comparison:588589- where this deck beats the reference590- where the reference still wins591- what changed after iteration592593## Phase 6: Mechanical Verification594595Before final delivery:596597- Confirm the final PPTX exists and is non-empty.598- Confirm the expected slide count in the package.599- Confirm no empty media files.600- Confirm chart package parts when native charts are required, or document why601 authored editable chart primitives were used instead.602- Render every final slide to PNG through artifact-tool.603- Inspect the artifact-tool contact sheet at thumbnail size and the604 full-size PNG renders for visual errors.605- During full-size render review, explicitly verify repeated UI grammars such as606 KPI rails, step sequences, legends, and forecast strips for completeness and607 contrast: no blank value slots, no same-color-on-background text, and no608 decorative marks that collide with the reading path.609- For every chart, diagram, matrix, connector system, and box system, inspect610 the rendered slide at full size and verify the intended geometry:611 - connected lines are continuous and pass through the correct markers612 - bars / dots / labels align to the same baseline or axis logic613 - arrows and connectors attach to the intended objects and do not float614 - arrows point in the intended reading direction615- boxes that share a role line up, carry equivalent padding, and do not clip616 or crowd text617- kickers / eyebrow rows align optically: icon, rule, and label sit on one618 centerline rather than a low or drifting text baseline619- Use the kicker naming convention so layout QA can verify centerline alignment;620 un-named kicker rows are a QA gap, not a pass.621- boxed prose and callouts keep visible top/bottom breathing room, especially on622 dark fills and multi-line statements623 - grouped objects read as a coherent system at thumbnail size624- Inspect the contact sheet and full-size renders for unofficial logos, app625 icons, mascots, product UI, partner marks, and customer marks. Confirm each626 identity asset is verified in source notes or remove it.627- Do not require, bundle, or assume LibreOffice or any other external renderer.628 If a compatible renderer is already available and the user asks for it, it may629 be used as non-blocking extra QA only.630- Run layout checks and fix all errors. Warnings may remain only when they are631 known false positives from intentional table/axis/label construction and the632 rendered slide is clean.633- Deficient box padding and text overflow out of filled callouts are errors, not634 acceptable warnings.635636## Phase 7: Final QA Ledger637638Create `$WORKSPACE/qa/comeback-scorecard.txt` with:639640- final score by rubric dimension641- primary deck-profile and profile gate pass/fail642- reference-deck comparison643- tool/runtime caveats644- package checks645- render checks646- accepted warnings or tradeoffs647648Do not leave the scorecard as vague praise. It should name the remaining weak649spots if any exist.650651## Blocking Anti-Patterns652653Fix these before delivery:654655- title states a topic instead of a conclusion656- slide uses more than one dominant evidence object657- chart has a legend when direct labels would work better658- chart displays data but does not prove the title659- connected-series chart is rendered as detached strokes, floating slashes,660 pseudo-arrows, or a path that misses its markers661- line or connector geometry changes meaning after render / export662- connector floats, attaches to the wrong object, crosses unrelated structure,663 or points in an ambiguous direction664- arrows are decorative rather than semantic665- box system implies grouping that the content does not support666- equal-role boxes are visibly misaligned, inconsistently padded, or styled as667 if they have different meanings668- label appears visually detached from the mark, series, connector, or box it669 describes670- a repeated KPI / metric rail omits a required value, label, or context line on671 any item672- a marker, node, glyph, or accent shape visibly sits on top of readable copy673- a value is technically present but visually lost because it has insufficient674 contrast against the background675- table or matrix loses its row / column grammar at thumbnail size676- proof object is too thin to carry the claim677- product or architecture diagram lacks adoption, monetization, expansion, or678 efficiency linkage679- visible containers are louder than the content680- rounded cards are used as default scaffolding681- three slides in a row share the same composition682- contact sheet reads as a template pack683- contact sheet has clean slides but weak information architecture684- body copy exists only to fill space685- appendix is clean but unreadable686- artifact-tool render has obvious wrapped labels, collisions, awkward vertical687 text, or cramped callouts688- footer/source/page marker changes style689- kicker icon and label are not optically centered on the same row690- kicker rows are hand-built without named marker/label pairs, preventing QA691 from verifying their alignment692- boxed prose appears pinned to the bottom edge or lacks visible vertical693 breathing room694- typography falls back to default without intent695- low-resolution logo or rough image crop696- fabricated or approximated official logo, mascot, app icon, product UI, or697 signature brand mark698- brand-like icon used just to fill whitespace699- unprovenanced partner/customer logos, product screenshots, or brand badges700- unsupported metric or vague source label701- output only matches the reference instead of beating it702703## Iteration Rule704705This iteration rule applies only to non-template modes. For706`template-following`, use `$SKILL_DIR/profiles/template-and-edit.md` QA instead.707708Do not stop after the first export unless the comeback rubric passes. Iterate709the weakest 2-4 slides first, then rerender the full deck. Prefer a bold rebuild710of a weak slide over cosmetic nudge work.711712If a model or tool cannot reach the reference quality, say exactly why and name713the remaining weakest slides. Do not call the deck done because a PPTX exists.714715## Subagents716717Subagents are allowed when the user explicitly asks for them. Use them for:718719- source metric extraction720- reference deck critique721- final QA inspection / scoring722- appendix implementation from a fixed spec723- alternate prototype generation in a separate workspace724725The main agent owns final story, visual system, integration, and QA. Never ship726a raw stitched deck from independent slide workers.727728## Final Delivery729730After the final PPTX is exported and verified, run the cleanup helper:731732```bash733node "$SKILL_DIR/scripts/cleanup_presentation_workspace.mjs" \734 --workspace "$WORKSPACE" \735 --output-dir "$OUTPUT_DIR"736```737738The cleanup helper preserves final `.pptx` deliverables in `$OUTPUT_DIR` and739deletes scratch artifacts from the current thread-scoped `$WORKSPACE`:740741- Delete generated planning and QA text notes such as `profile-plan.txt`,742 `source-notes.txt`, `reference-audit.txt`, `claim-spine.txt`,743 `design-system.txt`, `contact-sheet-plan.txt`, and `$WORKSPACE/qa/*.txt`.744- Delete generated reference/imagegen prompt text files such as745 `*.imagegen.txt` and `reference-imagegen-prompts.txt`.746- Delete rendered review artifacts such as `contact-sheet.png`, preview PNGs,747 temporary reference PNGs, and other temporary images that are not deliberately748 embedded in the final deck.749- Delete generated per-run scripts and slide modules, including files under750 `$SLIDES_DIR`. Do not delete the installed skill helper scripts under751 `$SKILL_DIR/scripts`.752- Delete generated layout JSON, build manifests, and other per-run scratch753 metadata.754- Do not delete user-provided source files, source decks, or assets that are755 intentionally embedded in or required to regenerate the final deck.756- If the user explicitly asks for QA artifacts, keep only the requested757 artifacts and mention that they were retained.758- Never delete sibling folders under `outputs/$THREAD_ID/presentations/` or any759 other thread's workspace.760761If `$OUTPUT_DIR` is outside `$WORKSPACE`, the cleanup helper deletes762`$WORKSPACE` and does not clean the external output directory. That external763directory must contain only final deliverables, not scratch artifacts.764765Do not attach or link `contact-sheet.png`, preview PNGs, generated scripts,766planning docs, JSON manifests, layout JSON, imagegen prompt files, or temporary767images unless the user explicitly asks for QA artifacts.768Do not mention that scratch or QA artifacts were cleaned up in the final769response; the final response should focus on the user-facing deck only.770771Deliver:772773- final `.pptx` with a relevant deck-title filename, not a generic name such774 as `output.pptx` or `deck.final.pptx`775- brief scorecard summary776- note any residual gap against the reference777778The final response should be short and artifact-focused.