Privacy Policy

How Kept handles your data

Last updated: 2026-07-11

Kept does not store your Slack messages. It reads messages in the channels it is added to only to detect a commitment, then stores only short derived facts about that commitment (who owes what, to which customer, by when) plus links back to the original messages — never the message text itself.

Zero-copy
Only derived facts and references are persisted. Raw message bodies, prompts, and model output are never written to our database.
Tenant-isolated
Every stored record is tagged with your workspace ID. One workspace can never read another workspace's data.
Least secrets
A per-workspace OAuth bot token and any integration credentials you connect are held per tenant and encrypted at rest.
Deleted on uninstall
Removing Kept revokes its token and purges your workspace's data, scoped to your workspace ID.

Who we are

Kept (“we”, “the app”) is a Slack application that tracks commitments made in shared customer Slack channels and helps teams close the loop with verified proof. Privacy questions and data requests: kaviyakumar23@gmail.com.

What data we process, and why

1. Slack message content — transient, not stored

When Kept is a member of a channel, Slack delivers new messages to the app. Kept analyzes the message text at that moment to detect and classify a possible commitment. This text is processed transiently and is not written to our database. A language model (see Sub-processors) may see the text at inference time to propose a structured summary; the model's input and output are not stored.

2. Derived obligation facts — stored

For each confirmed commitment, we store only short, structured, human-confirmed fields: the customer name, a normalized description of what was promised (the “outcome”), the owner's Slack user ID, the due date, the workspace ID (team_id), Slack object IDs, and permalinks back to the original messages. These fields are size- and format-capped and are validated to ensure no raw message body, prompt, or model output is ever persisted. We call this zero-copy.

3. Installation & authentication data — stored

When you install Kept, Slack provides an OAuth installation record including a bot token scoped to your workspace. We store this in a dedicated table so the app can act in your workspace; it is used only to authenticate Kept's own API calls.

4. Operational data — stored

Approved roadmap target dates (for a due-date sanity check), reminder schedules, and opaque capability tokens that authorize the per-customer trust page. None of these contain message content.

We do not sell personal data, and we do not export or back up your Slack message data.

How your data is separated (tenant isolation)

Every stored record is tagged with your workspace ID (team_id), and every read is scoped to that ID. One workspace can never read another workspace's data. A message that cannot be attributed to a workspace is dropped rather than stored.

Customer-facing safety

When Kept drafts a message to post back into a shared customer channel, it strips all internal context (engineering tickets, PRs, CRM, deployment / feature-flag / status details) and scans the draft for leaks before a human approves it. Nothing is ever sent to a customer channel automatically — a person on your team must approve every customer-facing message.

Sub-processors

We rely on the following third parties to run the service:

Sub-processorPurposeData it receives
Fly.io Application hosting (compute) and our self-hosted Postgres database, in Fly's Singapore (sin) region. Our primary sub-processor. All persisted data described above (derived facts + references + per-workspace bot tokens), plus transient request payloads.
OpenAI The language model that proposes structured summaries of commitments (classification and field extraction). Anthropic's Claude is a supported alternative provider, selected by the operator via configuration; with no provider configured, a local heuristic is used instead. Message text transiently at inference time. Nothing from the model is persisted by Kept, and API data is not used to train models.
Slack The platform Kept runs on. Slack is the source of data, not a downstream processor.
Vercel Hosts only our static marketing / landing site (kept-iota.vercel.app) — the page you are reading now. None. No customer data flows through the marketing site.

Integrations you connect (not Kept sub-processors)

To gather completion proof, you can connect read-only integrations using your own API credentials. Kept reads only derived status facts from them (for example, whether a workflow run passed, a feature flag is on, or an incident is resolved) — it never writes to them and never stores their raw content. These are data sources you control, not Kept sub-processors:

Data retention & deletion

Security

Data is encrypted in transit (TLS) between Slack, Kept, and third-party APIs; the database is reached only over Fly's private, WireGuard-encrypted internal network and is never exposed to the public internet. Persisted data lives on a Fly volume that is encrypted at rest on Fly's infrastructure, and operator secrets (database URL, Slack credentials, optional integration keys) are stored as Fly encrypted secrets rather than baked into the app image. Per-workspace bot tokens are held in a dedicated table, and any integration credentials you connect are scoped to your workspace. We do not claim SOC 2 or ISO certification at this stage — see our Support page for how to raise a security question.

Changes to this policy

We will update the “Last updated” date above when this policy changes and, for material changes, note them on the landing page.

Contact

Privacy questions or data requests: kaviyakumar23@gmail.com. See also our Support page and AI disclosure.