Maintain a brand kit — the canonical brand context an ad or content pipeline reads (positioning, audience, voice, standing instructions, brand-type, value-props, colors), plus manage the product list and attach product photos. Use when someone says "update my brand kit", "set my brand voice/audience", "add a product to my brand", or hands you a folder of product shots to attach. Platform-agnostic: it teaches the field model, partial-update/clear semantics, override behavior, caps and validation, and the hero-image and product-matching rules — independent of any specific backend.
npx gooseworks install --claude # Then in your agent: /gooseworks <prompt> --skill update-brand-kit
Keep a brand kit correct and rich by talking to the user. A brand kit is the canonical context an ad/content-generation pipeline reads, so what's in it directly shapes every downstream generation. Reach for this whenever the user wants to set or refine brand positioning/voice/audience, add standing do/don't guidance, manage the product list, or attach product photos.
This skill is the portable domain model — the fields, the semantics, the rules. How you actually persist a change is the host's concern: a brand-kit API, a CLI, or a brand-kit document in a workspace. The field model, semantics, and caps below hold regardless of which backend stores the kit.
These are the context fields. Treat each edit as a partial update (see semantics): set only what's changing.
description — what the brand does, in 1–2 sentences.audience — target audience / ICP.voice — tone of the copy.instructions — standing guidance applied to every generation (e.g. "always
show the product in use", "never use red"). High-leverage — set this whenever
the user describes a recurring do/don't, not a one-off.brand_type — one of: product, saas, service, agency, restaurant, fashion,
beauty, fitness, finance, education, health.value_props — short selling points; the kit keeps the first 5.primary_color / accent_color — hex like #1a2b3c (validate the format).Products (a list on the kit) carry: name (required), description, link,
pricing (free text, e.g. "$49"), offers (e.g. "20% off launch week"),
notes (markdown), and an ordered list of images.
Identify the brand. If the user has multiple brands, confirm which one by name; if one, use it. Read its current kit and quote back what's already set so the user sees exactly what you're about to change.
Translate intent into fields. Map the free-form request onto the field
model above. If something is a recurring rule, it belongs in instructions,
not in a one-off generation prompt.
Apply context edits as a partial update. Confirm each write by reflecting the new value back.
Manage products (create/edit/delete) before attaching any image — the product must exist first.
Attach product photos. For each image: if the filename is ambiguous about which product it depicts, view it rather than guessing; rename to a semantic name if helpful. Then upload/host it and attach it to the right product (omit the product to make it a brand-level reference image — general imagery not tied to one product). Remember the first image is the hero.
Confirm. Summarize what changed — fields updated, products added/edited, images attached and to which product — and surface any cap or validation issue with the exact limit and the fix.
An updated brand kit: revised context fields, an up-to-date product list, and product/brand images attached in the right order (hero first). Plus a short human-readable summary of what changed and any limits hit.
instructions, not buried in a one-off prompt.| Symptom | Cause | Fix |
|---|---|---|
| Edit wiped an unrelated field | Sent a full object instead of a partial update | Send only the changed fields; omit the rest. |
| Hand edit reappears wrong after a brand-research run | Edit not recorded as a user override | Persist manual edits as overrides so refreshes preserve them. |
| Image attached to the wrong product | Guessed the product from the filename | View ambiguous images before attaching; match product by id/name. |
| Wrong image used as the generation reference | Hero (first image) is not the canonical shot | Reorder so the canonical shot is first. |
| User friction over field names | Asked the user to name fields | Translate their free-form description into fields yourself. |
| A cap was hit silently (12th product / 9th image / 6th value prop dropped) | Exceeded a hard limit | Tell the user the limit and what was dropped; trim or replace. |
| Standing rule ignored on later generations | Put it in a one-off prompt, not instructions | Move recurring do/don'ts into instructions. |
description — what the brand does, in 1–2 sentences.audience — target audience / ICP.QC gate for a generated static ad image — verify the file opens, matches the requested dimensions, shows the correct product/subject (right shape, colour, label, logo), and has no garbled text or severe artifacts. Records pass/fail/needs-human in verification.md. Used as the final check in the static ad remix flow before shipping.
Recreate a static graphic ad (Pinterest pin, IG/FB feed image, poster) from a reference image, swapping in a new brand's product and new copy while keeping the reference's layout, composition, and visual energy. ALWAYS generated with GPT Image 2 in edit-the-reference mode (fal-ai/gpt-image-1/edit-image, a billed FAL generation); the HTML/goose-graphics overlay is only an optional text-finishing step, never the generator. The static-graphics counterpart to the video remix-ad skill; this is what the app calls when a user picks a reference ad and wants it for their own product.
Given the path to a finished content-goose ad-run folder, extract everything that defines that ad — recipe shot list, VO script, characters, voices, world, atom-skills, master mp4 — and emit a `source-sample.json` in the exact shape the `upload-ad-sample` skill writes to the Goose Ads library. Also links every character and voice to the central character library at `/Users/akhil/projects/content-goose/assets/character-library/`, and if a character isn't in the library yet, adds it first then links. Use when the user wants to remix one of their existing ads — this skill produces the source JSON that the script-rewriting step and `remix-ad` consume.