| name | generate-logo |
| description | Generates on-brand, editable SVG logo assets — wordmark, monogram, and
favicon — from the active brand profile, reusing its exact palette and
heading font. Vector output needs no account, key, or network.
Use when a user asks for a logo, wordmark, icon, monogram, or favicon.
Trigger with "make a logo", "generate a wordmark", or "/brand-make logo".
|
| allowed-tools | Read, Write, Glob, Bash(node:*) |
| argument-hint | [logo text — defaults to the brand name] |
| version | 0.5.1 |
| author | localplugins <localplugins@proton.me> |
| license | MIT |
| compatibility | Designed for Claude Code |
| tags | ["branding","logo","svg","vector","design"] |
Generate Logo
Generates on-brand, editable SVG logo assets — wordmark, monogram, and favicon — from the active brand profile as pure vector output.
Overview
The generate-logo skill turns a saved brand profile into three ready-to-use logo
variants that reuse the brand's exact palette and heading font. Output is vector SVG,
so every asset scales without loss and needs no account, key, or network call. The
generator (lib/logo.mjs) draws each variant deterministically; the skill resolves
the active profile, runs that generator, saves the files, and routes them through
review. Raster copies are produced only on demand through the /brand-export command.
Prerequisites
- An active brand profile created with
/brand-new (a brand/ directory, or brands/[slug]/ with a brand/.active pointer). Read loads its color-system.json and typography.json.
- Node.js on the PATH — the generator runs as
node lib/logo.mjs.
- Write access to an
output/ directory in the working repository.
- Optional: the
sharp dependency, only if PNG copies are wanted later.
Instructions
-
Run /brand-status (or resolveActive in lib/brand.mjs) to confirm which brand is active; if none exists, tell the user to run /brand-new and stop.
-
Use Glob to locate the active brand directory, then Read and validate the profile with validateProfile. Stop with the offending field if validation fails, for example a non-hex color.
-
Decide the logo text — the optional text argument, defaulting to the brand name. Ask the user when it is ambiguous.
-
Generate the three variants by running the deterministic node generator:
import { loadProfile } from '../../lib/brand.mjs';
import { buildLogos } from '../../lib/logo.mjs';
const profile = loadProfile(activeDir);
const { wordmark, monogram, favicon } = (profile, { : });