-
Notifications
You must be signed in to change notification settings - Fork 3k
Description
Problem (one or two sentences)
#11600 Bug Report: Cloud Telemetry Bypasses User Settings
Severity: High
Type: Privacy / User Consent Violation
Description
The CloudTelemetryClient sends telemetry events to the cloud server regardless of the user's telemetry setting. Users who disable telemetry still have their data sent to Roo's cloud.
Introduced In
Commit bdf128a79e259b167daac16a97ef98c9f70eff32 — "Move @roo-code/cloud to the Roo-Code repo (#7503)"
Contrast with Correct Implementation
The PostHogTelemetryClient properly respects user settings:
// https://github.com/RooCodeInc/Roo-Code/blob/main/packages/telemetry/src/PostHogTelemetryClient.ts#L147-L165
public override updateTelemetryState(didUserOptIn: boolean): void {
this.telemetryEnabled = false
const telemetryLevel = vscode.workspace.getConfiguration("telemetry").get<string>("telemetryLevel", "all")
const globalTelemetryEnabled = telemetryLevel === "all"
if (globalTelemetryEnabled) {
this.telemetryEnabled = didUserOptIn
}
if (this.telemetryEnabled) {
this.client.optIn()
} else {
this.client.optOut()
}
}Impact
- Users opting out of telemetry still transmit data to Roo's cloud servers
- Violates user privacy expectations
- Inconsistent behavior between PostHog (respects setting) and Cloud (ignores setting)
Expected Behavior
CloudTelemetryClient.isTelemetryEnabled() should return true only when:
- VS Code global telemetry is enabled
- User has not disabled extension telemetry
Suggested Fix
Store the opt-in state and check it:
export class CloudTelemetryClient extends BaseTelemetryClient {
private telemetryEnabled: boolean = false
public override updateTelemetryState(didUserOptIn: boolean): void {
const telemetryLevel = vscode.workspace.getConfiguration("telemetry").get<string>("telemetryLevel", "all")
this.telemetryEnabled = telemetryLevel === "all" && didUserOptIn
}
public override isTelemetryEnabled(): boolean {
return this.telemetryEnabled
}
}Status
- Bug confirmed in Roo Code (present of
b0ac2f8a5d0810bdc4d8b665c4805de63ac8d5d3, 2026-02-18)
Context (who is affected and when)
Affected Component
packages/cloud/src/TelemetryClient.ts
Reproduction steps
Steps to Reproduce
- Set telemetry to "disabled" in extension settings
- Observe that
updateTelemetryState(false)is called on all telemetry clients - Verify
CloudTelemetryClient.isTelemetryEnabled()still returnstrue
Root Cause
The CloudTelemetryClient ignores the didUserOptIn parameter and always reports itself as enabled:
// https://github.com/RooCodeInc/Roo-Code/blob/main/packages/cloud/src/TelemetryClient.ts#L260-L264
public override updateTelemetryState(_didUserOptIn: boolean) {}
public override isTelemetryEnabled(): boolean {
return true
}Expected result
CloudTelemetryClient.isTelemetryEnabled() should return true only when: 1. VS Code global telemetry is enabled 2. User has not disabled extension telemetry
Actual result
CloudTelemetryClient.isTelemetryEnabled() ALWAYS return true ignorins user preference to privacy
Variations tried (optional)
No response
App Version
v3.49.0
API Provider (optional)
None
Model Used (optional)
No response
Roo Code Task Links (optional)
No response