deck://skills
Teach your AI to make a deck that works
A skill pack for Claude Code and any MCP client. /deck runs the whole thing — it interviews you, fixes the story, settles what it looks like, and only then builds. Or point it at a deck you already have and it works out what's wrong before it touches anything.
Already connected the MCP? Just ask your agent to run install_deck_skills. Otherwise:
npx -y giget@latest gh:deckcp/deck-skills/skills .claude/skills --forceWrites into .claude/skills. Restart your client, then run /deck. Pack v0.9.0 · source on GitHub
What's in it
/deck
Start here. It interviews you, fixes the story, settles what each slide should look like, then builds — or point it at a deck you already have and it works out what's wrong before touching anything. Nothing moves without your say-so.
/deckcp-onboardno account needed
Start here — verify the MCP connection (degrade gracefully to Tier 1 without one), orient on decks/brand, and route to exactly one next skill. When the user supplies anything beyond a bare prompt (logo/website/social/guide/PDF/PPTX/deck/assets/existing brand), hand to deckcp-input-intelligence first. The new-deck route now runs deckcp-input-intelligence → deck-interview → deck-outline → deckcp-brand-kit → deckcp-design-director → deckcp-build-deck (→ deckcp-quality-control).
/deckcp-input-intelligenceno account needed
Smart onboarding — understand the inputs BEFORE the pipeline runs. Detect + classify every input (prompt/logo/website/social/brand-guide/PDF/PPTX/company-deck/design-reference/content-source/structure-reference/edit-target/images/data/existing DeckCP brand) via scripts/classify-inputs.sh (zero tokens); acquire what evidence is available (reusing brand-kit's extract-brand.js and the agent's fetch/browser — acquisition kept separate from reasoning, and designed so a Phase-2 scrape_brand_site / import_source MCP wrapper can supply it later); attach provenance + per-dimension source authority + observed/inferred/unknown confidence; classify reference intent (default ambiguous, never auto reference-exact); resolve conflicts by authority + freshness; and ask only material, undiscoverable questions. Emits additive ./deck-brief/input-evidence.json (scripts/scaffold-evidence.sh) with interaction_mode (autonomous/minimal_clarification/interview) and recommended_route (autonomous/brand-discovery/interview-led/reference-led/repair-transform), then routes to exactly one next skill. references/input-evidence-schema.md + references/authority-routing.md. Fully additive: absent input-evidence.json = unchanged legacy behavior. Does not touch the v0.8.2 design pipeline (design-director / build modes / QC).
/deckcp-author-slides
Manual slide authoring against the rendering contract: classes-only vocabulary, typed chart props vs pipe-string primitives, frontmatter shape, presets, masters, and the check_slide → upsert → render-and-look loop. Absolute slide-space trees (coordinateSpace slide + placements) for pixel-exact chrome, with the Prose h-full / editor-class-allowlist / style-object gotchas. Used by deckcp-build-deck's reference-exact mode when geometry must not be left to generic generation.
/github-lookupno account needed
Resolve a person from GitHub by username, commit SHA, or email — name, profile, and public/commit-author email. Pairs with deckcp-email. Uses the gh CLI.
/deckcp-gather-assets
Search the user's drive for images/videos, dedupe by hash, copy into ./deck-assets/, batch-upload via the MCP. Pure script.
/deckcp-brand-kit
The design system a deck is built on. EXTRACT (script-first, scripts/extract-brand.js) captures the WHOLE system — not just colour/type but imagery treatment, layout style, graphic elements, and the repeating per-slide chrome WHEN the source has one (chrome may legitimately be absent — never invent a universal frame), rendering an existing deck/guide to images and matching what it sees: literal hex from SVG fills/strokes, :root CSS vars + fonts + logo from a website, dk1/lt1/accent slots + typefaces from a PPTX theme, transcribed brand-guide lines — every token cited, never shifted. SYNTHESIZE (main-loop): one surface pair, one accent, one type pairing, one signature device, one structural language, benchmarked on deckcp.com/templates. NEW (v0.8): in addition to the legacy prose fields (kept for backward compatibility), brand-kit.json carries a structured design_system object — references/design-system-schema.md — with canvas/margins/grid, spacing scale, typography roles, chrome (incl. enabled:false), imagery, containers, color jobs, data-visualization style, density rules, and measured reference-fidelity hard/soft rules; deckcp-design-director, deckcp-build-deck and QC prefer it over prose. scripts/check-kit.js validates hex, WCAG contrast, and the curated font catalog (design_system is additive; check-kit may ignore it), then emits the update_deck.deck_theme payload. Writes theme (deck scope), logos (upload_asset), house style (set_masters scope brand, owned brands only, confirmed — only source-derived chrome, skipped when chrome is disabled). Supersedes the planned deckcp-brand. references/match-a-reference-deck.md: reverse-engineer a finished deck by MEASUREMENT (pdf.js text-run dump, embedded font names incl. the Caladea/Carlito = Cambria/Calibri clones, 960x540pt -> 2x canvas), write the rules, then generate. scripts/extract-assets.js pulls the LOGO (vector page → 8x render, text masked, largest ink blob, white→alpha, recoloured variants), embedded IMAGES/TEXTURES (auto-tagged texture vs photo with dominant hex) and page renders out of a brand PDF — zero tokens. MULTILINGUAL: non-Latin scripts (Korean/JP/Chinese/Thai/Arabic/…) render by loading the matching Noto font via a deck_theme slot (verified) — references/multilingual-fonts.md, fonts.scripts in the kit; no more romanizing.
/deckcp-design-director
outline + brand-kit -> design-direction.json + slide-plan.json. Defines build mode (fast/brand/reference-exact), visual thesis, rhythm, signature moves, restraint rules, and binding art direction for every slide. v0.8.1 adds the Visual Translation Principle: for each slide decide whether the idea is stronger as a visual (diagram/spatial-plan/process/map/proportion-graphic/photo) and record a per-slide visual_translation, plus deck-level visual_media_mix and iconography_direction (all additive/optional; typography-led with needed:false is first-class). Reads references/design-principles.md, slide-art-direction-schema.md, anti-ai-aesthetics.md, reference-fidelity.md, visual-storytelling.md and the build skill's layout-archetypes.md. Chrome is brand/reference-derived (may be none); repetition is allowed when intentional; icons are semantic not decorative. v0.8.2 adds the Visual Restraint Principle: don't visualize statements, visualize structures; a restraint gate (communication+brand gain > complexity cost) recorded as visual_translation.confidence (high/medium/low) and per-slide visual_intensity (typography-led/supported/visual-led); a deck-level visual_strategy (mode minimal/selective[default]/visual-rich + visual_peaks/supporting_visuals/typography_led) that outranks visual_media_mix and plans peaks not coverage; least-complex-intervention and remove-before-adding passes. Writes ./deck-brief/design-direction.json + slide-plan.json, which deckcp-build-deck and deckcp-quality-control treat as binding.
/deckcp-build-deck
brief/outline → deckcp-brand-kit (mandatory) → deckcp-design-director (mandatory: design-direction.json + slide-plan.json are binding inputs) → build per design-direction.json.build_mode: fast / brand = constrained generate_outline + generate_slides_from_outline with the brand system, design direction and per-slide art-direction serialized into context; reference-exact = measured theme + source-derived masters, server generation only where composition is flexible, deckcp-author-slides / upsert_slides for geometry-sensitive slides → check_slide → render_slides → deckcp-quality-control (mandatory gate before "done"). Reads references/layout-archetypes.md for the semantic archetype menu; purposeful repetition is allowed; masters come from the active brand/reference, never a universal chrome. v0.8.1: consumes per-slide visual_translation + deck visual_media_mix / iconography_direction — executes the planned visual (spatial-plan/process/proportion-graphic/map/annotated-image) in the brand's language, and when the server can't, flags it and escalates to deckcp-author-slides rather than silently emitting a paragraph; never forces a graphic onto a needed:false slide. v0.8.2: consumes visual_strategy + per-slide visual_intensity + visual_translation.confidence — slide-level intent and visual_strategy outrank the deck media mix, low/medium-confidence visuals default toward restraint, and a remove-before-adding pass runs before finalizing. Non-English text: load the matching Noto font, never romanize.
/deckcp-quality-control
The mandatory final gate. scripts/scan-deck.js (zero tokens) flags off-palette hexes and colour classes, rainbow Card accents, sub-22px text, spacing-token sprawl, repeated layout skeletons, icon-card grids, dark-gradient defaults, buzzwords, label titles — its repetition / chrome / imagery heuristics are now ADVISORY, read against slide-plan.json.repetition_intent and brand-kit design_system.chrome / imagery (a repeated case-study series is not a failure; absent chrome is not a failure); check_slide on every slide; render_slides format image on EVERY slide (non-Latin scripts verified to render, not boxes); a deck-level sequence / contact-sheet pass (v0.8.1: also a visual-rhythm read against visual_media_mix — catches accidental all-text/one-medium monotony, never penalizes deliberately typographic decks); then score seven dimensions 1-5 (brand accuracy, design-intent / reference fidelity, alignment, spacing consistency, visual polish, intentional rhythm / repetition, generic-AI look), with a named visual_opportunity_check inside design-intent fidelity (PASS/ADVISORY/FAIL — FAIL only when the plan required a visual_translation and the build ignored it, or comprehension is hurt; never fails a needed:false slide). v0.8.2 adds a visual_restraint_check (the opposite: FAIL an over-designed slide — a statement given a diagram, 3-4 items forced into a bespoke icon set, decorative/duplicate devices) plus a peaks-and-pauses read against visual_strategy; the two checks are opposite guardrails and never contradict. Pass = all ≥4. Fix loop maps each failure to the cheapest tool (deck_theme, masters, upsert class swap, rewrite_slide, deckcp-author-slides for drifting reference geometry), max three passes, re-render everything, qc-report.md. Upstream routing on failure: brand-kit / design-director / outline-critique / author-slides.
/deckcp-read-deck
Read and understand an existing deck — structure via get_deck, pixels via render_slides, then the story from the headlines. The reconnaissance step before any edit/critique/share.
/deckcp-edit
Deterministic edit recipes: theme (colors/fonts/margins) via update_deck.deck_theme, reorder/duplicate/delete, mechanical MDX edits via upsert_slides at the same slide_order; rewrite_slide only when copy must change. Always check_slide + render after.
/deckcp-analyze
get_deck_analytics → read the per-slide dwell curve like an editor (drop-off = weakest slide), then list_leads/get_lead to pick who to follow up with. Routes to deckcp-email and deckcp-edit.
/deckcp-share
Two-layer access model: per-person grants (share_deck/revoke_deck_access, roles) + the deck-wide gate (set_deck_share_mode: private/public/email/password, allow_remix). Confirms before widening access.
/deckcp-capture
Capture a person into the CRM from anything — conversation, card/badge photo, voice memo, GitHub, signature — via create_contact (email optional, upsert-by-email). The note carries the context; routes to share/email.
/deckcp-voice-memos
Semantic search over voice-memo transcripts (search_voice_memos) → deck material for deck-interview, contacts for deckcp-capture, or recalled facts. Excerpts first, full transcripts only for winners; privacy guardrails.
/deckcp-email
Email a contact (a DeckCP lead or anyone) via the Zavu messaging API — cc, reply-to, dry-run preview by default. Compose is main-loop; the send is a deterministic script. Needs ZAVU_API_KEY.
You don't need a DeckCP account to start — the interview and the outline are the part that decides whether a deck works, and they run with nothing connected. When you want it built, your agent makes the workspace itself and hands you a link to claim it.
Why we built it this way — the interview, the gates, and why you never see a layout archetype.