Recipes
Reusable pipelines you run by name — three built-in starters, plus every graph you save.
A recipe is a pipeline with slots: the graph is fixed, and each run fills in a fresh brief (and whatever other variables the recipe declares). It's how a shape you got right once becomes something you — or an agent — runs by name forever after.
The built-in starters
Three recipes ship with every brand, no setup:
- Batch — a handful of on-brand creatives from a brief, delivered to a board. No scoring; you're the judge. The right size for "give me three posts about X".
- Reviewed campaign — the default for a real campaign brief: a spread of creatives, vision-scored, pre-sorted into Approved (75 and up) and Needs review sections on the board.
In both brief-led starters the creative count also sets how many distinct templates the run may spread across — ask for 12 creatives and the selector is free to use up to 12 different layouts (it still picks only the ones that genuinely fit, so a thin shelf gives you fewer).
- Variations of this — N fresh takes on ONE creative you already have (new headline and imagery per take), scored and routed the same way.
Starters live in the product, so they're always current and can't be broken or deleted per brand. To customize one, save your own graph under the same name — yours shadows the starter everywhere recipes are listed.
Saving your own
On the canvas, Save as template turns the current graph into a recipe. The brief automatically becomes a required fill-in slot and the creative count an optional one, so a saved pipeline re-runs with a fresh brief out of the box. Pin templates on the Templates node before saving and you've got the classic recipe pattern: the same layouts every run, only the message changes.
Human-saved and agent-authored recipes are the same thing, and each carries a visibility: Team (the default — everyone with access to the brand sees and runs it) or Private (yours alone; nobody else ever sees it in a list, and it can't be run or ordered by anyone but you). Pick it when saving, or flip it later with the lock toggle in the recipe picker, update_pipeline_template over MCP, or the REST route. A private recipe stays out of the Slack order menu too — a channel is a shared surface.
Changing one
A recipe is edited by opening it and saving back: click it (or its pencil) in the picker — the shape loads on a canvas as a draft, with a "from ‹recipe›" badge — change whatever you like, then Save as recipe → Update ‹name› writes the new pipeline back onto the same recipe. Its name, visibility and run-time variables stay as they are; every future run uses the new shape. "Save as new" forks instead. A built-in original can't be updated in place — save your version under its name and yours takes its card's place (the same shadowing the starters use). Agents do the same thing with update_pipeline_template.
Running one
- From the palette: "run the winter-sale pipeline, 20 this time." The agent resolves the name, fills the slots from your ask, and launches.
- From Slack: mention the bot in a bound channel — "@braaand 5 spaningar quotes about AI" — and the same resolution happens there, with the results delivered back into the thread. A recipe with pinned templates is what makes this feel like ordering a known product: the layouts are already decided, so the channel only has to supply the message. (Recipes needing something picked in the app — a specific creative to vary, an asset — aren't orderable this way; the bot says so.)
- From the Workflow Engine: the arrow on New workflow lists every recipe, and Recipes is the full shelf. Pick one and it loads on the canvas as a draft — nothing runs and nothing is spent until you press Run. A draft always opens, even if the recipe still has empty slots or a half-built graph; the canvas shows what's missing and gates Run itself.
- From code:
braaand pipelines run <brandId> batch --bindings '{"brief":"…","count":3}'on the CLI,run_pipeline_templateover MCP, orPOST /api/brands/{id}/pipeline-templates/{id}/runwith{ bindings, mode: "run" | "draft" }. Launching for real validates everything and fails loudly on a missing slot or a graph that doesn't compile.
Managing them
The Recipes page (Workflow Engine → Recipes) groups recipes into three shelves: braaand originals (the built-in shapes — always current, because they live in the product), Team, and Private. It's also where a stale one gets retired: hover a saved recipe and a trash appears (two-step confirm, inline), and the lock/team toggle beside it flips who sees it. A built-in can't be deleted — but it CAN be hidden for your brand (the eye toggle; "Show hidden" brings them all back), so the defaults shelf only shows what your team actually uses. Rename, edit, and delete also work from the CLI (braaand pipelines), MCP, and the REST routes. Every run or draft opened from a recipe carries a "from ‹recipe›" badge — on its canvas (topbar + rail) and in the Workflows table — so you can always tell which recipe produced what, even after the recipe is renamed or deleted.