Skip to content
eqo.
Home Privacy Terms
Get started free

Privacy

Where your words actually go

Last updated 21 September 2026 · This describes how EQO is built, not how we hope it behaves.

The short version

  • In your own cloud mode and on-device mode, your conversations never arrive at EQO at all. There is no copy here to lose, sell, subpoena or train on.
  • Three things do pass through us, because they have to: Quick start, and the WhatsApp, SMS and email channels. They pass through a Worker that has no database, no cache and no file store — it is incapable of keeping them.
  • What we hold is an account row: who you are, which plan, where your engine lives. Never a prompt, a reply, a file, a memory, or a credential that could reach any of them.

1. What EQO is, in a sentence

EQO is a personal AI agent that runs on infrastructure you own. You connect your own Cloudflare account and we deploy an engine into it. That engine does the thinking, holds the memory, stores the files and talks to your apps. We operate the client, a small control plane, and the channel plumbing — and that is the whole of our footprint.

This document is specific on purpose. Any sentence here that is not literally true of the code is a bug, and you can tell us about it at hello@tryeqo.com.

2. The four places your words can go

Which one applies depends on the mode you picked at first run and the channel you happen to be messaging on. You can change the mode at any time in Settings.

ModeWhere the thinking happensWhat reaches EQOWhat we store
Your own cloud Your Cloudflare account Nothing, after the engine is deployed Nothing
On-device planned Your handset, offline Nothing, ever Nothing — once shipped
Quick start A Worker on our Cloudflare Your prompt and the reply, in transit Nothing. Counters only — how many turns, not what was in them
WhatsApp, SMS, email Your engine, whichever you chose The message body, in transit through our relay Nothing. The relay has nowhere to put it

Why the last two exist at all

Quick start is so the app works in thirty seconds, before you have decided to connect any cloud account. It is a trial lane with a quota, not the default.

WhatsApp, SMS and email only deliver to a phone number and a domain that belong to someone. They belong to us, so those messages reach our webhook before they reach your engine. We would rather write that down here than have you discover it.

3. The relay, and why you don't have to take our word for it

The Worker that carries WhatsApp, SMS and email traffic is the one place customer content crosses our infrastructure. The claim we make about it is not "we promise not to keep your messages" — promises are unfalsifiable. The claim is that it cannot keep them.

It is deployed with no D1 database, no KV namespace, no R2 bucket, no Durable Object and no queue. The only durable thing it can reach is your own engine. Route lookups go over an RPC binding with no storage semantics, so a bug in the relay cannot turn one into a message log. That binding list is checked by a test in the repository that fails the build if anyone adds storage to it.

4. What the control plane holds

Our own database stores, per account:

  • your identity — the email address you signed in with, and an account id;
  • your plan and billing state;
  • the URL of your engine, so the client and the channels know where to send things;
  • which connectors you have linked, and whether each is currently authorised — a status flag, not a token;
  • your channel configuration: the address or number a message should be routed to;
  • your device list, so you can sign a lost phone out.

It never stores, and has no schema in which to store:

  • prompts, replies, or any conversation history;
  • files you share with the agent;
  • anything from the agent's memory;
  • message bodies from any channel;
  • your Cloudflare credentials, your connector tokens, or any secret from your vault.

That last line is structural rather than a policy. When you connect Cloudflare, the authorisation happens on your device using PKCE and a public client, which means the phone completes the exchange itself and the resulting token is written into Android Keystore. It is never sent to us, so there is no version of our infrastructure that can reach into your account and read your data.

5. Secrets, and why the agent never sees one

When a task needs a password or an API key, EQO will not accept it in a conversation — not in the app, and not over WhatsApp. A secret typed into a chat is in that chat's history forever, gets re-sent to the model on every subsequent turn, and in code mode is a string the model can simply print.

Not built yet. The read half is: the agent is handed an opaque handle and the value is substituted at the point of use. The write half — the page you type a secret into — is not implemented, so nothing can populate the vault today. The design below is what will ship; it is described here so the intent is on the record, not because it is live.

The value will be written into your own database by a page served by your own engine. The agent is handed an opaque handle that looks like vault://skool, and the real value is substituted in at the last possible moment — inside the host function that makes the outbound request — then redacted back out before anything returns to the model. The secret is never in the model's context, never in the stored history, and never anywhere we operate.

6. App connectors, and the one exception

Gmail, Calendar, Drive, Slack, Notion and the rest connect through Composio's managed OAuth. Traffic runs from your engine to Composio to the target API; our infrastructure is not in that path.

The honest asterisk: those OAuth tokens sit with Composio, not in your Cloudflare account. So "everything on your own infrastructure" is not literally true of app credentials, and we are not going to pretend otherwise. You grant each connection yourself, you can see which ones are live, and you can revoke any of them at any time — which immediately ends EQO's access to that app. Composio's own privacy terms apply to what they hold.

7. Screen control

The sideloaded Android build can read and act on the screen, which is how it books a cab in an app that has no API. What it reads is a structural description of the screen — the accessibility tree — and it is sent to whichever engine you chose. In on-device mode that is the handset itself and nothing leaves it. In your-own-cloud mode it goes to your Cloudflare account, directly, without passing through us.

The service is off until you turn it on, and Android shows a persistent notice while it is running. The build distributed through Google Play does not contain it at all.

8. Sign-in and payment

Sign-in uses Firebase Auth and answers exactly one question — who are you. It is not tied to where your compute runs, and we do not build a behavioural profile from it.

Paid plans are billed through Dodo Payments, which is the merchant of record. Card details are entered on their surface and never touch ours; we receive the fact that you paid and what for. Any upgrade to your Cloudflare plan is a transaction between you and Cloudflare, and we neither see it nor take a cut.

9. This website

tryeqo.com loads no analytics, no advertising pixels and no third-party cookies, and it sets no cookie of its own. It is static files on a Worker with no bindings — the marketing site cannot read or write anything, which is the point.

The one third party your browser contacts on this page is Google Fonts, which serves the two typefaces and therefore sees your IP address and user agent when it does. If that ever becomes unacceptable, the fix is to self-host two font files, and we will.

10. Deleting all of it

Because your data is in your account, deletion is something you can perform without us:

  • Everything the agent knows — delete the engine Worker, its D1 database and its R2 bucket from your own Cloudflare dashboard, or use Delete all data in the app. Once it is gone from your account it is gone; we hold no copy to delete.
  • Connector access — revoke each grant from the app, or directly from the provider's security page.
  • Your account row with us — email hello@tryeqo.com and we will delete it along with your channel routing and device list. We keep the billing records tax law requires us to keep, and nothing else.

In on-device mode there is nothing to request: uninstalling the app destroys the model and the memory with it.

11. Children

EQO is not built for, marketed to, or knowingly made available to anyone under 16. If we learn that an account belongs to a child, we close it and delete the account row.

12. Changes

If this policy changes in a way that affects where your data goes, we will say so in the app before the change takes effect, not quietly amend this page. The date at the top is the only version marker, and older versions are in the git history of the site.

13. Contact

hello@tryeqo.com reaches a person. Privacy questions, deletion requests and "your page says X but the code does Y" all go to the same place.

eqo.

Privacy-first AI agent · Open source, Apache-2.0

Privacy Policy Terms of Service GitHub hello@tryeqo.com