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.
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-processor | Purpose | Data 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:
- GitHub (GitHub Actions / API) — a live source of completion proof (for example, workflow run results).
- Linear, Jira, LaunchDarkly, Atlassian Statuspage — simulated in the current build (real API skeletons exist but are not live), so they receive none of your data today.
Data retention & deletion
- While installed: derived obligation facts, roadmap target dates, reminders, and trust-link tokens are retained for as long as the app is installed, so the ledger stays complete.
- On uninstall: removing Kept from your Slack workspace revokes its access token and automatically purges your workspace's stored data — the obligation ledger, roadmap, reminders, trust-page tokens, and the installation record — in a single team-scoped operation. Other workspaces are unaffected.
- On request: a Workspace Owner or Admin can email us from a verifiable workspace domain to request an export or deletion of all data associated with your
team_id. We action these manually and scope every operation to your workspace ID. - Backups: Fly takes daily volume snapshots of the database (~5-day retention) as a basic safety net; these age out on Fly's rolling schedule.
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.