Graine AI

What lands in Call History

Every screen, field, tap, friction signal, action and identity the SDK reports ends up on the call record — here is exactly where each one shows up, and what it looks like.

Nothing needs instrumenting beyond what the screens already report. Each thing the SDK sends has one place it lands in Call History, on the session's panel and in the CSV export.

The mapping

You callThe agent receivesCall History shows
useGraineScreen / useGraineFieldapp_context — screen, fields, errorsWhat happened in the app · "opened privacy", "moved to favourites (from privacy)"
useGraineTap / useGraineTrackrecent_events on the next context frameWhat happened in the app · "tapped pay", "toggle_changed"
Friction rules (configure)app_event with the sentence the agent hearsWhat happened in the app · "stalled on step: agent spoke up" / "rage taps: agent stayed quiet — it had spoken up moments before"
client.reportEvent(...)app_eventWhat happened in the app · a signal row, same shape
useGraineAction handler resultsthe tool result the model readsWhat the agent did in the app · action, arguments, ✓ / refused / timeout, and your handler's own message
identify()prompt variables + app_userthe name on the row and the panel header
appVersion on the providerapp_version on the context framethe record, for telling a build apart

The panel also carries the transcript (both sides — on WebRTC the captions arrive over the control channel), Result (Completed for a web call), Talk Time (the conversation's length; a web call has no carrier duration), and cost.

Why a signal says the agent stayed quiet

A friction signal is a request, not a command. The agent stays quiet while it is already talking, inside nudge.cooldownSeconds of its last intervention, and past nudge.maxPerSession. The timeline records which — it was mid-sentence, it had just spoken up, it had reached its limit — so a product team can tell "the agent ignored a stuck customer" from "the agent was already helping".

CSV

Web-call exports carry Contact Name, App Actions (one line per action, with the app's reply) and App Timeline (one line per entry, oldest first), beside the columns every call has.

What is not there

Only what the app reported. A screen that never called useGraineScreen appears by route name only; a tap not wrapped in useGraineTap is not on the timeline. Calls made before this was stored show a transcript and a status and nothing of the above.

On this page