Skip to content

Conversation

@wonderwhy-er
Copy link
Owner

@wonderwhy-er wonderwhy-er commented Dec 9, 2025

Why This Change?

Review after user feedback revealed our privacy policy had inaccuracies:

  1. Called UUID "anonymous" and "isolated from events" — but it's sent with every event (needed for retention metrics)
  2. Claimed "no PII" — but under EU GDPR, pseudonymous UUIDs are personal data

No changes to actual telemetry collection — this PR makes the policy match reality, be more transparent and aligned with laws in various jurisdictions

Key Changes

Change Reason
"Anonymous" → "Pseudonymous" Legally accurate under GDPR
Removed "no PII" claim Listed specific exclusions instead
Named Google Analytics Transparency about data processor
Added IP address note GA receives IPs via HTTPS (they anonymize, we do not get IP information)
Added "Your Rights" section GDPR/privacy law compliance
Added legal contact email Required for privacy inquiries
Simplified README Single source of truth in PRIVACY.md

Files Changed

  • PRIVACY.md — Major rewrite for accuracy
  • README.md — Simplified to 5 lines + link to PRIVACY.md

Summary by CodeRabbit

  • Documentation
    • Updated privacy policy with clearer data collection practices, now opt-out by default
    • Added explicit user control options for disabling telemetry with concrete instructions
    • Expanded transparency on data usage, retention, and user rights
    • Moved privacy documentation to local repository reference

✏️ Tip: You can customize this high-level summary in your review settings.

@codeant-ai
Copy link
Contributor

codeant-ai bot commented Dec 9, 2025

CodeAnt AI is reviewing your PR.


Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 9, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

PRIVACY.md makes opt-out-by-default explicit, renames Anonymous → Pseudonymous Client ID, adds telemetry fields (client info, installation method including DXT, container/environment metadata, file operation sizes, terminal base command), expands error/retention/transfer/rights language, updates opt-out/config paths and contact/changes sections. README.md rewords telemetry to "limited, pseudonymous telemetry" and points to local PRIVACY.md.

Changes

Cohort / File(s) Summary
Privacy Policy Documentation
PRIVACY.md
Makes telemetry opt-out-by-default; renames "Anonymous Client ID" → "Pseudonymous Client ID" and clarifies purposes (MAU, retention, cross-session); adds telemetry fields (Client info, installation method incl. DXT, container/environment metadata with sanitization, file operation metrics incl. sizes, terminal base command); expands error info (types, codes, sanitized messages, operational context); adds explicit "IP Addresses" and "Children" policy placement; adds Data Transfers and Data Retention sections; strengthens Security/HTTPS wording; renames User Control → "User Control (Opt-Out)" with concrete opt-out methods and sample paths/commands; replaces Legal Basis with "Your Rights and Choices" and adds "Exercising Your Rights" steps; adds "Privacy Policy Changes" and changelog; updates contact details and last-updated date to 2025-12-11; clarifies open-source telemetry scope.
Repository README
README.md
Rewords telemetry wording to "limited, pseudonymous telemetry"; removes prior local feedback/external telemetry opt-out notes; simplifies opt-out instructions; replaces external privacy URL with local PRIVACY.md reference.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

  • Verify that telemetry field names, sanitization descriptions, and opt-out/config paths in PRIVACY.md match actual implementation/config files.
  • Confirm the Google Analytics / analytics disclosure wording reflects the real analytics configuration and retention settings.
  • Check README link to PRIVACY.md and any sample commands/paths for accuracy.

Possibly related PRs

Poem

🐰
I nibble policy lines with careful cheer,
Pseudonymous hops and breadcrumbs near.
Opt-outs tucked in, tidy and bright,
Telemetry clearer in the moonlight.
Hooray — privacy hops into the night. 🥕✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Privacy policy update' accurately reflects the main change in the changeset, which extensively revises PRIVACY.md and updates related references in README.md.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5491895 and 1efede0.

📒 Files selected for processing (1)
  • PRIVACY.md (2 hunks)

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codeant-ai codeant-ai bot added the size:M This PR changes 30-99 lines, ignoring generated files label Dec 9, 2025
@codeant-ai
Copy link
Contributor

codeant-ai bot commented Dec 9, 2025

CodeAnt AI finished reviewing your PR.

@codeant-ai
Copy link
Contributor

codeant-ai bot commented Dec 9, 2025

💡 Enhance Your PR Reviews

We noticed that 3 feature(s) are not configured for this repository. Enabling these features can help improve your code quality and workflow:

🚦 Quality Gates

Status: Quality Gates are not enabled at the organization level
Learn more about Quality Gates

🎫 Jira Ticket Compliance

Status: Jira credentials file not found. Please configure Jira integration in your settings
Learn more about Jira Integration

⚙️ Custom Rules

