7.8 KiB
summary, title, read_when
| summary | title | read_when | ||||
|---|---|---|---|---|---|---|
| What OpenClaw sends: a daily update check by default, optional anonymous feature statistics, and every privacy control | Usage telemetry and update checks |
|
The only thing OpenClaw sends on its own is a daily update check. It asks whether a newer version exists, and the request carries nothing but the version, operating system, and CPU architecture already visible to any package registry. Everything else on this page is opt-in.
Anonymous feature statistics — which channels and providers you have configured — are off by default and never turn themselves on. When you do enable them, they ride along with that same daily update check instead of adding a second request.
If you turn them on: thank you. Feature statistics are the only way we learn which channels, providers, and plugins people actually use, and they decide what gets improved, what gets fixed first, and what can safely be retired. A handful of Discord anecdotes is otherwise the entire evidence base. We publish what we learn back to everyone at telemetry.openclaw.ai, so the data you contribute stays visible to you.
Declining is a completely normal choice and changes nothing about how OpenClaw works for you.
Inspect what is sent
Run this command before or after changing your preference:
openclaw telemetry show
Add --json to get the same state and payload as one machine-readable
document.
The output shows whether feature statistics are enabled, why they are enabled
or disabled, the request endpoint, and the last successful check. When feature
statistics are enabled, it prints the exact JSON payload the next request would
send. When they are 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 contains the OpenClaw version, operating system, Node.js
version, CPU architecture, and whether the request came from the Gateway or
CLI. It has no request body, install identifier, machine identifier, or random
tracking identifier.
The service responds with the latest version and, optionally, a short operator-facing note. OpenClaw displays an available update and its note through the existing 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 cached in the existing shared state database. Startup reuses the cached result for the next 24 hours, and a running Gateway checks again during normal maintenance with a small random delay. Failed checks do not count as successful daily checks.
For testing or self-hosting, set OPENCLAW_TELEMETRY_ENDPOINT to your complete
replacement endpoint URL. The public server source is available at
openclaw/telemetry.
Optional anonymous feature statistics
Feature statistics are off by default. Interactive setup offers a one-time opt-in with No thanks selected by default. Non-interactive and scripted installations never opt in automatically. OpenClaw records when you accepted or declined so it does not ask again.
When you explicitly enable feature statistics, the same daily request becomes a
POST with this complete 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 are bundled with OpenClaw or
already appear in its official plugin catalog. Privately developed plugins are
counted but never named because a private plugin name could identify its
organization. Subtract features.plugins.length from features.pluginsEnabled
to find the number of unnamed private plugins.
The sender and openclaw telemetry show use the same payload builder, so the
JSON displayed by the CLI is the same payload the sender would use at that
moment.
Reports carry no identifier of any kind, which means they cannot be linked to each other. We can see that some install runs Telegram with Anthropic models; we cannot see that it is the same install as yesterday, and we cannot build a history of any single machine. That costs us retention analysis, and we consider it worth paying.
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 create a random UUID or other persistent request identifier, so daily requests cannot be linked through an OpenClaw-issued identifier.
Anonymous feature statistics are separate from optional, operator-configured OpenTelemetry export.
Turn feature statistics on or off
Enable or disable anonymous feature statistics at any time:
openclaw telemetry on
openclaw telemetry off
You can also configure the same preference 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 stops 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 when you choose
to run them.
See Configuration reference for
the full telemetry configuration and
Update configuration for the
automatic update-check controls.