Borrowing it
Nothing to install: this file belongs to jonapoul/aktual. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/jonapoul/aktual/main/.claude/skills/add-svg-icon/SKILL.mdgit clone --depth 1 https://github.com/jonapoul/aktualWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/jonapoul/aktual/add-svg-icon)<a href="https://agentmods.dev/skills/jonapoul/aktual/add-svg-icon"><img src="https://agentmods.dev/badge/skills/jonapoul/aktual/add-svg-icon/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/jonapoul/aktual/add-svg-icon"><img src="https://agentmods.dev/badge/skills/jonapoul/aktual/add-svg-icon.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00039 | $0.01617 |
| Opus 5 | $0.00019 | $0.00809 |
| Sonnet 5 | $0.00008 | $0.00323 |
| Haiku 4.5 | $0.00004 | $0.00162 |
Grade A, and why
add-svg-icon scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 152 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Convert an SVG file to a Kotlin ImageVector and add it to the aktual-core/icons module.
Arguments
$ARGUMENTSshould contain:- A file path or URL to an SVG file
- The icon name in PascalCase (e.g.,
MyIcon,BankTransfer) --material(optional) — generate as aMaterialIconsextension instead ofAktualIcons--size <N>(optional) — override the icon size (default: derived from SVG viewBox)
Step-by-Step Process
1. Fetch the SVG
- If the argument is a URL: use
WebFetchto download the SVG content - If the argument is a file path: use
Readto read the SVG file
2. Parse the SVG
Extract from the SVG:
- The
viewBoxattribute (e.g.,"0 0 24 24"or"0 0 20 20")- Parse as
minX minY width height
- Parse as
- The
dattribute from each<path>element - Any
fill-rule="evenodd"on path elements
Determine the icon size:
- If
--sizewas provided, use that value - Otherwise, use the
widthfrom the viewBox (e.g.,24from"0 0 24 24")
3. Convert path data to Kotlin
Convert SVG path commands to Kotlin PathBuilder calls:
| SVG Command | Kotlin Call |
|---|---|
M x,y |
moveTo(xf, yf) |
m dx,dy |
moveToRelative(dxf, dyf) |
L x,y |
lineTo(xf, yf) |
l dx,dy |
lineToRelative(dxf, dyf) |
H x |
horizontalLineTo(xf) |
h dx |
horizontalLineToRelative(dxf) |
V y |
verticalLineTo(yf) |
v dy |
verticalLineToRelative(dyf) |
C x1,y1 x2,y2 x,y |
curveTo(x1f, y1f, x2f, y2f, xf, yf) |
c dx1,dy1 dx2,dy2 dx,dy |
curveToRelative(dx1f, dy1f, dx2f, dy2f, dxf, dyf) |
S x2,y2 x,y |
reflectiveCurveTo(x2f, y2f, xf, yf) |
s dx2,dy2 dx,dy |
reflectiveCurveToRelative(dx2f, dy2f, dxf, dyf) |
Q x1,y1 x,y |
quadTo(x1f, y1f, xf, yf) |
q dx1,dy1 dx,dy |
quadToRelative(dx1f, dy1f, dxf, dyf) |
T x,y |
reflectiveQuadTo(xf, yf) |
t dx,dy |
reflectiveQuadToRelative(dxf, dyf) |
A rx,ry,rot,largeArc,sweep,x,y |
arcTo(rxf, ryf, rotf, largeArc(bool), sweep(bool), xf, yf) |
a rx,ry,rot,largeArc,sweep,dx,dy |
arcToRelative(rxf, ryf, rotf, largeArc(bool), sweep(bool), dxf, dyf) |
Z or z |
close() |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 152 lines · 39 tokens per session scan A 7fdd04fb6259
add-svg-icon is a skill published in the GitHub repository jonapoul/aktual (34 stars, last pushed yesterday), licensed Apache-2.0. It adds 39 tokens to every session and 1,617 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-01.
Other skills, from other repositories
using-design-system
Ensures consistent use of X-components design system instead of Material3 when working on feature UI code. Automatically activates for Composable functions in feature modules or when user mentions UI/screens/components.
verify-ui
Verify UI implementation against Stitch design via a token audit (HTML ↔ Code, with X-component default-render checks) and an X-components compliance check.
ambient-tone-layer-behind-flat-pages
A reusable top-glow layer that gives pages with no imagery of their own the same tinted ground the image-backed screens get — emitted as the first sibling of a navigation destination's content, with no wrapper, because destinations already stack. Covers why a null tone must collapse the gradient into the page colour…
edit-a-shape-as-a-shape
When the value being edited is a curve, draw a draggable curve instead of N sliders and embed it in the settings list instead of pushing a screen — with a raw pointer loop rather than a drag-gesture helper, a draft that commits once per gesture, and smoothing that never overshoots a handle the user placed. Use when…
mosaic-arrangements-must-be-hole-free
Build a ranked mosaic (one big tile plus smaller ones) with an arm for every possible count, so no entry is silently dropped and no arrangement leaves an empty rectangle — plus one clip around the whole block rather than one per tile. Use when a "top five" shows four, when a grid renders a visible gap at some counts…
generate-project-design-system
A draft generator that studies a project's code and Figma design data to prepare a design-system skill. A design system is a shared set of colors, sizes, components, and usage rules for keeping interfaces consistent.