LLxprt Code Telemetry
July 29, 2026 · View on GitHub
LLxprt Code never sends telemetry anywhere. There is no network exporter in the codebase — no OTLP, no Google, no vendor endpoint of any kind. Everything described on this page happens entirely on your own machine.
Within that boundary there are two separate layers:
| Layer | Default | Where it goes |
|---|---|---|
| Session stats | Always on | In memory; shown by /stats |
| OTEL traces/metrics/logs | Off (telemetry.enabled: false) | A local file, or your console |
Session stats are what populate the /stats display — token counts, tool call
tallies, and timings for the current session. They are aggregated in memory
regardless of the telemetry.enabled setting, are never written to disk by this
layer, and disappear when the session ends. Nothing to opt out of: it is your
own usage, shown back to you.
The OTEL layer is the one telemetry.enabled controls; it defaults to false,
and the rest of this page is about that layer.
This page covers OTEL telemetry (traces, metrics, logs). For conversation
logging (the /logging command), see
Telemetry Privacy.
What telemetry does
When enabled, the OpenTelemetry SDK registers only HttpInstrumentation —
it does not create custom spans for tool calls or model responses. The data
emitted is:
- Traces: HTTP request/response spans (auto-instrumented by
HttpInstrumentation). There are no customstartSpancalls for tool calls or API interactions. - Metrics: session counts, tool call counts/latency, API request counts/latency, token usage, file operation counts.
- Logs: configuration events, user prompts (if
logPromptsis enabled), tool calls, hook calls, API requests/responses/errors, slash commands.
All data is written locally — to a file if you configure an outfile, or to the
console otherwise. The SDK constructs only File*Exporter or
Console*Exporter; no OTLP or network exporter is imported anywhere in the
source, so there is no code path that could transmit this data.
Enable telemetry
Telemetry is controlled by the telemetry.enabled setting.
| Property | Value |
|---|---|
| Default | false (disabled) |
| Scope | User settings or workspace settings |
| Persistence | Saved in settings.json |
| Precedence | CLI flags override settings files |
To enable telemetry, add the following to your
user settings or workspace
.llxprt/settings.json:
{
"telemetry": {
"enabled": true
}
}
You can also enable it for a single session with the CLI flag:
llxprt --telemetry "your prompt"
CLI flags take precedence over settings files. Specifically, the configuration
builder resolves the effective value as argv.telemetry ?? settings.telemetry.enabled
— a CLI flag wins if present, otherwise the persisted setting is used. See
Configuration for the full settings reference.
Where output goes
| Configuration | Output destination |
|---|---|
--telemetry-outfile=/path/to/file | All traces, metrics, and logs are written to that file |
| No outfile configured | Data is written to the console (stdout/stderr) |
To write telemetry to a file:
llxprt --telemetry --telemetry-outfile=/tmp/llxprt-telemetry.log "your prompt"
Verify telemetry is working
- Enable telemetry and start a session.
- Run any prompt that triggers a tool call or API request.
- Check the output:
- File: inspect the outfile with
catorjq. - Console: look for OTEL span/log output in the terminal.
- File: inspect the outfile with
Disable telemetry
Telemetry defaults to off, so simply not enabling it is sufficient. If
telemetry is enabled in your persisted settings (settings.json), omitting
--telemetry on the command line does not disable it — the persisted
setting still applies (the builder uses argv.telemetry ?? settings.telemetry.enabled).
To explicitly disable telemetry for a single session regardless of persisted
settings, use --no-telemetry:
llxprt --no-telemetry "your prompt"
To disable it permanently, remove telemetry.enabled from your settings (or
set it to false).
Privacy
- No external transmission: no OTLP or network exporter exists in the source. Data goes only to the configured file or console.
- No data sent to Google or anyone else: there is no upstream endpoint, vendor integration, or opt-in that would transmit telemetry off your machine.
- Session stats are yours: the always-on
/statsaggregation stays in memory for the life of the session. It is not persisted and not transmitted. - Prompt logging: the
telemetry.logPromptssetting controls whether user prompt text is included in thellxprt_code.user_promptlog event. Default istrue; set it tofalseto redact prompt content from that specific log event. Note:logPrompts: falsedoes not redact hook input/output data (thellxprt_code.hook_callevent always includeshook_inputandhook_outputfields regardless of this setting).
Logs and metrics reference
The following events and metrics are emitted when telemetry is enabled. All
event and metric names use the llxprt_code.* prefix (the service name is
llxprt-code, but the telemetry identifiers use underscores):
Logs (event names)
llxprt_code.config: startup configuration (model, sandbox, approval mode, etc.)llxprt_code.user_prompt: user prompt submission (length; prompt text iflogPromptsis enabled)llxprt_code.tool_call: each tool call (function, args, duration, success)llxprt_code.hook_call: hook execution (event name, input, output, duration)llxprt_code.api_request: provider API requestllxprt_code.api_error: provider API errorllxprt_code.api_response: provider API response (token counts, latency)llxprt_code.slash_command: slash command executionllxprt_code.next_speaker_check: next-speaker determinationllxprt_code.conversation_request: conversation API requestllxprt_code.conversation_response: conversation API responsellxprt_code.enhanced_conversation_response: enhanced conversation responsellxprt_code.provider_switch: provider switch eventllxprt_code.provider_capability: provider capability reportllxprt_code.tool_output_truncated: tool output truncation eventllxprt_code.file_operation: file system operationllxprt_code.malformed_json_response: malformed JSON from providerllxprt_code.model_routing: model routing decisionllxprt_code.extension_install: extension installedllxprt_code.extension_uninstall: extension uninstalledllxprt_code.extension_enable: extension enabledllxprt_code.extension_disable: extension disabled
Metrics
llxprt_code.session.count(counter): incremented once per startupllxprt_code.tool.call.count(counter): tool call countsllxprt_code.tool.call.latency(histogram, ms): tool call latencyllxprt_code.api.request.count(counter): API request countsllxprt_code.api.request.latency(histogram, ms): API request latencyllxprt_code.token.usage(counter): token usage by type (input, output, etc.)llxprt_code.file.operation.count(counter): file operation counts