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
How it goes
Five stages, and a gate at the end of each one — nothing advances until you say so. These are slides from the workshop deck we teach it from, which was itself made this way.

1. Out loud, on your phone. Talking gets you what you'd never type.

2. The transcript becomes an outline — this deck's own, in fact.

3. Critique held as a mode: findings only, no edits, until you allow them.

4. Only now does it build, on your brand rather than a template.

5. The last pass is yours, by hand. That's the part it won't do for you.
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 Resend API — cc, reply-to, dry-run preview by default. Compose is main-loop; the send is a deterministic script. Needs RESEND_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.