Skip to main content

skill-deck-plan

Pitch deck planning with interactive template, content, and ordering selection

Ir a la instalación

Datos de origen

Repositorio
benbrastmckie/nvim
Última actividad en el origen
10 de agosto de 2026 a las 06:35
Idioma detectado de SKILL.md
inglés
Estrellas
444
Forks
459

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
skill-deck-plan
description
Pitch deck planning with interactive template, content, and ordering selection
allowed-tools
Agent, Bash, Edit, Read, Write, Glob, AskUserQuestion
# Deck Plan Skill Interactive pitch deck planning skill that gathers user preferences (pattern, theme, content, ordering) via AskUserQuestion pickers before delegating plan generation to `deck-planner-agent`. Handles preflight/postflight status management and all interactive selection. **IMPORTANT**: This skill implements the skill-internal postflight pattern. After the subagent returns, this skill handles all postflight operations (status update, artifact linking, git commit) before returning. ## Context Pointers Reference (do not load eagerly): - Path: `.claude/context/formats/subagent-return.md` - Purpose: Return validation - Load at: Subagent execution only - Path: `.context/deck/index.json` - Purpose: Library index for building AskUserQuestion options - Load at: Stage 4.1 (Library Initialization) ## Trigger Conditions This skill activates when: ### Direct Invocation - `/plan` command on a task with `language: founder` and `task_type: deck` - Extension routing lookup finds `routing.plan["founder:deck"]` ### Task-Type-Based Routing - Task type is "founder" AND task_type is "deck" - `/plan {N}` where task {N} has language="founder" and task_type="deck" ### When NOT to trigger Do not invoke for: - Non-deck founder tasks (use skill-founder-plan) - Tasks with other language types (general, meta, neovim, etc.) - Tasks already in [PLANNED] or [COMPLETED] status **Note**: The `--quick` flag is handled inside this skill (skips pattern and theme questions, uses defaults). It is NOT a reason to skip this skill. --- ## Execution ### Stage 1: Input Validation Validate inputs from delegation context: - `task_number` - Required, integer - `session_id` - Required, string ```bash # Validate task_number is present if [ -z "$task_number" ]; then return error "task_number is required" fi # Validate session_id is present if [ -z "$session_id" ]; then return error "session_id is required" fi ``` ### Stage 2 + Stage 3: Preflight Status Update and Postflight Marker Source `skill-base.sh` once, then follow `@.claude/context/patterns/skill-preflight-flow.md` in full for Stage 2 (preflight status update) and Stage 3 (marker creation): ```bash source .claude/scripts/skill-base.sh padded_num=$(printf "%03d" "$task_number") project_name=$(jq -r --argjson num "$task_number" \ '.active_projects[] | select(.project_number == $num) | .project_name' \ specs/state.json) task_dir="specs/${padded_num}_${project_name}" mkdir -p "$task_dir" skill_name="skill-deck-plan" operation="plan" ``` ### Stage 4: Context Preparation Extract task_type and research_path from state.json: ```bash # Extract task_type from state.json (null-safe) task_type=$(jq -r --argjson num "$task_number" \ '.active_projects[] | select(.project_number == $num) | .task_type // null' \ specs/state.json) # Find research report path research_path=$(jq -r --argjson num "$task_number" \ '.active_projects[] | select(.project_number == $num) | .artifacts[] | select(.type == "research") | .path' \ specs/state.json 2>/dev/null | head -1) ``` Prepare base delegation context (enhanced in Stage 4.4): ```json { "task_context": { "task_number": 234, "project_name": "{project_name}", "description": "{description}", "task_type": "founder", "task_type": "deck" }, "research_path": "specs/{NNN}_{SLUG}/reports/01_{short-slug}.md", "metadata_file_path": "specs/{NNN}_{SLUG}/.return-meta.json", "metadata": { "session_id": "sess_{timestamp}_{random}", "delegation_depth": 2, "delegation_path": ["orchestrator", "plan", "skill-deck-plan"] } } ``` ### Stage 4.1: Library Initialization If `.context/deck/index.json` does not exist, initialize the deck library from the extension seed: ```bash if [ ! -f .context/deck/index.json ]; then mkdir -p .context/deck cp -r .claude/extensions/founder/context/project/founder/deck/* .context/deck/ echo "Initialized deck library from extension seed" fi ``` This ensures the reusable deck library is available for building AskUserQuestion options. ### Stage 4.2: Load Research Report Read the research report at `research_path`. Extract: 1. **Slide Content Analysis**: For each slide, whether content is populated or MISSING 2. **Appendix Content**: Any content listed under "Additional Content for Appendix" 3. **Information Gaps**: Critical vs nice-to-have gaps 4. **Purpose**: Deck purpose (INVESTOR, UPDATE, INTERNAL, PARTNERSHIP) If no research report exists, return with status "failed" and message: "No research report found. Run /research {N} first." ### Stage 4.3: Interactive Questions Execute 4 sequential AskUserQuestion calls to gather user preferences. Each question uses the structured JSON format. **`--quick` flag handling**: If `--quick` flag is set in the command arguments, skip questions 1 and 2 (pattern and theme). Use defaults: `pattern = "yc-10-slide"`, `theme = "dark-blue"`. Still execute questions 3 and 4 (content and ordering). #### Question 1: Pattern Selection (single select) Query the library index for available patterns: ```bash jq -r '.entries[] | select(.category == "pattern") | "\(.id)|\(.name)|\(.description)"' .context/deck/index.json ``` Present via AskUserQuestion: ```json { "question": "Select a deck pattern for your pitch deck:", "header": "Deck Pattern", "multiSelect": false, "options": [ { "label": "YC 10-Slide Investor Pitch", "description": "Standard Y Combinator format (10 slides) [yc-10-slide]" }, { "label": "Lightning Talk", "description": "5-minute format (5 slides) [lightning-talk]" }, { "label": "Product Demo", "description": "Screenshots, code, demo (8-12 slides) [product-demo]" }, { "label": "Investor Update", "description": "Quarterly update (8 slides) [investor-update]" }, { "label": "Partnership Proposal", "description": "Business partnership (8 slides) [partnership-proposal]" } ] } ``` Build options dynamically from `index.json` entries where `category == "pattern"`. Store `selected_pattern` with the pattern id and slide sequence from the pattern JSON. #### Question 2: Theme Selection (single select) Query the library index for available themes: ```bash jq -r '.entries[] | select(.category == "theme") | "\(.id)|\(.name)|\(.description)|\(.tags.color_schema)"' .context/deck/index.json ``` Present via AskUserQuestion: ```json { "question": "Select a visual theme:", "header": "Visual Theme", "multiSelect": false, "options": [ { "label": "Dark Blue (AI Startup)", "description": "Deep navy + blue accents [dark] [dark-blue]" }, { "label": "Minimal Light", "description": "Clean white + blue accent [light] [minimal-light]" }, { "label": "Premium Dark (Gold)", "description": "Near-black + gold accents [dark] [premium-dark]" }, { "label": "Growth Green", "description": "Mint/white + green accents [light] [growth-green]" }, { "label": "Professional Blue", "description": "White + navy/blue [light] [professional-blue]" } ] } ``` Build options dynamically from `index.json` entries where `category == "theme"`. Store `selected_theme` with theme id and config path. #### Question 3: Content Selection (multi select per slide position) For each slide position in the selected pattern: 1. Query content library for matching `slide_type` entries 2. Check research report for available content 3. Present existing library content + option to create NEW Present via AskUserQuestion: ```json { "question": "Assign content for each slide position. Select library content or mark as NEW.\n\nSlide 1 (cover): cover-standard, cover-hero, NEW\nSlide 2 (problem): problem-statement, problem-story, NEW\n...", "header": "Slide Content Assignment", "multiSelect": true, "options": [ { "label": "Slide 1 (cover): cover-standard", "description": "Standard title + tagline + round" }, { "label": "Slide 1 (cover): NEW", "description": "Create new cover content from research" }, { "label": "Slide 2 (problem): problem-statement", "description": "Bold single-sentence + 3 evidence points" }, { "label": "Slide 2 (problem): NEW", "description": "Create new problem content from research" } ] } ``` Build options dynamically per slide position from index.json content entries + NEW option. Also ask which slides should be MAIN vs APPENDIX. If the pattern defines default main/appendix split, present that as the default selection. **Validation**: If fewer than 3 main slides selected, present a confirmation question: ```json { "question": "You selected fewer than 3 main slides. A deck needs at least 3 slides to be useful. Would you like to restart slide selection?", "header": "Slide Count Warning", "multiSelect": false, "options": [ {"label": "Yes, let me select slides again", "description": "Return to content selection"}, {"label": "No, continue with current selection", "description": "Proceed with fewer slides"} ] } ``` If "Yes": Repeat Question 3. Store: - `content_manifest`: Mapping of slide positions to content IDs or `NEW` markers - `main_slides`: Slide positions for the main deck - `appendix_slides`: Slide positions for appendix #### Question 4: Slide Ordering (single select) Present ordering strategies from the selected pattern: ```json { "question": "Select slide ordering strategy:", "header": "Slide Ordering", "multiSelect": false, "options": [ { "label": "YC Standard", "description": "Title, Problem, Solution, Traction, Why Us/Now, Business Model, Market, Team, Ask, Closing" }, { "label": "Story-First", "description": "Title, Problem, Solution, Why Us/Now, Traction, Business Model, Market, Team, Ask, Closing" }, { "label": "Traction-Led", "description": "Title, Traction, Problem, Solution, Why Us/Now, Market, Business Model, Team, Ask, Closing" } ] } ``` Build options from selected pattern's `ordering_strategies`. Filter to only include slides in `main_slides`. Store `ordering_strategy` and final `slide_order`. **User Abandonment**: If the user cancels any AskUserQuestion interaction (empty response or explicit cancel), return with partial status: ``` Deck planning interrupted by user. No plan created. Status remains [PLANNING]. Run /plan {N} again to restart. ``` ### Stage 4.4: Prepare Enhanced Delegation Context Bundle all user selections into the delegation context for the agent: ```json { "task_context": { "task_number": 234, "project_name": "{project_name}", "description": "{description}", "task_type": "founder", "task_type": "deck" }, "research_path": "specs/{NNN}_{SLUG}/reports/01_{short-slug}.md", "metadata_file_path": "specs/{NNN}_{SLUG}/.return-meta.json", "metadata": { "session_id": "sess_{timestamp}_{random}", "delegation_depth": 2, "delegation_path": ["orchestrator", "plan", "skill-deck-plan"] }, "user_selections": { "pattern": {"id": "yc-10-slide", "name": "YC 10-Slide Investor Pitch"},
Ver en GitHub
Este SKILL.md es muy grande, por eso SkillsMP muestra aqui solo la primera seccion. Ver en GitHub