Graine AI

The Garage

Where the agent's look is chosen — the 23 designs, every control on every tab and what it changes (the whole look, the assistant bar, the chat window, the call screen), the Setup card, saving and comparing, and how one saved design reaches your website and every SDK.

The Garage is where a brand decides how its agent looks: a showroom of designs you flip through like cars, each one tunable, previewed live as the website widget and as the in-app bar. One saved design is drawn everywhere the agent appears — the launcher, the voice bar, the caption, the chat and every component — on your website and in the React Native, Android, iOS and Flutter SDKs, with nothing in your code.

This page is the Garage itself. What your app does with the design — fonts, icons, your own UI — is on Your design.

Where it is

Agent → Embed & Widgets → Appearance. The Garage fills the top of the tab; the Setup card sits below it and is saved on its own. For a flow agent, Embed & Widgets is a tab of the flow builder's Agent setup, with five of the agent editor's seven tabs: Install, Appearance, Actions, On screen and Friction. The Garage is on Appearance in both.

Agent, Embed & Widgets, Appearance: the Garage on Signature with the In-app and Website switch, the iPhone preview of the assistant bar, the tuning rail on the right, the design's stats, and the row of 23 designs below

An agent with no embed yet shows Not set up for the web yet and Set up embedding: press it first. A new embed starts on Signature; an older embed that never saved a design draws Graine Classic. Changing the look needs a role that can edit agents (Admins and Members).

The stage

ControlWhat it does
← →, or the arrowsFlip to the previous or next design. The counter reads 01 / 23
In-app / WebsiteThe preview: the in-app bar, drawn from the design's tokens the way the SDKs draw them — or the real website widget, reloaded as you change things (with Show open / Show closed)
Preview in dark mode / light modePreviews the other scheme. It changes nothing saved; when the design is pinned to light or dark it says so, and the choice lives under Paint
Assistant bar / Chat window / Call screenWhat you are designing, and what the preview shows — see Tuning. The call screen is the app's only
iPhone / AndroidThe phone the in-app preview is drawn on
What the chat showsOn Chat window: New chat, Conversation or Returning customer in the app; Live chat or Returning customer on the website
Moment of the callOn Call screen: Scheduled, Ringing, Connecting, On call, Ended or Missed
Open the showroomThe Garage full screen. Esc leaves
The barsRoundness, contrast, density, depth and motion, at a glance

The in-app preview shows the agent's first component, or a sample card when it has none. Flipping to another design keeps your accent, your light-or-dark rule, your logo as the launcher and what is yours on the Chat and Call tabs; each design remembers its own tuning when you flip back to it.

The designs

DesignFamily
Graine ClassicGraineThe look the widget has always had
SignatureGraineGraine's own look — quiet greys, a slate-and-indigo voice, the grain
Chat NeutralNativeQuiet greys and system type; your brand shows up only in the accent
Material YouNativeGoogle's Material 3: tonal surfaces, soft corners, springy motion
iOS NativeNativeFeels like it shipped with the iPhone: system type, system blue, grey bubbles
Minimal MonoModernBlack, white and one hairline border
FluentEnterpriseMicrosoft's calm, businesslike Fluent 2
Enterprise GridEnterpriseIBM Carbon: square, precise and serious
Fintech ClearEnterpriseNavy ink, a steady teal accent and soft layered shadows, for screens about money
Liquid GlassModernFrosted, floating panels that let the page glow through
Soft & PlayfulModernRounded, pastel and friendly
Desktop BuddyModernA friendly little computer: clean white windows, a blue pointer, a bit of bounce
Swiss GridModernBlack type on white, square corners, hairline rules, Swiss red for the customer's messages
PrecisionModernDark-first and dense, with a single indigo accent
Japandi CalmModernWarm stone, muted sage, soft serif titles and slow, quiet motion
Neo-BrutalistExpressiveThick black outlines, hard shadows, loud colour
EditorialExpressiveA well-set magazine: serif type, warm paper, ink-red accents
Black & GoldExpressiveGold on near-black with high-contrast serif titles
Retro TerminalExpressiveGreen phosphor on black, monospace everything
Warm & EarthyExpressiveCaramel, cream and coffee tones with soft serif titles
BauhausExpressiveCircles and squares in the three primaries, in geometric type
GamifiedExpressiveChunky and bright, with pressable bottom edges and bold rounded type
High ContrastEnterpriseBig type, strong edges, no fades — easy to read for everyone

Every design has a light and a dark version, and every text colour in both is checked for legibility against what sits behind it.

Tuning

