Draft — not legally reviewed

This document is a working draft and is not in force. It was written by describing what the agensis software actually does with data, verified against the source code. It has not been reviewed by a lawyer and it is not a legal agreement between you and anyone.

It must not be published or relied upon until a qualified legal professional has reviewed it. Passages marked in amber are business decisions that have not been made and that no amount of reading the code can answer.

Privacy Policy

Draft · prepared 27 July 2026 · not yet in effect

1. Who this applies to

This policy covers the hosted agensis service at agensis.io — the web app, the backend that serves it, and the agent daemon when it connects to that backend.

agensis is also open source, published under the MIT licence. If you run your own copy, this policy does not describe your deployment: your database, your servers, your logs, your choice of AI provider. Section 9 covers what changes in that case.

2. What we collect

Account information

When you create an account with an email address and password, we store:

That is the whole of it. We do not ask for your real name, postal address, phone number, job title, company, or date of birth, and there is nowhere in the product to enter them.

If you sign in with Google or GitHub instead, that is handled through Netlify Identity. We receive the email address the provider asserts and use it to find or create your agensis account. We do not receive or store your Google or GitHub password.

We do not send email. There is no mail service connected to agensis at all. That also means there is currently no email verification and no password reset — if you lose your password, there is no self-service way to recover the account.

Workspace content

Everything you and your agents create inside a workspace is stored in our database, as you wrote it:

Files mirrored from a connected machine

When you connect an agent daemon running on your own computer, that daemon pushes copies of certain local files into your workspace so the rest of the team — and other agents — can read them while your machine is offline. Specifically:

This is a real transfer of local file content into our database. It happens because you connected a daemon, and it is how a teammate can read your agent's skill without your laptop being on.

Connection metadata

A connected daemon reports, and we store:

Usage metering

We record how much of each metered resource a workspace consumes, in a table called usage_events. A row holds: the workspace, the provider (anthropic, deepgram, cartesia, livekit or sandbox), the resource (a model name, a voice model, a room), which part of the product spent it, and counts of tokens, characters or seconds. There is no message content in a usage row, and no price — money is calculated at display time from a separate rate card.

Feedback reports

If you send in-app feedback, we receive your description, the page and elements you selected, and a diagnostics snapshot: the build id, your browser's user-agent string, the page URL, viewport size, language, the last few hundred console lines (each truncated) and the last few unhandled errors. Console text is passed through a secret-redactor on the way out.

The snapshot deliberately excludes localStorage, sessionStorage, cookies, form values and network request bodies — your session token lives in localStorage, and the surest way to keep it out of a bug report is never to read it.

IP addresses

Your IP address is used as a rate-limiting key — to slow down repeated sign-up attempts, failed sign-ins, browser security reports and device-authorisation requests. It is held in the server's memory for that purpose. We do not write it to the database as an IP address and it is not written to our application logs.

Link previews

When a URL is pasted into a message, our server fetches that URL to build the preview card — the reader's browser does not fetch it. The site you linked to therefore sees a request from our server's IP address, identifying itself as agensis-linkpreview/1.0, not from you or from anyone who reads the message. We cache the resulting title, description, site name and image URL.

3. What we do not collect

There is no analytics or tracking of any kind in agensis. We checked the shipped code for it. There is no Google Analytics, no PostHog, no Sentry, no Segment, Mixpanel, Plausible, Hotjar, FullStory or Datadog, no advertising pixel, and no session-recording tool. Nothing measures which buttons you press or how long you stay.

We set no cookies. Your sign-in session is an HMAC-signed token kept in your browser's localStorage, sent as an Authorization header. It expires after 14 days by default, and signing out or changing your password invalidates every outstanding token for your account.

We do not sell personal data, and we do not share it for advertising.

One exception worth naming. The marketing site and the app load web fonts from Google Fonts (fonts.googleapis.com, fonts.gstatic.com). That is a direct request from your browser to Google, which discloses your IP address and user-agent to Google. It is not analytics and we receive nothing from it, but it is a third-party request and we would rather name it than let you find it in the network tab.

