Brands

The context your agents read before they write anything — identity, voice, guidelines, messaging — plus the website, files, logo and ad accounts that go with it.

A Brand is what your organization writes down about who it is and what it intends, so that a connected agent can read it before it produces anything. It is the difference between an assistant that writes generic ad copy and one that writes yours.

A Brand is deliberately not a structured record. Its substance is four pieces of free-form prose you author, not a form of typed values we validate — because what an agent needs to know about a brand is exactly the sort of thing a dropdown cannot hold.

Brands are private to your organization, and a Brand is the sibling of a Skill: a Skill teaches an agent how to run a workflow, a Brand tells it who it is working for. They are unrelated on purpose — an agent that needs both loads both.

The brand wall

Open Brands in the console sidebar. The wall at /brands is one tile per brand, and the tile is the logo. A brand with no logo gets a monogram — its initials on a colour derived from its slug, so it still holds a distinct, stable place rather than sitting in a row of identical grey.

Under each tile:

  • the name and the slug (the handle agents use),
  • a four-segment coverage strip — one segment per section, filled when that section is written, faint when it is empty.

Hovering or keyboard-focusing a tile reveals the brand’s description. That is what an agent reads when choosing between brands; a human recognizes the one they want from the mark long before finishing a sentence about it.

Between the mark and the strip, the wall answers its two real questions without asking you to read a word: which one is it, and is it briefed enough to point an agent at.

Create a brand

New brand asks for four things, two of them required:

Field Required What it is
Name yes The display name.
Description yes One line. How agents recognize this brand when choosing between them.
Website no The brand’s public site. Fill it in and we read it and propose the four sections.
Slug no The handle agents use. Left blank, it is derived from the name.

The four sections are deliberately absent from this form: asking for four essays before the brand exists is the wrong first step. Name it, then write it — or give a Website and start from what your own site already says.

Renaming a slug moves the handle

The slug is editable later, on the brand’s own page, but it is a real rename: any agent, saved prompt or teammate that referenced the old handle needs updating. Deleting a brand frees its slug for re-use.

Start from your website

Almost everything the four sections want is already written down, publicly, on the brand’s own site. Give the Website on the create form and AdCrunch reads it and proposes all four, so that the first thing you do on a new brand is edit rather than stare at four empty boxes.

Submitting creates the brand and then starts the read, and you land on the brand rather than waiting on the form. The four sections show they are being written, and fill in about a minute later. If the read cannot even be started, you are told and the brand is still created — a website that does not work never costs you the brand you were making.

Nothing is written on your behalf. What arrives are unsaved changes in the editor you would have typed into anyway, with Save changes and the section-level Cancel exactly where they already are. Read it, fix what is wrong, then save — or leave without saving and nothing was ever stored.

Three things about it are worth knowing before you rely on it:

  • It happens at creation, and only at creation. It never runs against a brand that already has writing in it, and nothing you do to the Website afterwards starts one. The only way to run it again is the Read it again offered on a failed read — see below.
  • A section it could not ground stays empty. That is a true answer rather than a failure: marketing sites essentially never state their own guardrails, so Guidelines in particular often comes back blank. An empty section reads as uncovered in the usual way, and confidently invented guardrails — read later by an agent as real constraints — would be far worse than a blank.
  • What you typed is kept. A section is filled only if it is still empty and you have not touched it, so both writing during the read and saving during the read leave your words alone.

The brand also shows which pages were read, so you can judge whether it had the right material to work from. The read is bounded: up to fifteen pages, following links two levels from the address you gave rather than crawling the whole site, and skipping the parts that dilute rather than describe — blog, news, careers, and legal pages like privacy and terms.

Close the tab mid-read and the proposal is waiting when you come back: the brand says one is ready and offers Apply or Dismiss. It is offered rather than applied, because unsaved changes you did not ask for in this session are an ambush rather than a convenience.

Editing the Website later reads nothing

The Website is an ordinary editable field on the brand’s page, like the slug. Changing it, setting it, or clearing it triggers nothing — no read, ever. It is a locator: where the brand lives on the web, for agents that need what the sections do not cover.

If the read fails

The brand says which of four things happened, and offers Read it again where retrying can help.

  • The site refused to be read. Its robots.txt disallowed the crawler on every page it found, or it published a signal refusing this use. Both are one line in a file you own.
  • We could not reach the site. Nothing readable came back. Check the URL and that the site answers from outside your own network — and note that a WAF returning 403 lands here rather than under “refused”, because from outside a firewall’s refusal and a broken site look the same. The detail line under the message carries the status your origin actually returned, which is how you tell them apart.
  • The site said too little. A one-page splash or a mostly-image site does not carry enough text to describe a brand. This is only reported after a second pass with a real browser, so a JavaScript-rendered site has already been retried before you see it. Writing the sections by hand is the honest answer.
  • We could not write the sections. The site was read; our end did not finish. That one is ours rather than yours, and trying again is the whole fix.

Letting the crawler through a WAF

On Cloudflare, add a WAF custom rule that skips bot protection for bot detection id 128292352. Other WAFs need the equivalent allowance. This fixes both of the first two failures above, since a WAF can produce either.

Read it again appears only while the brand still has a Website and every section is still empty — the same precondition that makes this a create-time feature. Once you have written something, nothing can overwrite it, a re-read included.

The four sections

A brand’s own page is mostly these, and each one is free-form markdown:

Section What belongs in it
Identity Who the brand is, what it makes, who it is for. Positioning, mission, category.
Voice How it sounds — register, sentence length, what it never says.
Guidelines Rules an agent must not break. Claims to avoid, legal, tone limits.
Messaging The lines worth reusing — value props, proof points, offers.

