Keen logo Keen

Privacy Policy

Last updated: October 25, 2026

Keen is a local-first desktop app for macOS. Your notes, tasks, knowledge items, chat history, and embedded database live on your own Mac and are never transmitted to Keen-operated servers. If you choose to share a project with a collaborator, the shared parts travel directly from your Mac to theirs — never through us. See Section 3.4.

We don't sell your data, we don't use it to train AI models, we don't send marketing email, and we don't share it with advertisers. When you connect Google services, the data flows from Google directly to your Mac. When you use Keen's AI features, you bring your own API key — prompts and responses go from your Mac directly to your AI provider under your account.

1. Who we are

Keen is operated by Eric Perley d/b/a Keen, a sole proprietor in Washington, United States ("Keen", "we", "us"). For privacy questions, contact us at [email protected].

2. Definitions

3. Where your data lives

3.1 On your device (default)

When you use Keen as a self-hosted desktop app — the default — the following all stay on your Mac:

We do not have access to any of this data. We cannot read it, restore it, or recover it. We recommend you maintain your own backups.

3.2 Managed hosting (optional)

We offer an optional managed-hosting service that runs the Keen backend for you on our infrastructure (Fly.io). If you choose managed hosting, your User Content is processed and stored on Fly.io machines and database volumes that we operate. We treat this data as confidential, encrypt it in transit (TLS) and at rest, and do not access it except as required to deliver, secure, and support the Service.

You can export and delete your managed-hosting data at any time from the application; see Section 9.

3.3 What reaches Keen-operated infrastructure regardless of hosting choice

A small amount of operational data reaches Keen-operated infrastructure even when you self-host:

3.4 Collaboration and sharing (optional)

Keen can share a single project with other people who run their own copy of Keen. Nothing is shared until you create an invite, and sharing is per-project.

The connection is between the two installations, not through us. A collaborator's Keen connects directly to the address your Keen publishes. There is no Keen-operated relay, sync server, or directory in this path. If you self-host — the default — shared content never passes through and is never stored on Keen-operated infrastructure, and we cannot see what you share, who you share it with, or that a share exists at all. If you use managed hosting, the machine your collaborators connect to is the backend we run for you, so that content lives on our infrastructure as described in Section 3.2.

What leaves your Mac. Your installation sends the collaborator a structural copy of the shared project — the project, its milestones, its tasks, and its comment threads. For everything except comments this copy is metadata only: title, status, importance, effort, due date, recurrence, archived flag, milestone target date, position in the hierarchy, and who last edited or is assigned to an item. The free-text body — a task's description and notes, a knowledge item's content — is deliberately excluded from that copy. Two narrower paths carry prose:

Attachments are not transmitted to collaborators. Neither is anything outside the shared project: your other projects, your notes, your chat history, and your knowledge base — including knowledge items linked to the shared project — are not reachable over this connection. Knowledge items are not shared at all today.

What collaborators send back. A collaborator's Keen can send you only what their share grants: changes to a task's status, importance, effort, due date, and recurrence; task assignment; project and milestone edits permitted by their role; tasks and milestones they create, including the title, description, and notes they write on them; deletion of shared tasks and milestones; comments they write; and, where granted, co-edited task prose. They cannot rename, move, or re-parent items that already exist. Separately, and regardless of role, they send a self-asserted profile — a display name, an avatar colour, and optionally an email address — so you can tell collaborators apart. These are claims a person makes about themselves, not verified identity.

Email addresses stay with the project owner. A collaborator's asserted email address is disclosed only to the owner of the project they joined. It is withheld from every other collaborator and from connected tools, by field-level enforcement in the code rather than by convention.

