#What a brand kit is
Two parts: a markdown brief and an asset inventory. The brief is free-form — anything an agent would benefit from reading before generating a deck, like voice and tone, color hex values, typography rules, logo usage, layout preferences, things to avoid. The asset inventory is uploaded files: logos, wordmarks, icons, fonts, and any custom imagery.
Generated decks do not automatically inherit brand colors, swap logos in, or restyle slides on their own. The brand kit is a source the agent reads and applies. That is deliberate: the agent decides how to use the brief based on what the slide is for, instead of a rigid theme switch that wraps every output.
#Set it up in the editor
Open Settings from the editor's top bar, then choose the Brand tab.
The markdown brief edits with a live preview. Up to 64 KB. Drag-drop or browse to upload assets. Each asset takes a label, alias, kind (logo, wordmark, icon, font, image, or other), and optional metadata for natural dimensions, preferred placement, usage notes, and tags.
The Copy ref button puts an asset:// reference onto the clipboard so you can paste it straight into slide HTML in the Code tab.
#Read it from an agent
brand.context returns the whole kit: guidelines markdown, every asset's metadata, and the current brand revision.
Agents should call it once before drafting so the first draft already lands on-brand. Pass the returned revision back into any subsequent brand.update or asset.upload to detect concurrent edits.
brand.context requires an authenticated account but no extra scope. Bearer tokens are rejected; OAuth only.
{
"guidelinesMarkdown": "# Acme brand\n\nPrimary: #0c0f1a\nAccent: #2d2d2d\nBody copy: Inter 16/24.\nLogos go top-left at 24px height ...",
"revision": 7,
"updatedAt": "2026-04-01T18:30:00.000Z",
"assets": {
"logo": {
"alias": "logo",
"ref": "asset://brand.logo",
"kind": "logo",
"label": "Acme primary logo",
"mimeType": "image/svg+xml",
"sizeBytes": 4128,
"widthPx": 240,
"heightPx": 64,
"preferredPlacement": { "xPx": 32, "yPx": 32, "widthPx": 120 }
}
}
}#Write to it from an agent
brand.update accepts up to twenty-five operations per call: setGuidelines, updateAsset (patch label, alias, kind, description, usage, tags, dimensions, dominant colors, preferred placement), and deleteAsset.
asset.upload with scope set to "brand" uploads new files — same supported MIME types as deck assets, but the response is an asset://brand.<alias> reference scoped to the brand rather than to one deck.
Both accept expectedRevision for safe concurrent writes. Scope: deck:write.
brand.update({
expectedRevision: 7,
operations: [
{ type: "setGuidelines", guidelinesMarkdown: "# Acme brand\n..." },
{
type: "updateAsset",
alias: "logo",
patch: {
label: "Acme primary logo",
kind: "logo",
usage: "Top-left, 24px tall on every cover slide.",
preferredPlacement: { xPx: 32, yPx: 32, widthPx: 120 }
}
}
]
})#Reference assets from slides
Slide HTML references brand assets through the asset:// URL scheme. An <img src="asset://brand.logo"> in a slide resolves to the current brand logo wherever the deck renders.
The server resolves the alias to a signed URL at render time. It works the same way in the canvas, in preview screenshots over MCP, and in exported HTML — for HTML exports the asset is bundled into the file as a data URL so the result stays self-contained.
Aliases are scoped to the brand, not to one deck. Replace the file once and every deck that references it picks up the new version on its next render.
<section style="position:absolute;inset:0;padding:64px;display:grid;align-content:center;gap:24px">
<img src="asset://brand.logo" alt="Acme" style="height:32px;width:auto" />
<h1 style="font:600 56px/1.05 Inter,sans-serif;letter-spacing:-0.02em">
Series A pitch
</h1>
</section>#Limits and supported types
The markdown brief is capped at 64 KB. Brand assets are capped at 10 MB per file.
Image formats: PNG, JPEG, WebP, GIF, AVIF, SVG. Font formats: WOFF, WOFF2, TTF, OTF. PDFs are also accepted, mostly useful for attaching a longer style guide alongside the markdown brief.
Asset kinds — for organization and as a hint to the agent — are logo, wordmark, icon, font, image, and other.
#Revision conflicts
The brand kit has its own revision number, incremented on every change to guidelines or assets. Write tools accept an optional expectedRevision. If the brand has moved underneath since the agent last read it, the write fails with STALE_BRAND_REVISION rather than silently overwriting.
Recovery is the same pattern as deck revisions: refresh with brand.context, rebase the planned changes against the new state, retry. Related error codes include BRAND_ASSET_NOT_FOUND, INVALID_BRAND_ALIAS, BRAND_GUIDELINES_TOO_LARGE, and BRAND_REQUIRES_USER_AUTH for the OAuth-only requirement.
{
"code": "STALE_BRAND_REVISION",
"message": "Brand revision has changed. Refresh and retry.",
"data": {
"toolName": "brand.update",
"currentBrandRevision": 8
}
}#Common questions
Does the brand kit automatically apply to my decks?
No. The brand kit is a source agents read before drafting. Generated decks pick up brand colors and logos when the agent applies them — the kit doesn't override theme tokens or swap assets without an explicit reference. That's deliberate: the agent decides how to use the brief based on what the slide is for.
What should go in the markdown guidelines?
Anything useful to an agent drafting a deck: voice and tone rules, color palette with hex values, typography preferences, logo usage rules, common layouts, and anti-patterns to avoid. The more specific the brief, the more reliably an agent follows it — concrete instructions like "body text is Inter 16/24, secondary text is #4a4f63" work better than abstract ones like "modern and clean".
Can an agent update my brand kit?
Yes. With deck:write scope, an agent can write or replace the guidelines, edit asset metadata, and upload or delete brand assets. The brand revision catches concurrent edits before they overwrite each other.
What file types can I upload as brand assets?
Images (PNG, JPEG, WebP, GIF, AVIF, SVG), fonts (WOFF, WOFF2, TTF, OTF), and PDF. Up to 10 MB per file.
How do I reference a brand logo from a slide?
Use the asset://brand.<alias> URL scheme in slide HTML — for example, <img src="asset://brand.logo" />. The server resolves the alias to a signed URL at render time and inlines the asset into HTML exports.
Why isn't my color palette automatically applied?
The brand kit holds text and assets, not theme tokens. Deck theme colors are set per-deck — either in the editor or by the agent based on what it reads in the guidelines. That keeps the brand kit a source of truth rather than a heavy abstraction wrapping every slide.
Does brand kit require OAuth?
Yes. brand.context and brand.update reject bearer tokens. Brand changes are user-scoped, so they go through the same auth path as the editor.