Every section is independently optional, and a brand is meant to be authored incrementally: a name, a description and one written section is a valid, useful brand. There is no fifth catch-all section on purpose — a new kind of context earns a named one.

An empty section is not a blank waiting to be filled in. It is genuinely absent from what agents receive, and the page says so where the writing would have been — “Nothing written yet — agents will not see a Voice section” — because that is the most useful thing a context author can be told.

Editing: read first, one save

The page renders the sections as the brief an agent actually gets, not as a stack of text boxes. Click Edit on a section and that one becomes an editor, one at a time.

Neither way out of an editor writes anything:

  • Done returns the section to prose and keeps your text, marked Unsaved.
  • Cancel — or Esc — puts back what the section said when you opened it.

Save changes — at the top of the page — is the only write, and it carries everything at once: the sections, the name, the description, the Website, a rename, and the logo nomination. Only what you actually changed is sent.

If someone saved while you were editing

A Brand is agent-writable, so this is a real race rather than a theoretical one. The save is refused, the page reloads the brand, and your writing is kept — the notice names which sections the other writer changed. Saving again overwrites theirs, which the notice says outright; Discard mine and take theirs is the one button that goes the other way.

Agents can write brands too

Anything you can do here, a connected agent can do over MCP with the brand:write scope — see brand_update. Its edits are guarded by the same revision as yours.

The rail beside the writing holds the brand’s files. Upload accepts PDFs and images — PNG, JPEG, GIF, WebP — up to 25 MB each. SVG is not accepted. Put reference material here: a brand book, a tone guide, a positioning deck. An agent gets these as URLs it can fetch, listed alongside the brand’s context.

The logo is a nomination, not a separate upload. Upload an image as one of the brand’s documents, then choose Use as logo on it. That makes it the brand’s mark on the wall, and the one document an agent is pointed at as the mark when it loads the brand. Exactly one document is the logo at a time; Clear drops the nomination without deleting the file, and deleting the nominated file drops it for you.

Files commit; the logo waits for the save

Uploading and removing a document takes effect on the click — those are their own operations and never touch the brand itself. The logo nomination is the exception: it is written on the brand, so it lands with Save changes.

A brand’s documents are not Assets. An Asset is source media that gets registered into an ad account’s provider-side library so an ad can use it; a document is reference material an agent reads, and it never leaves AdCrunch. They share an upload mechanism and nothing else — if what you want is a video or image in an ad account’s library, that is Bring your own creative, not this rail.

Attach ad accounts

This is what makes a brand reachable from the work. An agent acting on an ad account looks up the brands attached to it, so a brand with nothing attached is one that nothing will find on its own — however well it is written.

In the rail’s Advertisers card, Attach opens a menu of your organization’s ad accounts that are not already on this brand; each attached row detaches from its trash control. Both take effect immediately.

  • Every ad account you own is offered, including disabled ones and ad accounts on providers we cannot write to. Attaching is a record in AdCrunch, not a call out to the provider, so there is nothing to filter for.
  • An ad account can be attached to several brands. Attaching to a second does not detach the first; an agent resolving that ad account gets both, and picks.
  • Attaching twice is harmless. The second attach says the same thing as the first.
  • Detaching removes only the link. The brand, its context and its files are untouched.
  • An attachment whose ad account your organization can no longer see shows as a bare id rather than a name. The link is still real, but removing it needs the ad account back: detaching one AdCrunch can no longer confirm you own is refused.

Nothing connected yet? The card says so and links to the console’s integrations — connect an ad account first (Meta, TikTok), then come back and attach it.

The same thing over MCP

This card does exactly what brand_attach_advertiser and brand_detach_advertiser do for an agent. The reason to attach at all is brand_resolve: given an ad account, it answers who am I working for.

Personas: who the brand talks to

A brand’s page has two tabs. Overview is the brief above — name, description, the four sections, its documents and ad accounts. Personas is who that brief is aimed at.

The four sections say who the brand is. A persona says who it is talking to: an audience archetype described as a person. The Personas tab lists them with their age range and which of their sections are written, so you can see at a glance which audience is still a name and nothing else.

Add one with New persona; it opens its own page, because each persona is edited and saved independently of the brand and of the other personas. A persona has its own four sections:

Section What belongs in it
Profile Who they are: life stage, situation, role, context.
Motivations What they want, and what sets them off looking for it.
Frictions Objections, doubts and inertia — why they do not act.
Language Their own words for the problem. Verbatims, not your copy.

Same rules as a brand’s sections: free-form markdown, independently optional, and an unwritten one is genuinely absent from what agents receive.

Above the sections sits the one structured field a persona has, an age range. Leave either end blank for an open end — a lower bound on its own means “and older”. Everything else that might look structured — where they live, what they do, what they are into — is written into Profile as prose, because those resolve differently on every ad platform and a persona describes an audience rather than specifying a targeting setup.

Personas belong to one brand

A persona’s handle only has to be unique within its brand, so two brands can each have a loyalists. There is no way to share one between brands — and that is deliberate: seen from a competing brand’s brief, the same real person has different frictions and different language. Describe them twice.

Deleting a brand deletes its personas with it.

Delete a brand

Delete, at the foot of the brand’s page, removes the brand and everything authored on it — sections, documents and personas alike; agents can no longer fetch it, and the slug is freed for re-use. It cannot be undone from the console. If you want the same context under a different handle, rename the slug instead.

Next

(todo: screenshots of the brand wall & a brand’s page)