Do you need write access to our database?
No. Runs use a read-only role. We also hold a provisioning credential that can create roles and views, used only by our host process and never by a run. Everything we add is our own objects. Drop them and your database is byte for byte what it was.
Will it put load on our database?
Very little, and never unbounded. A query that runs longer than 30 seconds is killed on your server, on MySQL by a KILL QUERY from our proxy, on PostgreSQL by statement_timeout. A run holds at most two connections. We tested this on a customer's MySQL 5.6 server with deliberately abusive queries and watched them vanish from the process list at 30 seconds. Point us at a read replica if you prefer.
Do you install anything in our application?
Not for reading. If you want actions, there is an optional library for your framework that executes approved scripts inside your own runtime. Every call to it is signed with a per-project secret and verified with a constant time comparison.
Where does it run?
Amazon Web Services in Frankfurt, one isolated network, production only. Model calls go to Google in the EU and to OpenAI in the US under standard contractual clauses. Nothing else sees email content.
Can our developers see what it did?
Yes. Every command it ran, every network attempt with its verdict, and every action with its parameters are on the run trace and the API. The knowledge it keeps about your product is a git repository you can read and edit.
What access do you need to our mailbox?
Enough to read the inbox and place a draft in it. On Gmail that is one scope, gmail.modify: read, draft and label. It cannot touch account settings or permanently delete mail. It could technically send, which is why send-or-draft is enforced on our host, off by default, and never readable by the model. On Outlook it is the equivalent Graph mail permission. If you would rather grant no OAuth at all, connect a mailbox or alias over IMAP with its own app password.
Our database host cannot allowlist an IP. Now what?
Three options, in the order we suggest them. A read replica on a host that can allowlist. An SSH bastion hop, which we support for MySQL today and for PostgreSQL on request. Or TLS plus a dedicated role whose standing credential is only ever used by our host process: each run gets its own short-lived login minted from it, so the credential you handed over is never inside a run.
How do we look up the sender's account without exposing email addresses?
Declare the email column and mark it as personal data. The lookup by the sender's address still runs inside your database, and the model only ever sees a token where the address would be. The sender wrote their own address in the email, so nothing new is revealed. Tenant matching in a multi-tenant setup comes from a trusted signal we control, a per-tenant mailbox or a signed token, never from anything read out of the thread.
Are the personal-data tokens stable? Can the model recognise the same person twice?
Yes, per project and tenant. A token is a keyed hash of the value, with a key derived per project and tenant, so the same person gets the same token across runs within that scope and a different one in another project or tenant. The model can therefore tell that two threads concern the same account without ever seeing a name or an address; the mapping back to real values lives only in our host's memory for the duration of a run. Stable pseudonyms are still personal data under the GDPR, and our DPA treats them as such.
Does our source code go to the model providers?
The parts a run reads, yes: the model cannot reason about code it has not seen, and that is where most of the value comes from. You choose which repositories to mirror, and a docs-only or support-relevant subset is a normal choice. Both providers work under business terms that forbid training; retention is limited to short abuse-monitoring windows, listed on Where your data goes. And the reply path is guarded against code, file names and schemas appearing in an answer (the probabilistic table above says how, and where that guard can miss). If a self-hosted model in the EU is a requirement, ask: the grounding work does not need a frontier model, and we plan for that option.
What is left after the 14 days?
Email bodies, drafts, notes, the exact commands the agent ran, query output, model reasoning and the network and API logs are all deleted after 14 days. Three things outlive that. For 90 days we keep a redacted copy of each command, with text values replaced by placeholders, plus output sizes and the type of error if a step failed. It still carries internal record IDs, so it is pseudonymous, not anonymous, and it never contains query output or model reasoning. It exists so a problem you report weeks later can still be traced. For 12 months we keep the run's timeline: event types, timestamps, and a SHA-256 plus byte count of each deleted payload, readable over the API, then deleted too; earlier on request. Chat conversations you see in the chat window are kept for the project's chat retention period (90 days after the last activity by default, configurable per project, and never more than one year from the conversation's start), together with the files shared or generated in them, then deleted. Database backups are encrypted, stay in Frankfurt and roll off after seven days, so nothing deleted outlives a backup by more than a week.
What happens if we leave?
Drop our role and schema. Within 30 days of your written request we delete the knowledge repository, the project's rows and the audit timeline, and confirm it in writing. Raw email and run content on our side is gone after 14 days anyway (chat conversations follow the project's chat retention period). Nothing was installed and nothing in your system was modified, so there is no migration back.
Is there a volume minimum?
No. A pilot is one project, one mailbox and a handful of tables, and a few threads a week is a normal starting volume. The paperwork is the same DPA either way.
What do we tell our own customers?
Name us as a processor in your privacy policy, with Google and OpenAI as our sub-processors for the AI step. One sentence usually does it: "Support requests may be processed by ReplyPen (ProBackup BV, Belgium), which uses Google Cloud (EU) and OpenAI (US, under Standard Contractual Clauses) to draft replies; none of them train models on your data." We send the DPA and the sub-processor list in writing.
How do we report a vulnerability?
Write to [email protected]. A person reads it, you get a reply within one business day, and we will tell you what we changed. We do not run a bounty program at this time.