Skip to content

docs: add privacy policy#150

Merged
johannesjo merged 4 commits into
johannesjo:mainfrom
brooksc:docs/privacy-policy
May 26, 2026
Merged

docs: add privacy policy#150
johannesjo merged 4 commits into
johannesjo:mainfrom
brooksc:docs/privacy-policy

Conversation

@brooksc
Copy link
Copy Markdown
Contributor

@brooksc brooksc commented May 26, 2026

Summary

Adds a top-level PRIVACY.md to the project, following the convention of including a privacy policy in the GitHub project root.

What it says

  • No data is collected by Parallel Code itself — no analytics, telemetry, crash reporting, usage tracking, accounts, or remote logging. Everything runs locally.
  • Third-party AI CLIs (Claude Code, Codex CLI, Gemini CLI, Copilot CLI, optional MiniMax for inline Q&A) are spawned as local subprocesses; their network traffic is governed by their own vendor privacy policies, which the user is responsible for reviewing.
  • Outbound network activity by Parallel Code itself is enumerated:
    • Update checks against GitHub Releases on packaged macOS / Linux AppImage builds (only the public Releases endpoint is contacted; no identifying info beyond what GitHub sees for any anonymous HTTP request).
    • Explicit git operations (push/pull/fetch/PR checks) against the user's configured remote.
    • Optional mobile-monitoring feature, which exposes a local LAN/Tailscale server only when the user enables it.
  • Local storage paths are documented (per-OS app dirs, plus .claude/steps.json inside repos).
  • Children's privacy + change/contact sections included.

Test plan

  • Read PRIVACY.md and confirm wording is accurate
  • Verify update-checker description matches actual behavior in electron/ipc/updater.ts (startup check is unconditional on supported platforms; downloads are user-initiated)
  • Confirm third-party tool list is current

🤖 Generated with Claude Code

brooksc and others added 4 commits May 25, 2026 20:20
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Review of the policy against the code surfaced a few claims that don't
match what the app actually does:

- MiniMax is not a subprocess CLI; Parallel Code's main process makes
  a direct HTTPS request to api.minimax.io with the user's API key
  (electron/ipc/ask-code-minimax.ts). Moved out of the third-party CLI
  list into the "Network activity initiated by Parallel Code itself"
  section, with the endpoint, what gets sent, and how the key is held.
- Update checks include a User-Agent identifying app name/version/OS;
  the previous "no identifying info" framing was too strong. Also
  noted autoInstallOnAppQuit: a confirmed update installs on next quit.
- GitHub PR status polls via `gh` every 30s while the task is visible;
  surfaced as its own bullet rather than hiding under "git operations".
- Mobile-monitoring server binds to all interfaces and exposes terminal
  scrollback + the ability to send input/stop agents to anyone with the
  bearer token; spelled that out.
- Storage paths use the productName "Parallel Code" (capitalized, with
  a space) — fixed from the lowercase placeholder. Added the
  `.parallel-code/` repo directory next to `.claude/`.
- Promoted the doc heading from H2 to H1 for GitHub rendering.
- Children's privacy section reframed: the app collects no data from
  anyone, including children (instead of the COPPA-style boilerplate).
Round-2 review surfaced a factual error introduced by the previous
fixup, plus a few more details worth correcting:

- Mobile clients are read-only. electron/remote/server.ts:783-789
  rejects input/resize/kill from mobile tokens with 4003 Forbidden.
  Only the coordinator token (which never leaves the main process)
  can write. The previous wording overstated the exposure.
- Mobile-monitoring traffic is plain HTTP and the access token is
  included in the URL (and in the QR code). Document this so users
  know to treat the underlying network as trusted (LAN or Tailscale).
- PR-status polling is gated on the app window being visible, not
  per-task. Pending PRs poll every ~30s; settled PRs every ~5min
  (SETTLED_REFRESH_MS in electron/ipc/pr-checks.ts).
- `.parallel-code/` in repos is created only for Docker-isolated
  sub-tasks (electron/ipc/register.ts:1504-1509); non-Docker
  sub-tasks use the bundled mcp-server.cjs. Qualified accordingly.
- Section framing relaxed: PR-status (via gh) and "Other git
  operations" (via git) are subprocess-mediated, not direct calls
  from Parallel Code's own process. Reframed as "initiated by
  Parallel Code itself, either directly or by invoking local
  tooling on your machine."
- MiniMax bullet leads with "unlike the CLIs above, MiniMax is
  called directly" so the distinction is obvious without code
  knowledge. Added line range and system instruction to the list
  of sent fields; dropped the jargon parenthetical.
- Update-check: clarified the User-Agent claim to what the update
  library actually sends (app name and version), dropped the
  unverifiable OS/arch detail. Also noted the user-initiated
  "Check for updates" path.
- Small trims: "including but not limited to" -> "including";
  removed "They only occur in the cases listed" (redundant with
  the per-bullet "when you ..." conditions); "telemetry payload"
  -> "analytics data" (matches summary).
Expand the original privacy policy through several rounds of review:

- Multi-agent review (codebase accuracy, adversarial threat model,
  legal/policy framing, editorial clarity) corrected factual claims
  against the code, added disclosures for Codex argv token exposure,
  Docker non-isolation framing including API-key env forwarding,
  Remote Access token-in-URL exposure surface, a comprehensive Local
  storage inventory, microphone auto-approval, plan-viewer block
  index, dropped-image filename pattern, settings.json placeholders,
  rendered markdown scope, .git/info/exclude entries, and the
  maintainer's identity.
- Split mega-bullets (Remote Access, MCP, Docker task isolation) into
  nested sub-bullets for skim-ability.
- Disclose sub-task system-prompt preamble injection so the third-
  party-CLI disclaimer no longer elides Parallel Code's active role
  in shaping the data flow.
- Tighten the updater UUID framing (drop softening; document UUID
  rotation by deleting .updaterId; specify "about ten seconds").
- Replace closing "not a contractual undertaking" with a non-self-
  defeating no-warranty note scoped to the software.
- Add a "Your data and rights" section honest for a no-server tool.
- Disclose Chromium's empty cache directories in the userData dir to
  pre-empt readers who poke around.
@johannesjo
Copy link
Copy Markdown
Owner

Thank you very much! <3

@johannesjo johannesjo merged commit 91ff40f into johannesjo:main May 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants