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.

identity brand format purpose composition

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.

Who is this brand?
Identity
.identity
How is it expressed?
Brand
.brand
Where does it appear?
Format
.format
What is this content for?
Purpose
.purpose
How are elements composed?
Composition
.composition

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
  register:  informal, Du
  persona:   Bäckerin hinterm Tresen - direkt, trocken, stolz auf das Handwerk
  always:
    - Sauerteig, not "artisan bread"
    - konkrete Mehlsorten (Tipo 1, Roggen 1150) over "beste Zutaten"
    - Backzeit in Stunden, nicht "lange Teigführung"
  never:
    - 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
  primary:   Sauerteig, Handwerk, Zutaten, Kiez
  avoid:     Lifestyle-Gastronomie, Wellness-Ernährung

audience regulars
  label:       Stammkunden aus dem Kiez
  language:    knapp, direkt, kein Erklären

anti-audience influencers
  label:       Lifestyle-Influencer
  description: 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
  primary:   #2C1810  # dark roast
  accent1:   #C8A47E  # crust
  accent2:   #8B4513  # rye
  white:     #FAF6F0  # flour

theme Laden
  background:     $white
  text-primary:   $primary
  cta:            $accent2

typography headline
  weight:       700
  size:         6      # cqh
  autofit-min:  4
  autofit-max:  10

voice-constraints
  register:         informal
  sentence-max:     8
  headline-pattern: 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
  audience: regulars, newcomers
  pillars:  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
  label:      Brotname
  typography: headline
  maxLength:  30
  samples:
    - Roggenlaib
    - Dinkelvollkorn

slot meta
  label:      Beschreibung
  typography: caption
  maxLength:  100
  samples:
    - 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

Full specification on GitHub

Your brand as infrastructure.

1. Install the VS Code extension

Syntax highlighting, autocomplete, and hover docs for all five file types.

extinstall stoll.brand-intent-lang

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.

$npx brand-intent install-skills
Works with
Claude Code · Cursor · Gemini CLI · VS Code Copilot · Codex CLI

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.

$npx brand-intent init --from krume