Default: off
Stack never sends telemetry without explicit consent. On first run in an interactive terminal you are asked once:
Share anonymous usage telemetry (command + duration, no paths/secrets)? [y/N]
The default answer is N. Pressing Enter without typing
anything leaves telemetry disabled. Nothing is transmitted until you
answer y.
What's collected
When you opt in, each CLI invocation may send one event with these fields only:
| Field | Value |
|---|---|
command | Top-level subcommand name (e.g. "add", "scan"). Never includes arguments or flag values. |
exitCode | Process exit code. 0 = success. |
durationMs | Wall-clock milliseconds from CLI start to exit. |
installId | A random UUID stored in ~/.ashlr/stack/config.json. Used only to count distinct installations. Not you — just a machine count. |
runId | A fresh UUID per invocation. Not stored anywhere and not linkable across runs. |
stackVersion, platform | Installed version string and OS platform (darwin / linux / win32). |
What's never collected
- Working directory, filesystem paths, or project names.
- Provider names or which services you use.
- Secret values, API keys, or anything stored in Phantom.
- Command arguments or flag values.
- Email address or any account identifier.
- Contents of
.stack.tomlor.stack.local.toml.
Your IP address is visible to the telemetry endpoint at the HTTP layer. It is purged within 48 hours and never written to the analytics database.
How to opt out
# Disable via CLI (persisted to ~/.ashlr/stack/config.json)
stack telemetry disable
# Or set an env var — overrides any stored opt-in for this process only
STACK_TELEMETRY=0 stack add supabase
# Or add it permanently to your shell profile
echo 'export STACK_TELEMETRY=0' >> ~/.zshrc You can also check the current status or re-enable from the CLI:
stack telemetry status # shows enabled/disabled + installId
stack telemetry enable # opt back in
stack telemetry disable # opt out Once opted out, no data is sent — not even a "user opted out" ping.
CI environments
Stack automatically detects CI=true and skips the first-run
prompt. Telemetry defaults to disabled in CI unless you
explicitly set STACK_TELEMETRY=1. The update-check banner is
also suppressed in CI and when STACK_NO_UPDATE_CHECK=1 is set.