CLICommands

l4 telemetry

l4 telemetry controls whether the CLI sends panic stack traces and the failing command name to LevelFour. It is off by default. You opt in once with l4 telemetry enable and the setting is remembered across upgrades.

l4 telemetry enable
l4 telemetry disable
l4 telemetry status

What gets sent

When telemetry is enabled and the CLI crashes:

  • The panic stack trace
  • The Cobra command name that triggered the panic (e.g. recommendations list)
  • The CLI version and platform string

That's it. No flag values, no arguments, no environment, no file paths beyond what the stack trace itself contains.

What gets scrubbed before transport

A scrubber runs over every event before it leaves the process:

  • Home directory paths are rewritten to ~
  • AWS access key IDs and secret access keys are redacted
  • Known token environment variables (LEVELFOUR_TOKEN, GITHUB_TOKEN, etc.) are redacted from event tags
  • All HTTP request headers and cookies are stripped

Where the setting lives

The opt-in flag is stored in your CLI config alongside settings managed by l4 config. It is not exported by l4 config list; use l4 telemetry status to read it.

When telemetry is silently a no-op

Crash reports only flow when both conditions hold:

  1. You ran l4 telemetry enable, and
  2. The binary was built with a Sentry DSN baked in via release-time -ldflags.

Binaries built locally with go install or go build have an empty DSN and will never send anything, even if you opt in. Only the official release builds (from Homebrew, GitHub Releases, or go install's package proxy at a tagged version) carry the DSN.

Examples

Check the current state in a script:

if l4 telemetry status | grep -q enabled; then
  echo "Telemetry is on"
fi

Disable telemetry on a shared CI runner where you previously opted in on a personal laptop:

l4 telemetry disable
  • Authentication: nothing related to telemetry, but governs the other CLI state file
  • l4 config: adjacent settings (default provider, default format, etc.)