Every control in the Garage, tab by tab. The rail beside the preview, headed Make it yours, has eight tabs: Paint, Body, Typeface, Rims, Lights and Interior set the whole look, on every surface; Chat sets the chat window and Call the call screen. Choosing Chat window or Call screen above the stage opens its tab, and opening the tab turns the preview to it. A tile that is the design's own value is marked · own, and choosing it saves nothing of yours: the design's own value follows the design. Reset tuning goes back to the design's own look and keeps your accent, your light-or-dark rule and your logo, and what is yours on the Chat and Call tabs: the words, the starters, timestamps, the window size, the pieces the chat shows, and the call's buttons, captions, timer and ring.

The whole look

TabControlValuesWhat it changes
PaintAccentThe design's own; Blue, Indigo, Violet, Fuchsia, Pink, Red, Orange, Amber, Green, Teal, Cyan, Ink; or any colour, by picker or hexThe launcher, buttons and the customer's own messages. A badge grades the contrast of the label on it (AAA, AA, AA large, Low), and a swatch whose label would not read is not offered
Neutral toneOwn, Cool, Neutral, WarmThe greys behind everything, nudged cooler or warmer
Light or darkAuto, Light, DarkAuto follows each customer's device; Light or Dark draws that version everywhere
BodyRoundnessFrom Square to Twice as round, the design's own in the middleThe corners of every surface — the bar, the chat window, bubbles, cards and buttons
Launcher shapeCircle, Squircle, Rounded, Square, PillThe launcher; the chat's avatar takes the same shape (a pill's as a circle)
ShadowOwn, Flat, Soft, Medium, Strong, HardHow far the bar, the chat window and cards lift off the page. Hard is a solid offset shadow
TypefaceBody fontSystem, or one of 24 familiesMessages, captions, component text
Heading fontSame as body, or one of the 24The chat title and component titles
RimsLauncher glyph17 glyphs — waveform, audio lines, sparkles, microphone, chat bubble, headset, bot, phone, zap, star, orbit, a filled sparkle, buddy, filled chat dots, a filled voice equaliser, the grain and the grain voice — or LogoWhat sits on the launcher and the bar's avatar, and the chat's avatar when it is set to Glyph. Logo shows the logo uploaded in Setup
Icon styleOutline, Filled, Duotone, SharpThe SDK's own icons: microphone, end call, send, the chevron and the rest
LightsMotionOwn, None, Subtle, LivelyHow things move when they open, arrive and react, and how fast the bar's meter moves. None stills everything, as does a device set to reduce motion
GlassOwn, On, OffTranslucent, frosted surfaces over whatever is behind them
InteriorBubblesFilled, Outline, MinimalHow messages sit in the chat: each side in its own colour, outlined, or the agent's words on the page and the customer's on a soft tint
FramePlain, WindowWindow opens the chat, captions and cards as desktop windows — traffic lights and a mono title
DensityCompact, Comfortable, SpaciousThe room around and between things

The 24 families, eleven of them with Devanagari, are listed on Your design → Typefaces.

The assistant bar

The Assistant bar view is the in-app surface a customer meets on a call: the compact chat window above the bar, the caption beside the launcher, and the bar itself — your avatar, the heading, Listening with a meter, the microphone in your accent and the red end button. On the Website surface it is the real widget, which Show open / Show closed opens and closes.

It has no tab of its own: every part of it comes from the whole look and from the Setup card.

PartDrawn from
The bar's fill, outline and cornersNeutral tone, Light or dark, Glass, Roundness
How it lifts off the appShadow
The avatarLauncher glyph (or your Logo from Setup) on your Accent
The nameThe Heading from Setup, in the Body font
The meterMotion
The microphone and the end buttonAccent, Icon style
The captionThe Body font, Roundness and Shadow; with Frame set to Window, a desktop window
The launcherLauncher shape, Launcher glyph, Accent

The chat window

The Chat tab. The header, the bubbles and the composer take their colours from the design; what the chat says and which pieces it draws are set here.

ControlValuesWhat it changes
Window sizeCompact (the design's own), Large, Full screenHow big the chat opens. Compact is the window above the bar. On a phone, Large is a sheet over most of the screen, closed with a swipe down, and Full screen is the whole screen, closed with the chevron at the top left. In a tablet app, Large opens a panel in the corner and Full screen fills the screen; on a website wider than a phone, both open a panel — Chat → Window size
Title and subtitleUp to 40 and 60 charactersThe header's words. Empty fields use your heading and "Online"; "Connecting…" stands in for the subtitle until the chat is connected
AvatarLogo, Glyph, NoneWho the customer is talking to, in the header and the empty chat. With no logo uploaded, Logo shows the launcher glyph
HeaderSurface, AccentThe bar across the top of the chat: the design's surface, or your accent
New conversation buttonShown (the design's own), HiddenThe compose button in the header that starts a fresh conversation. It shows while earlier messages are on screen. Hidden, there is none — your app can still start one from its own button (Start a new conversation)
BackgroundPlain, Tint, PatternBehind the messages: the page, the page washed with your accent, or a quiet dot pattern
Booked callsShown (the design's own), Hidden; Card title, up to 40 charactersThe card at the top of the chat with the customer's upcoming calls, each with Cancel. An empty title reads "Upcoming call" or "Upcoming calls". Drawn in your apps' chat window (React Native's from 0.42.0) and, from 0.8.0, in the website's chat, with Book a call where booking is available (the booking sheet); hidden, there is no card and no Book a call in the chat, and your app can still list and cancel the calls itself (Scheduled calls → From your app)
Earlier messagesShown (the design's own), HiddenA customer who comes back sees the conversation from before, under its date (Coming back to a conversation). Hidden, the chat opens empty, like a new one, with your starters — and your assistant still remembers the conversation
StartersUp to 4, up to 40 characters eachTaps that begin a new chat, above the composer — "Track my order", "Book an appointment", "Talk to someone". A tap sends the words exactly as written
Composer → PlaceholderUp to 40 charactersWhat the empty composer says. Empty: "Message…"
TimestampsShown, HiddenThe time under each message

What the chat shows, above the stage, previews each moment: New chat (the empty chat and your starters), Conversation (bubbles, a component and timestamps) and Returning customer — yesterday's messages under their date, New conversation in the header and a booked call at the top, or, with Earlier messages hidden, a chat that opens like a new one. Changing Booked calls, Earlier messages or New conversation button turns the preview to the returning customer. With Window size, the phone draws the size you chose — the window above the bar, the sheet over the dimmed app, or the whole screen.

On the Website surface the preview is the real widget at its size: Live chat talks to your assistant, and Returning customer opens the widget on a sample of yesterday's conversation, connected to nothing. From 0.8.0 the website's chat draws the booked-calls card too, with Book a call where booking is available — the call rings the visitor's app.

The Chat window tab in dark: a new chat with the logo avatar, title, subtitle and three starters above the composer, and the same chat under way, with two bubbles and their times, a component, and the placeholder in the composer

The call screen

The Call tab: the screen of an in-app call, the ring included. Every colour is checked for contrast, as for the rest of the design.

The Call screen tab with Ringing chosen: an iPhone preview of an incoming call from Asha from Acme with Decline and Answer, and the call screen's controls in the tuning rail: background, avatar and avatar shape

ControlValuesWhat it changes
BackgroundBrand, Dark, Light, Accent, GradientThe whole call screen — the ring, the call, its end. Brand is your page colours with the accent washed in and follows light and dark; Dark and Light are always so; Accent is your accent, edge to edge; Gradient your accent falling to a deeper shade
AvatarLogo, Glyph, LetterThe agent's face on the screen
Avatar shapeCircle, Squircle, RoundedThe shape the avatar is drawn in
End buttonRound, PillThe button that ends the call
Buttons on a callMute, Speaker and Chat, in the order you set; End is always thereThe buttons on a connected call
CaptionsShown, HiddenThe line being said, under the name
TimerShown, HiddenHow long the call has run, under the name
RingtonePhone's own, Graine, Soft — each with a play buttonThe ring. Android and the app's own ring play it; an iPhone rings with its own call screen and ringtone
WordsScheduled call ringing, Other call ringing, Connecting, Ended, Missed — up to 40 characters eachUnder the name, for each moment; empty fields use the words shown

The name on the call screen is the one the phone shows: Calls & scheduling → Name on the incoming call when it is set, else your heading. Moment of the call, above the stage, shows each moment with your settings.

Every state of a call

RINGINGCONNECTINGCONNECTEDENDEDavataravataravataravatarcall namecall namecall namecall nameringing wordsconnecting wordstimer · 01:24ended wordsor why it failedcaptionnoyesDeclineAnswerendmutespkrchatendyour controlsringtone playscloses aftera momentA call the customer places starts at Connecting. A locked iPhone shows the system's call screen instead.

One screen, four states. The preview's state switcher shows each of them with your settings.

StateThe screen showsDrawn from
Ringing — an agent's call, not yet answeredThe avatar, the call name, your Other call ringing words — or, for a call Graine rang at a booked time, your Scheduled call ringing words — Decline and Answer, and the ringtoneBackground, avatar and its shape, the decline and answer colours, Ringtone
Connecting — answered, or placed by the customerThe avatar, the call name, your Connecting words, the end buttonThe same, with End button
ConnectedThe avatar, which pulses while the agent speaks; the call name; the timer and the caption if on; your Buttons on a call. Mute and Speaker draw in their active colours while onTimer, Captions, Buttons on a call, the button and active-button colours
Ended — hung up, declined or failedYour Ended words, or why it could not connect, for a moment before the screen closesThe same as connected, without the buttons
Missed — a ring nobody answeredYour Missed words, with Close and Call back, for 30 seconds while the app is open. Android also leaves a missed-call notification with Call backBackground, avatar, the button colours

Where each is drawn

SurfaceDrawn from the Garage
The chat windowOn every SDK and on websites
Android's ring and call screenAll of it — the full-screen ring and the call
iOS's call screen while your app is openAll of it
iOS on the lock screen, or with your app in the backgroundThe system's call screen: it shows the call name, your app's icon and the ringtone, and nothing else can be styled
React Native and FlutterThe same native screens, with callScreen: "sdk". With callScreen: "app" the screen is yours — the call's tokens are there to match it

A new design reaches the call screen when the app next starts, as everywhere else. The device keeps the last design it fetched, so a ring that wakes a closed app is drawn in it; a device that has never fetched one draws Graine Classic's screen.

Saving

The footer of the Garage says where you are: Unsaved changes to the design, or Saved — live on every site and app.

  • Save design saves the design. Design saved — Live on every site and app running this agent — no snippet change needed.
  • Revert throws away what you have not saved.
  • Hold to compare shows the saved design while you hold it, and your changes when you let go.

The Setup card

Below the Garage, saved with its own Save setup.

SettingValuesIn apps?
What visitors getCall and chat, Voice only, Chat onlyYes
Opens onCall or Chat, when both are offeredYes
CornerBottom right or bottom leftWebsites only
HeadingThe title over the conversation, up to 60 charactersYes
Launcher tooltipThe hint beside the launcher, and the label on a pill launcher; up to 40 charactersWebsites only
Call audioStandard, or High quality (WebRTC)Yes — how the audio travels
LogoPNG, JPG, SVG, GIF or WEBP, up to 2 MB, with Background behind the logo: Brand colour or WhiteYes
Show “Powered by Graine AI”A small line under the widget; off on plans that allow white-labellingWebsites
LoadingDots, Pulse, Ring, Bars or Your logo; Small, Medium or Large; Calm, Normal or Quick; the accent or a colour of its ownYes
Loading wordsWhile connecting, while reconnecting, while the assistant thinks, while a component loads — up to 40 characters eachYes

A logo is saved the moment you upload it. It is trimmed of empty margins and drawn whole wherever it stands in for the glyph — see Your design → Your logo.

How a design reaches every phone

The GarageSave designstored with theagent's embedResolved at Grainea light and a dark setof tokens, contrast-checkedThe sessionread when a page loadsthe widget, or onceeach time an app startsYour websitenext page loadYour appnext time it startsThe typefacefrom Graine, kept on deviceWithin about 30 seconds of saving, the next page load or app start draws the new design. No release, no new snippet.

One saved design, resolved once into light and dark tokens, drawn by every surface.

  1. Save design stores the design with the agent's embed.
  2. A session asks for it. A website asks when a page loads the widget. Each SDK asks once each time the app starts and reuses the answer until the next start — coming back from the background is not a new start.
  3. Graine resolves it into a light and a dark set of tokens — colours, type, corners, spacing, shadows, motion, the launcher and the loader — every colour checked for contrast, and serves them with the session.
  4. The SDK draws from the tokens, picking light or dark by the design's rule or the device's setting, and fetches the design's typeface from Graine the first time it needs it, keeping it on the device.

A save reaches a new page load or app start within about 30 seconds. What the design covers on each surface is in Your design → What the SDK draws. An SDK older than React Native 0.38.0 or Android, iOS and Flutter 0.3.0 draws its own classic bar instead.

Calls follow the design too, through the Call screen tab — except on a locked iPhone, where the call screen is the system's (Where each is drawn).

When the phone does not match the Garage

What you seeCheck
The website changed, the app did notThe app has not restarted since you saved — quit it fully and open it again. Or it draws its own bar instead of the SDK's, or its SDK is older than 0.38.0 / 0.3.0
Neither changedYou saved the Setup card but not the design, or the other way round: each has its own save
The typeface is the system fontThe phone was offline when the font was first needed, or (React Native) the provider has no loadFont — Your design → Typefaces
The launcher shows a glyph, not your logoLogo is not chosen under Rims, or no logo is uploaded in Setup
The Playground's live agent looks differentIt opens in the default look — compare against the Garage's previews or a real page
Earlier messages, the New conversation button or the booked-calls card ignore the Chat tabThe app's SDK is older than 0.7.0 (React Native 0.41), or it has not restarted since you saved
No booked-calls card on the website, or in a React Native appBooked calls is hidden on the Chat tab, the page has not reloaded since, or the app's SDK is older than 0.8.0 (React Native 0.42.0)

Where next

On this page