Versely

    Giving a coding agent your brand kit

    Set the brand kit once and Claude Code, Cursor or Codex generate on-brand without a briefing. How the fields merge, how to read them back, and how to clear one.

    Versely Team8 min read

    A coding agent starts every session with no idea what your blue is. It has your repo, your prompt, and nothing else. So the first thing most people do when they wire Versely into Claude Code or Cursor is paste a paragraph of brand context into the request: hex codes, font names, the tagline, "9:16 please". It works. It works again the next day, because they paste it again. Three weeks later there are four slightly different versions of that paragraph in four different terminal histories, and the outputs have drifted apart in ways nobody can point at.

    The fix is not a better paragraph. It is moving the brand out of the prompt entirely, into a store the agent reads on its own.

    The kit is a store, not a paragraph

    Versely's brand kit is a structured record attached to your account, and the agent has three tools for it: set_brand_kit to write, get_brand_kit to read, clear_brand_kit_field to remove one thing. The fields are fixed:

    Field What it holds Drift it prevents
    name The brand's name Generic copy that never says who it is
    colors Palette, by key "Our blue" resolving differently every session
    fonts Typeface assignments, by key Caption and title type wandering
    voice_tone How the brand sounds Copy that reads like a different company each week
    tagline The line you actually use Invented taglines in ad scripts
    logo_url Hosted logo Wrong mark, or no mark
    product_shots Hosted product references Made-up product that isn't yours
    caption_style Default caption look Every clip captioned in a different style
    default_aspect_ratio 9:16, 1:1, 16:9 Reframing after the fact

    The part that matters operationally: once the kit is saved, it is injected into the agent's context automatically, so later generations and workflow runs apply it by default. You are not asking the agent to remember. You are giving it something it reads at the start of every turn. That is the whole reason a coding agent, which has no memory of yesterday's terminal session, can still produce on-brand output today.

    The brand kit glossary entry covers the concept; this post is about the mechanics of driving it from an agent.

    Wiring the agent so it can reach the kit at all

    None of the above happens until the agent can actually call Versely tools. There are three connection paths and they end in the same place.

    1. MCP connector. Paste https://mcp.versely.studio/mcp into Claude as a custom connector, sign in with your Versely account, done. No key handling. Details on the MCP setup page.
    2. CLI. npm install -g @versely/cli, then versely auth login, then versely install. That sequence wires your key, the MCP connection and the Versely skills into Claude Code, Cursor, Codex and other agents in one pass. See the CLI page.
    3. Skills. npx skills add AI-XLabs-Innovation/versely-skills pulls in the eight Versely skills — generate, slideshow, movie, ugc, music, social, analytics and content-pipeline — so the agent knows how to drive whole pipelines rather than single calls. See agent skills.

    The CLI is the path to pick if you work in a terminal, because it does all three jobs at once. The developer overview lays out which surface suits which setup.

    One billing note before you start, because it changes how you plan: API-key work draws on the same credit balance as the app. There is no separate API wallet, no API-only plan and no per-seat fee. Subscription grants and one-time packs fund agent work and app work out of the same number, so wiring an agent in does not mean provisioning a second budget for it. The API pricing page has the full shape.

    Setting the fields in an order that survives

    set_brand_kit is a partial upsert. Only the fields you pass are changed; anything you leave out keeps its current value. For colors and fonts specifically it goes further and merges by key: the keys you provide override, the keys you do not mention are preserved rather than wiped.

    That behaviour is what lets you build a kit across several sessions instead of one enormous setup call. A reasonable order:

    1. Name and colors first. These are referenced by nearly everything downstream. Give colors real keys — primary, accent, surface — because you will be overriding them by key later.
    2. Fonts second. Same key-merge rules apply, so heading and body as separate keys beats one blob.
    3. Voice and tagline third. voice_tone shapes script and caption copy; tagline stops the agent inventing one.
    4. Hosted assets fourth. logo_url and product_shots need real hosted URLs, not local paths. Upload first, then set.
    5. Defaults last. caption_style and default_aspect_ratio are the two fields that quietly save the most rework, because they apply before you think to ask. Pick the caption look from the caption style catalog rather than describing it in prose.

    In practice you rarely call the tool by hand. You say "our accent is #FF5733 and the tagline is X" in normal conversation and the agent writes it. The tool's own guidance tells it to offer this proactively when you describe brand details, which is why an agent sometimes asks "want me to save that to your brand kit?" mid-task. Say yes. That is the whole system working.

    Reading it back, and clearing one field

    get_brand_kit returns the complete current kit. The temptation is to call it at the top of every session as a sanity check, which is wasted latency: the injected context block already carries the brand values for routine reads.

    Call the tool deliberately in two situations. First, straight after a write, when you want to confirm what actually landed rather than what you think you sent. Second, when the injected block is missing a field you need — the block is a summary, and if you are about to composite a logo you want the real logo_url, not a description of it.

    A useful habit when you are handing a project to someone else: ask the agent to read the kit back in full and paste it into the repo's README or a project doc. It takes one turn and it means the next person does not have to guess which fields are populated.

    Removal is the behaviour people get wrong most often, and it follows directly from the merge rules above. Because set_brand_kit preserves omitted fields, you cannot remove anything by leaving it out. Sending a colors object without accent does not delete accent; it keeps it. The same is true at the top level: omitting logo_url preserves the existing logo forever.

    Removal has its own tool. clear_brand_kit_field takes one field name and sets it to null. It does not delete the kit. That is the mechanism for:

    • Retiring a seasonal logo after a campaign ends
    • Dropping a tagline you no longer use, so scripts stop reaching for it
    • Clearing default_aspect_ratio when you genuinely want the agent to ask rather than assume
    • Removing product_shots for a discontinued SKU before it turns up in an ad

    The failure mode without it is worse than it sounds. A stale logo_url does not throw an error. It just quietly composites last quarter's mark onto everything you ship until someone notices.

    What does not belong in the kit

    There is a second persistent store, and the line between them is real. remember holds durable preferences and lasting facts: "my audience is Gen-Z gamers", "keep captions minimal". Brand assets — colors, fonts, logo, tone — explicitly do not go there; they go in the brand kit, because they are values applied literally to a render rather than instructions to be interpreted. The long-term memory piece works through the split in detail.

    Everything the agent can do with these tools it can also do from the Versely chat surface, which is worth knowing when you are debugging. If a generation comes back off-brand, ask the agent to read the kit back before you touch the prompt. You will usually find the answer in one turn: a field you thought you set, empty.

    FAQ

    Does the brand kit apply to workflow runs, or only single generations?

    Both. Once saved, the kit is injected into context and applied by default to subsequent generations and workflow runs. If you want a specific run to ignore it, say so in that request rather than clearing the field.

    If I change one color, do I lose the rest of the palette?

    No. colors and fonts merge by key. Sending {"accent": "#FF5733"} overrides accent and preserves every other key already stored. That is deliberate, so you can correct one value in a single sentence.

    How do I actually delete a logo from the kit?

    clear_brand_kit_field with logo_url. Omitting the field on a later write will not remove it, because omitted fields are preserved. Clearing is the only removal path, and it affects that one field rather than the kit as a whole.

    Do I need the CLI if I already use the MCP connector?

    No. They reach the same tools. The CLI is worth it when you work across several agents or want the Versely skills installed alongside the connection, since versely install handles key, MCP wiring and skills in one command instead of three separate setups.