Privacy Policy

Last updated: 4 September 2026

This policy explains what personal data PopcornTeam collects, why we collect it, where it is stored, and who else can see it. It covers the hosted website and web application we operate.

PopcornTeam is in private beta. Only email addresses on an allowlist can create an account. Several sections below are short because the product does not do the thing the section would otherwise describe.

1. What we collect

When you create an account we store:

  • Your email address. It is also your account identifier, so we cannot operate an account without it.
  • A display name — either the one Google gives us, or one derived from the first part of your email address.
  • If you sign in with Google, the name and profile-picture URL on your Google account.
  • An optional password. The authentication library stores it only as a hash.
  • The IP address and browser user-agent on the authentication session record.

While you use the product we also store:

  • Session records, so we know you are signed in, including your email, role, and when the session was created.
  • What you create — threads and messages, agent and flow definitions, tasks, documents, comments, and files you upload.
  • Agent memory: facts the product keeps about you or your work, including the memory text and a search embedding.
  • Credentials for any third-party service you choose to connect. Secret fields are encrypted before storage.
  • API keys and device tokens you mint, stored as a hash plus a short prefix, not as the secret itself.
  • Audit events for administrative actions, which include the actor's email and IP address.
  • Operational telemetry about agent runs: trace, thread, agent and tool identifiers, timings, cost, and a short truncated summary. It does not store your name, your email address, or full message text.

If you send the contact form, we store the name, email address, company, company size, topic and message you typed into it.

2. Signing in with Google

Google sign-in is configured with a client id and secret and no extra scopes. That is the standard OpenID Connect set: openid, email and profile. Those give us your email address, your name and your profile-picture URL. We request no access to Gmail, Drive, Calendar or any other Google service in order to sign you in.

We use what Google gives us to create and identify your account, and to check your address against the allowlist. We do not sell it. We do not use it for advertising. We do not use it to train a model of our own.

Connecting Gmail or another Google service as an integration inside the product is a separate authorization that you grant later. It is covered below, not here.

3. Cookies and local storage

Every cookie we set is functional. We run no advertising cookies and no analytics cookies, which is why you see no cookie banner.

  • admin-session — your signed-in session. It lasts 7 days.
  • better-auth.session_token — the authentication library's own session cookie during sign-in.
  • popcornteam-desktop — remembers that you opened the app from the desktop client.
  • popcornteam-active-workspace — remembers the workspace you last used.
  • popcornteam-local-daemon-token and popcornteam-local-daemon-port — set only in local-workspace mode, so the app can reach a daemon on your own machine.
  • gmail_oauth_state and figma_oauth_state — short-lived values that protect those connect flows against cross-site request forgery. The Gmail state cookie lasts 5 minutes.

Your browser also keeps your theme and font choice in local storage (popcornteam-theme-id, popcornteam-font-id, popcornteam-theme-css), so the page does not flash the wrong colours while it loads. That never leaves your browser.

4. Analytics

No third-party tracker runs on this site. There is no Google Analytics tag, no PostHog, no Microsoft Clarity, no Plausible and no browser error-reporting SDK.

We do measure page-loading performance in your browser and send those measurements to our own server. The payload is a metric name, a number, a rating, the path of the page, and the browser user-agent. If you are signed in, we also store your user id on that record so we can chart trends. If you are not signed in, the user id is empty.

Google Analytics, PostHog, Sentry and Clarity do appear inside the product as integrations you can connect to read your own data from them. Connecting one does not start any tracking of this website.

5. Where your data is stored

The hosted service runs on Cloudflare. Accounts, sessions and application records are in a Cloudflare D1 database. Uploaded files, avatars and generated media are in Cloudflare R2. A copy of the session record is cached in KV. Agent-run coordination uses Durable Objects. Agent memory embeddings are in Vectorize. Run metrics can be written to Analytics Engine.

If you use the browser extension, we mint a short-lived Firebase token so the extension can use Firebase Realtime Database as the live command relay.

Cloudflare and Google both operate globally, so your data may be processed outside the country you are in.

6. What an agent run sends to a model provider

