Privacy-safe telemetry

When enabled, dexgate may record a small set of product signals (for example: that a free policy self-check ran, or that a paid workspace produced its first governed decision). CLI telemetry is off unless you opt in. We do not collect source code, secrets, claim tokens, shell transcripts, or raw policy evidence.

This page describes what may be sent when site analytics or CLI opt-in is enabled.

Principles

Integrity controls (DG-GTM-002)

The adapter telemetry endpoint is an intentional public interface. Opt-in records consent; it does not prove an event came from a legitimate installation. Paid-activation metrics use these controls:

  1. Registered install identity — POST /api/telemetry/installations/ (opt-in header required) returns a Dexgate-generated installId (opaque, workspace-bindable) and a telemetry-only secret. Client-generated hashes are not treated as identity for activation counting.
  2. Workspace binding — after sign-in, the console accepts telemetry_install_id (query or form) and associates that install with the authenticated organization. Unbound installs may be stored but do not count as paid activation.
  3. Event signing — paid milestones (first_governed_decision, second_governed_decision) must include eventId, occurredAt, and signature (HMAC-SHA256 over eventId|eventName|packageName|occurredAt|installId).
  4. Strict schemas — unknown top-level fields are rejected; metadata is allowlisted; claim tokens and secrets are stripped.
  5. Rate limits — per install id, network source, and event type.
  6. Replay protection — unique eventId (server-side dedupe) and a short occurredAt acceptance window.
  7. Server-derived commercial state — plan and paid status come from the bound workspace, not from CLI-provided plan fields.

Fabricated first_governed_decision posts with only the opt-in header are rejected (401) and never count as paid activation.

Paid-activation funnel (DG-GTM-001)

The commercial funnel is measured end-to-end so activation—not just Stripe starts—drives optimization:

  1. Free policy self-check completed
  2. Claim result viewed
  3. Workspace created
  4. Plan selected
  5. Stripe checkout started
  6. Purchase completed
  7. Runtime healthy
  8. First governed decision
  9. Second governed decision on another day
  10. 30-day retained workspace

Critical commercial metric: percentage of paid workspaces reaching first_governed_decision within 24 hours, 7 days, and 30 days of purchase.

Events we may record (site + CLI)

EventWhereWhenPayload (allowed)
install / free start CTAsiteClick free policy self-check / get startedpage_path, utm_*, label
local-hardening-check / local_hardening_checkCLIFree policy self-check completes (never a paid-activation milestone; not proof of live OpenClaw enforcement)status, mode, source; optional local install label only
decision_category (metadata)CLIWith free checkfirst_check | high_risk_blocked | read | edit | shell_readonly
high-risk-blockedCLIFree policy self-check blocks git push-class action in assessdecision=deny, reasonCode, status, mode, source
claim_viewsiteOpen a claim pageevent_id (random), page_type=claim
workspace_createdsiteMagic-link creates a new workspaceplan (if intended), billing_cycle, org_hash
plan_selectedsiteBuyer selects Production/Team for checkoutplan, billing_cycle
checkout_startedsiteStripe Checkout session createdplan, billing_cycle
trial_start_clicksitePaid pilot CTA after free valuelabel, page_path (claim paths redacted)
completed_purchasesiteCheckout success / provisioningplan, billing_cycle, days_from_free_start
runtime_downloadedsiteConsole runtime bundle downloadplan, source=console_downloads
runtime_healthyruntime / CLIFirst healthy machine heartbeat (or CLI signal)plan, source=heartbeat
first_governed_decisionCLI (1.0.16+) + siteFirst paid governed check succeeds (opt-in, signed, paid-bound install)installId (opaque workspace-bound installation identifier), eventId, occurredAt, signature, governed=true, mode, status
second_governed_decisionCLI (1.0.16+)Governed check on a later calendar day (same integrity rules)same as first: installId, eventId, occurredAt, signature, governed=true, mode
first_evidence_viewedsiteConsole evidence section / exportplan, source=console_evidence
seven_day_active / thirty_day_activesitePaid workspace used after 7 / 30 dayswindow
pilot_application_started / pilot_application_completedsiteFounding pilot form view / submitsource=founding_teams

CLI opt-in (OpenClaw 1.0.16+)

With telemetry opted in, a successful paid openclaw-trusted-mode-check (ENFORCED_OK against a non-local licensed runtime) registers a Dexgate installation identifier, signs the paid milestone, and can count for activation only after the install is bound to your authenticated workspace. Free assess never emits first_governed_decision.

set DEXGATE_TELEMETRY_OPT_IN=1
# Free assess never emits first_governed_decision:
npx --yes --package=@dexgate/openclaw-trusted-mode@1.0.18 dexgate-assess
# After paid configure (console-issued URL + token), on ENFORCED_OK:
npx openclaw-trusted-mode-check --json
# 1.0.16 registers installId, signs first_governed_decision (or second_governed_decision on a later day),
# and prints a console bind URL: /console/?telemetry_install_id=<installId>

Endpoints:

Current OpenClaw npm pin is @dexgate/openclaw-trusted-mode@1.0.18 (see the compatibility matrix). Signed paid-activation install identity requires 1.0.16+.

Operational acceptance (before commercial use of metrics)

Verify these before relying on telemetry for pricing, onboarding, or acquisition decisions:

  1. Telemetry disabled produces zero CLI telemetry requests.
  2. A free local assessment cannot emit first_governed_decision.
  3. A simulated or unauthenticated / local runtime response cannot emit it.
  4. A genuine ENFORCED_OK result from the licensed runtime can emit it when the user opted in (1.0.16+ signed install path).
  5. An unbound installation cannot count as paid activation.
  6. Replayed milestones are rejected or deduplicated (eventId uniqueness + replay window).
  7. A second governed decision is counted only on a later calendar day (documented rule).
  8. Payloads contain no source code, action body, shell transcript, claim token, runtime credential, or raw evidence.
  9. Plan and paid-workspace status are derived server-side rather than trusted from the CLI.

What we never collect

See also Privacy and Compatibility matrix.