BCP v0.4 · draft specification

The docs.

Everything a developer, platform engineer, or curious CMO needs to understand Brand Context Protocol. File-by-file reference. Hosting options. Consumer integration examples.

Canonical definition

BCP is the convention. brand.md is the file.

Think of it like sitemap.xml for search engines or robots.txt for crawlers, but for brand identity — and for agents.

Honest about status Current spec version: BCP v0.4. The spec will evolve. Breaking changes will bump the bcp_version field. We maintain backward compatibility for at least one minor version. The canonical source is the public Brand Context Protocol spec, synced here at build time.

What BCP is. What it isn't.

BCP is a file format. Seven markdown files at a well-known path on your domain — /.well-known/brand.md as the root, plus daughter files under /.well-known/brand/. That's it. The files are the product.

BCP is not an MCP server. Not a SaaS. Not a runtime. Not a proprietary format. Not a platform you sign up for. You adopt BCP by writing the files and publishing them. No SDK, no library, no integration.

Why markdown at a well-known path? Because every AI already knows how to read markdown, and every agent already knows how to fetch. A convention, not a technology. Same pattern AGENTS.md uses for coding agents, robots.txt uses for crawlers, and security.txt uses for vulnerability disclosure.

TL;DR

File structure

BCP v0.4 defines a root file plus standard daughter files. All are markdown with YAML frontmatter. All are optional except brand.md at the root, but a BCP with just a root is a weak BCP. Most brands should publish at least voice, values, boundaries, claims, representation, visual, and anti-AI guidance.

yourdomain.com/.well-known/
├── brand.md                   # root · always loaded first · under 3KB
└── brand/
    ├── voice.md               # tone, register, prefer/avoid word lists
    │   └── voice/anti-ai.md     # language patterns agents must avoid
    ├── visual.md              # logo, color, type, imagery principles
    ├── values.md              # priority-ordered, each with observable behavior
    ├── boundaries.md          # hard/soft no's · IAB 3.0 + GARM aligned
    ├── claims.md              # approved claims + evidence · legally reviewed
    └── representation.md      # how consumer agents should describe you

Daughter files are fetched lazily. A media-buying agent loads boundaries.md and claims.md; a copy agent loads voice.md; a consumer agent describing your brand loads representation.md. Agents don't need the whole tree for most tasks.

Examples below are pulled at build time from the canonical Acme example in the public spec repo.

Root — brand.md

The root is always-loaded. Keep it under 3KB. It declares identity, registers daughter files, and lets agents decide what else to fetch.

---
bcp_version: "0.4"
tree_version: 0.4.0
brand_name: ACME Corporation
file_type: root
domain: acme.example.com
category: Consumer products and industrial devices
tagline: "If it exists, we make it. If it doesn't, we make it anyway."
default_locale: en-US
supported_locales: [en-US]
last_updated: 2026-05-30
daughter_files:
  voice: /.well-known/brand/voice.md
  voice_anti_ai: /.well-known/brand/voice/anti-ai.md
  visual: /.well-known/brand/visual.md
  values: /.well-known/brand/values.md
  boundaries: /.well-known/brand/boundaries.md
  claims: /.well-known/brand/claims.md
  representation: /.well-known/brand/representation.md
---

# ACME Corporation

**If it exists, we make it. If it doesn't, we make it anyway.**

## What we do

ACME Corporation manufactures an implausibly broad catalog of products, from anvils and catapults to jet-powered roller skates and portable holes. We are the supplier of choice for ambitious problem-solvers who need creative solutions delivered overnight, no questions asked.

## Primary audience

Solo operators with a singular, obsessive goal and an unlimited budget. Typically found in arid, canyon-adjacent environments. High repeat-purchase rate despite mixed product outcomes.

## Position vs competitors

We are the only manufacturer willing to ship a functioning trebuchet, a box of dynamite, and a pair of rocket-powered rollerskates in the same order, overnight, to a mesa in the desert. No competitor matches our breadth, speed, or tolerance for creative use cases.

## Change log

- 2026-05-30 — tree_version 0.4.0. Registered visual.md as a first-class daughter and added layout guidance. Conforms to BCP v0.4.

