Data & security
What Kalytera stores, where it goes, how to delete it, and what happens to your agent if Kalytera is down.
What we store
| Data | Stored |
|---|---|
| Each step your agent sends: input, output, actions taken (name, arguments, success, error, latency), metadata | Yes, until you delete it or your retention period ends |
| The judge's scores and failure reason for each session | Yes, until you delete it or your retention period ends |
Rule checks (guard() decisions) | Tool name, decision, rule — a hash of the arguments, not the arguments |
| Langfuse / LangSmith keys and Slack webhook URLs (if you connect them) | Encrypted (Fernet: AES with an HMAC). Used only to read conversations or send alerts; deleted when you remove the connection |
| Your account | Email, organisation name. API keys are stored only as SHA-256 hashes. |
Mask personal data before it leaves your servers
kalytera.init(redact=True) (or KALYTERA_REDACT=1) replaces email addresses, phone numbers and card numbers with [email], [phone], [card] in everything the SDK sends. Rules are still checked on the real values inside your process, so blocking works the same.
Connections
If you connect Langfuse or LangSmith, Kalytera reads your conversations from it — the last 30 days, then new ones every 15 minutes — and never writes anything back. Removing the connection stops the reading and deletes the stored keys; conversations already read stay until you delete the agent's data.
Anonymous pattern sharing
On by default; turn it off in the dashboard (Overview → Data & retention). With it on, Kalytera can tell you about mistakes that agents like yours make at other companies. What's shared is anonymous and aggregated: a mistake type from Kalytera's fixed list, a category of action (refund, payment, booking…), the shape of a rule (e.g. "refund blocked above an amount"), and your agent's industry, type and system. Never conversation text, reasons, names, IDs, your tool or agent names, your own custom dimensions, or your limits. A pattern is shown only once at least 5 companies share it. Turning sharing off removes your contributions right away.
Who processes it
- Kalytera's API and database, hosted on Render. Every API call is scoped to your account; an agent name belongs to one account and other accounts can't read or write it.
- Anthropic (Claude) scores each finished session: the session's steps and tool calls are sent to Anthropic's API for that one request. Nothing else is sent to an LLM; finding problems and drafting rules run on Kalytera's servers. See Anthropic's commercial terms.
Delete your data
- One agent: dashboard → Overview → Delete this agent's data, or
DELETE /agents/{agent_id}/data. Removes its sessions, scores, problems, rules, rule checks and labels. Can't be undone. - Your whole account: email priya@kalytera.ai.
Automatic retention: dashboard → Overview → Data & retention, or PUT /account/retention. Choose 30, 90, 180 or 365 days and older conversations, scores, rule checks and reviews are deleted every hour. The default is to keep data until you delete it.
Your agent if Kalytera is down
- Recording runs on a background thread and never raises into your code.
- Rules are checked inside your process from a local cache, refreshed in the background — no network call per tool call.
- If Kalytera can't be reached, your tools still run: rule checks fail open.
- Only rules you turned on with Start blocking can stop a call; new rules only watch.
Keep everything on your own infrastructure
Kalytera's server is open source and runs with Docker: self-host guide. Then nothing leaves your network except the judge's calls to the LLM provider you configure.
Not in place yet
No SOC 2 report and no signed DPA template yet. If you need any of these for a pilot, email priya@kalytera.ai.