multica-icons skill
Use when a Multica web/desktop UI change needs an icon that `@multica/ui/icons` does not export yet, or when redrawing or reviewing a Multica glyph. Covers the grid, corner and stroke construction, the body/detail markers, and the generate-and-preview loop. Never reach for an icon library, inline SVG, or emoji instead.
Is the multica-icons skill safe?
Clean: nothing in its files matched our rules. We read 1 file in the folder on 2026-11-01.
No findings.
Install the multica-icons skill
A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.
git clone --depth 1 https://github.com/multica-ai/multica.git /tmp/multica mkdir -p ~/.claude/skills cp -r /tmp/multica/.agents/skills/multica-icons ~/.claude/skills/multica-icons
In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub
The instructions your agent would load
SKILL.md as published, without the frontmatter. Read it on GitHub
Drawing Multica icons
Every icon in the product is a Multica drawing exported from @multica/ui/icons. No icon library is installed, and lint rejects imports from one. When you need a new symbol, draw it.
Before drawing
- Search packages/ui/icons/index.ts for the name and for synonyms. If an existing glyph already means the same thing, add an alias to ALIASES in drawings.mjs instead of drawing a near-duplicate.
- Pick a name that describes the symbol, not the feature (Webhook, not IntegrationsNav). Follow the existing PascalCase names.
Where things live
- packages/ui/icons/drawings/construction.mjs holds the shared geometry helpers.
- packages/ui/icons/drawings/drawings.mjs holds every drawing as inner SVG markup, plus ALIASES.
- packages/ui/icons/glyphs.ts and index.ts are generated. Never edit them by hand; icons.test.ts fails when they drift.
Construction
- Grid. 24×24 viewBox, with a 2px round-capped, round-joined stroke from the renderer. Keep geometry inside 2.5–21.5. Most silhouettes span 2.75–21.25. An object glyph whose longest side is under about 17 renders visibly smaller than its neighbours; only chevrons, X and similar marks stay small. Keep parallel strokes at least 3 apart so a gap survives at 14px. A stroke that crosses a shape, such as a pencil's cap line, ends exactly on the outline's centreline; the round cap pokes out if it runs past. When you scale or move a body, recompute these endpoints.
- Corners. Use shape([[x, y, k], ...]) and rect(x, y, w, h, k), which build continuous-curvature (squircle) corners. Typical k values:
- 5–7 for large containers such as cards, windows and chat bubbles.
- 2.5–4 for small parts.
- 1–1.5 for tips and points.
- 0 for a hard corner, which is rare.
Do not hand-write a r r arc corners for rectangles.
- Anything that points. Chevrons, arrowheads, < > brackets, prompts and direction triangles (play, skip) turn at a sharp vertex: a straight polyline such as M9 6L15 12 9 18, or head(x, y, dir, depth, half) for an arrowhead with its tip at (x, y). Never round the tip with a curve or a k corner; the round stroke join is the only softening. The bend in a corner or U-turn arrow's shaft may stay rounded.
- Checks. Use tick(a, v, b): two straight strokes meeting at a tight vertex. Never bow a stroke through a curve where it should turn a corner; a check or any other angular mark drawn that way reads as handwriting.
- Dots. dot(x, y, r) with r 1.1–1.5. Use dots only where they carry meaning: info, alert, eyes, status lights.
- Polygons and stars. polygon(cx, cy, radii, count, k).
- Reuse parts. file(), folderBody, bubble, ring, user(), link, cw and ccw already exist. A variant (…Off, …Plus, …X) is the base drawing plus one stroke. A slash runs m3 3 18 18.
Body and details
- Mark the main closed silhouette with class="b" (body). The active sidebar item fills it at 20% opacity.
- Any icon that can appear in navigation must have a body. A test enforces this for route icons.
- Only mark closed shapes. An open arc with a fill closes into a stray chord.
- Mark strokes that sit inside the body with class="k" (detail).
- Detail budget. At most two inner details. Every detail must carry meaning: a check, a symbol, a divider that defines the object. Drop decorative highlights, extra lines and texture. Icons render at 14px in dense rows, where a third detail turns into noise.
Loop
- Add the drawing to DRAWINGS in drawings.mjs. Keep sections grouped by subject.
- Run pnpm --filter @multica/ui icons --preview NewName Neighbour1 Neighbour2. Open the printed HTML file in a browser and check four things:
- At 48px: does the geometry sit on the grid, with even optical weight next to its neighbours?
- At 18px and 14px: is it still legible, or do inner details merge?
- In the tinted (active) tile: does only the silhouette fill?
- Against similar glyphs: can it be told apart at a glance?
- Run pnpm --filter @multica/ui icons to regenerate glyphs.ts and index.ts.
- Import the new name from @multica/ui/icons. Then run pnpm --filter @multica/ui test and the typecheck for the package that uses it.
More skills from multica-ai/multica
- Aincident-responseHow this team handles a production incident issue — what to establish before proposing a fix, and what an agent may and may not do on its own.
- Amultica-onboardingUse when a product-authored kickoff starts or resumes Mika's interactive onboarding for a Multica workspace. The opening greeting has already been sent; carry the member from their first message to one real, confirmed, issue-based execution and a clear handoff.
- Amultica-platformUse for Multica platform actions the runtime brief does not fully cover: issue and PR contracts, sub-issues, saved views, charts and files in comments, mentions, agents, squads, autopilots, projects, runtimes, local environments, skill import, themes. Not for the product code you are working on.
- Amultica-working-on-issuesSuperseded by the multica-platform skill — load that instead. This file only records where the Multica issue contracts moved to.
- Aweb-design-guidelinesReview UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".