Skip to content

[BUG] Cloud Telemetry Bypasses User Settings #11602

@PabloVitasso

Description

@PabloVitasso

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:

  1. VS Code global telemetry is enabled
  2. 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

  1. Set telemetry to "disabled" in extension settings
  2. Observe that updateTelemetryState(false) is called on all telemetry clients
  3. Verify CloudTelemetryClient.isTelemetryEnabled() still returns true

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

Relevant logs or errors (optional)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions