svg-art — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited svg-art (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.
_On startup, use Read to load ~/.claude/skills/svg-art/preferences.md. If missing, treat as first-run._
Defaults when no preferences exist:
output-root: ~/Desktop/svg-art/ (confirmed on first run)default-style: line-icon (minimal, consistent stroke)default-count: 9 (3×3 grid feels complete, not overwhelming)default-stroke: 1.5 (px, relative to a 24px canvas)canvas: 24x24 for icons, 400x400 for compositionspalette-mode: currentColor (monochrome, themeable) — alternates: duotone, brand-palettetone: friendly-cli (matches user's global tone preference)open-gallery: true_Also load ~/.claude/skills/svg-art/feedback-journal.md if present — contains per-session likes/dislikes and extracted aesthetic signals. Summarize the signal (e.g., "prefers asymmetric compositions, negative space over fills, avoids radial symmetry") and let it shape this session's generation._
_On startup, use Bash to detect today's date (date +%Y-%m-%d) and whether the output root exists._
Check $ARGUMENTS:
help → show help, stopconfig → run config flow, stopreset → delete preferences + feedback journal, confirm, stopfeedback → rate the most recent set (teaches the skill), stophistory → list past sessions with titles and dates, stopstyles → print a quick reference of available style modes, stopsvg-art — Artistic SVG generation with a 2026 HTML gallery
Usage:
/svg-art [what to generate] Interactive generation
/svg-art [...] --style <mode> Override default style mode
/svg-art [...] --count <N> How many SVGs (default 9)
/svg-art [...] --palette <colors> e.g., "monochrome", "warm-duotone", "#0a2a6b,#e8eefa"
/svg-art [...] --stroke <px> Stroke width in relative px
/svg-art [...] --canvas <WxH> Canvas size, default 24x24 for icons
/svg-art [...] --notes <text> Extra constraints, references, exclusions
/svg-art config Set preferences
/svg-art reset Clear preferences + feedback journal
/svg-art feedback Rate the last set (teaches the skill)
/svg-art history List past sessions
/svg-art styles Reference of style modes
/svg-art help This help
Style modes:
line-icon Minimal outlined icons, consistent stroke, Feather/Lucide lineage
geometric Bauhaus-inspired: circles, squares, triangles, Swiss-design composition
mark Logomarks — single-concept, tightly composed, memorable at small sizes
generative Math-driven: Voronoi, waves, spirals, noise fields, grid deviations
organic Hand-drawn feel: variable stroke, jittered paths, soft imperfection
duotone Two-color compositions with intentional overlap / transparency
animated SMIL or CSS-animated — subtle breathing motion, not full animation
Examples:
/svg-art "9 icons for a gardening app"
/svg-art "generative poster for a music night" --style generative --canvas 800x1200
/svg-art "brand mark for 'Northwind' — compass / wind motif" --style mark --count 4
/svg-art "icon set: finance dashboard" --style line-icon --stroke 1.75
Output:
{output-root}/{YYYY-MM-DD}-{kebab-title}/
├── gallery.html ← 2026 aesthetic single-file preview
├── data.json ← metadata per SVG (concept, style, size, palette)
├── svgs/
│ ├── 01-{name}.svg
│ ├── 02-{name}.svg
│ └── ...
└── sources.md ← design system for the set + any inspiration refs
Current preferences:
(loaded from preferences.md)Use AskUserQuestion to collect:
~/Desktop/svg-art/)currentColor) / duotone / a specific brand palette (hex list)Save to ~/.claude/skills/svg-art/preferences.md:
# /svg-art preferences
Updated: {date}
## Defaults
- output-root: {path}
- default-style: {mode}
- default-count: {N}
- default-stroke: {px}
- canvas: {WxH}
- palette-mode: {monochrome|duotone|palette}
- palette-hex: {optional comma-separated list}
- tone: {friendly-cli|detailed|minimal}
## Aesthetic profile (optional — editable)
- Likes: (e.g., negative space, asymmetry, thin strokes, cool palettes)
- Dislikes: (e.g., radial symmetry, busy compositions, gradients)
- Reference artists / libraries: (e.g., Lucide, Dieter Rams, Bauhaus, Muriel Cooper)
## Learned
- (auto-appended as patterns emerge from feedback journal)Delete both preferences.md and feedback-journal.md. Confirm: "All cleared. Starting fresh next time."
If no preferences file exists, show a warm onboarding:
First time running /svg-art — quick intro:
I generate SVGs directly as code — no image API required. I'm good at
minimal/geometric/generative territory; weaker at photorealistic or organic
chaos. SVG scales infinitely, edits cleanly, and themes via currentColor.
Each session gets a Desktop folder with the SVGs, a data.json, and a
single-file HTML gallery you can open anywhere.
I learn from feedback. After a session, run `/svg-art feedback` to tell me
what worked — over 3-5 sessions I develop a clear sense of your aesthetic.
Run `/svg-art config` for quick setup, or continue and I'll use defaults.Then proceed. After the first successful session, ask inline if they want to save any quick prefs (default style, palette, stroke).
preferences.md — carry defaults and aesthetic profile forwardfeedback-journal.md — extract a one-line bias signal like:"Past sessions: leans asymmetric, thin strokes (1.25-1.5px), prefers cool monochrome, avoids radial/mirror symmetry"
If a signal exists, announce it briefly at the start:
"Biasing toward [signal] based on past sessions. Override with flags if you want something different."
Parse $ARGUMENTS for:
--flag (the concept / subject / motif)--style <mode> — override default style--count <N> — how many SVGs--palette <colors> — color approach--stroke <px> — stroke weight--canvas <WxH> — dimensions--notes <text> — extra constraintsIf what is missing, ask ONE AskUserQuestion with 2-4 concrete options (subject, style, count). Don't interrogate.
Before generating, commit to a system AND an axis of variation. Variants are explorations of ONE idea along ONE parameter, not N independent concepts in parallel — the 2026-05-13 emotional-recap session promoted this. A set of 6 should be 6 doses of one concept (e.g. "heart visibility: full → faint → from-dots → with-axes → centroid → pulse-traced"), not 6 different concepts. Independent concepts feel like flailing; parametric variants feel like iterating.
Write out:
Visual system:
Subject: [interpretation of the brief]
Vocabulary: [match the tool's semantic from preferences.md matrix — rank+halo / multi-state dots / vessel-mosaic / field+halo / vertical-dashes]
Style: [mode — e.g., line-icon minimal, 1.5px stroke]
Canvas: [WxH]
Palette: [monochrome / hex list / duotone relationship]
Composition: [3-5 rules — e.g., single focal point, 10% negative-space margin, stroke caps rounded]
Axis of variation: [the ONE parameter the set explores — e.g. "container shape: cross / circle / heart / wheel"]
Concepts (N): [N points along that axis; each gets a content-derived name]
Reply 'go' to generate, or tweak any of the above.If you can't articulate a single axis of variation, the set isn't cohesive yet — go back to the brief. A first pass exploring N parallel metaphors is acceptable to find the territory; the second pass MUST pick the territory and vary one parameter within it.
Wait for confirmation — this is the one gate. The system + axis prevents the set from feeling like N unrelated drawings.
Slug: {YYYY-MM-DD}-{kebab-summary-max-60chars}. Examples:
2026-04-18-gardening-app-icons2026-04-18-northwind-brand-marksmkdir -p {output-root}/{slug}/svgsPer-session isolation — never delete siblings.
For each concept in the visual system, write one SVG file directly.
SVG authoring rules:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 W H" fill="none" stroke="currentColor" stroke-width="{stroke}" stroke-linecap="round" stroke-linejoin="round"> for line iconscurrentColor for monochrome so the icon inherits text color on any page<path d="..."> over many primitives for cleaner files<title> inside each SVG for accessibility + self-documentation<path> groups with explicit fill/stroke rather than gradients (cleaner, more themeable)Naming: {NN}-{kebab-concept}.svg where NN is a zero-padded index. Use content-derived names, not counters (e.g., 03-watering-can.svg, not 03-icon.svg).
Per-SVG metadata — capture in memory for data.json:
{
"file": "03-watering-can.svg",
"concept": "watering can",
"style": "line-icon",
"canvas": "24x24",
"palette": "monochrome",
"stroke": 1.5,
"notes": "tilted 15° for dynamism, spout follows the composition's diagonal"
}Quality bar — before saving each SVG:
Z where appropriate)Generate gallery.html — single self-contained file. Aesthetic mirrors the /shop-research report (same CSS variable system, light/dark mode, generous whitespace, pill chips).
Structure:
<img> src — paste the SVG markup so currentColor picks up the theme). Each tile shows the SVG on a subtle backdrop, concept name, and size./svg-art feedbackDark mode: SVGs using currentColor automatically invert with theme. That's the point.
data.json:
{
"session": { "slug": "...", "date": "...", "brief": "...", "style": "...", "count": 9 },
"visual_system": { "palette": "...", "stroke": 1.5, "canvas": "24x24", "composition_rules": [...] },
"svgs": [ {...metadata per SVG...} ]
}sources.md — design system rationale, any WebSearch references used for inspiration, decisions the user can re-apply manually later.
Generated {N} SVGs — {style} · {canvas} · {palette}
Concepts: {list of names}
Folder: {output-root}/{slug}/
Gallery: {output-root}/{slug}/gallery.html
Open it? (y/N) — or rate with: /svg-art feedbackIf open-gallery: true, run open {gallery.html}.
End with:
When you've had a look, run /svg-art feedback. Even a quick "liked #2 and #5, disliked #7" helps me sharpen your style.When invoked as /svg-art feedback:
~/.claude/skills/svg-art/feedback-journal.md:## {session slug} — {date}
- Loved: {list} — pattern: {inferred — e.g., "asymmetric + single focal"}
- Missed: {list} — pattern: {inferred — e.g., "too busy; radial symmetry"}
- Want more of: {user text}
- Avoid: {user text}
- Signal: {one-line generalization, e.g., "prefers asymmetric, thin-stroke, single-subject compositions; avoid radial + fills"}## Learned section of preferences.md. Mention: "Noticed you consistently prefer X — saving that as standing bias."Full details in reference/styles.md (generate on first session if not present).
currentColor, rounded caps, 1.25-2px stroke, tight composition@keyframes or SMIL — one element breathes, rotates, or draws in~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.