Grok Bots and persistent agents

A coding agent reads the brand while you watch. A Grok Bot keeps working after you leave: across sessions, on routines, on its own. It needs the brand as durable memory, and it needs to know which version a person approved. Agents propose; you approve on the board; every bot reads the approved version.

Set up a bot in three steps

  1. Connect Typesheet once, for the account. At grok.com/connectors choose New Connector, then Custom, and enter the URL below. Grok opens the sign-in; approve it with your Typesheet account. Every bot on the account can use the connector.
  2. Add the brand skill. On the brand’s board, open Export and choose Grok Bot skill, or ask any connected agent for it (below). Add it as a Skill on your account. Skills are shared, so every bot uses the same one.
  3. Give each bot a daily routine that refreshes the brand: “Refresh the acme brand from Typesheet.” The skill says how.
https://typesheet.com/mcp
Get the Grok Bot skill for the acme brand from Typesheet.

What the skill makes a bot do

  • Before it makes any UI, copy, deck, report, video or campaign asset, it calls get_brand_context for the surface it is working on, or uses its cached copy if that is fresher than the limit (a day by default).
  • It keeps one copy per surface in memory, stamped with the version number, the approval date and when it fetched it, and notes in one line when the version changes.
  • It reads the approved version only. It never calls a submit tool.
  • Voice and the claims policy apply to every word it writes, whatever it was asked to make. If the brand has neither, it gets a safe default and is told so.
  • If Typesheet is unreachable it uses its memory and says the copy may be stale; with nothing in memory, it falls back to the voice, claims and never-list embedded in the skill.

The Brand Keeper pattern

One bot writes. Every other bot reads. A person decides.

  • Brand Keeper: one bot with access to the repository that holds the design system. On a routine (daily or weekly) it re-extracts with get_extraction_guide, submits what it finds, calls get_brand_changes, and if anything moved, posts the summary and the board link. Export its skill as Brand Keeper skill, or ask for get_bot_definition with role keeper.
  • Consumer bots (design, code, content, marketing): the Grok Bot skill only. They read the approved brand and never write.
  • You: open the board. “Changes since version N” lists what the Keeper proposed: each token, component, rule and voice change, from what to what. Approve, and every bot gets the new version on its next refresh. Nothing reaches a consumer bot until you do.

Every bot in the organization reads the same approved version, so there is no drift between them, and the Keeper cannot approve its own proposals: approval exists only on the board.

Surfaces

Pass a surface to get_brand_context and the context is shaped for it:

  • product: tokens, type, motion, components with props, the rules and voice.
  • marketing, decks, reports: the palette by role, the type hierarchy, that surface’s rules and voice, without the component API.
  • video: the same, plus durations, easings and when motion is allowed.

Every answer carries the visual and verbal never-list (“never invent a second accent color”, “never say leverage”) and says which version it is.

Several brands

An agency or a company with several products keeps each brand separate in one organization. Every tool takes the brand’s slug, and each skill is generated for one brand, so a client’s bot reads only that client. list_brands shows them all with their approved versions.

Files

The same brand exports as files for anything that is not connected: brand.md (voice, claims, never-list, palette, type), design.md (tokens, type, motion, components and UI voice), tokens.json and tokens.css. Each opens with the brand, version and approval date. Export from the board, or with get_export. Every tool and its parameters.