$npx -y skills add saidwivedi/research-skills --skill results-to-slidesAutomate the grunt work of making research presentations — discovers experiments from git/output folders, collects images and metrics, and organizes them into slides. Creates a slide-by-slide script for user approval, then generates slide markdown and editable PPTX.
| 1 | # Results to Slides |
| 2 | |
| 3 | Discover experiments, collect images/metrics, organize into slides. You provide the story — |
| 4 | this skill handles the grunt work. Output: slide markdown + editable PPTX. |
| 5 | |
| 6 | ## Core Rules |
| 7 | |
| 8 | 1. **State what was done and what the result was. Do not editorialize.** Never use: |
| 9 | "breakthrough", "key insight", "importantly". Just experiment + number. |
| 10 | 2. **Every slide MUST have a visual.** No text-only slides (except pure tables). If a concept |
| 11 | has no experiment images, create a diagram. If no diagram makes sense, show dataset examples. |
| 12 | 3. **Images first, text second.** Plan images for each slide BEFORE writing bullets. If you |
| 13 | can't find an image for a slide, restructure or merge it. |
| 14 | |
| 15 | --- |
| 16 | |
| 17 | ## Parallel Execution |
| 18 | |
| 19 | Maximize use of the Agent tool. Whenever you have 2+ independent tasks, launch parallel agents. |
| 20 | |
| 21 | - **Phase 1**: Launch agents in parallel to read CLAUDE.md, README.md, memory files |
| 22 | - **Phase 2 (biggest win)**: Launch separate agents for git log, output folders, scripts, media |
| 23 | - **Phase 3**: Launch agents in parallel to read different experiment scripts and output folders |
| 24 | - **Phase 5+6**: Sequential (markdown must be written before converting) |
| 25 | |
| 26 | --- |
| 27 | |
| 28 | ## Important Paths |
| 29 | |
| 30 | - Skill directory: `${CLAUDE_SKILL_DIR}` |
| 31 | - Converter: `${CLAUDE_SKILL_DIR}/md_to_pptx.py` |
| 32 | - Backgrounds: `${CLAUDE_SKILL_DIR}/backgrounds/` |
| 33 | - Theme CSS: `${CLAUDE_SKILL_DIR}/theme.css` |
| 34 | - Slide element reference: [slide_reference.md](slide_reference.md) |
| 35 | |
| 36 | --- |
| 37 | |
| 38 | ## Phase 0: Parse Arguments & Setup |
| 39 | |
| 40 | The user provides: `/results-to-slides START_DATE END_DATE` |
| 41 | |
| 42 | Arguments come as `$ARGUMENTS` containing two MMDD date strings (e.g., `0301 0308`). |
| 43 | |
| 44 | **Parse the dates:** |
| 45 | - `$0` = start date (MMDD), `$1` = end date (MMDD) |
| 46 | - Infer year from system date. End date is INCLUSIVE (use end_date + 1 for `find` bounds) |
| 47 | |
| 48 | **If no arguments provided**, use `AskUserQuestion`: |
| 49 | - header: "Date range" |
| 50 | - question: "What date range? Use MMDD MMDD format (e.g., 0301 0308)." |
| 51 | - options: ["Last week", "Last 2 weeks", "Last month"] |
| 52 | |
| 53 | **Output directory**: `presentation/YYYY_MM_DD/` using the end date. |
| 54 | |
| 55 | ### Ask Presentation Preferences |
| 56 | |
| 57 | Ask all preferences upfront before discovery, in a SINGLE AskUserQuestion call: |
| 58 | |
| 59 | 1. **Background theme**: "Light (Recommended)", "Warm", "Dark" |
| 60 | 2. **Emphasis areas**: "What should the presentation emphasize? (e.g., dataset, model architecture, |
| 61 | results comparison, failed approaches)" — free text, helps prioritize slide count allocation. |
| 62 | |
| 63 | | Choice | Background file | `--theme` flag | |
| 64 | |--------|----------------|----------------| |
| 65 | | Light | `slide_bg_light.png` | `light` | |
| 66 | | Warm | `slide_bg_warm.png` | `light` | |
| 67 | | Dark | `slide_bg_dark.png` | `dark` | |
| 68 | |
| 69 | Do NOT ask for slide count. Generate as many slides as the content needs — images drive the |
| 70 | count, not a preset number. |
| 71 | |
| 72 | --- |
| 73 | |
| 74 | ## Phase 1: Research Context Discovery |
| 75 | |
| 76 | Scan project docs (CLAUDE.md, README.md, memory files, `docs/`) to understand: |
| 77 | - Research question and direction |
| 78 | - Key metrics and what "good" vs "bad" looks like |
| 79 | - Terminology, model names, dataset names, output folder conventions |
| 80 | - Prior results and baselines |
| 81 | - **Previous presentations** (check `presentation/` directory for prior slide decks to recap) |
| 82 | |
| 83 | If no research goal found, use `AskUserQuestion`: |
| 84 | - header: "Research context" |
| 85 | - question: "Brief description of what this project does?" |
| 86 | - options: ["Let me describe it", "Use README description"] |
| 87 | |
| 88 | Use this context internally for smart organization (grouping, filtering, prioritization). |
| 89 | Do NOT let it leak into slide text. |
| 90 | |
| 91 | --- |
| 92 | |
| 93 | ## Phase 2: Experiment Discovery |
| 94 | |
| 95 | Use ALL methods — each catches things the others miss. |
| 96 | |
| 97 | ### Git Log |
| 98 | |
| 99 | ```bash |
| 100 | git log --after="YYYY-MM-DD_START" --before="YYYY-MM-DD_END+1" --oneline --stat |
| 101 | ``` |
| 102 | |
| 103 | Extract: commit messages (often contain results), files changed, dates. |
| 104 | |
| 105 | ### Output Folders |
| 106 | |
| 107 | ```bash |
| 108 | find . -maxdepth 2 -type d -newermt "YYYY-MM-DD_START" ! -newermt "YYYY-MM-DD_END+1" 2>/dev/null | sort |
| 109 | ``` |
| 110 | |
| 111 | Also check: `outputs/`, `results/`, `experiments/`, `runs/`, `logs/`, `checkpoints/`. |
| 112 | Do NOT assume MMDD_ naming — use modification time as primary signal. |
| 113 | |
| 114 | For each folder: list contents, look for metrics files (`metrics.json`, `*.pkl`, `scores.txt`, |
| 115 | `*.log`) and images (`*.png`, `*.jpg`, `*.gif`). |
| 116 | |
| 117 | ### Scripts |
| 118 | |
| 119 | ```bash |
| 120 | find . -name "*.py" -newermt "YYYY-MM-DD_START" ! -newermt "YYYY-MM-DD_END+1" 2>/dev/null | grep -v __pycache__ | sort |
| 121 | ``` |
| 122 | |
| 123 | Also check `.sh` scripts. **Read the code** to understand what each experiment does — folder |
| 124 | names are opaque, scripts tell you everything. |
| 125 | |
| 126 | ### Media Selection — AGGRESSIVE |
| 127 | |
| 128 | Collect FAR more images than you think you need. This is the most important disc |