In-app agent · for enterprise apps
It does the next step, instead of explaining it.
An enterprise voice agent that lives inside your app. It sees the screen your customer is on and completes the step with them — opens the right page, points at the field, fills in what it already knows — within the boundaries your team sets.
- React Native · Android · iOS · Flutter · Web
- PII masked on the device
- Deployed in your region
Dealer
Quantity
Product
You took 40 cartons of Pearl 5 kg last month. Same again?
A dealer opens a new order and stops at the quantity.
Outcomes
Support that finishes the job.
Built for the flows that carry revenue and risk — onboarding, KYC, checkout, claims — where a customer who gets stuck is a customer who leaves.
Customers finish what they started.
The agent completes the step with the customer instead of routing them to a help article. The form gets submitted, the order gets placed, the claim gets filed.
Drop-off is caught as it happens.
The SDK notices a stalled form, repeated taps or an error on screen, and the agent offers help at that moment — before the customer gives up.
Every conversation is on the record.
Transcripts, the screens the agent saw and every action it took, with its outcome — in Call History and through the API, for QA and compliance alike.
A real call
Two minutes, one real call.
The agent opens inside the app, hears what the customer wants, draws the options on screen and acts on the tap — no hand-off, no separate chat window, no reading a list out loud.
Recorded in a live app with the SDK installed — the components are the ones designed in the dashboard.
Abilities
What it may do is a list you write.
Each action you declare becomes a tool the agent can call while it can see the customer's screen. Your app implements a handler with the same name — declaring it creates the contract, not the behaviour.
Take them there
It opens the screen instead of describing where to tap. It can only name screens your app declared; anything else is refused, with the list of what is valid.
Point at it
A field or section is highlighted while the agent talks about it — exactly when “the button below the total” is what fails.
Fill it in
From what it already knows — the last order, the document on file, the answer given a minute ago. The customer confirms instead of typing.
Notice the sticking point
Your app reports which screen is open and what is on it. An agent that can see the form knows which field is empty without asking.
Anything you implement
Declare an action with a name, a description and parameters, and it becomes a tool the agent can call. The description teaches it when.
And nothing else
Declaring an action creates a contract, not a capability. The agent calls only handlers your app implements, on screens your app reports.
Security
Built for a security review.
An agent that can act inside your app is only as safe as its boundaries. Every one of them is yours to set — and to verify.
- context.json
Structured context, not screenshots
Your app reports the screen and the fields it chooses. Nothing is recorded, captured or streamed from the display.
- mask.ts
Masked before it leaves the phone
PAN, Aadhaar, card numbers, phone numbers and email addresses are masked on the device, and again on arrival. Add your own patterns.
- actions.json
An action contract, refused by default
The agent can call only the handlers your app implements, on the screens your app reports. Every call returns a result your app decides.
- audit.log
A trail you can verify
Every conversation, screen and action is logged, alongside an append-only, hash-chained audit trail you can verify yourself through the API.
- keys.md
Keys that cannot be misused
The publishable key reads no data and places no call. Apps and domains are allowlisted, and voice sessions run on signed, short-lived grants.
- deploy.md
Deployed where your data must live
Shared cloud, a dedicated instance in the region you choose, or your own compute with our control plane. Encrypted in transit, and at rest by our storage providers.
Install
Three steps, and it is in your app.
- 1
Install the SDK
React Native, Android, iOS or Flutter. Voice runs over WebRTC and the screen over its own channel, so a call survives the network your customer is walking through.
- 2
Report what is on screen
One hook per screen reports the page and its fields. Report less and it knows less — the right control for a screen you would rather it did not read.
- 3
Declare what it may do
Name an action in the dashboard and write a handler with the same name. We roll it out with your team, screen by screen.
import {
useGraineScreen,
useGraineAction,
} from "@graineai/inapp-react-native";
function Checkout() {
// What the agent can see: this screen, and these fields
useGraineScreen({
screen: "checkout",
fields: [{ name: "cartons", label: "Cartons", value: cartons,
status: cartons ? "filled" : "empty" }],
});
// What it may do here — and the result it gets back
useGraineAction("set_quantity", async ({ cartons }) => {
setCartons(cartons);
return { status: "ok", message: `Set to ${cartons} cartons.` };
});
}<GraineProvider publishableKey="pk_live_…"
loadFont={Font.loadAsync} svg={{ Svg, Path }}>
<App />
<GraineVoiceLauncher webView={WebView}>
{(api) => <GraineVoiceBar api={api} />}
</GraineVoiceLauncher>
</GraineProvider>The bar is the SDK's — drawn in your design, with your typeface. Android, iOS and Flutter need even less: the bar you mount draws itself.
The Garage
It looks like your product, on every phone.
Choose one of 23 designs in the dashboard, or tune one to your brand — colour, corners, typeface, launcher, motion. Every SDK draws it and loads the typeface itself, and a change reaches every phone on its next session, with no app release.
- assistantlistening
Graine Classic
graine · system font
- assistantlistening
Signature
graine · dm sans
- assistantlistening
Chat Neutral
native · system font
- assistantlistening
Material You
native · roboto
- assistantlistening
iOS Native
native · system font
- assistantlistening
Minimal Mono
modern · geist
- assistantlistening
Fluent
enterprise · system font
- assistantlistening
Enterprise Grid
enterprise · ibm plex sans
- assistantlistening
Fintech Clear
enterprise · ibm plex sans devanagari
- assistantlistening
Liquid Glass
modern · system font
- assistantlistening
Soft & Playful
modern · nunito
- Newassistantlistening
Desktop Buddy
modern · inter
- assistantlistening
Swiss Grid
modern · inter
- assistantlistening
Precision
modern · inter
- assistantlistening
Japandi Calm
modern · noto sans
- assistantlistening
Neo-Brutalist
expressive · dm sans
- assistantlistening
Editorial
expressive · source serif 4
- assistantlistening
Black & Gold
expressive · poppins
- assistantlistening
Retro Terminal
expressive · jetbrains mono
- assistantlistening
Warm & Earthy
expressive · mukta
- assistantlistening
Bauhaus
expressive · dm sans
- assistantlistening
Gamified
expressive · nunito
- assistantlistening
High Contrast
enterprise · atkinson hyperlegible next
New: Desktop Buddy. Clean white windows, a blue pointer and a bit of bounce, available for your agent.
Components — and what it draws, in each phone's own grammar
Why it sits inside the app
Every enterprise has access to the same models. What decides the outcome is where the agent sits.
A chat window in the corner can describe the button. It cannot press it, point at it, or notice that the customer has been stuck on the same field for a minute.
So the agent lives inside the app — with the screen in front of it and a short list of things it is allowed to do. It opens the page instead of giving directions, fills in what it already knows, and asks your app for help, not your customer.
Questions
Questions from your review.
Does it record the customer's screen?
No. Your app reports the screen's name and the fields you choose, as structured data, masked on the device before it leaves. There are no screenshots and no screen recording.
What can it do inside our app?
Only the actions you declare and implement, on the screens your app reports. Anything else is refused, and every action returns a result your app decides.
Where does our data live?
In our shared cloud, in a dedicated instance in the region you choose, or on your own compute with our control plane. Data is encrypted in transit and at rest by our providers, and you can turn on transcript redaction for each agent.
Can our security team review it?
Yes. We will complete your security questionnaire, provide architecture detail, and arrange a technical review with the engineers who built the controls. The audit trail can be verified independently.
Which platforms and languages?
React Native, Android, iOS and Flutter, plus your website. It speaks the languages your Graine agents speak, including ten Indian languages.
Do changes need an app release?
Not for how it looks, what it says or the components it shows — those come from the dashboard, on every phone's next session. A new action needs a handler in your code.
How is it priced and rolled out?
The in-app agent is part of our enterprise plans, scoped to your volumes and deployment. We roll it out with your team, screen by screen — your actions, your design, your security requirements.
In-app agent · Enterprise
See it working in your app.
We'll scope it with your team — your screens, your actions, your deployment and your security requirements — and show it on your own flows.