DECISION NEEDED: whether to self-host these fonts and remove the Google request entirely. That is a one-line change and it would let this section say "no third-party requests" without an exception.

4. Where your data is stored

ProviderWhat they holdLocation
Neon The Postgres database: every account record, message, document, task, memory fact, huddle transcript, activity event, usage row and encrypted vault entry. CONFIRM: Neon project region
Fly.io The realtime backend server, and the disk volume holding the actual bytes of every file you upload. Frankfurt (fra)
Netlify The web app and marketing site as static files, a mirror of the HTTP API running as serverless functions, and the Google/GitHub sign-in flow (Netlify Identity). CONFIRM: Netlify edge regions

Uploaded files are subject to a 25 MB per-file limit and a per-workspace storage quota (2 GB by default). They are served back only to authenticated members of the workspace that owns them, and they are not copied to any object store or third party.

5. Third parties that receive data

Below is every external service that receives data from the hosted agensis service, what reaches it, and when. Each entry was verified against the source code rather than assumed.

ServiceWhat it receivesWhen
Anthropic The conversation text of the turn — the messages in context, the sender's display name (or, if they have not set one, their email address), and the system prompt, which can include the workspace name, team memory, linked documents, open tasks, canvas notes and the agent roster. Uploaded files and images are never sent; only text. Every AI turn that runs on our server.
Deepgram Raw microphone audio from a voice huddle. Your browser sends audio to our server over the app's own authenticated connection, and our server relays it to Deepgram. Your browser never contacts Deepgram directly. While you are speaking in a huddle with speech-to-text on.
Cartesia The text of an agent's reply, to be spoken aloud. Your browser sends this straight to Cartesia; the audio never passes through our servers. Cartesia is authenticated with a token our backend mints that lasts 120 seconds and can only do text-to-speech — the underlying API key never reaches your browser. When an agent speaks in a huddle.
LiveKit Huddle audio, the room name, your user id, and your display name — or your email address, if you have not set a display name. Your browser connects to LiveKit directly for the media. For the duration of a huddle.
ascii.dev (Box sandboxes) Whatever an agent sends to provision or drive a sandbox: the image or runtime requested, shell commands, and free-text instructions the agent writes. Requests are capped at 8,000 characters. Only when an agent with the Box provider skill is asked to create or operate a sandbox.
Google Fonts Your IP address and user-agent, from your browser, when a page loads its fonts. Every page load.
openpets.dev Nothing about you. Our server fetches a public catalogue file; only our server's IP address is exposed. When the pet picker is opened.
Sites you link to A page request from our server, to build a link preview. See section 2. The first time a URL is pasted, then cached.

DECISION NEEDED: a data processing agreement (DPA) with each of Neon, Fly.io, Netlify, Anthropic, Deepgram, Cartesia, LiveKit and ascii.dev, and a statement of whether each provider trains on the data it receives. Their retention and training practices are contractual and cannot be determined from our source code. This policy should not claim anything about them until those terms are checked.

Services that receive nothing

For the avoidance of doubt: there is no payment processor connected (see the Terms — billing is not yet implemented), no email provider, no SMS provider, no CRM, no error-tracking service and no analytics vendor.

6. Destinations you choose yourself

Several features send your data somewhere you nominated. We cannot list those destinations, because you pick them:

Requests to all of these are restricted to public HTTPS addresses. Internal and private network addresses are blocked, redirects are refused rather than followed, and an agent cannot supply a URL, host or header of its own — a fact we consider part of the privacy story rather than only a security one.

7. Credentials and the workspace vault

Every credential a workspace holds — model API keys, provider keys, webhook signing secrets, shared secrets — lives in the workspace vault. Three properties of it are worth stating plainly, because they are unusual:

The trade-off is the honest one: if you lose a secret, we cannot give it back to you. You can only replace it.

8. Your own API keys, and agents on your machine

agensis is designed so that, if you want, your conversations need never reach our AI account.

Bring your own key

