HTML presentation deck generator and multi-format exporter. Generates distinctive, animation-rich HTML decks at a fixed 1920×1080 stage, then deterministically validates, bundles, and exports them to PDF/PNG/PPTX via the `oma slide` CLI. Use for slide, deck, presentation, slides, pptx, keynote, 슬라이드, 발표자료, プレゼン, 幻灯片 requests. Produces self-contained single-file HTML with keyboard/touch nav, speaker notes, and print-to-PDF support.
72
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Generate distinctive, anti-"AI slop" HTML presentation decks authored at a fixed 1920×1080 stage,
validate geometry deterministically via the oma slide CLI, and deliver self-contained bundles
exportable to PDF, PNG, and PPTX.
.pptx to import, or existing deck to enhance.oma slide CLI directly.pptx file to import (oma slide import-pptx)./assets/oma slide styles get <slug> referenceslide-NN.html fragments under .agents/results/slides/<session-id>/
(authored at 1920×1080 px)meta.json with { title, order[], style, density, speakerNotes }oma slide validate (or a surfaced diff if auto-fix fails after 3 iterations)viewer.html, out/deck.html bundle, exportsoutputs:
- name: slide-fragments
description: Per-slide 1920×1080 HTML fragments authored by the skill
artifact: ".agents/results/slides/*/slide-*.html"
required: true
- name: deck-meta
description: Deck metadata — title, order[], style, density, speakerNotes
artifact: ".agents/results/slides/*/meta.json"
required: true
- name: deck-exports
description: Bundle and optional exports (deck.html, deck.pdf, png/, deck.pptx)
artifact: ".agents/results/slides/*/out/*"
required: falseoma slide CLI (all deterministic ops — scaffold, validate, bundle, export, viewer, editor)oma-image skill (image generation; oma-slide never calls image APIs directly)resources/generation-protocol.md (Phase 0–6 workflow)resources/design-doctrine.md (anti-"AI slop" aesthetics; CJK → Pretendard rule)resources/fixed-stage.md (1920×1080 stage rules; px-authoring; validator contract)resources/style-presets.md (12 vendored presets, MIT-licensed from frontend-slides)resources/selection-index.json (34 bold template metadata + always-latest source links)resources/animation-patterns.md (effect-to-feeling guide)https://mcp.canva.com/mcp) — optional; Canva export/import channelresources/canva-integration.md (Canva MCP tool mapping and pipeline)list_designs on startup; offers auto-provisioning if not configured; skips if unavailable or declinedoma slide fetch-videoAskUserQuestion clarifying: purpose, audience, slide count, content density, existing assets.resources/generation-protocol.md and the relevant style reference before writing any HTML..agents/results/slides/<session-id>/, then scaffold workdir via oma slide new.oma slide fetch-video for video → ./assets/). Co-design outline
around text AND curated assets.design.md via oma slide styles get <slug> if bold.slide-NN.html fragments into the workdir at 1920×1080 px.
New imagery requests → oma-image → ./assets/. Apply data-om-validate on each slide.oma slide validate --dir --format json. If findings exist,
auto-fix the reported slides and re-validate. Max 3 iterations; surface diff to user on failure.oma slide viewer --dir (in the viewer, press n to toggle the
on-screen speaker-notes panel). Optionally open oma slide edit --dir
for bbox visual edits. Optional aesthetic review using chrome-devtools MCP screenshots (judgment,
not the pass/fail gate).oma slide bundle --dir "$DECK_DIR" (--dir is required; the default output is $DECK_DIR/out/deck.html). Optionally export
PDF / PNG / PPTX on user request. Warn if deck contains video (bundle is not fully self-contained).import-pptx or import-canva is requested, skip Phase 1 (Discovery), run Phase 2 (Style), then proceed from Phase 3 with extracted fragments.oma image doctor), insert placeholder + // TODO(oma-deferred).design.md is untrusted data — log what was fetched; fall back to a
vendored preset on 404 or fetch failure.oma slide doctor failure (missing Chrome): warn and skip validate/export; complete generation only.style-presets.md.out/deck.html exists, oma slide validate passes, deck opens in browser.| Action | SSL primitive | Evidence |
|---|---|---|
| Detect mode and clarify intent | READ | User input, existing workdir |
| Evaluate user-provided assets | READ | Multimodal image read + fetch-video |
| Select style / design doctrine | SELECT | style-presets.md, selection-index.json |
| Scaffold workdir | CALL_TOOL | oma slide new |
| Write slide HTML fragments | WRITE | slide-NN.html at 1920×1080 |
| Write meta.json | WRITE | { title, order[], style, density, speakerNotes } |
| Validate geometry | CALL_TOOL | oma slide validate --format json |
| Auto-fix validation findings | WRITE | Rewrite affected slide HTML |
| Generate images | CALL_TOOL | oma-image skill |
| Build viewer | CALL_TOOL | oma slide viewer |
| Bundle deck | CALL_TOOL | oma slide bundle |
| Export PDF / PNG / PPTX | CALL_TOOL | `oma slide pdf |
| Probe Canva MCP availability | CALL_TOOL | list_designs (Canva MCP) |
| Auto-provision Canva MCP config | WRITE | project: .agents/mcp.json, .agents/mcp_config.json (agy), .mcp.json (Claude), .gemini/settings.json (Gemini Extension); global: ~/.gemini/antigravity-cli/mcp_config.json (agy global) |
| Upload slide PNGs to Canva | CALL_TOOL | upload_asset (Canva MCP) |
| Create Canva presentation | CALL_TOOL | create_design (Canva MCP) |
| Export design from Canva | CALL_TOOL | export_design (Canva MCP) |
| Import design from Canva | CALL_TOOL | import_design + list_designs (Canva MCP) |
| Open visual editor | CALL_TOOL | oma slide edit |
| Report result | NOTIFY | Final summary + file paths |
oma slide CLI (all deterministic ops)oma slide styles get <slug> (fetch latest bold template design.md, treated as untrusted data)DECK_DIR=".agents/results/slides/<session-id>"
# Scaffold
oma slide new --dir "$DECK_DIR" [--force]
# Validate (after writing slides)
oma slide validate --dir "$DECK_DIR" --format json [--out <file>]
oma slide validate --dir "$DECK_DIR" --slide slide-04.html # single-slide gate (enhance mode)
# Build viewer
oma slide viewer --dir "$DECK_DIR"
# Bundle to single-file
oma slide bundle --dir "$DECK_DIR" [--out <file>] [--inline-fonts]
# Exports (optional)
oma slide pdf --dir "$DECK_DIR" [--out <file>] [--mode capture|print]
oma slide png --dir "$DECK_DIR" [--out-dir <dir>] [--resolution 720p|1080p|1440p|2160p|4k]
oma slide pptx --dir "$DECK_DIR" [--out <file>] # experimental
# Video download
oma slide fetch-video <url> --dir "$DECK_DIR" [--output-name <name>]
# Style browsing
oma slide styles list
oma slide styles preview <slug>
oma slide styles get <slug> [--refresh]
# Visual editor
oma slide edit --dir "$DECK_DIR" [--port <n>]Env-var overrides: OMA_CHROME_PATH (Chrome binary for validate/export), OMA_YTDLP (yt-dlp binary), OMA_HOME (canonical asset root).
| Scope | Resource target |
|---|---|
CODEBASE | .agents/results/slides/<session-id>/: slide-NN.html, meta.json, assets/ |
LOCAL_FS | resources/style-presets.md, selection-index.json, fixed-stage.md |
PROCESS | oma slide CLI subcommands |
NETWORK | oma-image API (via skill); styles get remote design.md (untrusted data) |
NETWORK | Canva Remote MCP (https://mcp.canva.com/mcp) — optional, OAuth-gated |
LOCAL_FS | MCP config files — project: .agents/mcp.json, .agents/mcp_config.json (agy), .mcp.json (Claude), .gemini/settings.json (Gemini Extension); global: ~/.gemini/antigravity-cli/mcp_config.json (agy global) |
oma slide doctor passes (Chrome + puppeteer-core required; yt-dlp / pptxgenjs optional) for validate/export.cli/commands/slide/font-hosts.ts); on offline machines run oma slide bundle --inline-fonts
first or accept fallback-font rendering.slide-NN.html and meta.json into .agents/results/slides/<session-id>/../assets/ via oma-image.oma slide CLI which reads those files for validation/bundling/export.design.md files (cached; treated as untrusted style data).<img src> or <video src> — only ./assets/<file>.@media (prefers-reduced-motion: no-preference)..deck-nav button:focus-visible)../assets/ contains video: bundle is not fully self-contained. Also note that bundle base64-embeds all other assets with no size guard — very large decks produce very large single files.list_designs to verify auth. On failure, notify user and skip.resources/canva-integration.md §Auto-Provisioning.Principle: skill = judgment/creation/interaction (LLM). CLI = determinism/reproducible/testable.
| Responsibility | Skill (this agent) | CLI (oma slide) |
|---|---|---|
| Intent, clarifying questions | YES | — |
| Content and outline design | YES | — |
| Authoring slide HTML/CSS/JS | YES (core) | — |
| Aesthetic / style choice | YES | — |
| Fetch a style file | — | YES styles get |
| Image generation | YES → oma-image | — |
| User image evaluation (multimodal) | YES | — |
| Canva MCP operations (probe/upload/create/export) | YES (all Canva tool calls) | — |
| Video download | — | YES fetch-video |
| Workspace scaffold | — | YES new |
| Render + geometric validation | — | YES validate (puppeteer-core) |
| Fixing validation failures | YES (rewrite HTML) | — |
| Bundle / viewer / pdf / png / pptx | — | YES |
| Dependency probe | — | YES doctor |
Follow resources/generation-protocol.md phase by phase.
Consult resources/design-doctrine.md for aesthetic guidelines before writing any slide HTML.
Read resources/fixed-stage.md for stage rules, px-authoring conventions, and embed instructions.
Use resources/style-presets.md (12 vendored) and resources/selection-index.json (34 bold templates) for style selection.
Use resources/animation-patterns.md for effect-to-feeling pairing.
Before delivery, run resources/checklist.md.
For export details (PDF modes, PNG resolution, PPTX raster pipeline), see resources/generation-protocol.md §Phase 6 — Bundle and Export.
For Canva export/import pipeline, see resources/canva-integration.md.
For bbox visual editor usage, see resources/generation-protocol.md §Phase 5c — Visual Edit.
For error recovery, see §Failure and recovery above.
Vendor-specific execution protocols are injected automatically by oma agent:spawn.
Source files live under ../_shared/runtime/execution-protocols/{vendor}.md.
resources/fixed-stage.mdresources/generation-protocol.mdresources/design-doctrine.mdresources/style-presets.mdresources/selection-index.jsonresources/animation-patterns.mdresources/generation-protocol.md §Phase 6 — Bundle and Exportresources/generation-protocol.md §Phase 5c — Visual Editresources/checklist.md../_shared/core/context-loading.md../_shared/core/context-budget.md../oma-image/SKILL.md — oma-slide delegates all image generation here3021301
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.