Skip to main content
The expanse CLI records what you decide about its recommendations: one record per patch it offers, and a short description of how each analyse and diagnose command was invoked. Both stay inside your organisation’s own intelligence plane. Nothing goes to a third party.

What is recorded

One PatchDecision record per artefact the CLI offers, from the patch walk of expanse analyse and from expanse analyse apply. Every field is a name from a closed list; none is free text. Never recorded: file paths, job names, diff text, prompt text, knob values, the working directory, the command line. Each record also carries a session id minted once per CLI process and held in memory only, the minute it happened, and the organisation, user and team read from your session token by the plane.

How the request was invoked

Every expanse analyse and expanse diagnose request names how it was made, in a client_context the plane stores beside the request’s usage record (the same record the Security page’s audit export already lists). This travels with the request and is not governed by the switches below.

Where it goes

The record is written to your organisation’s intelligence plane under your own session token, through the same connection expanse analyse uses.
  • In a customer-hosted deployment it stays inside your network and only hourly counts without identities leave, on the analytics report described in the deployment’s data-flow documentation. In an air-gapped deployment nothing leaves.
  • In the hosted demonstration service it goes to Expanse’s own database and to no third party.
Sending is best-effort and shares one two-second budget with the command’s other background sends: it never changes the command’s output or exit code. A plane that does not answer is not retried in the same run, and a record the plane refuses is dropped. The unsent records of a run are kept in memory for the life of the command only, so a crash between the question and the send loses them.

Switching it off

Highest first; the first switch set decides: Your organisation’s own switch beats all of them: when an organisation owner switches the product_usage category off on the Security page, the CLI reads it from the session token and sends nothing, and the plane refuses what an older CLI might still send. EXPANSE_AIR_GAPPED is not a switch. The record is written to the in-perimeter plane, and no connection opens outward.

expanse telemetry

status names a higher switch when one overrides the settings file, so enable under DO_NOT_TRACK=1 prints the mode as off.

The first-run notice

The first time expanse analyse or expanse analyse apply runs on a terminal with recording on, it prints this to stderr and records nothing in that run. It is not shown under --json or in a CI environment (CI or GITHUB_ACTIONS set), and it is shown once per machine.

Seeing exactly what would be sent

prints each RecordProductEvents request to stderr as JSON instead of sending it, so you can read every field before switching recording on.