Skip to content

Commit f0aa066

Browse files
James Mtendamemacursoragent
andcommitted
docs(privacy): align observability retention with website policy
Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 59b035f commit f0aa066

2 files changed

Lines changed: 17 additions & 24 deletions

File tree

PRIVACY.md

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,18 @@ go—and, importantly, where they don't.
4040
We retain telemetry only as long as needed for product analytics and debugging.
4141
Telemetry does **not** collect your code or AI prompts, and you can opt out at
4242
any time through the settings.
43-
- **Zoo Code Observability (Authenticated Subscribers Only):** If you sign in to
44-
Zoo Code and have an active subscription, Zoo Code will send LLM usage
45-
telemetry to the Zoo Code backend (zoocode.dev). This includes task ID, AI
46-
provider name, model name, token counts (input/output/cache), and estimated
47-
cost. This data is linked to your authenticated Zoo Code account. You can stop
48-
this collection at any time by signing out via the Zoo Code badge in the chat
49-
area.
43+
- **Zoo Code Observability (All Authenticated Users):** If you sign in to
44+
Zoo Code, Zoo Code will send LLM usage telemetry to the Zoo Code backend
45+
(zoocode.dev). This includes task ID, AI provider name, model name, token
46+
counts (input/output/cache), and estimated cost. This data is linked to your
47+
authenticated Zoo Code account and is retained for up to 90 days as
48+
metadata-only API request logs, as described in the
49+
[zoocode.dev Privacy Policy](https://www.zoocode.dev/legal/privacy). Free
50+
plan users can view their telemetry in the dashboard for the most recent 7
51+
days; Pro and higher plan users can view the full 90-day window. You can
52+
stop this collection at any time by signing out via the Zoo Code badge in
53+
the chat area, and you may request deletion of your data at any time per
54+
the privacy policy.
5055
- **Marketplace Requests**: When you browse or search the Marketplace for Model
5156
Configuration Profiles (MCPs) or Custom Modes, Zoo Code makes a secure API
5257
call to Zoo Code's backend servers to retrieve listing information. These

src/services/zoo-telemetry.ts

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
import {
2-
getCachedZooCodeToken,
3-
getZooCodeBaseUrl,
4-
getCachedSubscriptionStatus,
5-
checkSubscriptionStatus,
6-
} from "./zoo-code-auth"
1+
import { getCachedZooCodeToken, getZooCodeBaseUrl } from "./zoo-code-auth"
72
import { Package } from "../shared/package"
83

94
export type LlmTelemetryPayload = {
@@ -22,24 +17,17 @@ export type LlmTelemetryPayload = {
2217
/**
2318
* Send LLM telemetry to the Zoo Code observability backend.
2419
* This is a fire-and-forget operation that silently fails on error.
25-
* Only sends telemetry for authenticated users with active subscriptions.
20+
* Sends telemetry for all authenticated users — free and paid alike.
21+
* Server-side retention follows the zoocode.dev privacy policy (metadata-only
22+
* API request logs are kept up to 90 days). Dashboard visibility is plan-gated
23+
* (7 days for Free; full window for Pro and higher).
2624
*/
2725
export async function sendLlmTelemetry(payload: LlmTelemetryPayload): Promise<void> {
2826
const token = getCachedZooCodeToken()
2927
if (!token) {
3028
return
3129
}
3230

33-
// Check subscription status before sending (uses 5-minute cache)
34-
let status = getCachedSubscriptionStatus()
35-
if (status === "unknown") {
36-
status = await checkSubscriptionStatus().catch(() => "unknown" as const)
37-
}
38-
39-
if (status !== "active") {
40-
return
41-
}
42-
4331
const baseUrl = getZooCodeBaseUrl()
4432

4533
const body = {

0 commit comments

Comments
 (0)