Kept uses a language model for one narrow job: to read a Slack message and propose whether it contains a commitment and what its structured fields are. The model only proposes. Deterministic code decides every action, and a human signs off before anything reaches a customer.
The model we use
What the model does — and does not do
Kept's core design principle is: the model proposes; code decides. The model classifies and extracts. A single pure, deterministic function is the only thing that can change state or trigger an action.
The model can be wrong. Language models sometimes misread a message or extract a field incorrectly. Kept treats every model output as a suggestion for a human to review — it never relies on the model's judgment alone, nothing is tracked until a person confirms it, and no message reaches a customer until a person signs the verdict.
Classify & extract
Reads message text and proposes: is this a commitment? Who is the owner, which customer, what was promised, by when. It returns a structured suggestion — nothing more.
Validate & act
Deterministic code validates the proposal, runs the state machine, and is the only thing that records an obligation or triggers a step. The model never emits an event, mutates state, chooses a tool, or takes an action.
What is sent to the model
When Kept sees a new message in a channel it belongs to, the text of that message (with minimal surrounding context) is sent to the model transiently, at inference time, for the sole purpose of classifying it into obligation signals and extracting structured fields. The model also helps route natural-language questions you ask the Assistant (for example, “What's overdue?”) to the right query.
Sent transiently, never stored
- The text of a channel message, to classify and extract fields.
- Your Assistant question, to route it to a query.
Never persisted by Kept
- Raw Slack message bodies.
- The prompts sent to the model.
- The model's responses.
Retention & data handling
Kept is zero-copy: it persists only derived, structured, human-confirmed facts (the customer, a normalized outcome, the owner, the due date) plus references back to the original Slack messages. It never stores raw message bodies, model prompts, or model responses — this is enforced in code before every write.
The model input and output are processed transiently and are not stored by Kept. OpenAI handles API data under its own API data-usage policy; API inputs and outputs are not used to train OpenAI's models. For a full picture of what Kept stores and for how long, see our Privacy Policy.
Data tenancy & residency. Each workspace's data and connected credentials are isolated from every other workspace's — every read is scoped to the acting workspace. Kept's application and database run on Fly.io in the Singapore (sin) region; model inference is served by OpenAI's hosted API. Uninstalling the app deletes your workspace's stored token and ledger.
AI Assistant & Slack plans. Kept's conversational Assistant pane relies on Slack's agents-and-assistants feature, which requires a paid Slack plan. The rest of Kept — capturing, confirming, verifying, and closing promises — works on any plan without it.
Human oversight — two gates
Kept never takes an autonomous customer-facing action. Every commitment passes through two human gates:
- Gate 1 — Confirm: a person on your team confirms that a detected commitment should be tracked before it enters the ledger.
- Gate 2 — Verify: Kept assembles completion proof, but a person signs the verdict before a closure is posted. Internal details (tickets, PRs, feature flags, CI, status pages) are stripped and the draft is scanned for leaks before any customer-facing send.
In short: the model helps read and draft; a human decides and signs. No message reaches a customer channel automatically.
Questions
Questions about how Kept uses AI or handles your data: kaviyakumar23@gmail.com. See also our Privacy Policy and Support page.