Status: No custom rules configured. Add rules via organization settings or .codeant/review.json in your repository
Learn more about Custom Rules


Want to enable these features? Contact your organization admin or check our documentation for setup instructions.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (3)
PRIVACY.md (3)

15-16: Fix list indentation to match markdown conventions. Nested list items use 4-space indentation but should use 2 spaces per markdown style guidelines.

- **Client ID**: A randomly generated UUID that persists between sessions.
-    - **Purpose**: Used to calculate monthly active users (MAU), retention metrics, and understand usage patterns over time.
-    - **Privacy Design**: This ID is not derived from hardware or personal information. It is included with telemetry events to enable aggregate analysis. It cannot identify you personally but does allow us to understand usage patterns across sessions.
+ **Client ID**: A randomly generated UUID that persists between sessions.
+   - **Purpose**: Used to calculate monthly active users (MAU), retention metrics, and understand usage patterns over time.
+   - **Privacy Design**: This ID is not derived from hardware or personal information. It is included with telemetry events to enable aggregate analysis. It cannot identify you personally but does allow us to understand usage patterns across sessions.

70-70: Wrap bare URL in markdown link syntax. For better markdown rendering, wrap the URL in brackets.

- We use **Google Analytics 4** to process telemetry data. Data is sent securely via HTTPS to Google's servers. Google's privacy policy applies to their processing of this data: https://policies.google.com/privacy
+ We use **Google Analytics 4** to process telemetry data. Data is sent securely via HTTPS to Google's servers. Google's privacy policy applies to their processing of this data: <https://policies.google.com/privacy>

102-108: Use markdown heading for "Option 2" instead of emphasis. For consistency with "Option 1" style and better document structure, convert bold emphasis to a proper markdown heading.

 The AI will update your configuration automatically.

-**Option 2: Manual configuration**
+### Option 2: Manual configuration
 1. Edit your configuration file at `~/.desktop-commander/config.json`
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 367039a and c7fc606.

