Agents

Command line

Drive braaand from your terminal, or wire it into scripts.

If you work in a terminal, the braaand command does everything the AI connector does. It's handy for scripting, and for setups like Claude Code.

Set it up

npm install -g braaand
braaand auth login

Everyday commands

braaand whoami
braaand brands list
braaand brands info my-brand

braaand system-templates list
braaand system-templates instantiate hero-statement --brand my-brand
braaand templates list my-brand
braaand templates create my-brand "Campaign Quote" --from ./template.json
braaand render my-brand <creativeId> --all-formats
braaand render batch my-brand <creativeId> <creativeId>

Add --json to most read commands for output you can pipe into other tools.

The synced brand folder

braaand sync mirrors every brand into one canonical local folder — assets, build-ready dist/ token artifacts, guidelines, and agent instructions. That folder is what coding agents build from; see The synced brand folder.

braaand sync                      # everything → ~/Documents/Braaand (default)
braaand sync status --json        # root + per-brand version/staleness (agent discovery)
braaand sync set-root ~/Sites/Braaand
braaand path my-brand             # print a brand folder's path

Template work

System templates are the shared catalog. Use them as starting points: instantiate one into a brand, then tune the resulting brand template. If a client needs a layout that does not exist in the catalog, create a brand template from JSON.

braaand system-templates instantiate hero-statement --brand my-brand --name "Hero Statement"
braaand templates create my-brand "Checklist Note" --from ./template.json
braaand templates update-element my-brand <templateId> headline --patch '{"formatOverrides":{"9x16":{"styles":{"fontSize":72}}}}'

Brand templates can include the full document surface: formats, elements, guides, clusters, groups, brandFit, styles, concept typeStyles, and roleColors.

Lists of subjects

A Set is a list of subjects — candidates, municipalities, audience segments — that a pipeline's For each node turns into one creative apiece.

braaand sets create my-brand --name "Candidates 2026" --csv ./candidates.csv
cat kommuner.csv | braaand sets create my-brand --name "Kommuner" --csv -
braaand sets list my-brand
braaand sets update my-brand <setId> --csv ./corrected.csv   # replaces every row
braaand sets find-person my-brand "Frida Karlsson"

--csv takes a file path, - for stdin, or the text itself. find-person searches your Sets and every photo carrying person details, and refuses to guess between two people who share a name — it returns the candidates instead, with the detail that tells them apart.

If your subjects are people you already have photos of, you may not need a Set at all: point the For each node straight at a collection or tag of images and it reads one subject per photo.

Converting images

images convert compresses, converts, and resizes local images, and can add them straight to a brand's asset library. It walks folders recursively, so you can point it at a whole directory. The conversion runs server-side, so nothing is charged as AI usage.

# Convert a folder of photos to WebP and add them to a brand's library
braaand images convert ./photos --brand my-brand --to webp --optimize --type photo --tags product

# Or write the converted files to a local folder instead
braaand images convert ./photos --out ./web --to avif --quality 55

Because it runs as a subprocess, this is the right tool when a coding agent (like Claude Code) needs to "convert these and add them to brand X": the image bytes stream through the command, never through the conversation.

Flags: --to webp|avif|jpeg|png, --quality 1-100, --max <px> (longest edge), --optimize (web-friendly defaults), plus --type and --tags for the library.

Generating images (AI)

images generate creates a new image from a text prompt. Unlike images convert, this uses credits (billed to the brand's pool — roughly 2, 18, or 71 credits at low, medium, or high quality) and takes 15-60 seconds.

# Generate and save into a brand's asset library
braaand images generate "misty pine forest at dawn, soft golden light" --brand my-brand --aspect 16:9 --quality medium

# Or download it locally instead
braaand images generate "abstract blue gradient texture" --out ./generated --aspect 1:1 --quality low

Saved images land tagged generated / ai / agent and are analyzed so focal-point alignment works in templates. Write rich prompts (subject, composition, lighting, mood) — not stock-search keywords.

Launching campaigns

workflows start hands braaand a brief: it matches templates, writes on-brand copy, then renders and scores a batch on a durable run that ends in a share-ready review board. Add --templates to pin exact brand templates instead of letting braaand match — matching is skipped and the run builds on your picks in order.

braaand workflows start my-brand --brief "spring campaign for our new espresso line" --count 8 --wait
braaand workflows start my-brand --brief "May 30 tasting event" --templates <id>,<id>
braaand workflows status my-brand <workflowId> --watch
braaand workflows log my-brand <workflowId>

Runs use the brand's plan credits and keep going after you close the terminal.

Running pipelines

A pipeline recipe is a node graph — score, route, board sections, variation fan-outs — with slots you fill in at run time. Three ship with every brand, no setup:

Recipe Slots What it does
batch brief, count N creatives from a brief, delivered to a board. No scoring.
reviewed-campaign brief, count, goal?, tone?, audience? The default campaign: scored and pre-sorted into Approved / Needs review.
variations-of-this creativeId, count N fresh takes on ONE creative you already have.

You can also save your own from the pipeline canvas in the web editor (or braaand pipelines create from a graph JSON) and launch it anywhere. A canvas save automatically makes the brief a required slot (and the creative count an optional one), so --bindings '{"brief":"…"}' is all a re-run needs; pin templates on the Templates node before saving and the graph becomes a fixed-layout recipe — same templates, fresh brief every run. A saved recipe named the same as a starter shadows it, which is how you customize one.

braaand pipelines list my-brand
braaand pipelines run my-brand batch --bindings '{"brief":"three posts about the reef","count":3}'
braaand pipelines run my-brand variations-of-this --bindings '{"creativeId":"crv_…","count":5}'
braaand pipelines run my-brand <ptl_id> --bindings '{"topic":"winter sale"}' --mode run

--mode run (the default) launches a durable run and spends credits; --mode draft sets it up on the canvas for a human to press Run. This is the same durable engine the web editor and MCP use — a batch launched here survives you closing the terminal.

Deleting safely

Destructive commands ask you to confirm:

braaand brands delete my-brand --yes --confirm-brand-id my-brand
braaand templates delete my-brand <templateId>   # checks where it's used first