If you put your own Anthropic API key in your workspace vault, turns that run on our server use your key. The request still leaves from our server, so we are still transmitting the content — but the relationship with Anthropic, including their retention and any enterprise terms you hold, is yours. If you set no key, the turn uses our platform key and falls under our account with Anthropic instead.

Agents running on your own machine

An agent in daemon mode runs on your computer, not ours. For those agents:

9. Self-hosting

agensis is MIT-licensed and can be run entirely by you: your own Postgres, your own server, your own AI keys.

In that configuration, none of your data comes to us. There is no licence check, no telemetry, no usage reporting, no update ping. The app's version check reads a file from your own deployment's origin. Sections 4 and 5 of this policy describe our hosted service and simply do not apply — you become the operator, and you decide which third parties your deployment talks to.

Two outbound calls still happen from a self-hosted server, and both are to services that are not us:

Everything else — Anthropic, Deepgram, Cartesia, LiveKit, sandbox providers — is off unless you configure a key for it.

10. Who can see your workspace

Inside your workspace

Workspace membership carries a role — owner, admin, editor, commenter or viewer — which controls what a member can change. You should understand that it does not narrow what a member can read:

Read access is all-or-nothing. Any member of a workspace, including a viewer, can read every channel, every direct message, every document, every memory fact, every task and every uploaded file in that workspace. There are no per-channel or per-DM permissions. A direct message in agensis is a private-feeling surface, not a private one.

Roles are inherited downward from a parent workspace to its children, never upward. Only manage — owner and admin — can add or remove members, write vault secrets, configure agent host folders, or delete the workspace.

By us, as the operator

There is exactly one cross-workspace surface in the product, reserved for the service operator. It exposes account records and aggregate counts only — email, display name, sign-up date, workspace names, and counts of messages, huddles, agents, documents and members. It cannot return message bodies or document text; those columns are not in the query. The operator can also send an in-app announcement to a segment of accounts.

Separately, and unavoidably, whoever operates the service holds the database credentials and access to the file volume. Message and document content is not encrypted at rest (vault secrets are), so an operator with infrastructure access could read it. We are telling you this because it is true of essentially every hosted product and is rarely said out loud. DECISION NEEDED: what internal policy governs operator access to customer content, who is permitted it, and whether such access is logged. This paragraph should describe a real control, not just an admission.

11. Retention and deletion

Read this section carefully — it describes the software as it is today, not as it ought to be.

What deletion currently means

What expires automatically

Very little. Offline agent connection records are cleared after about two minutes; huddle presence rows are removed when a huddle ends; device-authorisation codes are purged after 24 hours; rate-limit rows are swept opportunistically. Everything else is kept indefinitely — messages, documents, memory, tasks, uploads, huddle events, usage rows, activity events, invitations and cached link previews all persist until something explicitly deletes them.

DECISION NEEDED — and this is the largest gap in this document:

12. Security

No system is perfectly secure, and we make no guarantee that ours is. DECISION NEEDED: a breach-notification commitment — who we tell, and within what period.

13. Your rights

DECISION NEEDED — this entire section depends on facts not present in the code. Which privacy regimes apply turns on where the operating entity is established and where its users are, and the answers determine what must be offered here: access, rectification, erasure, portability, restriction, objection, the lawful basis for each kind of processing, whether a Data Protection Officer or an EU/UK representative is required, and the mechanism relied on for transfers of personal data outside the UK/EEA to our providers.

Two things are true today regardless of which regime applies, and are stated here so the gap is visible rather than papered over:

14. Children

DECISION NEEDED: a minimum age for the service, and the wording that goes with it — commonly 13 (US COPPA), 16 (several EU states), or 18. Nothing in the product asks for or checks an age today, so whichever number is chosen is a statement of policy, enforced by nothing.

15. Changes and contact

If this policy changes materially we will say so here and update the date at the top. DECISION NEEDED: whether material changes are also notified in-app or by email — and note that there is currently no way to send email.

Questions about this policy, or a request about your data:

DECISION NEEDED: the legal entity name, its registered address, and a working contact address for privacy enquiries. No such address exists in the product today and none has been invented here.