Invite links. An invite carries a single-use claim secret in the link's fragment — the part after #, which browsers do not transmit to servers. Your Keen keeps only a SHA-256 hash of it and reveals the secret to you once. Redeeming it exchanges it for that collaborator's own access credential; it cannot be redeemed a second time. Unclaimed invites expire and can be revoked. You can copy an invite link and deliver it yourself, or, if you have connected a Google account, have Keen email it — in which case the message is sent through your own Gmail account, not by us. When someone claims an invite, your Keen records the address they claimed from (which falls back to their IP address) and afterwards keeps a last-active timestamp for the share.

Ending a share, and what that does not undo. Revoking a share ends the collaborator's access and stops further updates. It does not reach into their machine and erase what they already received. Withdrawn items are marked as withdrawn on their side rather than deleted: the item, anything they attached to it (their own tags, favourites, reminders, and links to their own knowledge), and any comment thread remain in place and readable. The one action that erases the mirrored copy is the collaborator choosing to unsubscribe, which deletes those items on their machine outright. Anything a collaborator authored themselves is unaffected either way. Treat sharing as you would sending someone a document: you can stop sending updates, but you cannot take back what has already been delivered.

Because the connection is direct, we are not a party to it: we do not receive, process, or store shared content, and we could not produce or delete a collaborator's copy if asked. Collaboration introduces no new sub-processor — no entry in Section 6 is involved in it.

4. Information you provide directly

If you sign up for managed hosting, a paid plan, or contact support, we collect the information you provide:

5. How we collect and use data

5.1 To provide the Service

We use Local Data, Integration Data, and (where applicable) managed-hosting data solely to deliver the features you have asked for: storing notes, retrieving and summarizing email, displaying calendar events, etc. We do not use this data for any other purpose.

Some AI processing happens automatically, not only when you ask for it. Because these features are always-on, it is worth being explicit about them:

All of this runs under your own API keys and goes from your machine directly to the provider — we never see it. The deeper background analysis jobs, which look across your history to build a profile of how you work, are off unless you switch them on.

5.2 Google integrations (Calendar, Gmail, Contacts)

If you connect your Google account, Keen requests these scopes:

ScopePurpose
auth/calendarDisplay your upcoming events alongside your notes; let the AI assistant create, reschedule, and cancel events when you explicitly ask.
auth/contacts.readonlyAutocomplete recipients and meeting attendees from your contacts. Read-only — Keen never modifies your contacts.
auth/gmail.sendSend emails the AI assistant has drafted, after you review and approve them. Send-only — this scope does not grant read access.
auth/gmail.readonlyRead messages so the AI assistant can summarize and triage your inbox in response to your requests.

Where the data goes. Calendar events, contacts, and email messages are fetched on-demand from Google directly to your Mac (or, with managed hosting, to your dedicated backend on Fly.io). We do not copy this data into a multi-tenant database, do not aggregate it, and do not retain it beyond the immediate request unless you choose to save it as a note or task in Keen.

AI processing. When the assistant summarizes an email or drafts a reply, the relevant message content is sent to your configured AI provider (Anthropic or OpenAI) under your own API key ("BYOK" — bring your own key). The request goes from your machine directly to the provider; Keen-operated infrastructure does not see the prompt or the response. Your relationship with the AI provider is governed by your agreement with them.

5.3 Limited Use of Google data

Keen's use and transfer of information received from Google APIs adheres to the Google API Services User Data Policy, including the Limited Use requirements. Specifically, we:

5.4 Diagnostic and crash data

If you opt in to crash reporting in Settings, the desktop app sends error events to Sentry containing the error message, stack trace, app version, OS version, and timestamps. Before sending, we sanitize the structured context we attach to an event, dropping fields whose names suggest sensitive content — token, jwt, auth, password, secret, key, email, phone, name, address, body, request, and response. To be precise about the limits of that: it applies to the context bag only. The error message itself, the stack trace, the in-app address where the error occurred, and the breadcrumb trail of your recent actions are transmitted as recorded, and could incidentally contain content you had open. Sentry retains these events for 90 days.

5.5 What we do not do

6. Sub-processors

We engage the following sub-processors. Each is bound by a data-processing agreement that limits their use of data to the purposes below.

