One brand. Five layers. Any agent.
Design tokens capture decisions. Brand guidelines capture rules. Neither captures intent: the reasoning, the voice, the compositional logic that make a brand impossible to confuse with anything else. Brand Intent is an open file format that makes all of it machine-readable.
Slop is the default. Intent is the exception.
AI-generated content has a gravity toward the generic. Without specific constraints, every model reaches for the same superlatives, the same structures, the same performed enthusiasm that belongs to no brand in particular. What survives is specificity: brands that know exactly what they are, what they never say, and why every visual decision was made. That knowledge has to be authored.
Brand Intent is the missing layer: machine-readable authorship. Not rules, but intent. The reasoning that makes a brand specific, in a format any AI agent can read and respect.
| Format | Visual | Voice | Intent | Audience |
|---|---|---|---|---|
| Design tokens | ✓ | — | — | — |
| Brand guidelines | ✓ | ✓ | — | — |
| DAM / brand portal | ✓ | partial | — | — |
| Prompt engineering | — | ✓ | ✓ | ✓ |
| Brand Intent | ✓ | ✓ | ✓ | ✓ |
Every brand system answers five independent questions.
Most tools collapse them into one place. Brand Intent keeps them separate. Each question has its own file type. Each file type has one job. That separation is what makes the system composable.
From identity to composition, in plain text.
Identity
The only place brand strategy lives in machine-readable form.
Essence, promise, voice with always/never rules,
content pillars, audiences, and optionally: values with behavior statements,
positioning, anti-audiences, narrative.
Nothing visual. Nothing compositional.
krume.identity
essence: Brot ist Handwerk, nicht Lifestyle. Mehl, Wasser, Zeit. promise: Wer reinkommt, riecht sofort, dass hier seit vier Uhr morgens jemand steht. tagline: Mehl, Wasser, Zeit. positioning: Krume ist die einzige Bäckerei im Kiez, die jedes Brot beim Mehl nennt, nicht beim Marketing. archetype: craftsman voice informal, Du Bäckerin hinterm Tresen - direkt, trocken, stolz auf das Handwerk - Sauerteig, not "artisan bread" - konkrete Mehlsorten (Tipo 1, Roggen 1150) over "beste Zutaten" - Backzeit in Stunden, nicht "lange Teigführung" - Lifestyle-Sprache (kuratiert, handverlesen, Genussmoment) - "Artisan" oder "Craft" - wir sagen Handwerk values Handwerk Wir benennen den Prozess, nicht das Ergebnis. Backzeit in Stunden, Mehlsorte beim Namen. Ehrlichkeit Kein Brot ohne Zutatenliste. Keine Versprechen die der Teig nicht halten kann. pillars Sauerteig, Handwerk, Zutaten, Kiez Lifestyle-Gastronomie, Wellness-Ernährung audience regulars Stammkunden aus dem Kiez knapp, direkt, kein Erklären anti-audience influencers Lifestyle-Influencer Menschen die Brot als Aesthetic posten, nicht als Lebensmittel essen.
Brand
The derived expression intent. Colors, typography, voice constraints, content defaults. Not expression itself, but the authored conditions that determine what valid expression looks like.
krume.brand (excerpt)
brand-colors #2C1810 # dark roast #C8A47E # crust #8B4513 # rye #FAF6F0 # flour theme Laden $white $primary $accent2 typography headline 700 6 # cqh 4 10 voice-constraints informal 8 noun-first
Format
Platform, canvas dimensions, safe zones (danger / crop / comfort), grid spec, and which purposes are editorially valid for this surface.
instagram-4-5-feed-portrait.format
id: 4:5 label: 4:5 sublabel: Feed Portrait category: instagram size: 1080 1350 grid: 5 4 # rows × cols danger: 0 0 0 0 crop: 0 34 0 34 # profile grid crops top/bottom comfort: 40 purposes: daily-bread, seasonal-special, baking-tip
Purpose
Defines a content type through semantic slots (primary, secondary,
meta, label, cta).
Uses identity-filter to narrow the composed upstream
and identity-extension to add only what is genuinely slot-specific.
daily-bread.purpose
id: daily-bread compositions: editorial, simple-stack density: low identity-filter regulars, newcomers primary identity-extension primary is the bread name, 1-3 words. secondary is the weight and price ("750 g · 5,80 €"). meta is one sentence: what makes this bread specific. slot primary Brotname headline 30 - Roggenlaib - Dinkelvollkorn slot meta Beschreibung caption 100 - Roggen 1150, 18 Stunden Teigführung. - Tipo 1 aus der Drax-Mühle, 72 % Hydration.
Composition
Slot-to-position mappings. Two modes: grid (explicit row/column placement) and flow (panels, stacks, sticky zones for content-driven arrangement). Zero brand-specific information.
editorial.composition (grid mode)
id: editorial mode: grid image: full logo: top left label row 1 cols 3--4 right secondary row 2 cols 1--4 left center primary row 3 cols 1--4 left meta row 5 cols 1--3 left bottom
simple-stack.composition (flow mode)
id: simple-stack mode: flow image: full sticky: bottom s | logo right flow: panel bottom-left 2/3 1/1 | spacer-auto | label left | primary left | divider-line | secondary left | spacer-auto
Your brand as infrastructure.
1. Install the VS Code extension
Syntax highlighting, autocomplete, and hover docs for all five file types.
2. Install skills for your AI agent
Teaches any agent how to compose Brand Intent layers into context,
validate content against voice.never and pillars.avoid,
and respect anti-audience boundaries.
Brand knowledge becomes infrastructure, not a prompt you write each time.
Complementary to Impeccable: where Impeccable teaches agents how to design well, Brand Intent teaches them what this brand's expression intent is.
3. Author your brand
Start with .identity: the reasoning, the voice, the always/never rules,
values, audiences, anti-audiences.
Then derive the expression intent in .brand.
Add formats for the platforms your brand inhabits.
Purposes and compositions follow.
The Krume bakery brand is included as a fully commented reference implementation.