📒 Files selected for processing (1)
  • PRIVACY.md (3 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
PRIVACY.md

15-15: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


16-16: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


70-70: Bare URL used

(MD034, no-bare-urls)


108-108: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

🔇 Additional comments (4)
PRIVACY.md (4)

7-9: Clear opt-out disclosure in opening. The updated introduction effectively communicates the opt-out model upfront, which improves transparency for users.


13-16: Terminology update to "Pseudonymous Client ID" is more accurate. The distinction between pseudonymous and anonymous is technically correct and important for GDPR compliance, and the expanded purpose statement clarifies the UUID's role in MAU and retention metrics.


98-113: Comprehensive opt-out instructions with both AI and manual options. The dual approach (AI-assisted and manual configuration) provides good flexibility. The clarification on line 113 about the UUID remaining in config is appropriate transparency.


119-130: Comprehensive changelog improves transparency. The addition of a structured changelog with detailed change summaries for each version is a best practice for privacy policy updates and helps users understand what changed.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (4)
PRIVACY.md (4)

16-19: Fix markdown list indentation formatting.

Lines 18–19 have inconsistent indentation (4 spaces instead of 2), which violates markdown linting rules (MD007). While semantically correct, standardize the indentation for consistency with markdown conventions.

Apply this diff to align list indentation:

 #### Pseudonymous Client ID
 - **Client ID**: A randomly generated UUID that persists between sessions.
-    - **Purpose**: Used to calculate monthly active users (MAU), retention metrics, and understand usage patterns over time.
-    - **Privacy Design**: This ID is not derived from hardware or personal information. It is included with telemetry events to enable aggregate analysis. It cannot identify you personally but does allow us to understand usage patterns across sessions.
+  - **Purpose**: Used to calculate monthly active users (MAU), retention metrics, and understand usage patterns over time.
+  - **Privacy Design**: This ID is not derived from hardware or personal information. It is included with telemetry events to enable aggregate analysis. It cannot identify you personally but does allow us to understand usage patterns across sessions.

71-73: Wrap bare URL in markdown link syntax.

The Analytics Provider section appropriately discloses Google Analytics 4 usage, but the URL on line 73 should be formatted as a proper markdown link rather than displayed as bare text (MD034 violation).

Apply this diff to format the URL:

 ## Analytics Provider
 
-We use **Google Analytics 4** to process telemetry data. Data is sent securely via HTTPS to Google's servers. Google's privacy policy applies to their processing of this data: https://policies.google.com/privacy
+We use **Google Analytics 4** to process telemetry data. Data is sent securely via HTTPS to Google's servers. Google's privacy policy applies to their processing of this data: [Google Privacy Policy](https://policies.google.com/privacy)

105-109: Clarify AI-assisted opt-out instruction for better user guidance.

The AI-assisted opt-out option is a useful addition, but the example on line 107 could be more natural and user-friendly. The phrasing "Please disable Desktop Commander telemetryEnabled in config" sounds somewhat technical. Consider rewording to be more conversational.

Apply this diff to improve clarity:

 **Option 1: Ask the AI**
 Simply ask Claude (or your AI assistant) to disable telemetry:
-> "Please disable telemetry in Desktop Commander"
+> "Please disable telemetry in Desktop Commander"

111-116: Use heading syntax instead of emphasis for section heading.

Line 111 uses bold emphasis (Option 2: Manual configuration) instead of markdown heading syntax, which violates MD036. Use a heading level (###) for consistency with Option 1 and overall document structure.

Apply this diff to fix the markdown violation:

 The AI will update your configuration automatically.
 
-**Option 2: Manual configuration**
+### Option 2: Manual configuration
+
 1. Edit your configuration file at `~/.desktop-commander/config.json`
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c7fc606 and 47e3a3b.

📒 Files selected for processing (1)
  • PRIVACY.md (3 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
PRIVACY.md

18-18: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


19-19: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


73-73: Bare URL used

(MD034, no-bare-urls)


111-111: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

🔇 Additional comments (7)
PRIVACY.md (7)

7-12: Clear and privacy-focused introduction to data practices.

The revised intro effectively establishes the opt-out model and sets accurate expectations around data minimization and pseudonymous identifiers. The GDPR reference adds appropriate legal context.


21-50: Well-structured telemetry fields with appropriate privacy safeguards.

The expanded telemetry field documentation clearly distinguishes between what is collected and emphasizes privacy protections (e.g., sanitized container names, base command names without arguments, file sizes instead of file contents). The additions of client information, installation method, container metadata, and file sizes provide needed transparency.


52-69: Transparent error and IP handling disclosure.

The expanded Error Information section clearly communicates what error data is collected with appropriate sanitization guarantees. The new IP Addresses subsection accurately explains that while Google Analytics receives IPs via standard HTTPS, they are anonymized before storage. This transparency supports user trust.


75-95: Comprehensive and transparent privacy safeguards.

The expanded Data Usage and Privacy Protection sections clearly articulate the organization's commitment to security (HTTPS, sanitization) and data minimization. The consistent reference to config file paths and UUID lifecycle reinforces transparency around how data is stored and controlled locally.


118-120: Well-articulated GDPR legal basis.

The Legal Basis section appropriately explains the legitimate interest legal basis (GDPR Article 6(1)(f)) while acknowledging that pseudonymous data is still personal data under GDPR. The emphasis on sanitization and data minimization demonstrates proportionality.


122-133: Excellent addition of policy change tracking.

The new "Changes to This Policy" section and Changelog demonstrate transparency and accountability. The changelog entries are detailed and accurate, making it easy for users to understand what evolved between versions. This is a privacy best practice.


135-141: Consistent and complete policy documentation.

The Contact section and Last Updated timestamp provide necessary closure. The December 8, 2025 date is consistent with the changelog and changelog entries.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (4)
PRIVACY.md (4)

18-19: Fix markdown list indentation.

Markdown linting requires 2-space indentation for nested list items, but the sub-bullets use 4 spaces. This is a minor style issue but should be corrected for consistency.

Apply this diff to fix the indentation:

 - **Client ID**: A randomly generated UUID that persists between sessions.
-    - **Purpose**: Used to calculate monthly active users (MAU), retention metrics, and understand usage patterns over time.
-    - **Privacy Design**: This ID is not derived from hardware or personal information. It is included with telemetry events to enable aggregate analysis. It cannot identify you personally but does allow us to understand usage patterns across sessions.
+  - **Purpose**: Used to calculate monthly active users (MAU), retention metrics, and understand usage patterns over time.
+  - **Privacy Design**: This ID is not derived from hardware or personal information. It is included with telemetry events to enable aggregate analysis. It cannot identify you personally but does allow us to understand usage patterns across sessions.

69-69: Verify Google Analytics 4 IP anonymization behavior and fix bare URL formatting.

The statement that GA4 "automatically truncates/anonymizes IP addresses" is important for privacy claims and should be verified against current GA4 documentation. Additionally, line 73 has a bare URL that should be wrapped in markdown link syntax for consistency and accessibility.

Please verify the IP anonymization behavior by searching for the latest Google Analytics 4 documentation. Apply this diff to fix the bare URL:

-We use **Google Analytics 4** to process telemetry data. Data is sent securely via HTTPS to Google's servers. Google's privacy policy applies to their processing of this data: https://policies.google.com/privacy
+We use **Google Analytics 4** to process telemetry data. Data is sent securely via HTTPS to Google's servers. Google's privacy policy applies to their processing of this data: [https://policies.google.com/privacy](https://policies.google.com/privacy)

Also applies to: 73-73


111-111: Consider using headings instead of bold for "Option 1" and "Option 2".

The instructions use bold emphasis (Option 1: and Option 2:) which, while functional, are flagged by markdown linting (MD036) as emphasis used instead of a heading. Converting these to level 4 headings would be more semantically correct.

Apply this diff to convert to headings:

-**Option 1: Ask the AI**
+#### Option 1: Ask the AI

And similarly for Option 2 on the next section.


145-145: Verify the privacy contact email address is actively monitored and fix bare URL formatting.

Two concerns:

  1. The email address legal@desktopcommander.app appears in lines 145 and 165 as the primary contact for privacy requests and legal matters. Ensure this email is actively monitored and can meet the 30-day response commitment.
  2. Bare URLs should be wrapped in markdown link syntax for consistency and accessibility.

Apply this diff to improve formatting:

-To request access to or deletion of your data, contact legal@desktopcommander.app with your client ID (UUID).
+To request access to or deletion of your data, contact [legal@desktopcommander.app](mailto:legal@desktopcommander.app) with your client ID (UUID).

And:

-- **General questions:** Open an issue on our [GitHub repository](https://github.com/wonderwhy-er/DesktopCommanderMCP)
-- **Privacy concerns or legal matters:** legal@desktopcommander.app
+- **General questions:** Open an issue on our [GitHub repository](https://github.com/wonderwhy-er/DesktopCommanderMCP)
+- **Privacy concerns or legal matters:** [legal@desktopcommander.app](mailto:legal@desktopcommander.app)

Also applies to: 165-165

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 554d703 and 5491895.

📒 Files selected for processing (1)
  • PRIVACY.md (3 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
PRIVACY.md

18-18: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


19-19: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


73-73: Bare URL used

(MD034, no-bare-urls)


111-111: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


145-145: Bare URL used

(MD034, no-bare-urls)


165-165: Bare URL used

(MD034, no-bare-urls)

🔇 Additional comments (5)
PRIVACY.md (5)

7-19: Excellent clarity on opt-out model and pseudonymous design.

The explicit opt-out messaging and clear explanation of how the pseudonymous UUID enables analytics while protecting privacy is well done. The terminology change from "Anonymous" to "Pseudonymous" is legally more accurate for GDPR compliance.


21-56: Well-documented telemetry fields with clear privacy safeguards.

The expanded telemetry field documentation is comprehensive and properly emphasizes sanitization (e.g., container names stripped of unique identifiers, error messages with paths removed). Field categories are logical and the addition of client info, container metadata, and file sizes provides necessary detail for product analytics.


99-99: Verify the 14-month data retention period.

The stated retention period should be verified to ensure it aligns with Google Analytics 4's actual default configuration and any applicable regulatory requirements (GDPR, CCPA, etc.).

Please search for the latest Google Analytics 4 documentation to confirm the default data retention period and verify this matches the stated 14 months.


122-133: Excellent addition of Changelog and updated policy date.

The new Changelog section provides transparency about policy changes and versions, which is good practice for privacy-sensitive documents. The two entries are clear and the December 8, 2025 update date is current.

Also applies to: 169-169


75-85: Clear and appropriate data usage disclosures.

The expanded data usage section appropriately describes how collected telemetry is used for product improvement, with new items for retention/engagement metrics and user experience aligned with the broader policy changes.

1. Edit your configuration file at `~/.claude-server-commander/config.json`
**Option 1: Ask the AI**
Simply ask Claude (or your AI assistant) to disable telemetry:
> "Please disable Desktop Commander telemetryEnabled in config"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Improve the clarity of the AI prompt suggestion.

The suggested prompt on line 107 has awkward wording. "telemetryEnabled" appears to be a code variable name, not part of natural language. Consider rephrasing to be more natural and less technical.

Apply this diff to improve clarity:

-Simply ask Claude (or your AI assistant) to disable telemetry:
-> "Please disable Desktop Commander telemetryEnabled in config"
+Simply ask Claude (or your AI assistant) to disable telemetry:
+> "Please disable telemetry for Desktop Commander"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
> "Please disable Desktop Commander telemetryEnabled in config"
Simply ask Claude (or your AI assistant) to disable telemetry:
> "Please disable telemetry for Desktop Commander"
🤖 Prompt for AI Agents
In PRIVACY.md around line 107, the suggested prompt uses the code-style token
"telemetryEnabled" which reads awkwardly and is too technical; replace it with a
natural-language instruction such as "Please disable Desktop Commander telemetry
in the configuration" or "Please disable the 'telemetryEnabled' setting for
Desktop Commander in the configuration" so the prompt is clearer and more
user-friendly.

@codeant-ai
Copy link
Contributor

codeant-ai bot commented Dec 11, 2025

CodeAnt AI is running Incremental review


Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@wonderwhy-er wonderwhy-er merged commit c657e5e into main Dec 11, 2025
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M This PR changes 30-99 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants