Skip to content

Telemetry

Lich collects anonymous usage telemetry to help me (the maintainer) understand which commands people actually use and where things go wrong. The data is minimal, never includes PII, and you can disable it at any time.

What's collected

CLI commands

One event per invocation of the lich binary. The event is cli_command with these properties:

PropertyExampleNotes
commandup, down, logsThe top-level subcommand only
exit_code0, 1, 2, 130Standard process exit code
duration_ms4521How long the command took
version0.2.1Lich CLI version
platformdarwin-arm64Same shape as release tarball names
distinct_id32-char hexAnonymous machine-stable identifier, cached at ~/.lich/installation-id

The distinct_id is a SHA-256 hash of three machine-stable inputs (your home directory path, your hostname, and your platform string) truncated to 32 hex characters. The hash is one-way — those inputs never leave your machine, and the hash can't be reversed to recover them. It stays the same for that user on that machine across worktrees, fresh ~/.lich dirs, and container rebuilds. It is not linked to your email, GitHub, or IP (PostHog anonymizes IP via disableGeoip). To change it, overwrite ~/.lich/installation-id with any 32-hex value (or a UUIDv4; legacy IDs from older installs continue to work).

Installer

The install.sh script sends one event when it finishes, with the version installed, the platform, and whether a custom install prefix was used. Distinct ID is anonymous-installer (no per-machine identifier on installs).

Docs site

The docs site at lich.sh uses PostHog's JS SDK for anonymous page-view and navigation analytics. Respects browser Do Not Track. No identifying cookies beyond what PostHog uses to count unique sessions.

What's NOT collected

  • Worktree paths
  • lich.yaml contents (service names, env values, anything inside the yaml)
  • Logs from your stack
  • Environment variable values
  • Error messages (paths in stack traces are a leakage risk, so only an exit_code is sent)
  • Hostnames, usernames, anything from os.userInfo()

If anything from this list ever ends up in the telemetry payload, it's a bug. File an issue.

How to disable

Any of these disables CLI telemetry, in order of precedence:

bash
# Per-shell:
export LICH_TELEMETRY=0

# Per-user, persistent (any of "0", "false", "off", "no" work):
mkdir -p ~/.lich
echo '{"telemetry": false}' > ~/.lich/config.json

# Per-project (in lich.yaml):
runtime:
  telemetry: false

# For the installer specifically:
LICH_INSTALL_NO_TELEMETRY=1 curl -fsSL https://lich.sh/install.sh | bash

Docs site analytics disable:

js
// In browser devtools console at lich.sh:
localStorage.setItem('lich_telemetry_disabled', '1')
// Then refresh.

The docs site also respects your browser's Do Not Track header automatically.

Why I do this

Two questions I cannot answer without telemetry:

  1. Are people using this? Without download numbers I have no idea whether to keep investing in lich.
  2. Where do commands fail? If lich up exits non-zero 30% of the time, something is wrong and I want to know.

Both questions are answered by the minimal data above. There's no plan to expand the schema. If that ever changes, it'll go through a versioned, public update with the option to re-consent.

Where the data lives

PostHog Cloud (US region, us.i.posthog.com). It's a paid SaaS analytics product. Only I (the maintainer) have access.

Where to ask questions

If anything here is unclear or you spot a privacy issue, open an issue at github.com/RPate97/lich/issues.

Released under the MIT License.