V3.0
Vela Slides - AI Powered presentation App and Agent Skill
npx -y skills add AgentiaPT/vela-slides --skill v3.0Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Create, edit, translate, rebrand, or present slide decks using the Vela presentation engine. Use when the user wants to build a presentation from a topic, outline, or document; restyle or rebrand an existing deck; edit individual slides; export to PDF; or modify the Vela app itself. Trigger even if the user says "slides", "deck", "presentation", or "keynote" without mentioning Vela by name.
The file declares its own license as ELv2. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
12.7 KB, as published. Nobody here has run it
Vela Slides Skill
v2.8.0 · 2026-03-25 · Compressed skill (-19%), fast-path loading, auto-discovery CLI reference
Generate presentation-ready slide decks and assemble them into runnable Vela .jsx artifacts. Also supports modular editing of the Vela app itself.
When to Use
- User wants to create a slide deck / presentation
- User provides a topic, agenda, outline, or document to turn into slides
- User wants to restyle or improve existing Vela slide JSON
- User wants to fix bugs or add features to the Vela app itself
- User asks for "Vela slides", "deck", or "presentation" content
Fast Paths (check FIRST — skip references if your task matches)
Load/ship an existing deck JSON
python3 skills/vela-slides/scripts/vela.py deck ship <deck.json> --output <name.jsx>
Total: 1 CLI call → done. No references needed.
Load with sample deck (no source file)
python3 skills/vela-slides/scripts/vela.py deck ship --sample --output <name.jsx>
Total: 1 CLI call → done. No references needed.
Extract deck from an existing .jsx artifact
python3 skills/vela-slides/scripts/vela.py deck extract <source.jsx> <output.json>
python3 skills/vela-slides/scripts/vela.py deck ship <output.json> --output <name.jsx>
Total: 2 CLI calls → done. No references needed.
Edit an existing deck → skip to Workflow A½ below
Create a new deck → continue to Workflow A below (read references/block-schema.md + design-patterns.md)
References (load on demand)
references/block-schema.md— Read when creating a new deck or adding unfamiliar block typesreferences/design-patterns.md— Read when designing a deck from scratch (archetypes, anti-patterns, density rules)references/themes.md— Read when user asks about theming, restyling, or brand customizationreferences/formats.md— Read when you need turbo format details, conversion commands, or benchmarksreferences/app-editing.md— Read when editing the Vela app itself (part-files, concat, template)
Vela CLI Setup
The vela CLI is a single entry point for all deck operations. Setup depends on environment:
Claude.ai artifacts (skill mounted at /mnt/skills/):
# Call directly — do NOT use ln -sf (symlinks inherit read-only perms)
python3 /mnt/skills/user/vela-slides/scripts/vela.py <resource> <action> [args...]
Claude Code (local project): call the script directly — no symlink needed:
python3 skills/vela-slides/scripts/vela.py <resource> <action> [args...]
# Or create an alias for the session:
alias vela='python3 /path/to/skills/vela-slides/scripts/vela.py'
Discovery (zero turns wasted):
vela --capabilities # JSON index of all commands, flags, exit codes
vela --help # Human-readable overview
Formats
Vela supports three JSON formats (full, compact, turbo). All CLI commands auto-detect and auto-expand. For conversion commands, turbo details, and benchmarks, read references/formats.md.
Compact Format (use when generating decks)
Always generate in compact format — saves ~32% output tokens. Short keys, flat slides array, theme presets, spacer shorthand, color palette aliases. The CLI auto-expands on ship/validate.
Compact key reference
Top-level: n=deckTitle, T=themes, C=color palette, S=slides array
Slide level: t=theme ref, n=title, d=duration, B=blocks, p=padding (only if overriding theme)
Block level: _=type, x=text, s=size, c=color, i=icon, b=bg, w=weight, ic=iconColor, ib=iconBg, I=items, B=blocks (nested), g=gap, lb=label, v=variant, H=headers, R=rows, sl=sublabel, slc=sublabelColor, ac=arrowColor, lc=labelColor, ts=titleSize, xs=textSize, hb=headerBg, hc=headerColor, cc=cellColor, bc=borderColor, str=striped, lo=loop, lnc=lineColor, nc=numberColor, tc=titleColor, xc=textColor, dc=dotColor, cir=circle, dir=direction
Color palette (C): define every color used ≥2× as "$A":"#hex". Use $A everywhere instead of raw hex. Assign in frequency order ($A = most common).
Theme palette (T): "d":dark, "l":light, "a":alt. Keys: b=bg, c=color, a=accent, p=padding. Theme values can use $ aliases too.
Spacers: bare int 8 instead of {"_":"spacer","h":8}
Note: v maps to variant, NOT value. For block-specific properties without a compact alias (e.g., value, cols, bgGradient, align, verticalAlign, gateIcon, dateColor), use the full property name — the CLI expands them correctly.
Workflow A: Generate a Deck (most common)
Step 1: Generate Compact JSON
Rules for generating compact:
- Top-level:
{"n":"Title","T":{themes},"C":{color palette},"S":[slides]} - Color palette (
C): define every color used 2+ times as$A,$B, etc. Use these aliases everywhere in the deck instead of raw hex/rgba values. - Themes (
T): group slides by bg/color/accent/padding."d"= dark,"l"= light,"a"= alt. - Slides (
S): flat array. Each slide has"t":"d"(theme ref),"n"(title),"d"(duration),"B"(blocks). - Blocks: use short keys (
_=type,x=text,s=size,c=color,i=icon,b=bg, etc.) - Spacers: just the int
8instead of{"_":"spacer","h":8} - Minified: no whitespace, no indentation.
Complete example (3-slide compact deck)
{"n":"AI Workshop","C":{"$A":"#3B82F6","$B":"#E6F1FF","$C":"#8892B0","$D":"#0A0F1C","$E":"#3B82F620","$F":"#1e293b"},"T":{"d":{"b":"$D","c":"$B","a":"$A","p":"60px 72px"},"l":{"b":"#ffffff","c":"$F","a":"$A","p":"36px 48px"}},"S":[{"t":"d","n":"Cover","d":15,"B":[{"_":"badge","x":"WORKSHOP","i":"GraduationCap","b":"$E","c":"$A"},8,{"_":"heading","x":"AI para Equipas","s":"3xl","w":700},{"_":"text","x":"Formação prática com LLMs e agentes.","s":"lg","c":"$C"}]},{"t":"l","n":"Agenda","d":60,"B":[{"_":"badge","x":"PROGRAMA","i":"Calendar","b":"$E","c":"$A"},8,{"_":"heading","x":"Agenda do Dia","s":"2xl"},{"_":"steps","I":[{"title":"09:00","x":"Fundamentos LLM"},{"title":"13:30","x":"Agentes e MCP"}],"lnc":"$A","nc":"$A","tc":"$F","xc":"#64748b"}]},{"t":"d","n":"CTA","d":20,"B":[{"_":"heading","x":"Vamos Construir?","s":"3xl","w":700},12,{"_":"text","x":"[email protected]","s":"lg","c":"$C"}]}]}
Step 2: Ship (validate + assemble + deliver)
vela deck ship /home/claude/<deck-name>-slides.json
This runs expand → validate → assemble → copy in one call.
Output defaults to current working directory. Override with --output:
vela deck ship deck.json --output /path/to/output.jsx
Or set VELA_OUTPUT_DIR environment variable to change the default.
Step 3: Present
present_files(["/mnt/user-data/outputs/<deck>.jsx", "/mnt/user-data/outputs/<deck>-slides.json"])
CLI Reference
Run vela --help for full command list (always in sync). Commands: deck (list|validate|extract|split|assemble|ship|replace-text|stats|find|dump|extract-text|patch-text|expand|compact|turbo|serve) and slide (view|edit|remove|move|duplicate|insert|remove-block). Flags: --json, --dry-run, --help. Exit codes: 0=ok, 1=fail, 2=usage, 3=not-found, 4=validation, 5=conflict.
Workflow A½: Edit an Existing Deck
Use the vela CLI instead of view + str_replace — saves 80-97% tokens on typical edits.
Inspect
vela deck list deck.json # TOC: slide#, title, blocks, theme, duration
vela slide view deck.json 3 # Compact block summary
vela slide view deck.json 3 --raw # Full JSON for one slide
vela slide view deck.json 3 --json # Structured output for agent consumption
Edit
# Text replacement across entire deck (idempotent)
vela deck replace-text deck.json "old text" "new text"
# Slide-level property
vela slide edit deck.json 3 duration 90
vela slide edit deck.json 3 bg "#ffffff"
# Block-level property (use block.INDEX.KEY syntax)
vela slide edit deck.json 3 block.2.text "New heading"
vela slide edit deck.json 3 block.0.color "#3B82F6"
# Structural operations
vela slide remove deck.json 4
vela slide remove-block deck.json 3 5
vela slide move deck.json 5 2
vela slide duplicate deck.json 2
vela slide insert deck.json 3 new-slide.json
Validate After Edits
# Always validate after editing
vela deck validate deck.json --json # check for errors
# Fix reported issues, then re-validate until exit code 0
# Use --dry-run before destructive operations (remove, move, replace-text)
vela slide remove deck.json 3 --dry-run
# Returns: {"would_execute": "remove_slide", "title": "...", "reversible": false}
To build the final runnable artifact (rare — only when user wants the .jsx):
vela deck ship deck.json # validate + assemble + copy in one call
Multi-step edit patterns
Rebrand/restyle (change colors, preserve everything else):
deck list→ note slide count (must match after)deck replace-text deck.json "#oldHex" "#newHex"for each color (auto-cascades to rgba)deck validate→ confirm same slide count, no errors
Delete multiple slides — always remove from highest index first to avoid re-indexing:
# To remove slides 5-10: remove 10, then 9, then 8... then 5
vela slide remove deck.json 10
vela slide remove deck.json 9
# ... etc
Merge slides: view both → write merged JSON to file → insert at position → remove originals (highest first).
Translate: extract-text → edit JSON map → patch-text (2 calls, not N×replace).
Command selection
- Find/replace:
deck replace-text| Edit property:slide edit N key value| Edit block:slide edit N block.I.key value - Structural:
slide remove/move/duplicate| Regroup:deck split --sections "A:3,B:5"or--flat - Inspect:
deck list(~200 tok) orslide view N(~150 tok) | Preview: add--dry-run - Full rewrites:
slide view N --raw→str_replace| Deep nesting: edit JSON directly
Workflow B & C: Edit the Vela App
For app editing and updating, read
references/app-editing.md.
Critical Rules
Canvas
- Virtual canvas: 960x540px (16:9)
- Base padding:
"36px 48px"— never less - Max 5-7 blocks per slide
- Left-aligned = full width. Center-aligned = shrink-wrap.
Duration
- Every slide MUST have
duration(integer, seconds) - Title: 15-30s | Content: 60-90s | Dense: 90-180s | Metric: 20-40s | Quote: 15-30s
Visual Design
- Must have
bgorbgGradient. Vary across slides (alternate solid/gradient). - Size:
3xl-4xl>2xl>lg>md>sm. Use icons generously, spacers for breathing room. - First slide: title (centered, gradient, 4xl) | Last: closing (gradient)
Block Selection
- Don't default to heading+bullets — vary layouts across slides
icon-row> plain bullets for feature listsflowfor processes |flow loop:truefor cycles |flow gate:truefor approvalssvgfor custom diagrams (use{{accent}},{{color}},{{muted}},{{bg}}tokens)grid2-3 cols for comparisons |grid1 col +direction:"row"for layer diagramsmetricfor stats |tablefor structured data |progressfor bars/spectrumsstepsfor numbered sequences |timelinefor roadmaps |tag-groupfor labelscalloutwith icon for key insights
Content Quality
- One idea per slide (billboard test). Headlines: assertions ("AI Cuts Costs 30%"), not labels.
- Default count: 6-8 slides. If N topics given, use N+2 (cover+closing).
- Invent plausible content; never use
[Your Name]placeholders.
Gotchas
align: "center"+ SVG/divider/progress = invisible — no intrinsic width. Use slidealign:"left"+ block"align":"center", SVG needs"maxWidth":"60%".$Aaliases must be defined inCbefore use. Undefined = literal text.- Spacers are bare ints —
8not{"_":"spacer","h":8}. - Edits must preserve slide count unless explicitly adding/removing. Always
deck listbefore AND after to verify. - Rebrand = replace-text only — never regenerate slides during a restyle. Just swap colors.
Icons: PascalCase Lucide names (1000+). Theming: see references/themes.md.