Sub-processorPurposeData processedLocation
Cloudflare, Inc.OAuth proxy at oauth.thekeen.app; managed-hosting control plane at provisioning-api.thekeen.appOAuth flow IDs, hashed nonces, encrypted refresh tokens (≤ 2 min). For managed hosting only: your account credentials, server provisioning and image-verification requestsGlobal edge
Fly.io, Inc.Managed backend hosting (optional)Your Keen backend application and databaseUS (region of your choice)
Stripe, Inc.Payment processing for managed hosting / paid plansBilling identity, card metadata, payment eventsUS
Functional Software, Inc. (Sentry)Crash and error reporting (opt-in)Error events, stack traces, app/OS versionsUS
GitHub, Inc.Auto-update distributionStandard request metadata (IP, user-agent)US
Anthropic, PBCAI features (only if you configure it as your provider)Your prompts and responses, under your API keyUS
OpenAI, L.L.C.AI features (only if you configure it as your provider); semantic-search embeddings (whichever AI provider you choose)Your prompts and responses, and the text being indexed for semantic search — all under your OpenAI API keyUS
Google LLCOAuth and Calendar / Gmail / Contacts APIs (only if you connect Google)OAuth tokens; whatever you ask Keen to read or sendUS

We will update this list when sub-processors change.

7. How long we keep data

Data categoryRetention
Local Data on your deviceUntil you delete it; we do not control this
Content shared to a collaborator's deviceUntil they unsubscribe; revoking a share stops updates but does not delete their copy. We do not control this (Section 3.4)
Unclaimed invitesUntil claimed, revoked, or expired; only a hash of the claim secret is stored
Managed-hosting User ContentUntil you delete it or close your account, then up to 30 days in encrypted backups
Google Integration DataNot retained server-side beyond the immediate request, unless you save it as a Keen item
OAuth refresh tokens (proxy)≤ 2 minutes in transit between Google and your backend
OAuth refresh tokens (your device)Until you disconnect the integration; deleted from the encrypted store on disconnect
Crash reports (Sentry)90 days
Account email + hashed password (managed hosting)Duration of account + 30 days after closure
Billing records (Stripe)7 years (US tax requirement)
Support correspondence24 months from last reply

8. Sharing and disclosure

We disclose data only:

9. Your rights

Regardless of where you live, you may at any time:

When you delete a fact, belief or profile entry, Keen removes it from its memory. Your past chats are kept as they were, so anything said in a chat stays in that chat. To remove it there too, delete the chat; this permanently deletes everything said in it.

If you are in the European Economic Area, the UK, or Switzerland, the GDPR additionally gives you the rights to data portability, to restrict processing, to object to processing, and to lodge a complaint with your local supervisory authority.

If you are a California resident, the CCPA/CPRA additionally gives you the rights to know what categories of personal information we collect, to opt out of the "sale" or "sharing" of your personal information (we do neither), and to limit use of sensitive personal information. We will not discriminate against you for exercising these rights.

To exercise any of these rights, email [email protected]. We will respond within 30 days.

10. Security

No system is perfectly secure, and we make no guarantee against all conceivable threats. If we discover a breach affecting your data, we will notify you without undue delay and in any event within 72 hours of becoming aware of it.

11. International transfers

If you access the Service from outside the United States, your data will be transferred to and processed in the United States and other jurisdictions where our sub-processors operate. Where required (e.g., EEA → US), we rely on the EU Standard Contractual Clauses and additional safeguards offered by our sub-processors.

12. Children

Keen is not directed to children under 16 and we do not knowingly collect personal information from anyone under 16. If you believe a child has provided us with personal information, contact us and we will delete it.

13. Changes

We may update this policy. The "Last updated" date at the top reflects the most recent revision. For material changes affecting how we handle data we have already collected, we will provide reasonable advance notice (in-app, by email if applicable, or on the marketing site).

14. Contact

Privacy questions, data-subject requests, and security reports: [email protected].