vela-slides-67ef39 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited vela-slides-67ef39 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
v2.6.0 · 2026-03-23 · CLI optimizations (split, dump, stats, find, extract-text/patch-text), 82 tests, live serve with long-polling
Generate presentation-ready slide decks and assemble them into runnable Vela .jsx artifacts. Also supports modular editing of the Vela app itself.
python3 skills/vela-slides/scripts/vela.py deck ship <deck.json> --output <name.jsx>Total: 1 CLI call → done. No references needed.
python3 skills/vela-slides/scripts/vela.py deck ship --sample --output <name.jsx>Total: 1 CLI call → done. No references needed.
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.
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)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 overviewVela 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.
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.
Rules for generating compact:
{"n":"Title","T":{themes},"C":{color palette},"S":[slides]}$A, $B, etc. Use these aliases everywhere in the deck instead of raw hex/rgba values."d" = dark, "l" = light, "a" = alt."t":"d" (theme ref), "n" (title), "d" (duration), "B" (blocks)._=type, x=text, s=size, c=color, i=icon, b=bg, etc.)8 instead of {"_":"spacer","h":8}#### 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"}]}]}Key patterns in the example:
$A = #3B82F6 used 5× (badges, steps, accent) — saves ~16 tokens"t":"d" or "t":"l"8, 12"title" and "x" (text)vela deck ship /home/claude/<deck-name>-slides.jsonThis 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.jsxOr set VELA_OUTPUT_DIR environment variable to change the default.
present_files(["/mnt/user-data/outputs/<deck>.jsx", "/mnt/user-data/outputs/<deck>-slides.json"])<!-- BEGIN AUTO-GENERATED CLI REFERENCE -->
`vela deck` — Deck-level operations (auto-detects full/compact/turbo format)
vela deck list <deck.json> — TOC with slide#, title, blocks, duration
vela deck validate <deck.json> — check deck JSON integrity
vela deck split <deck.json> --sections "Title:N,..." | --flat | --size N — regroup slides into sections (--flat to merge all into one)
vela deck assemble <deck.json> [--output <path>] — inject deck into JSX artifact
vela deck ship <deck.json> [--output <path>] — validate + assemble in one call
vela deck replace-text <deck.json> "old" "new" — find/replace across all slides (hex colors auto-cascade to rgba)
vela deck stats <deck.json> — health audit: block distribution, missing durations, overflow, monotony issues
vela deck find <deck.json> --query "text" | --type flow | --missing duration — search slides by content, block type, or missing props
vela deck dump <deck.json> [--full] — compact text-only view of all slides (--full for all text fields)
vela deck extract-text <deck.json> [output.json] — extract all translatable text as key-value map
vela deck patch-text <deck.json> <texts.json> — apply translated text map back into deck
vela deck expand <compact.json> <full.json> — compact/turbo → full format
vela deck compact <full.json> <compact.json> — full → compact format
vela deck turbo <deck.json> <turbo.json> — any → turbo format
vela deck serve <deck.json> [--port N] — live preview with two-way sync`vela slide` — Slide-level operations (1-indexed slide numbers)
vela slide view <deck.json> <N> — show slide content summary
vela slide edit <deck.json> <N> <key> <value> — edit slide/block property (block.I.key for blocks)
vela slide remove <deck.json> <N> — remove a slide
vela slide move <deck.json> <from> <to> — reorder a slide
vela slide duplicate <deck.json> <N> — copy a slide
vela slide insert <deck.json> <N> <slide.json> — insert slide from file
vela slide remove-block <deck.json> <N> <block#> — remove a block from a slideGlobal flags: --json (structured output), --dry-run (preview without writing), --help
Exit codes: 0=success, 1=failure, 2=usage error, 3=not found, 4=validation error, 5=conflict
<!-- END AUTO-GENERATED CLI REFERENCE -->
Use the vela CLI instead of view + str_replace — saves 80-97% tokens on typical edits.
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# 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# 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| Task | Command | Why |
|---|---|---|
| Translate / bulk text rewrite | extract-text + patch-text | 2 calls vs N×replace-text |
| Change a word/phrase everywhere | vela deck replace-text | 1 call vs N×str_replace |
| Change one slide property | vela slide edit N key value | No need to view JSON first |
| Change one block property | vela slide edit N block.I.key value | Precise, zero collateral |
| Remove/reorder slides | vela slide remove/move | Clean item-level removal |
| Split into sections | vela deck split --sections "A:3,B:5" | One call, agent decides grouping |
| Flatten to one module | vela deck split --flat | Merge all sections into one |
| Regroup sections | vela deck split --sections "..." | Works on multi-module decks (flattens first) |
| Check what slides exist | vela deck list | ~200 tokens vs ~800 for view |
| Check one slide | vela slide view N | ~150 tokens vs ~500 for view+range |
| Preview before destructing | Add --dry-run | Agent safety net |
| Full pipeline | vela deck ship | Replaces 3-4 tool calls with 1 |
| Rewrite a slide entirely | vela slide view N --raw → str_replace | Still best for full rewrites |
| Complex block structure changes | str_replace on JSON | CLI handles properties, not deep nesting |
For app editing and updating, read references/app-editing.md.{
"deckTitle": "My Presentation",
"lanes": [
{
"title": "Main",
"items": [
{
"title": "Section Name",
"status": "todo",
"importance": "must",
"slides": [ ...slide objects... ]
}
]
}
]
}{
"bg": "#0f172a",
"bgGradient": "linear-gradient(135deg, #0f172a 0%, #1e293b 100%)",
"color": "#e2e8f0",
"accent": "#3b82f6",
"padding": "36px 48px",
"duration": 60,
"blocks": [ ... ]
}"36px 48px" — never lessduration (integer, seconds)bg or bgGradient3xl-4xl titles > 2xl headings > lg body > md supporting > sm captionsspacer blocks for breathing room.icon-row > plain bullets for feature listsflow for processes | flow loop:true for cycles | flow gate:true for approvalssvg for custom diagrams (use {{accent}}, {{color}}, {{muted}}, {{bg}} tokens)grid 2-3 cols for comparisons | grid 1 col + direction:"row" for layer diagramsmetric for stats | table for structured data | progress for bars/spectrumssteps for numbered sequences | timeline for roadmaps | tag-group for labelscallout with icon for key insights[Your Name].align: "left" at slide level + per-block "align": "center". For SVG blocks, add "maxWidth": "60%" + "align": "center" on the block itself.8 not {"_":"spacer","h":8}. Generating the object form wastes tokens.See references/themes.md for palettes. Available directions: dark, midnight, light, warm light, vibrant, editorial, minimal. Custom brand colors supported.
PascalCase Lucide names. 1000+ available. Common: Zap, Brain, Rocket, Shield, Target, Clock, Users, Heart, Globe, Code, Database, Lightbulb, TrendingUp, BarChart, Lock, Eye, Cpu, Layers, Bot, Sparkles, Award, CheckCircle, AlertTriangle, DollarSign, ArrowRight
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.