Running an agent sends its instructions, the conversation and any tool results to a large-language-model provider. We use our own API keys for this, so it happens on every run — it is how the product works, not an option you can switch off.

Depending on the model an agent is set to use, the provider can be Anthropic, OpenAI, Google (Gemini or Vertex AI), xAI, DeepSeek, Groq, Fireworks, Mistral, Cohere, Together, Cerebras or OpenRouter. Memory search embeddings are created with OpenAI. Each provider has its own terms for the data it receives.

When an agent fetches a public URL, that URL is sent to TabStack so the page can be turned into markdown.

The practical rule: do not put anything into an agent that you would not be willing to send to that provider.

7. Who else receives your data

  • Cloudflare — hosting, storage, queues, and delivery of our sign-in emails. There is no other outbound email transport.
  • Google — Google sign-in, and Firebase Realtime Database if you use the browser extension.
  • The model providers and TabStack, as described above.

We do not sell personal data. We do not share it for advertising. We run no ad network. This repository has no pipeline that sends your content to train a model of our own.

Integrations you connect are deliberately not on that list. They receive data only because you connected them and told an agent to use them. You choose them, you can disconnect them, and each one has its own privacy policy.

8. Payments

We do not charge for access during the private beta. Every account is on the free tier. We run no billing for this product, and we hold no payment-card details for you. Stripe appears in the product only as an integration you can connect to your own Stripe account.

9. How long we keep it

Sign-in lifetimes:

  • A signed-in session expires after 7 days.
  • A magic sign-in link expires after 1 hour.
  • A one-time email code expires after 5 minutes.
  • A desktop sign-in hand-off token expires after 3 minutes and works once.

A daily maintenance job deletes operational records on this schedule (the numbers live in an editable config and can be changed without a deploy):

  • Presence documents older than 2 minutes.
  • Webhook idempotency markers after 2 days.
  • Heartbeats after 1 day.
  • Webhook event payloads after 30 days.
  • Approval-decision logs and admin audit logs after 90 days.
  • Agent memories older than 90 days are marked stale. They are not deleted by that job.
  • Version history is trimmed to the newest 100 revisions per item. Restore snapshots are kept.
  • Orphaned file uploads are removed after 24 hours. Uploads whose owning app is gone are removed after 30 days.
  • Sandbox screenshots, videos and logs are removed after 30 days.
  • Device tokens unused for 90 days are revoked. They are not deleted.

Your account, threads, messages, files that still have an owner, and everything else not listed above is kept for as long as the account exists. This repository does not define a backup retention window.

10. What you can export or delete

From a signed-in session you can:

  • Read your own memories (up to 200 at a time).
  • Export agent memories as JSON or Markdown.
  • Export an agent's configuration, its skills, and a document as a PDF.
  • Revoke your own device tokens, one at a time or in bulk.
  • Delete content the product already lets you delete — agents, threads, files, library items — through the same screens that created them.

There is no button that downloads everything we hold about you in one file. There is no button that deletes your own account. An administrator can delete another user's account; the product blocks you from deleting yourself.

To ask for a full copy, a correction, or account deletion, email support@popcornteam.com. Because the beta is small, that request goes to a person.

11. Security

  • Sign-up is allowlisted, so an address we did not authorize cannot create an account, and a deactivated account cannot sign back in.
  • Every request is checked at the edge for a session, and each API route makes its own authorization decision again.
  • Credentials for connected integrations are encrypted with a wrapping key held outside the database.
  • API keys and device tokens are stored hashed.
  • All traffic is served over HTTPS.

No system is perfectly secure, and we do not claim otherwise. We hold no security certification, and this policy makes no compliance claim.

12. Your choices

Email support@popcornteam.com to ask for a copy of what we hold about you, to correct it, or to have it deleted. Because the beta is allowlisted, you can also ask us to remove your address, which ends your access.

13. Children

The Service is not open to the public and is not intended for children. We do not knowingly collect personal data from a child.

14. Changes to this policy

When this policy changes we update the date at the top of the page.

15. Contact

Questions about this policy, or about the data we hold, go to support@popcornteam.com.