CueInbox is built around a single commitment: your notifications never leave your phone. The on-device AI reads them, prioritises them, drafts replies — all locally, without sending message content to us or any third party.
We collect only the minimum required to keep the app running: anonymous crash reports and aggregated app-performance signals via Firebase. You can turn those off.
We do not sell, rent, or license any data to anyone.
When you enable Notification Access, Android delivers every notification posted on your phone to CueInbox. The app extracts the title, body, sender, timestamp, and Person URIs, runs them through an on-device AI model (Gemma-4 E2B, running entirely inside your device with litert-lm) to infer priority and draft replies, and stores a compact version in the app's local Room database, protected by Android app-sandbox permissions.
None of this content is transmitted off your device. No servers, no cloud inference, no logs of your message text leave the phone.
When you tap the microphone to dictate a reply, the recording is captured into memory, passed to the same on-device model for transcription, and discarded. No audio file is written to disk or uploaded anywhere.
On first launch, CueInbox downloads the Gemma-4 E2B model (≈ 2.5 GB) from huggingface.co/litert-community/…. This is a one-time download of a public open-weight model — no personal data leaves your device during that download.
Starting in v1.11.0 you can optionally enable a "Cloud AI" path that sends selected message text to a third-party cloud LLM (e.g. via OpenRouter, which fronts Gemini, Claude, GPT, Kimi, and others). This path is:
<email_1>, <phone_1>, …) before any byte leaves your phone. The reverse mapping is held in process memory only and discarded after the model's response is rendered.AES/GCM/NoPadding under a hardware-backed key (where available) that never leaves the secure element.When cloud is off, none of this applies — the app is functionally identical to v1.10 and below: fully on-device.
Starting in v1.12.0 you can connect third-party services so CueInbox can surface a synthesized "what needs your attention" digest pulled across systems your team uses (e.g. GitHub, Linear, Jira, Slack, Gmail, Google Calendar, Stripe, HubSpot, Sentry, Grafana Cloud, PagerDuty, Vercel). The privacy posture is unchanged from v1.10:
{"type":"poll-now"} push notification to your device. Your phone then polls the originating provider directly. The relay's only state is (tenant token → FCM device token) — it has no access to provider tokens or webhook contents. Source code is published.(channel/sender/timestamp/keyword_count) is persisted in the on-device database.Gmail (gmail.readonly): we poll the Gmail History API delta to detect escalation keywords ("blocked", "urgent", "rolling back", "customer-facing") in threads from senders you mark as executive-relevant. Detection runs on-device. Email bodies are scanned and immediately discarded; only the resulting signal (threadId, sender, keyword_count, timestamp) is persisted on your device.
Google Calendar (calendar.readonly, calendar.events.readonly): we poll the Calendar incremental sync API to detect meeting-density anomalies, declined critical meetings, and no-shows on owner-of-blocking-issue meetings. Calendar event metadata is processed on-device.
GitHub, Linear, Jira, Vercel (Execution layer — read-only): pull requests, issues, deployment events, CI runs. Used to surface release-blocking work and unhealthy deploys.
Slack (channels:history, channels:read, users:read, team:read): channels you choose to watch, escalation-keyword detection, decision-maker-engagement signal. Message bodies are scanned on-device only.
Sentry, Grafana Cloud, PagerDuty (Risk layer — read-only): incidents, monitor states, error spikes. Used for paging-grade alerts.
Stripe, HubSpot (Revenue layer — read-only): events, deal pipeline, conversion deltas. Used for impact-estimated revenue signals.
You can disconnect any service at any time in Settings → Connected Sources → Disconnect. Disconnecting calls the provider's revoke endpoint and wipes the local OAuth tokens. Settings → Privacy & data → Wipe everything revokes every connected service in one tap and deletes all on-device data.
We use Firebase Crashlytics to receive stack traces when the app crashes. A crash report contains:
A crash report does NOT contain your notifications, messages, contacts, voice recordings, or draft replies.
You can disable crash reporting in Settings → Privacy → Crash reporting.
We emit a small number of event names (e.g. voice_reply_transcribed, triage_moved_bucket) with no user content attached — just the event name plus build version — so we can see which features are actually used. Disabled by the same Settings toggle as crash reporting.
CueInbox has no user accounts and does not ask you to sign in.
| Permission | Why |
|---|---|
BIND_NOTIFICATION_LISTENER_SERVICE | Core functionality: read notifications to triage them. |
RECORD_AUDIO | Voice dictation of reply drafts. Only active while you are actively recording. |
POST_NOTIFICATIONS | Show reminders you set yourself and model-download progress. |
INTERNET | Download the Gemma model on first run and check for app updates. No personal data transmitted. |
FOREGROUND_SERVICE | Keep the model-download process alive on first-run. |
RECEIVE_BOOT_COMPLETED | Restore pending reminders after a phone reboot. |
WAKE_LOCK | Fire scheduled reminders on time. |
| Service | Purpose | Data seen |
|---|---|---|
| Google Firebase (Crashlytics, App Distribution) | Crash reports, beta distribution | Crash stack, pseudonymous install ID, device info |
| HuggingFace | One-time model download | Public-asset HTTPS GET, user IP |
CueInbox does not use any advertising SDKs, analytics SDKs beyond Firebase, or social-tracking SDKs.
CueInbox is not directed at children under 13 and we do not knowingly collect any information from them. If you believe a child has installed CueInbox, uninstalling the app removes all local data.
Questions, concerns, deletion requests:
We respond within 7 working days.
If we change this policy we will update the "Last updated" date at the top and, for any material change, show a one-time in-app notice in the next app update.