Skip to content
Blog
Security25 October 2026 · 3 min read

What an in-app AI assistant can see, and what it cannot

In short

The model sees the names, descriptions and parameter types of the actions you registered, plus whatever app state you chose to pass, and nothing else. It does not browse your database, it does not hold your API keys, and the sentence your customer typed reaches it as data rather than as an instruction it may follow.

On this page
  1. What is actually in the prompt
  2. Text is data, never an instruction
  3. Where the keys and values live
  4. What anyone keeps, and for how long

What is actually in the prompt

A reasonable worry about putting a model inside a banking or insurance app is that it quietly gets handed everything. It does not, and the list is short enough to read in one line: action names, action descriptions, parameter types, and the app state you pass.

That is the whole input. An action's description is a sentence you wrote about one of your endpoints; it is not the endpoint's data. When the assistant needs a customer's actual balance it does not recall it — it asks for an action to be run, and your API answers.

So the honest way to put it is that the model knows the shape of what your app can do, and nothing about who is using it beyond what you decided to pass.

Text is data, never an instruction

The sharper version of the worry is prompt injection: a customer types something that reads like an order, or a field in your own app state contains a sentence someone put there earlier, and the assistant obeys it.

App state and user text are data, never instructions. They are carried into the turn as material to reason about, not as directions to follow, and the guardrail that says so sits in the prompt itself rather than in a filter bolted on afterwards.

This is also why a write never rests on the model's word. A change is drawn on a confirmation card our servers build from your action and the validated parameters — the model never emits one — and nothing moves until the person taps it.

The anatomy of one turn: a POST opens an event stream, the stream ends when the server needs the device, and the device answers with another POST.On the device“Where is my order?”POST /v1/chatOn our serversRedact, retrieve, routeEmails and phone numbers users typebecome placeholdersHaiku for a simple turn, Sonnet for a hard onethe turnBlocks, streamedblock.start · delta · readyturn.end awaiting_tool_resultstext/event-streamNative componentsdrawn by your app, not a web viewIf the turn asked for somethingThe user confirmsfor a write or destructiveaction; a read skips thisYour handler runsin your app, as your user, or onour server for a console actionThe next turntool_resultsSame conversation, same id, and the usage row was written once.A retry carrying the same turn_id is not a second turn.
One turn is one POST, one stream, and one row of usage. The stream ends whenever the server needs something from the device; the device answers by opening the next one. Nothing is held open waiting.

Where the keys and values live

The key in your app's build is a publishable key, and it cannot reach your console, your other apps or your secret keys. Somebody pulling your APK apart gets a key that can start conversations for that one app and nothing more.

The credentials your actions need are a separate story: a saved key goes only to its own host, so a key you saved for one API is never attached to a request going somewhere else. Placeholder values are encrypted at rest.

Underneath, every query runs under the app's tenant context, and row-level security enforces it again. Two layers, because one of them is a thing a person could get wrong.

What anyone keeps, and for how long

The row people check first is the provider's. API inputs and outputs are deleted on a short fixed schedule, which is the answer to the question security reviews actually mean when they ask whether a model is trained on their customers.

Feedback is worth naming too, because it is the one place a customer types freely and nobody expects it to be read later: a rating and its typed reason are masked before storage.

WhoWhat they holdFor how long
Your app's buildA publishable key for that appUntil you rotate it
RendelConversations, under your app's tenant contextYour app's retention setting
The model providerAPI inputs and outputsA short fixed schedule, then deleted
A rating someone leavesThe rating and its typed reason, maskedStored masked, not raw

Questions

  • No. It sees action names, descriptions and parameter types, and the app state you pass. Data arrives only when an action you registered is run and your API answers.

  • App state and user text are data, never instructions. A write also waits on a confirmation card our servers build from your action and the validated parameters, so a sentence alone changes nothing.

  • It is a publishable key. It cannot reach your console, your other apps or your secret keys.

  • The provider deletes API inputs and outputs on a short fixed schedule. `/docs/reference/security` is the page to send a security reviewer.

See Rendel do this in an app like yours.

Rendel is an AI assistant inside your own app. Customers ask in their words, and the order is tracked, the card frozen or the return started right there, without a support ticket.

Put it in your app this week.

Start free on your own, or tell us what your customers do most and we’ll show you that exact workflow, working, in a tailored demo.

  • PilotFree400 messages a month
  • Starter$199 / month4,000 messages a month
  • Growth$799 / month20,000 messages a month
Every plan, and the estimator

Prefer email?

sales@rendel.ai

Prefer to write first?

Tell us about your app and we’ll show the right workflow in a tailored demo.

Help us tailor the demoOptional

We use this to get in touch about the demo and, if a partner introduced you, to credit them. We never sell it. See the privacy policy.