# Data collection

JetBrains Central CLI collects two types of analytics data:

* Product usage events sent to Google Analytics 4 (GA4)

* Local request logs stored on disk

## Product analytics (GA4)

JetBrains Central CLI sends anonymous usage events to Google Analytics 4 via the Measurement Protocol. This helps understand adoption, identify issues, and improve the product.

### When product analytics are sent

Whether product analytics are sent depends on the choice stored in your configuration file:

| User state | State stored in the config file | Are product analytics sent? | What happens |
| --- | --- | --- | --- |
| Accepted analytics on the terms screen | `true` | Yes | Events from the interactive interface, the commands, and the proxy are sent |
| Declined analytics on the terms screen | `false` | No | Nothing leaves your machine |
| Has not seen or completed the terms screen | Not set | No | Nothing is sent until you make a choice on the terms screen |
| No configuration can be loaded | Not available | No | Product analytics are disabled |

The interactive interface shows the terms screen before login on first launch, or before the main menu when consent is missing for an existing login. `central login` shows the same terms screen before the OAuth flow when consent has not yet been stored. Other non-interactive commands and the proxy do not show that screen; they use the stored choice if present, and send nothing if it is missing.

The stored choice can be changed at any time from the command line:

```BASH
central config set google-analytics on   # opt in
central config set google-analytics off  # opt out
```

The current value is also shown in `central config` output — `on`, `off`, or `not set`.

### What is tracked

| Category | What is recorded |
| --- | --- |
| Onboarding | First launch, and each step of the login flow: started, browser opened, callback received, completed, or failed  |
| Proxy | Proxy started, stopped, failed to start, or failed to restart |
| Tokens | Token refreshes and reloads, with how long each took and whether it succeeded |
| Requests | Per-request metadata: provider, response status, duration, and any retries |
| Agents | Agent configuration changes — connecting and disconnecting an agent |
| Interface and commands | Which menu action or command you ran: viewing your usage, viewing logs, changing a setting, switching AI access source, checking for updates, and uninstalling. The interactive interface and the equivalent command are recorded separately, so the two can be told apart.  |
| Updates | Whether an update was installed or failed, and whether you started it yourself or an agent installed it when a session began  |
| Data migration | Whether a configuration or data-directory migration ran, and whether it had to be rolled back  |

### What is not tracked

* Request or response bodies — no prompts, no completions

* Plaintext email addresses

* File contents or code

* Specific error messages from LLM responses

* API keys or tokens

### User identification

The user ID is a truncated SHA-256 hash of the email address, 16 hex characters. No plaintext email is ever sent:

```TEXT
email:   user@jetbrains.com
user_id: SHA256("user@jetbrains.com")[:16] → "a1b2c3d4e5f6a7b8"
```

### Session identification

Events are grouped into sessions by a random identifier. Events from one proxy run share a session.

### Event context

Every event includes:

* JetBrains Central CLI version

* Operating system and architecture

* Timestamp

* Release track — the resolved update channel (`stable` or `beta`), or `pinned` when pinned to a specific version. The pinned version itself is not sent.

### Delivery

Events are batched and sent periodically, or immediately when the proxy stops. Failed sends are retried a few times and then discarded. Analytics failures never affect how JetBrains Central CLI works.

## Local request logs

All proxy requests are logged to `~/.jetbrains-central/analytics/` for local debugging. These logs stay on your machine.

### Logged fields

| Field | Description |
| --- | --- |
| `timestamp` | When the request was made |
| `original_url` | The agent's request URL, with the proxy secret masked — for example, `/wire/***/claude-code/anthropic/v1/messages`  |
| `final_url` | Cleaned platform path, with no host or credentials |
| `method` | HTTP method |
| `status` | Response status code |
| `duration_ms` | Request duration |
| `is_error` | Whether the status is 400 or above |
| `error_message` | Error details, if applicable |
| `grazie_trace_id` | Trace ID you can quote in a support request |
| `ingrazzio_trace_id` | Additional trace ID, present only for Junie requests on a JetBrains Account login |

### Viewing logs

In the JetBrains Central CLI interactive interface, select More... | AI Logs to browse request logs:

* `t` cycles the time filter — all, last hour, last day

* `s` cycles the status filter — all, success, errors

* `r` resets all filters

* `R` refreshes the data

* The arrow keys page through the history

* `q` goes back to the menu

Failed requests show the error message and a trace ID you can quote in a support request.

### Log retention

* At most 1000 entries per log file

* At most five log files, with the oldest deleted automatically

* Files are named `~/.jetbrains-central/analytics/requests_{timestamp}.json`

### Clearing logs

```BASH
rm -rf ~/.jetbrains-central/analytics
```

The directory is recreated automatically when the proxy logs the next request.

## See also

### Related

[JetBrains Central CLI in depth](cli-in-depth.html) [Troubleshooting](troubleshooting.html)

