Anonymous telemetry
Overdeck sends anonymous product-usage and error telemetry to PostHog. It helps the maintainers understand which dashboard and CLI surfaces are used, where issues stop in the delivery pipeline, and which exceptions occur on real installations. Telemetry is enabled by default. Session replay is disabled, and Overdeck does not send code, prompts, terminal content, issue or repository identifiers, file paths, branch names, email addresses, or credentials.Disable telemetry
The fastest control is Settings → Telemetry → Share anonymous usage data. The setting autosaves and applies on the next dashboard load. You can make the same change in~/.overdeck/config.yaml:
OVERDECK_TELEMETRY=false is equivalent. The environment variable takes
precedence over the YAML setting, so it can enforce opt-out for services,
containers, or CI without changing a user’s configuration file.
When telemetry is disabled, Overdeck does not initialize PostHog in the
browser, server, or CLI. Event capture, exception capture, and feature-flag
reads make no PostHog network requests.
Anonymous install ID
Overdeck creates a random UUIDv4 at~/.overdeck/telemetry-id. If you set
OVERDECK_HOME, the file lives at ${OVERDECK_HOME}/telemetry-id. Its file
mode is 0600, and it remains local except when used as the anonymous PostHog
distinct_id. If the file is empty, partial, or not a UUIDv4, Overdeck repairs
it under an exclusive process lock with stale-lock expiry, re-reads the durable
winner, and restores mode 0600.
The ID is generated independently. Overdeck does not read Claude Code, Codex,
GitHub, Git, or other credential files to identify an installation.
Group my installs (opt-in)
If you run Overdeck on more than one machine with the same GitHub account, Settings → Telemetry → Group my installs (pseudonymous) adds anoperatorHash to every event so those installs can be grouped. It is off by
default. The equivalent configuration is:
gh api user --jq .id. Only the 16-character hash is stored (in
~/.overdeck/telemetry-operator-hash) and sent; your GitHub login, email and
raw user ID never are. The salt ships in the Overdeck source, so the hash is
pseudonymous rather than secret.
With grouping on, pan doctor github-quota can also list your other installs
seen in the last 48 hours. That view needs a PostHog personal API key with
query access and the project ID:
OVERDECK_POSTHOG_READ_KEY and OVERDECK_POSTHOG_PROJECT_ID override the
file. The key is never shown in the Settings UI.
What is sent
- Dashboard tab and action categories
- Allowlisted CLI verbs, success state, and coarse duration buckets
- Coarse project and active-agent count buckets
- Pipeline stage, harness, and model-family enums
- Platform, architecture, Overdeck version, and client type
- Hourly, bucketed GitHub API points per Overdeck subsystem and the lowest
remaining GitHub budget (
github_quota_sample), a throttled notice when GitHub rate-limits a call (github_rate_limited), and a dailyinstance_heartbeatwith bucketed project and agent counts - With operator grouping on, the pseudonymous
operatorHash - Sanitized categorical browser and server exceptions for error grouping
Commands that send nothing
pan vault commands send no telemetry at all: no event is captured, no PostHog client is
created and the daily instance heartbeat is skipped for them. The vault talks only to the
backend you configured with pan vault setup.
What is never sent
- Source code or file contents
- Prompts, completions, or terminal output
- Issue IDs, titles, or descriptions
- Repository, branch, workspace, or file-path names
- Email addresses, account IDs, GitHub logins, or credentials
- Session replay recordings
Feature-flag support currently exposes a read door for future rollouts, but no
production Overdeck feature is controlled remotely. Disabled or offline flag
reads always use the local fallback.