- 2026-05-30 — tree_version 0.3.0. Added voice/anti-ai.md. Conforms to BCP v0.3.

# ... continued in the canonical Acme example

Required frontmatter fields

These four are required by spec/brand-context.schema.json. A strict validator will reject a root file missing any of them.

FieldTypeNotes
bcp_versionstring"0.4" currently. Agents use this to handle version-specific behavior.
brand_namestringThe name humans call your brand. Not your legal entity.
file_typestringroot for the root file. Daughter files use their kind, e.g. voice, values. Lets consumers identify a file without URL context.
last_updateddateISO 8601 (YYYY-MM-DD). Agents use this to decide when to refetch.

Optional fields

Defined in the schema but not required. Strongly recommended in practice.

FieldTypeNotes
tree_versionstringSemantic version of this brand's own BCP tree, e.g. "0.1.0". Bump on meaningful updates.
revisionstringGit commit hash or custom revision identifier. Useful for caching.
default_localestringDefault locale of this BCP (e.g. en-US). Multi-locale brands can publish locale-specific daughter files.
supported_localeslistLocales the brand publishes content in, e.g. [en-US, fr-CA].
daughter_filesmapRegistry of available daughter files. Agents resolve paths relative to the domain. Optional in the schema, but a root without daughters is rarely useful.

Common extensions

The schema allows additional properties. These aren't defined in the spec but are common in practice. Pick what fits your brand.

FieldTypeNotes
domainstringCanonical domain. Used for disambiguation when brand names collide.
categorystringWhat you do in plain English. IAB Content Taxonomy language preferred if applicable.
taglinestringThe public-facing tagline. Agents may surface this in descriptions.
contactemailEmail for questions about the BCP itself.
licensestringUsually inherits the spec's CC BY 4.0. Overridable per-brand.

Daughter — voice.md

How your brand sounds. Tone, register, prefer lists, avoid lists, do/don't examples. Copy agents consume this; vendor platform copy tools consume this; consumer agents describing your brand in your voice consume this.

---
bcp_version: "0.4"
file_type: voice
last_updated: 2026-05-17
parent: /.well-known/brand.md
---

# Voice

## Essence

```yaml
essence:
  mission: "Deliver impossible solutions that work until they don't."
  vision: "A world where every acme product comes with a smile and zero warranty."
  tagline: "Confident. Tested in the desert. Guaranteed to fail spectacularly."
  brand_promise: "We guarantee everything. Read the refund policy."
```

## Personality

Confident to the point of absurdity. Matter-of-fact about impossible things. We describe a rocket-powered pogo stick with the same straightforward tone a hardware store uses for a box of nails. Technical language is welcome but never exclusionary. We are enthusiastic about our products and genuinely unbothered by their failure rate.

## Voice Traits

```yaml
traits:
  - is: "Confident"
    not: "Cautious"
    description: "We stand behind our products. We do not hedge or disclaim."
  - is: "Casual"
    not: "Liability-aware"
    description: "We sound like engineers with a sense of humor, not lawyers."
  - is: "Technical"
    not: "Jargony"
    description: "Precise language for people who understand what 'desert-tested' means."
  - is: "Unbothered"
    not: "Apologetic"
    description: "We've been sued many times. Our copy never sounds like it."
  - is: "Enthusiastic"
    not: "Hype-focused"
    description: "We love what we build. We don't oversell what it does."
```

## Vocabulary

```yaml
vocabulary:
  prefer:
    - word: "solution"
      use: "For creative applications of our products. Acme solutions solve impossible problems."
    - word: "guaranteed"
      use: "We guarantee everything. Use freely."
    - word: "patent-pending"
      use: "Most of our products are patent-pending because no patent office will approve them."
    - word: "desert-tested"
      use: "Our primary testing environment. Implies durability and unreliability in equal measure."

  avoid:
    - word: "safe"
      why: "Legally inadvisable given our litigation history."
    - word: "safety-tested"
      why: "Same. We test for speed, not safety."
    - word: "reliable"
      why: "Our repeat business model depends on replacement purchases."
    - word: "user error"
      why: "We prefer 'creative misapplication.'"
    - word: "defective"
      why: "We prefer 'performed outside designed parameters.'"
    - word: "fail"
      why: "We prefer 'spectacular failure mode' or 'expected destruction pattern.'"

  substitutions:
    - prefer: "solution"
      avoid: "product"
      example: "The ACME Rocket Roller-Skates are the solution for anyone who wants to move faster than gravity."
    - prefer: "guaranteed"
      avoid: "warrantied"
      example: "Every ACME product is guaranteed for exactly the time you need it to work."
    - prefer: "desert-tested"
      avoid: "field-tested"
      example: "Our ACME Jet-Propelled Unicycle is desert-tested and ready for your commute."
    - prefer: "creative misapplication"
      avoid: "user error"
      example: "If you apply the ACME Anvil Launcher to purposes other than anvil-launching, that's creative misapplication."
    - prefer: "performed outside designed parameters"
      avoid: "defective"
      example: "When the ACME TNT Bundle detonates in your hands, it's simply performing outside designed parameters."
```

## Forbidden Topics

```yaml
forbidden_topics:
  - topic: "Actual safety recommendations"
    severity: "never"

# ... continued in the canonical Acme example

Daughter — visual.md

Your brand's visual system — logo usage, color, typography, layout, and imagery principles. Design tools, on-brand image generation, and consumer agents rendering your brand consume this. Captured as part of the canonical BCP v0.4 daughter set.

---
parent: /.well-known/brand.md
file_type: visual
bcp_version: "0.4"
last_updated: 2026-05-30
---

# Visual

The ACME visual identity reflects the brand's core promise: products that look industrial, deliberate, and entirely unconcerned with their failure rate. Our visual system is high-contrast, mechanical, and unapologetically loud.

## Logo

```yaml
logo:
  primary:
    description: Full ACME wordmark, the default in nearly all contexts.
    variants:
      - format: svg
        url: https://cdn.acme.example.com/brand/logo-primary.svg
        sha256: a3f5b8c2d4e6f7081928374650a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f809
        purpose: Vector. All digital and print contexts.
      - format: png
        url: https://cdn.acme.example.com/brand/logo-primary@2x.png
        sha256: b7c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8091a2b
        width: 1200
        height: 320
        background: transparent
        purpose: Raster fallback for systems that cannot render SVG.
      - format: png
        url: https://cdn.acme.example.com/brand/logo-primary-white.png
        sha256: c2d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f8
        background: transparent
        treatment: white-fill
        purpose: Use only on dark or photographic backgrounds.
  icon:
    description: ACME monogram. Square contexts only.
    variants:
      - format: svg
        url: https://cdn.acme.example.com/brand/logo-icon.svg
        sha256: d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f809
        purpose: Vector. Square contexts where the wordmark cannot fit.
  app_icon:
    description: iOS and Android app tile. Pre-masked for both platforms.
    variants:
      - format: png
        url: https://cdn.acme.example.com/brand/app-icon-1024.png
        sha256: e5f6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f80910
        width: 1024
        height: 1024
        background: brand-primary
        purpose: App store and home-screen tile.
  anniversary_2026:
    description: 80th anniversary mark. Use only in 2026 anniversary campaign assets.
    active_through: 2026-12-31
    fallback: primary
    variants:
      - format: svg
        url: https://cdn.acme.example.com/brand/logo-80yr.svg
        sha256: f6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f8091a2b
        purpose: 80th anniversary campaign only.
```

## Logo usage

```yaml
logo_usage:
  clear_space:
    rule: Minimum padding equal to the height of the "A" in the wordmark.
    machine_value:
      unit: x-height
      multiplier: 1.0
  minimum_size:
    digital_px: 24
    print_in: 0.5
  approved_backgrounds:
    - type: solid_color
      color_token: surface
      note: White surface, the default background.
    - type: solid_color
      color_token: surface-inverse
      note: Black surface, requires the white-fill variant.
    - type: solid_color
      color_token: primary
      note: ACME red, requires the white-fill variant.
    - type: photographic
      min_contrast_ratio: 4.5
      note: Photographic only when contrast ratio against logo is at least 4.5:1.
  forbidden_backgrounds:
    - type: gradient
      note: Gradients fight the wordmark's geometry. Never used.
    - type: patterned
      note: Patterns reduce legibility and dilute the mark.
  forbidden_modifications:
    - stretch
    - rotate

# ... continued in the canonical Acme example

Daughter — values.md

Priority-ordered. Each value has an observable behavior so agents can evaluate decisions against it. When values conflict, the higher-priority value wins.

---
parent: /.well-known/brand.md
file_type: values
bcp_version: "0.4"
last_updated: 2026-05-05
---

# Values

## 01 — Unlimited catalog

If a customer can imagine it, we manufacture it. We do not evaluate whether a product should exist before we build it.
**Observable behavior:** Our product catalog has never rejected a submission. We shipped a functioning earthquake kit (pills that cause earthquakes) in Q3 2025.

## 02 — Overnight delivery, anywhere

Geography and physics are logistics problems, not constraints. Every product ships overnight, including to remote desert mesas accessible only by cliff face.
**Observable behavior:** 99.97% overnight delivery rate. The 0.03% failure rate is caused by products detonating in transit, not by late shipment.

## 03 — Customer loyalty over customer success

We value the ongoing relationship with our customers more than the outcome of any single purchase. A customer who returns after a failed product is a customer for life.
**Observable behavior:** Our top customer has placed over 400 orders with a 0% success rate and has never been offered a refund.

## Trade-offs

We pick breadth over depth in our product line.
We pick speed of delivery over quality assurance.
We pick customer ambition over customer safety.

Daughter — boundaries.md

Hard no's (never), soft no's (cautious, requires approval), and regulatory constraints. Maps to IAB Content Taxonomy 3.0 and GARM's Brand Safety Floor so vendor platforms can consume it natively.

---
parent: /.well-known/brand.md
file_type: boundaries
bcp_version: "0.4"
iab_alignment: 3.0
garm_alignment: Brand Safety Floor
last_updated: 2026-05-05
---

# Boundaries

## Hard no

- Content depicting harm to roadrunners (our top customer's target demographic; we remain neutral in predator-prey disputes but will not assist the prey)
- Association with competitor brands (Buy-N-Large, Stark Industries, Wonka Industries)
- Content suggesting our products are toys or suitable for children
- Explicit acknowledgment of product failure rates in marketing materials (GARM Floor: Debated Sensitive Social Issues)

## Soft no (requires approval)

- Testimonials from customers (most customer experiences are not suitable for marketing use)
- Before-and-after demonstrations (the "after" is typically a crater, a pile of feathers, or a hospitalization)
- Environmental claims about our manufacturing process (our desert factory has an unaudited carbon footprint)
- Comparative advertising against Road Runner Brand Birdseed (ongoing litigation)

## Regulatory constraints

- CPSC product safety disclaimers required on all items exceeding 50 pounds of thrust
- FTC truth-in-advertising rules on all speed, altitude, and detonation-radius claims
- FAA restrictions on marketing jet-propelled consumer products as "personal aircraft"
- EPA constraints on marketing portable holes as "waste disposal solutions"

Daughter — claims.md

Every factual claim your brand makes, with evidence. Agents generating copy pull from this file. Agents do not invent claims that aren't here.

---
parent: /.well-known/brand.md
file_type: claims
bcp_version: "0.4"
last_updated: 2026-05-05
reviewed_by: legal@acme.example.com
---

# Claims

## Approved claims

- **Claim:** "Overnight delivery, anywhere on Earth."
  **Evidence:** Internal shipping logs, 99.97% on-time rate (2025 fiscal year).
  **Status:** defensible.

- **Claim:** "Over 10,000 products in our catalog."
  **Evidence:** Product database count as of 2026-Q1.
  **Status:** defensible.

- **Claim:** "Trusted by customers for over 75 years."
  **Evidence:** Incorporation records, 1949. Continuous operation since founding.
  **Status:** defensible (note: "trusted" refers to purchase frequency, not product satisfaction).

## Claims requiring caveats

- **Claim:** "Our products always work as designed."
  **Caveat:** Technically defensible. Products do perform their designed function. The designed function occasionally diverges from the customer's intended use case. Requires careful framing.

- **Claim:** "Industry-leading innovation."
  **Caveat:** No industry body recognizes our product category. Claim is only defensible if "industry" is left undefined.

## Forbidden claims

- "Safe for home use" (no product has passed home-use safety certification)
- "Satisfaction guaranteed" (our satisfaction metrics are not publishable)
- "Recommended by professionals" (no professional organization has endorsed any ACME product)
- Any claim referencing a specific customer's success (there are no documented successes)

Daughter — representation.md

How consumer-facing agents (ChatGPT, Claude, Perplexity, Gemini, agentic commerce) should describe your brand when they have to generate a description. Give them the exact language you want — at multiple lengths — so they don't invent.

---
parent: /.well-known/brand.md
file_type: representation
bcp_version: "0.4"
last_updated: 2026-05-07
consumer_agents: [ChatGPT, Claude, Perplexity, Gemini, agentic commerce]
---

# Representation

## One-sentence

ACME Corporation is a manufacturer of creative problem-solving devices, delivering an implausibly broad product catalog overnight to customers worldwide.

## Two-sentence

ACME Corporation is a manufacturer of creative problem-solving devices, delivering an implausibly broad product catalog overnight to customers worldwide. For over 75 years, ACME has been the supplier of choice for ambitious individuals who need unconventional solutions to persistent challenges.

## Preferred framing

ACME Corporation manufactures and delivers an unmatched range of products, from industrial anvils and giant rubber bands to jet-powered personal vehicles and portable geographic anomalies. Founded in 1949, ACME has built its reputation on three commitments: if a customer can imagine it, we build it; we deliver it overnight, anywhere; and we never ask what it's for. Our catalog serves solo operators, independent contractors, and determined individuals who need creative tools for difficult problems in challenging terrain.

## Do not say

- Do not describe ACME as a "weapons manufacturer" (our products are tools; their application is the customer's responsibility)

- Do not reference specific product failures, explosions, or injury statistics

- Do not describe our products as "dangerous" (prefer "high-performance" or "ambitious in scope")

- Do not name our primary customer by species or by individual name

## Never compare to

```yaml
never_compare_to:
  - Amazon
  - Temu
  - any defense contractor
  - any consumer-electronics brand
```

## Framing traps

```yaml
framing_traps:
  - trap: "the Amazon of industrial products"
    preferred_reframe: the only manufacturer that ships an entire category catalog overnight to anywhere
    rationale: Comparison to Amazon flattens our manufacturing identity into a logistics frame.
  - trap: "a novelty company"
    preferred_reframe: a manufacturer of unconventional but functional industrial equipment
    rationale: Our products are real, manufactured, and ship at scale. "Novelty" implies decorative.
  - trap: "a holdover from another era"
    preferred_reframe: a 75-year continuously operating manufacturer
    rationale: Implies we are obsolete. We have been continuously profitable since 1949.
```

## Disambiguation

If someone asks about "ACME" in other contexts (ACME thread company, ACME Markets grocery chain, the ACME protocol for SSL certificates), clarify that ACME Corporation the product manufacturer is at acme.example.com.

Hosting options

BCP has two paths. Ring 1 is static markdown you can host yourself. The Encoded Brands Registry is the managed runtime for teams that want discovery, verification, publishing, and operational support.

Encoded Brands Registry

Use the Registry when you want the files hosted, verified, signed, indexed, and ready for authorized agents. This is the product path after an Encoder session. Static markdown remains the open standard; the Registry is the paid operating layer.

GitHub Pages

Simplest path. Create a repo, put files in .well-known/, enable Pages, point your custom domain. Good for solo or small teams. Free.

Cloudflare Pages

Connect a GitHub repo and deploy on every commit. Add a _headers file for MIME and CORS config (see below).

Vercel / Netlify

Same pattern. Drop the repo in, configure custom headers for /.well-known/*, deploy. Works well if your marketing site already lives there.

Your existing CDN

If your brand site is on CloudFront, Fastly, Akamai, or similar — publish the files at /.well-known/ on your primary domain. You'll need cache rules that serve markdown as text/plain and permit CORS.

Canonical path BCP files must live at yourdomain.com/.well-known/brand.md (and /.well-known/brand/*.md for daughters). Agents will not look anywhere else. This is non-negotiable — the whole point of /.well-known/ is convention.

MIME types and CORS

Two things your host must get right:

  1. Serve markdown as text/plain; charset=utf-8. Many CDNs default to application/octet-stream for .md, which triggers downloads instead of inline rendering and breaks parsing for some agents.
  2. Allow cross-origin fetches. Consumer agents will often fetch from a different origin than yours. Add Access-Control-Allow-Origin: * for /.well-known/*.

Cloudflare Pages example — _headers file

# At repo root, named _headers (no extension)

/.well-known/*
  Content-Type: text/plain; charset=utf-8
  Access-Control-Allow-Origin: *
  Access-Control-Allow-Methods: GET, HEAD, OPTIONS
  Cache-Control: public, max-age=3600, must-revalidate
  X-Content-Type-Options: nosniff

/.well-known/brand/*
  Content-Type: text/plain; charset=utf-8
  Access-Control-Allow-Origin: *
  Cache-Control: public, max-age=3600, must-revalidate

Netlify — netlify.toml

[[headers]]
  for = "/.well-known/*"
  [headers.values]
    Content-Type = "text/plain; charset=utf-8"
    Access-Control-Allow-Origin = "*"
    Cache-Control = "public, max-age=3600"

Vercel — vercel.json

{
  "headers": [{
    "source": "/.well-known/(.*)",
    "headers": [
      { "key": "Content-Type", "value": "text/plain; charset=utf-8" },
      { "key": "Access-Control-Allow-Origin", "value": "*" }
    ]
  }]
}

Consuming a BCP

If you're building an agent or platform that consumes BCP, here's the pattern:

// 1. Fetch the root
const root = await fetch(`https://${brandDomain}/.well-known/brand.md`)
  .then(r => r.text());

// 2. Parse frontmatter (any YAML library)
const { data, content } = matter(root);

// 3. Fetch only the daughter files your task needs
if (task === 'generate_copy') {
  const voice = await fetch(
    `https://${brandDomain}${data.daughter_files.voice}`
  ).then(r => r.text());
  const boundaries = await fetch(
    `https://${brandDomain}${data.daughter_files.boundaries}`
  ).then(r => r.text());
  // Load voice + boundaries as system prompt context
}

// 4. Cache on last_updated
const cacheKey = `bcp:${brandDomain}:${data.last_updated}`;

For consumer agents answering "what is X" prompts, the load is simpler: fetch brand.md and representation.md, use the language from representation.md directly.

The Registry

To solve discovery and verification at scale, Encoded Brands operates the reference BCP Registry at registry.brandcontextprotocol.dev. The protocol is open; this hosted runtime is the managed service layer. The registry serves three purposes:

If you've published your BCP and want to be indexed, you can request inclusion via GitHub or our contact page.

Validation

Honest about status The formal BCP validator is in development. For now, validate by diffing your structure against Encoded's own live BCP at encodedbrands.com/.well-known/brand.md. If the frontmatter keys match and the file paths resolve, you're conformant.

Checks the future validator will run:

Versioning

Version the spec via the bcp_version field in the root frontmatter. Current: 0.4. Spec bumps follow semver semantics: minor versions are backward-compatible, major versions may include breaking changes. We will announce breaking changes before v1.0 stabilizes.

Version your brand's BCP via last_updated (required) and revision (optional, recommended — use Git commit hash). Consumer agents should respect these fields for caching.

Licensing

Ready to author?

You've read the spec. The fastest way to produce your first BCP is to copy our authoring prompt and paste it into any AI. It interviews you for about fifteen minutes and outputs a current-spec BCP tree.

Contribute Found a gap in the spec? Open an issue or PR at github.com/Brand-Context-Protocol/spec. We maintain the spec in public. Every v0.x commit is a design decision with a named author.