Usage Telemetry and Update Checks in OpenClaw
Learn what OpenClaw transmits by default, how to enable anonymous feature statistics, and how to inspect or control all telemetry data. Essential for privacy-conscious users and administrators.
Read this when
- Checking what information OpenClaw sends and what it never collects
- Deciding whether to share anonymous feature statistics
- Enabling or disabling anonymous feature statistics
- Disabling all automatic update-check requests
The sole thing OpenClaw transmits automatically is a once-daily update check. It queries whether a newer release is available, and that query carries only the version, OS, and CPU architecture, details any package registry already sees. Everything else covered here requires your explicit consent.
Anonymous feature statistics, covering which channels and providers you have set up, are disabled by default and will never activate on their own. If you choose to enable them, they travel with that same daily update check rather than triggering an additional request.
Enabling them is appreciated. Feature statistics are the sole means we have to learn which channels, providers, and plugins are genuinely in use, and they guide decisions on what to enhance, what to prioritize for fixes, and what can be retired. Without them, a few Discord anecdotes are the only evidence we have. The findings are shared publicly at telemetry.openclaw.ai, so the data you provide remains visible to you.
Opting out is perfectly acceptable and has no effect on how OpenClaw operates for you.
Inspect what is sent
Execute this command either before or after adjusting your preference:
openclaw telemetry show
Append --json to obtain the same state and payload as a single machine-readable document.
The output indicates whether feature statistics are active, the reason for their current state, the request endpoint, and the timestamp of the last successful check. With feature statistics enabled, it displays the exact JSON payload the upcoming request would transmit. When disabled, it shows the update-only request and its User-Agent header instead.
Daily update check
The default request is:
GET https://telemetry.openclaw.ai/api/latest-version
User-Agent: openclaw/2026.8.2 (darwin; node/26.0.1; arm64; gateway)
The User-Agent holds the OpenClaw version, operating system, Node.js version, CPU architecture, and whether the request originated from the Gateway or CLI. It lacks a request body, install identifier, machine identifier, or random tracking identifier.
The service replies with the latest version and, optionally, a brief note intended for operators. OpenClaw surfaces an available update and its note through the standard update notice. Unreachable services, timeouts, invalid responses, and other failed checks do not interrupt startup or normal operation.
A successful response and its timestamp are stored in the existing shared state database. Startup reuses the cached result for the next 24 hours, and a running Gateway re-checks during routine maintenance with a small random delay. Failed checks do not qualify as successful daily checks.
For testing or self-hosting, point OPENCLAW_TELEMETRY_ENDPOINT at your full replacement endpoint URL. The public server source is located at openclaw/telemetry.
Optional anonymous feature statistics
Feature statistics are off by default. Interactive setup presents a one-time opt-in with No thanks preselected. Non-interactive and scripted installations never opt in automatically. OpenClaw records whether you accepted or declined so it won't ask again.
When you explicitly enable feature statistics, the same daily request becomes a POST with this full JSON payload:
{
"schema": 1,
"version": "2026.8.2",
"platform": "darwin-arm64",
"node": "26.0.1",
"surface": "gateway",
"features": {
"channels": ["discord", "telegram"],
"providerFamilies": ["anthropic", "openai"],
"plugins": ["codex", "diagnostics-otel"],
"pluginsEnabled": 9,
"sessionsLast24h": 14
}
}
| Field | Meaning |
|---|---|
schema | Payload format version, currently 1. |
version | Installed OpenClaw version. |
platform | Operating system and CPU architecture. |
node | Running Node.js version. |
surface | Request origin: gateway or cli. |
features.channels | Publicly known enabled channel plugin names, sorted alphabetically. |
features.providerFamilies | Publicly known configured provider names; never model names. |
features.plugins | Publicly known enabled plugin names, sorted alphabetically. |
features.pluginsEnabled | Total enabled plugins, including privately developed plugins never named. |
features.sessionsLast24h | Number of sessions observed during the preceding 24 hours. |
OpenClaw names only plugins and channels that ship with OpenClaw or already appear in its official plugin catalog. Privately developed plugins are counted but never named, since a private plugin name could reveal its organization. Subtract features.plugins.length from features.pluginsEnabled to determine the count of unnamed private plugins.
The sender and openclaw telemetry show rely on the same payload builder, so the JSON shown by the CLI matches what the sender would use at that moment.
Reports carry no identifier whatsoever, making them impossible to link together. We can observe that some installs run Telegram with Anthropic models; we cannot tell if it's the same install from yesterday, and we cannot construct a history for any single machine. That sacrifices retention analysis, a trade-off we deem worthwhile.
What is never collected
Neither request tier includes message content, prompts, model names, API keys, credentials, secret references, file paths, hostnames, account identifiers, user identifiers, or installation and machine identifiers. OpenClaw does not generate a random UUID or other persistent request identifier, so daily requests cannot be connected via an OpenClaw-issued identifier.
Anonymous feature statistics are distinct from optional, operator-configured OpenTelemetry export.
Turn feature statistics on or off
Toggle anonymous feature statistics on or off at any time:
openclaw telemetry on
openclaw telemetry off
The same preference can also be set directly:
{
telemetry: {
enabled: false,
},
}
Set DO_NOT_TRACK=1 or DO_NOT_TRACK=true to force feature statistics off, even when telemetry.enabled is true. DO_NOT_TRACK does not disable the daily update check: OpenClaw sends the update-only GET request without a feature-statistics body.
Disable every automatic update request
To go fully dark, disable the existing startup update check:
{
update: {
checkOnStart: false,
},
}
This halts both tiers and every automatic update request: no update request, no feature statistics, and no update notice, even when update.auto.enabled is true. Setting OPENCLAW_NO_AUTO_UPDATE=1 also prevents automatic update requests and applies. Explicit update commands remain available if you choose to run them.
See Configuration reference for the full telemetry configuration and Update configuration for the automatic update-check controls.